Skip to content

Commit

Permalink
tls: rework init mode 1 to set PTHREAD_PROCESS_SHARED
Browse files Browse the repository at this point in the history
- pthread mutex set in shm
- GH #3635
  • Loading branch information
miconda committed Dec 7, 2023
1 parent 964c21e commit 4b068f4
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 25 deletions.
54 changes: 33 additions & 21 deletions src/modules/tls/tls_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,20 +69,31 @@ static int tls_mod_preinitialized = 0;
static int tls_mod_initialized = 0;

extern int ksr_tls_init_mode;
pthread_mutex_t ksr_tls_lock_shm;
static pthread_mutex_t *ksr_tls_lock_shm = NULL;

/**
*
*/
int ksr_tls_lock_init(void)
{
pthread_mutexattr_t attr;

if(!(ksr_tls_init_mode & TLS_MODE_PTHREAD_LOCK_SHM)) {
return 0;
}
if(pthread_mutex_init(&ksr_tls_lock_shm, NULL) != 0) {
ksr_tls_lock_shm = (pthread_mutex_t *)shm_mallocxz(sizeof(pthread_mutex_t));
if(ksr_tls_lock_shm == NULL) {
LM_ERR("mutex allocation failed\n");
return -1;
}
pthread_mutexattr_init(&attr);
pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
if(pthread_mutex_init(ksr_tls_lock_shm, &attr) != 0) {
pthread_mutexattr_destroy(&attr);
LM_ERR("mutex init failed\n");
return -1;
}
pthread_mutexattr_destroy(&attr);
return 0;
}

Expand All @@ -94,7 +105,8 @@ void ksr_tls_lock_destroy(void)
if(!(ksr_tls_init_mode & TLS_MODE_PTHREAD_LOCK_SHM)) {
return;
}
pthread_mutex_destroy(&ksr_tls_lock_shm);
pthread_mutex_destroy(ksr_tls_lock_shm);
shm_free(ksr_tls_lock_shm);
return;
}

Expand Down Expand Up @@ -248,7 +260,7 @@ static void *ser_malloc(size_t size, const char *file, int line)
#endif

if(ksr_tls_init_mode & TLS_MODE_PTHREAD_LOCK_SHM)
pthread_mutex_lock(&ksr_tls_lock_shm);
pthread_mutex_lock(ksr_tls_lock_shm);

#ifdef RAND_NULL_MALLOC
/* start random null returns only after
Expand Down Expand Up @@ -277,7 +289,7 @@ static void *ser_malloc(size_t size, const char *file, int line)
}
#endif
if(ksr_tls_init_mode & TLS_MODE_PTHREAD_LOCK_SHM)
pthread_mutex_unlock(&ksr_tls_lock_shm);
pthread_mutex_unlock(ksr_tls_lock_shm);
return p;
}

Expand All @@ -292,7 +304,7 @@ static void *ser_realloc(void *ptr, size_t size, const char *file, int line)
#endif

if(ksr_tls_init_mode & TLS_MODE_PTHREAD_LOCK_SHM)
pthread_mutex_lock(&ksr_tls_lock_shm);
pthread_mutex_lock(ksr_tls_lock_shm);

#ifdef RAND_NULL_MALLOC
/* start random null returns only after
Expand Down Expand Up @@ -322,20 +334,20 @@ static void *ser_realloc(void *ptr, size_t size, const char *file, int line)
#endif

if(ksr_tls_init_mode & TLS_MODE_PTHREAD_LOCK_SHM)
pthread_mutex_unlock(&ksr_tls_lock_shm);
pthread_mutex_unlock(ksr_tls_lock_shm);

return p;
}

static void ser_free(void *ptr, const char *fname, int fline)
{
if(ksr_tls_init_mode & TLS_MODE_PTHREAD_LOCK_SHM)
pthread_mutex_lock(&ksr_tls_lock_shm);
pthread_mutex_lock(ksr_tls_lock_shm);
if(ptr) {
shm_free(ptr);
}
if(ksr_tls_init_mode & TLS_MODE_PTHREAD_LOCK_SHM)
pthread_mutex_unlock(&ksr_tls_lock_shm);
pthread_mutex_unlock(ksr_tls_lock_shm);
}

#endif /* LIBRESSL_VERSION_NUMBER */
Expand All @@ -350,10 +362,10 @@ static void *ser_malloc(size_t size)
void *p;

if(ksr_tls_init_mode & TLS_MODE_PTHREAD_LOCK_SHM)
pthread_mutex_lock(&ksr_tls_lock_shm);
pthread_mutex_lock(ksr_tls_lock_shm);
p = shm_malloc(size);
if(ksr_tls_init_mode & TLS_MODE_PTHREAD_LOCK_SHM)
pthread_mutex_unlock(&ksr_tls_lock_shm);
pthread_mutex_unlock(ksr_tls_lock_shm);
return p;
}

Expand All @@ -362,21 +374,21 @@ static void *ser_realloc(void *ptr, size_t size)
{
void *p;
if(ksr_tls_init_mode & TLS_MODE_PTHREAD_LOCK_SHM)
pthread_mutex_lock(&ksr_tls_lock_shm);
pthread_mutex_lock(ksr_tls_lock_shm);
p = shm_realloc(ptr, size);
if(ksr_tls_init_mode & TLS_MODE_PTHREAD_LOCK_SHM)
pthread_mutex_unlock(&ksr_tls_lock_shm);
pthread_mutex_unlock(ksr_tls_lock_shm);
return p;
}
#else
static void *ser_malloc(size_t size, const char *fname, int fline)
{
void *p;
if(ksr_tls_init_mode & TLS_MODE_PTHREAD_LOCK_SHM)
pthread_mutex_lock(&ksr_tls_lock_shm);
pthread_mutex_lock(ksr_tls_lock_shm);
p = shm_malloc(size);
if(ksr_tls_init_mode & TLS_MODE_PTHREAD_LOCK_SHM)
pthread_mutex_unlock(&ksr_tls_lock_shm);
pthread_mutex_unlock(ksr_tls_lock_shm);
return p;
}

Expand All @@ -385,10 +397,10 @@ static void *ser_realloc(void *ptr, size_t size, const char *fname, int fline)
{
void *p;
if(ksr_tls_init_mode & TLS_MODE_PTHREAD_LOCK_SHM)
pthread_mutex_lock(&ksr_tls_lock_shm);
pthread_mutex_lock(ksr_tls_lock_shm);
p = shm_realloc(ptr, size);
if(ksr_tls_init_mode & TLS_MODE_PTHREAD_LOCK_SHM)
pthread_mutex_unlock(&ksr_tls_lock_shm);
pthread_mutex_unlock(ksr_tls_lock_shm);
return p;
}
#endif
Expand All @@ -406,23 +418,23 @@ static void ser_free(void *ptr)
* here in the wrapper function.
*/
if(ksr_tls_init_mode & TLS_MODE_PTHREAD_LOCK_SHM)
pthread_mutex_lock(&ksr_tls_lock_shm);
pthread_mutex_lock(ksr_tls_lock_shm);
if(ptr) {
shm_free(ptr);
}
if(ksr_tls_init_mode & TLS_MODE_PTHREAD_LOCK_SHM)
pthread_mutex_unlock(&ksr_tls_lock_shm);
pthread_mutex_unlock(ksr_tls_lock_shm);
}
#else
static void ser_free(void *ptr, const char *fname, int fline)
{
if(ksr_tls_init_mode & TLS_MODE_PTHREAD_LOCK_SHM)
pthread_mutex_lock(&ksr_tls_lock_shm);
pthread_mutex_lock(ksr_tls_lock_shm);
if(ptr) {
shm_free(ptr);
}
if(ksr_tls_init_mode & TLS_MODE_PTHREAD_LOCK_SHM)
pthread_mutex_unlock(&ksr_tls_lock_shm);
pthread_mutex_unlock(ksr_tls_lock_shm);
}
#endif

Expand Down
8 changes: 4 additions & 4 deletions src/modules/tls/tls_mod.c
Original file line number Diff line number Diff line change
Expand Up @@ -402,10 +402,6 @@ static int mod_init(void)
if(tls_check_sockets(*tls_domains_cfg) < 0)
goto error;

if(ksr_tls_lock_init() < 0) {
goto error;
}

LM_INFO("use OpenSSL version: %08x\n", (uint32_t)(OPENSSL_VERSION_NUMBER));
#ifndef OPENSSL_NO_ECDH
LM_INFO("With ECDH-Support!\n");
Expand Down Expand Up @@ -674,6 +670,10 @@ int mod_register(char *path, int *dlflags, void *p1, void *p2)
if(!shm_initialized() && init_shm() < 0)
return -1;

if(ksr_tls_lock_init() < 0) {
return -1;
}

if(tls_pre_init() < 0)
return -1;

Expand Down

0 comments on commit 4b068f4

Please sign in to comment.