Astobj2: Ensure all calls to __adjust_lock pass a valid object.
__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
This commit is contained in:
parent
0722e11f26
commit
c231c85ea4
|
@ -510,6 +510,12 @@ struct ao2_iterator ao2_iterator_init(struct ao2_container *c, int flags)
|
||||||
|
|
||||||
void ao2_iterator_restart(struct ao2_iterator *iter)
|
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. */
|
/* Release the last container node reference if we have one. */
|
||||||
if (iter->last_node) {
|
if (iter->last_node) {
|
||||||
enum ao2_lock_req orig_lock;
|
enum ao2_lock_req orig_lock;
|
||||||
|
|
|
@ -186,6 +186,8 @@ static void hash_ao2_node_destructor(void *v_doomed)
|
||||||
* same node.
|
* same node.
|
||||||
*/
|
*/
|
||||||
my_container = (struct ao2_container_hash *) doomed->common.my_container;
|
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);
|
__adjust_lock(my_container, AO2_LOCK_REQ_WRLOCK, 1);
|
||||||
|
|
||||||
#if defined(AO2_DEBUG)
|
#if defined(AO2_DEBUG)
|
||||||
|
|
|
@ -878,6 +878,8 @@ static void rb_ao2_node_destructor(void *v_doomed)
|
||||||
* same node.
|
* same node.
|
||||||
*/
|
*/
|
||||||
my_container = (struct ao2_container_rbtree *) doomed->common.my_container;
|
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);
|
__adjust_lock(my_container, AO2_LOCK_REQ_WRLOCK, 1);
|
||||||
|
|
||||||
#if defined(AO2_DEBUG)
|
#if defined(AO2_DEBUG)
|
||||||
|
|
Loading…
Reference in New Issue