]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Astobj2: Ensure all calls to __adjust_lock pass a valid object. 21/221/5
authorCorey Farrell <git@cfware.com>
Wed, 22 Apr 2015 20:17:53 +0000 (16:17 -0400)
committerCorey Farrell <git@cfware.com>
Thu, 23 Apr 2015 00:44:56 +0000 (20:44 -0400)
__adjust_lock doesn't check for invalid objects, and doesn't have an
appropriate return value for invalid objects.  Most callers of
__adjust_lock pass objects that have already been confirmed valid,
this change adds checks before the remaining calls.

ASTERISK-24997 #close
Reported by: Corey Farrell

Change-Id: I669100f87937cc3f867cec56a27ae9c01292908f

main/astobj2_container.c
main/astobj2_hash.c
main/astobj2_rbtree.c

index dc6f5e5c552e506585f1b283394bb7339815bec2..5a27a0ae5554ece0c4bb20f4927f9c21d7af6db9 100644 (file)
@@ -510,6 +510,12 @@ struct ao2_iterator ao2_iterator_init(struct ao2_container *c, int flags)
 
 void ao2_iterator_restart(struct ao2_iterator *iter)
 {
+       if (!is_ao2_object(iter->c)) {
+               ast_log(LOG_ERROR, "Iterator container is not valid.\n");
+               ast_assert(0);
+               return;
+       }
+
        /* Release the last container node reference if we have one. */
        if (iter->last_node) {
                enum ao2_lock_req orig_lock;
index 37d4b60178ea4efa0e3ff304fc170a30ecf55d97..066999f49524d09c144be8ce01e4d88480232a4c 100644 (file)
@@ -186,6 +186,8 @@ static void hash_ao2_node_destructor(void *v_doomed)
                 * same node.
                 */
                my_container = (struct ao2_container_hash *) doomed->common.my_container;
+               ast_assert(is_ao2_object(my_container));
+
                __adjust_lock(my_container, AO2_LOCK_REQ_WRLOCK, 1);
 
 #if defined(AO2_DEBUG)
index 2e3a73eaae9dfe4f62495dcf8204f636fa58ecaf..d8195d47f51ef239c3ad11047929e71a39326353 100644 (file)
@@ -878,6 +878,8 @@ static void rb_ao2_node_destructor(void *v_doomed)
                 * same node.
                 */
                my_container = (struct ao2_container_rbtree *) doomed->common.my_container;
+               ast_assert(is_ao2_object(my_container));
+
                __adjust_lock(my_container, AO2_LOCK_REQ_WRLOCK, 1);
 
 #if defined(AO2_DEBUG)