THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.
The following task has a new comment added:
FS#372 - Out of memory when a request is sent to itself
User who did this - Daniel-Constantin Mierla (miconda)
----------
You should get the line in fm_malloc() where the issue is located. It is not shown in the backtrace for frame 0. There you can see what variable/member is invalid.
----------
More information can be found at the following URL:
http://sip-router.org/tracker/index.php?do=details&task_id=372#comment1267
You are receiving this message because you have requested it from the Flyspray bugtracking system. If you did not expect this message or don't want to receive mails in future, you can change your notification settings at the URL shown above.
THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.
The following task is now closed:
FS#379 - Abort occurs in tm when make mode=debug
User who did this - Daniel-Constantin Mierla (miconda)
Reason for closing: Fixed
More information can be found at the following URL:
http://sip-router.org/tracker/index.php?do=details&task_id=379
You are receiving this message because you have requested it from the Flyspray bugtracking system. If you did not expect this message or don't want to receive mails in future, you can change your notification settings at the URL shown above.
THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.
The following task has a new comment added:
FS#380 - fixes for memory leak in TLS module
User who did this - Daniel-Constantin Mierla (miconda)
----------
I applied most of the part from the patch. I removed:
- history parts in comments - such info is now in git commit message, existing ones across all files are reminiscent from old times and should be removed because are really incomplete
- locking around decrementing the reference count. I don't see any reason to do it - one operation over a volatile int type. If there is, provide more details -- maybe is better to use atomic_t type and atomic ops
- locking around loading the config file - the entire operation is done in one process, with no potential race inside. If I overlooked something, please add your comments
Instead, I added locking around the operation of updating the list with config structures.
I committed the code on master, link to it:
- http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=208934d…
Review and when all is ok, I will backport to stable branches.
----------
More information can be found at the following URL:
http://sip-router.org/tracker/index.php?do=details&task_id=380#comment1266
You are receiving this message because you have requested it from the Flyspray bugtracking system. If you did not expect this message or don't want to receive mails in future, you can change your notification settings at the URL shown above.
Module: sip-router
Branch: master
Commit: 208934d47ac1585d42029234267bcceab40ae218
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=208934d…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: Tue Jan 7 00:10:34 2014 +0100
tls: the pointer of cfg structure
- synchronize when updating the list of tls configs and their reference
count
- with parts from patch by Ding Ma, FS#380, contributed under BSD license
---
modules/tls/tls_cfg.c | 3 ++-
modules/tls/tls_cfg.h | 3 ++-
modules/tls/tls_domain.c | 3 ++-
modules/tls/tls_domain.h | 3 ++-
modules/tls/tls_mod.c | 3 ++-
modules/tls/tls_rpc.c | 10 +++++++++-
modules/tls/tls_server.c | 11 +++++------
modules/tls/tls_util.c | 14 +++++++++-----
8 files changed, 33 insertions(+), 17 deletions(-)
diff --git a/modules/tls/tls_cfg.c b/modules/tls/tls_cfg.c
index c92f742..fbf3ab3 100644
--- a/modules/tls/tls_cfg.c
+++ b/modules/tls/tls_cfg.c
@@ -2,6 +2,7 @@
* TLS module
*
* Copyright (C) 2010 iptelorg GmbH
+ * Copyright (C) 2013 Motorola Solutions, Inc.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -76,7 +77,7 @@ struct cfg_group_tls default_tls_cfg = {
0 /* send_close_notify (off by default)*/
};
-void* tls_cfg = &default_tls_cfg;
+volatile void* tls_cfg = &default_tls_cfg;
/* if *to<0 to=default_val, else if to>max_val to=max_val */
diff --git a/modules/tls/tls_cfg.h b/modules/tls/tls_cfg.h
index f7a4c4e..4aeb5f5 100644
--- a/modules/tls/tls_cfg.h
+++ b/modules/tls/tls_cfg.h
@@ -2,6 +2,7 @@
* TLS module
*
* Copyright (C) 2010 iptelorg GmbH
+ * Copyright (C) 2013 Motorola Solutions, Inc.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -101,7 +102,7 @@ struct cfg_group_tls {
extern struct cfg_group_tls default_tls_cfg;
-extern void* tls_cfg;
+extern volatile void* tls_cfg;
extern cfg_def_t tls_cfg_def[];
diff --git a/modules/tls/tls_domain.c b/modules/tls/tls_domain.c
index b8362f4..b832c63 100644
--- a/modules/tls/tls_domain.c
+++ b/modules/tls/tls_domain.c
@@ -2,6 +2,7 @@
* TLS module
*
* Copyright (C) 2005,2006 iptelorg GmbH
+ * Copyright (C) 2013 Motorola Solutions, Inc.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -23,7 +24,6 @@
* Module: @ref tls
*/
-
#include <stdlib.h>
#include <openssl/ssl.h>
#include <openssl/opensslv.h>
@@ -119,6 +119,7 @@ void tls_free_cfg(tls_domains_cfg_t* cfg)
}
if (cfg->srv_default) tls_free_domain(cfg->srv_default);
if (cfg->cli_default) tls_free_domain(cfg->cli_default);
+ shm_free(cfg);
}
diff --git a/modules/tls/tls_domain.h b/modules/tls/tls_domain.h
index 15652bc..38c5087 100644
--- a/modules/tls/tls_domain.h
+++ b/modules/tls/tls_domain.h
@@ -2,6 +2,7 @@
* TLS module
*
* Copyright (C) 2005,2006 iptelorg GmbH
+ * Copyright (C) 2013 Motorola Solutions, Inc.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -99,7 +100,7 @@ typedef struct tls_domains_cfg {
tls_domain_t* srv_list; /**< Server domain list */
tls_domain_t* cli_list; /**< Client domain list */
struct tls_domains_cfg* next; /**< Next element in the garbage list */
- int ref_count; /**< How many connections use this configuration */
+ volatile int ref_count; /**< How many connections use this configuration */
} tls_domains_cfg_t;
diff --git a/modules/tls/tls_mod.c b/modules/tls/tls_mod.c
index d8e30b3..b206bf6 100644
--- a/modules/tls/tls_mod.c
+++ b/modules/tls/tls_mod.c
@@ -2,6 +2,7 @@
* TLS module
*
* Copyright (C) 2007 iptelorg GmbH
+ * Copyright (C) Motorola Solutions, Inc.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -278,7 +279,7 @@ static int mod_init(void)
}
/* declare configuration */
if (cfg_declare("tls", tls_cfg_def, &default_tls_cfg,
- cfg_sizeof(tls), &tls_cfg)) {
+ cfg_sizeof(tls), (void **)&tls_cfg)) {
ERR("failed to register the configuration\n");
return -1;
}
diff --git a/modules/tls/tls_rpc.c b/modules/tls/tls_rpc.c
index 458a215..c7c994d 100644
--- a/modules/tls/tls_rpc.c
+++ b/modules/tls/tls_rpc.c
@@ -2,6 +2,7 @@
* TLS module - management interface
*
* Copyright (C) 2005 iptelorg GmbH
+ * Copyright (C) 2013 Motorola Solutions, Inc.
*
* This file is part of sip-router, a free SIP server.
*
@@ -56,10 +57,11 @@ static void tls_reload(rpc_t* rpc, void* ctx)
return;
}
- /* Try to delete old configurations first */
+ /* Try to delete old configurations first */
collect_garbage();
cfg = tls_load_config(&tls_domains_cfg_file);
+
if (!cfg) {
rpc->fault(ctx, 500, "Error while loading TLS configuration file"
" (consult server log)");
@@ -78,8 +80,14 @@ static void tls_reload(rpc_t* rpc, void* ctx)
}
DBG("TLS configuration successfuly loaded");
+
+ lock_get(tls_domains_cfg_lock);
+
cfg->next = (*tls_domains_cfg);
*tls_domains_cfg = cfg;
+
+ lock_release(tls_domains_cfg_lock);
+
return;
error:
diff --git a/modules/tls/tls_server.c b/modules/tls/tls_server.c
index 4b8db14..cfd09c4 100644
--- a/modules/tls/tls_server.c
+++ b/modules/tls/tls_server.c
@@ -2,6 +2,7 @@
* TLS module - main server part
*
* Copyright (C) 2005-2010 iptelorg GmbH
+ * Copyright (C) 2013 Motorola Solutions, Inc.
*
* This file is part of SIP-router, a free SIP server.
*
@@ -148,13 +149,10 @@ static int tls_complete_init(struct tcp_connection* c)
goto error2;
}
/* Get current TLS configuration and increase reference
- * count immediately. There is no need to lock the structure
- * here, because it does not get deleted immediately. When
- * SER reloads TLS configuration it will put the old configuration
- * on a garbage queue and delete it later, so we know here that
- * the pointer we get from *tls_domains_cfg will be valid for a while,
- * at least by the time this function finishes
+ * count immediately.
*/
+
+ lock_get(tls_domains_cfg_lock);
cfg = *tls_domains_cfg;
/* Increment the reference count in the configuration structure, this
@@ -162,6 +160,7 @@ static int tls_complete_init(struct tcp_connection* c)
* not get deleted if there are still connection referencing its SSL_CTX
*/
cfg->ref_count++;
+ lock_release(tls_domains_cfg_lock);
if (c->flags & F_CONN_PASSIVE) {
state=S_TLS_ACCEPTING;
diff --git a/modules/tls/tls_util.c b/modules/tls/tls_util.c
index d8ffba2..88416a1 100644
--- a/modules/tls/tls_util.c
+++ b/modules/tls/tls_util.c
@@ -2,6 +2,7 @@
* TLS module
*
* Copyright (C) 2005 iptelorg GmbH
+ * Copyright (C) 2013 Motorola Solutions, Inc.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -16,6 +17,7 @@
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
+
#define _GNU_SOURCE 1 /* Needed for strndup */
#include <string.h>
@@ -66,7 +68,7 @@ int shm_asciiz_dup(char** dest, char* val)
*/
void collect_garbage(void)
{
- tls_domains_cfg_t* prev, *cur;
+ tls_domains_cfg_t *prev, *cur, *next;
/* Make sure we do not run two garbage collectors
* at the same time
@@ -80,14 +82,16 @@ void collect_garbage(void)
cur = (*tls_domains_cfg)->next;
while(cur) {
+ next = cur->next;
if (cur->ref_count == 0) {
- /* Not referenced by any existing connection */
+ /* Not referenced by any existing connection */
prev->next = cur->next;
tls_free_cfg(cur);
+ } else {
+ /* Only update prev if we didn't remove cur */
+ prev = cur;
}
-
- prev = cur;
- cur = cur->next;
+ cur = next;
}
lock_release(tls_domains_cfg_lock);
THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.
The following task is now closed:
FS#383 - htable $sht() not returning $null anymore
User who did this - Daniel-Constantin Mierla (miconda)
Reason for closing: Not a bug
More information can be found at the following URL:
http://sip-router.org/tracker/index.php?do=details&task_id=383
You are receiving this message because you have requested it from the Flyspray bugtracking system. If you did not expect this message or don't want to receive mails in future, you can change your notification settings at the URL shown above.
THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.
The following task is now closed:
FS#364 - Crash in TCP Read on Kamailio 4.0.1
User who did this - Daniel-Constantin Mierla (miconda)
Reason for closing: Fixed
More information can be found at the following URL:
http://sip-router.org/tracker/index.php?do=details&task_id=364
You are receiving this message because you have requested it from the Flyspray bugtracking system. If you did not expect this message or don't want to receive mails in future, you can change your notification settings at the URL shown above.
THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.
The following task has a new comment added:
FS#364 - Crash in TCP Read on Kamailio 4.0.1
User who did this - Daniel-Constantin Mierla (miconda)
----------
I pushed the patch on master and 4.1 branches, it looks valid, anyhow it can be reviewed and enhanced in from git version if needed.
I am going to close this item. Josh, reopen if your issue still exists, there were couple of fixes on 4.0, 4.1 and master branches related to similar backtraces as yours. Use the latest 4.0 or 4.1 branches.
----------
More information can be found at the following URL:
http://sip-router.org/tracker/index.php?do=details&task_id=364#comment1265
You are receiving this message because you have requested it from the Flyspray bugtracking system. If you did not expect this message or don't want to receive mails in future, you can change your notification settings at the URL shown above.