D-Bus (old): Fix memory leak on error path
authorJouni Malinen <j@w1.fi>
Tue, 6 Jan 2015 10:06:39 +0000 (12:06 +0200)
committerJouni Malinen <j@w1.fi>
Wed, 7 Jan 2015 11:19:00 +0000 (13:19 +0200)
If setSmartcardModules() fails to allocate memory with os_strdup(), the
allocated items in the dict entry were not freed.

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

index 504de2a..955ea78 100644 (file)
@@ -1134,25 +1134,27 @@ DBusMessage * wpas_dbus_iface_set_smartcard_modules(
                    entry.type == DBUS_TYPE_STRING) {
                        os_free(opensc_engine_path);
                        opensc_engine_path = os_strdup(entry.str_value);
+                       wpa_dbus_dict_entry_clear(&entry);
                        if (opensc_engine_path == NULL)
                                goto error;
                } else if (!strcmp(entry.key, "pkcs11_engine_path") &&
                           entry.type == DBUS_TYPE_STRING) {
                        os_free(pkcs11_engine_path);
                        pkcs11_engine_path = os_strdup(entry.str_value);
+                       wpa_dbus_dict_entry_clear(&entry);
                        if (pkcs11_engine_path == NULL)
                                goto error;
                } else if (!strcmp(entry.key, "pkcs11_module_path") &&
                                 entry.type == DBUS_TYPE_STRING) {
                        os_free(pkcs11_module_path);
                        pkcs11_module_path = os_strdup(entry.str_value);
+                       wpa_dbus_dict_entry_clear(&entry);
                        if (pkcs11_module_path == NULL)
                                goto error;
                } else {
                        wpa_dbus_dict_entry_clear(&entry);
                        goto error;
                }
-               wpa_dbus_dict_entry_clear(&entry);
        }
 
        os_free(wpa_s->conf->opensc_engine_path);