D-Bus (old): Fix memory leak on error path

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>
This commit is contained in:
Jouni Malinen 2015-01-06 12:06:39 +02:00
parent 3d2e2d5d63
commit a2af1c70c5

View file

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