From 25c4198f7c4ba2c84a89b4c23aff2ec21b1e0d40 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Tue, 5 Feb 2013 14:56:02 +0000 Subject: [PATCH] Fix use-after-free --- src/dbus.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/dbus.c b/src/dbus.c index b940283..7379341 100644 --- a/src/dbus.c +++ b/src/dbus.c @@ -91,16 +91,19 @@ static dbus_bool_t add_watch(DBusWatch *watch, void *data) static void remove_watch(DBusWatch *watch, void *data) { - struct watch **up, *w; + struct watch **up, *w, *tmp; - for (up = &(daemon->watches), w = daemon->watches; w; w = w->next) - if (w->watch == watch) - { - *up = w->next; - free(w); - } - else - up = &(w->next); + for (up = &(daemon->watches), w = daemon->watches; w; w = tmp) + { + tmp = w->next; + if (w->watch == watch) + { + *up = tmp; + free(w); + } + else + up = &(w->next); + } w = data; /* no warning */ }