From 55c8daf88b94f74e334ab246c51bdb7b469eedc4 Mon Sep 17 00:00:00 2001 From: Corey Farrell Date: Mon, 8 Jun 2015 11:09:22 -0400 Subject: Fix unsafe uses of ast_context pointers. Although ast_context_find, ast_context_find_or_create and ast_context_destroy perform locking of the contexts table, any context pointer can become invalid at any time that the contexts table is unlocked. This change adds locking around all complete operations involving these functions. Places where ast_context_find was followed by ast_context_destroy have been replaced with calls ast_context_destroy_by_name. ASTERISK-25094 #close Reported by: Corey Farrell Change-Id: I1866b6787730c9c4f3f836b6133ffe9c820734fa --- pbx/pbx_config.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) (limited to 'pbx') diff --git a/pbx/pbx_config.c b/pbx/pbx_config.c index b03642504..c4a0e6c28 100644 --- a/pbx/pbx_config.c +++ b/pbx/pbx_config.c @@ -133,8 +133,6 @@ static char *complete_dialplan_remove_context(struct ast_cli_args *); static char *handle_cli_dialplan_remove_context(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) { - struct ast_context *con; - switch (cmd) { case CLI_INIT: e->command = "dialplan remove context"; @@ -150,16 +148,11 @@ static char *handle_cli_dialplan_remove_context(struct ast_cli_entry *e, int cmd return CLI_SHOWUSAGE; } - con = ast_context_find(a->argv[3]); - - if (!con) { - ast_cli(a->fd, "There is no such context as '%s'\n", - a->argv[3]); - return CLI_SUCCESS; + if (ast_context_destroy_by_name(a->argv[3], NULL)) { + ast_cli(a->fd, "There is no such context as '%s'\n", a->argv[3]); + return CLI_SUCCESS; } else { - ast_context_destroy(con, registrar); - ast_cli(a->fd, "Removing context '%s'\n", - a->argv[3]); + ast_cli(a->fd, "Removed context '%s'\n", a->argv[3]); return CLI_SUCCESS; } } -- cgit v1.2.3