D-Bus: Fix Introspect() in case of os_strdup() failure
authorJouni Malinen <j@w1.fi>
Tue, 6 Jan 2015 13:55:51 +0000 (15:55 +0200)
committerJouni Malinen <j@w1.fi>
Wed, 7 Jan 2015 11:19:00 +0000 (13:19 +0200)
add_interface() did not check for os_strdup() return value and could end
up dereferencing a NULL pointer if memory allocation failed.

Signed-off-by: Jouni Malinen <j@w1.fi>
wpa_supplicant/dbus/dbus_new_introspect.c

index e0dd9e2..6209c67 100644 (file)
@@ -37,14 +37,16 @@ static struct interfaces * add_interface(struct dl_list *list,
        iface = os_zalloc(sizeof(struct interfaces));
        if (!iface)
                return NULL;
+       iface->dbus_interface = os_strdup(dbus_interface);
        iface->xml = wpabuf_alloc(6000);
-       if (iface->xml == NULL) {
+       if (iface->dbus_interface == NULL || iface->xml == NULL) {
+               os_free(iface->dbus_interface);
+               wpabuf_free(iface->xml);
                os_free(iface);
                return NULL;
        }
        wpabuf_printf(iface->xml, "<interface name=\"%s\">", dbus_interface);
        dl_list_add_tail(list, &iface->list);
-       iface->dbus_interface = os_strdup(dbus_interface);
        return iface;
 }