summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorey Farrell <git@cfware.com>2015-05-14 01:06:53 -0400
committerCorey Farrell <git@cfware.com>2015-05-14 05:41:30 -0500
commit0a46d43b9c36e1ad847455fc6577f1573e0cb216 (patch)
tree5cc6f54c531f4e08f7f0d261c509b12d1df8b273
parent2bbfcfc647dc69089236cde0003ba88c3161d1ec (diff)
Fix potential crash after unload of func_periodic_hook or test_message.
These modules save a pointer to the context they create on load, and use that pointer to destroy the context at unload. It is not safe to save this pointer, it is replaced during load of pbx_config, pbx_lua or pbx_ael. This change causes the modules to pass NULL to ast_context_destroy, a safer way to perform the unregistration since it does not use a pointer that could become invalid. ASTERISK-25085 #close Reported by: Corey Farrell Change-Id: I6a00ec8e38046058f97dc703e1adcde9bf517835
-rw-r--r--funcs/func_periodic_hook.c10
-rw-r--r--tests/test_message.c9
2 files changed, 4 insertions, 15 deletions
diff --git a/funcs/func_periodic_hook.c b/funcs/func_periodic_hook.c
index 6ddab5600..bb0ee0db7 100644
--- a/funcs/func_periodic_hook.c
+++ b/funcs/func_periodic_hook.c
@@ -446,13 +446,9 @@ static struct ast_custom_function hook_function = {
.write = hook_write,
};
-static struct ast_context *func_periodic_hook_context;
-
static int unload_module(void)
{
- if (func_periodic_hook_context) {
- ast_context_destroy(func_periodic_hook_context, AST_MODULE);
- }
+ ast_context_destroy(NULL, AST_MODULE);
return ast_custom_function_unregister(&hook_function);
}
@@ -461,9 +457,7 @@ static int load_module(void)
{
int res;
- func_periodic_hook_context = ast_context_find_or_create(NULL, NULL,
- context_name, AST_MODULE);
- if (!func_periodic_hook_context) {
+ if (!ast_context_find_or_create(NULL, NULL, context_name, AST_MODULE)) {
ast_log(LOG_ERROR, "Failed to create %s dialplan context.\n", context_name);
return AST_MODULE_LOAD_DECLINE;
}
diff --git a/tests/test_message.c b/tests/test_message.c
index 26cd90a4d..2c9334ad9 100644
--- a/tests/test_message.c
+++ b/tests/test_message.c
@@ -51,8 +51,6 @@ ASTERISK_REGISTER_FILE()
/*! \brief The number of user events we should get in a dialplan test */
#define DEFAULT_EXPECTED_EVENTS 4
-static struct ast_context *test_message_context;
-
/*! \brief The current number of received user events */
static int received_user_events;
@@ -822,9 +820,7 @@ static int unload_module(void)
AST_TEST_UNREGISTER(test_message_has_destination_handler);
AST_TEST_UNREGISTER(test_message_msg_send);
- if (test_message_context) {
- ast_context_destroy(test_message_context, AST_MODULE);
- }
+ ast_context_destroy(NULL, AST_MODULE);
ast_manager_unregister_hook(&user_event_hook);
@@ -835,8 +831,7 @@ static int create_test_dialplan(void)
{
int res = 0;
- test_message_context = ast_context_find_or_create(NULL, NULL, TEST_CONTEXT, AST_MODULE);
- if (!test_message_context) {
+ if (!ast_context_find_or_create(NULL, NULL, TEST_CONTEXT, AST_MODULE)) {
return -1;
}