summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNicolai Hähnle <[email protected]>2017-08-26 03:06:09 +0200
committerNicolai Hähnle <[email protected]>2017-09-06 09:56:19 +0200
commit1e247511e54767667a0a9ac0c06f3206beb005af (patch)
tree09c563af91ed31bf48d85d603d4c1e9bd5611517 /src
parent94f740e3fce0cb26e4d90cb9de75b5d971080606 (diff)
util/ralloc: set prev-pointers correctly in ralloc_adopt
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 <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/util/ralloc.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/util/ralloc.c b/src/util/ralloc.c
index bf46439df4e..566f08ad94e 100644
--- a/src/util/ralloc.c
+++ b/src/util/ralloc.c
@@ -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;
}