bluetooth: fix invalid memory access
authorLennart Poettering <lennart@poettering.net>
Wed, 13 Jan 2010 16:24:37 +0000 (17:24 +0100)
committerColin Guthrie <cguthrie@mandriva.org>
Tue, 9 Feb 2010 22:31:40 +0000 (22:31 +0000)
When an GetProperties() reply arrives after we already deleted the
device structure for it make sure we don't accidentaly touch the
invalidated object.

https://bugzilla.redhat.com/show_bug.cgi?id=543205

src/modules/bluetooth/bluetooth-util.c

index 795d510..b2c0429 100644 (file)
@@ -342,7 +342,13 @@ static void get_properties_reply(DBusPendingCall *pending, void *userdata) {
 /*                  dbus_message_get_interface(p->message), */
 /*                  dbus_message_get_path(p->message)); */
 
-    d = p->call_data;
+    /* We don't use p->call_data here right-away since the device
+     * might already be invalidated at this point */
+
+    if (!(d = pa_hashmap_get(y->devices, dbus_message_get_path(p->message))))
+        return;
+
+    pa_assert(p->call_data == d);
 
     valid = dbus_message_get_type(r) == DBUS_MESSAGE_TYPE_ERROR ? -1 : 1;