util/ralloc: set prev-pointers correctly in ralloc_adopt
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Sat, 26 Aug 2017 01:06:09 +0000 (03:06 +0200)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Wed, 6 Sep 2017 07:56:19 +0000 (09:56 +0200)
Found by inspection.

I'm not aware of any actual failures caused by this, but a precise
sequence of ralloc_adopt and ralloc_free should be able to cause
problems.

v2: make the code slightly clearer (Eric)

Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
src/util/ralloc.c

index bf46439df4ea5fe9268ecd8d7ef397ed55f8a5d8..566f08ad94efd66fe891df7fc3ffd2873a54df5b 100644 (file)
@@ -311,10 +311,12 @@ ralloc_adopt(const void *new_ctx, void *old_ctx)
    for (child = old_info->child; child->next != NULL; child = child->next) {
       child->parent = new_info;
    }
+   child->parent = new_info;
 
    /* Connect the two lists together; parent them to new_ctx; make old_ctx empty. */
    child->next = new_info->child;
-   child->parent = new_info;
+   if (child->next)
+      child->next->prev = child;
    new_info->child = old_info->child;
    old_info->child = NULL;
 }