[PATCH] dbus: Don't pass NULL message ptr to dbus_message_new_error()
Angie Chinchilla
angie.v.chinchilla
Mon Jul 25 16:48:02 PDT 2011
Found at least 10 code paths that mistakenly assume
message is not NULL before invoking
dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY, NULL).
Created a wrapper method wpas_dbus_error_no_memory() that
checks for this case and returns NULL if needed so we don't
have if (!message) return NULL else return dbus_message_new_error()
blocks scattered all over the code. Also added a couple of log
messages to the path that hits this error so the (now gracefully
handled) errors don't fail silently.
Signed-off-by: Angie Chinchilla <angie.v.chinchilla at intel.com>
---
wpa_supplicant/dbus/dbus_new_handlers.c | 153 ++++++++++++---------------
wpa_supplicant/dbus/dbus_new_handlers.h | 4 +
wpa_supplicant/dbus/dbus_new_handlers_p2p.c | 32 ++----
wpa_supplicant/dbus/dbus_new_handlers_wps.c | 13 +--
wpa_supplicant/dbus/dbus_new_helpers.c | 14 +++-
5 files changed, 103 insertions(+), 113 deletions(-)
diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c b/wpa_supplicant/dbus/dbus_new_handlers.c
index 7c4218b..2360eb3 100644
--- a/wpa_supplicant/dbus/dbus_new_handlers.c
+++ b/wpa_supplicant/dbus/dbus_new_handlers.c
@@ -124,6 +124,35 @@ DBusMessage * wpas_dbus_error_invalid_args(DBusMessage *message,
return reply;
}
+/**
+ * wpas_dbus_error_no_memory - Return a new NoMemory error message
+ * @message: Pointer to incoming dbus message this error refers to
+ * @arg: Optional string appended to error message
+ * Returns: a dbus error message
+ *
+ * Convenience function to create and return a NoMemory error
+ */
+DBusMessage * wpas_dbus_error_no_memory(DBusMessage *message,
+ const char *arg)
+{
+ /*
+ * This function can be called as a result of a failure
+ * within internal getter calls, which will call this function
+ * with a NULL message parameter. However, dbus_message_new_error
+ * looks very unkindly (i.e, abort()) on a NULL message, so
+ * in this case, we should not call it.
+ */
+ if (message == NULL) {
+ wpa_printf(MSG_INFO, "dbus: wpas_dbus_error_no_memory "
+ "called with NULL message (arg=%s)",
+ arg ? arg : "N/A");
+ return NULL;
+ }
+
+ return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
+ arg);
+}
+
static const char *dont_quote[] = {
"key_mgmt", "proto", "pairwise", "auth_alg", "group", "eap",
@@ -314,15 +343,12 @@ DBusMessage * wpas_dbus_simple_property_getter(DBusMessage *message,
"memory to put property value into "
"message");
dbus_message_unref(reply);
- reply = dbus_message_new_error(message,
- DBUS_ERROR_NO_MEMORY,
- NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
}
} else {
wpa_printf(MSG_ERROR, "dbus: wpas_dbus_simple_property_getter:"
" out of memory to return property value");
- reply = dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
}
return reply;
@@ -352,8 +378,7 @@ DBusMessage * wpas_dbus_simple_property_setter(DBusMessage *message,
if (!dbus_message_iter_init(message, &iter)) {
wpa_printf(MSG_ERROR, "dbus: wpas_dbus_simple_property_setter:"
" out of memory to return scanning state");
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
/* omit first and second argument and get value from third */
@@ -414,8 +439,7 @@ DBusMessage * wpas_dbus_simple_array_property_getter(DBusMessage *message,
wpa_printf(MSG_ERROR, "dbus: "
"wpas_dbus_simple_array_property_getter: out of "
"memory to create return message");
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
dbus_message_iter_init_append(reply, &iter);
@@ -428,8 +452,7 @@ DBusMessage * wpas_dbus_simple_array_property_getter(DBusMessage *message,
"wpas_dbus_simple_array_property_getter: out of "
"memory to open container");
dbus_message_unref(reply);
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
switch(type) {
@@ -475,8 +498,7 @@ DBusMessage * wpas_dbus_simple_array_property_getter(DBusMessage *message,
"wpas_dbus_simple_array_property_getter: out of "
"memory to close container");
dbus_message_unref(reply);
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
return reply;
@@ -649,13 +671,11 @@ DBusMessage * wpas_dbus_handler_get_interface(DBusMessage *message,
path = wpa_s->dbus_new_path;
reply = dbus_message_new_method_return(message);
if (reply == NULL)
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
if (!dbus_message_append_args(reply, DBUS_TYPE_OBJECT_PATH, &path,
DBUS_TYPE_INVALID)) {
dbus_message_unref(reply);
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
return reply;
@@ -832,8 +852,7 @@ DBusMessage * wpas_dbus_getter_interfaces(DBusMessage *message,
paths = os_zalloc(num * sizeof(char*));
if (!paths) {
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
for (wpa_s = global->ifaces; wpa_s; wpa_s = wpa_s->next)
@@ -866,8 +885,7 @@ DBusMessage * wpas_dbus_getter_eap_methods(DBusMessage *message, void *nothing)
eap_methods = eap_get_names_as_string_array(&num_items);
if (!eap_methods) {
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
reply = wpas_dbus_simple_array_property_getter(message,
@@ -952,8 +970,8 @@ static int wpas_dbus_get_scan_ssids(DBusMessage *message, DBusMessageIter *var,
"wpas_dbus_handler_scan[dbus]: "
"out of memory. Cannot allocate "
"memory for SSID");
- *reply = dbus_message_new_error(
- message, DBUS_ERROR_NO_MEMORY, NULL);
+ *reply = wpas_dbus_error_no_memory(message,
+ NULL);
return -1;
}
os_memcpy(ssid, val, len);
@@ -1021,8 +1039,7 @@ static int wpas_dbus_get_scan_ies(DBusMessage *message, DBusMessageIter *var,
"out of memory. Cannot allocate memory for "
"IE");
os_free(ies);
- *reply = dbus_message_new_error(
- message, DBUS_ERROR_NO_MEMORY, NULL);
+ *reply = wpas_dbus_error_no_memory(message, NULL);
return -1;
}
ies = nies;
@@ -1116,8 +1133,7 @@ static int wpas_dbus_get_scan_channels(DBusMessage *message,
wpa_printf(MSG_DEBUG, "wpas_dbus_handler_scan[dbus]: "
"out of memory. can't allocate memory for "
"freqs");
- *reply = dbus_message_new_error(
- message, DBUS_ERROR_NO_MEMORY, NULL);
+ *reply = wpas_dbus_error_no_memory(message, NULL);
return -1;
}
@@ -1135,8 +1151,7 @@ static int wpas_dbus_get_scan_channels(DBusMessage *message,
if (freqs == NULL) {
wpa_printf(MSG_DEBUG, "wpas_dbus_handler_scan[dbus]: "
"out of memory. Can't allocate memory for freqs");
- *reply = dbus_message_new_error(
- message, DBUS_ERROR_NO_MEMORY, NULL);
+ *reply = wpas_dbus_error_no_memory(message, NULL);
return -1;
}
freqs[freqs_num] = 0;
@@ -1320,15 +1335,13 @@ DBusMessage * wpas_dbus_handler_add_network(DBusMessage *message,
reply = dbus_message_new_method_return(message);
if (reply == NULL) {
- reply = dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
goto err;
}
if (!dbus_message_append_args(reply, DBUS_TYPE_OBJECT_PATH, &path,
DBUS_TYPE_INVALID)) {
dbus_message_unref(reply);
- reply = dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
goto err;
}
@@ -1527,15 +1540,13 @@ DBusMessage * wpas_dbus_handler_add_blob(DBusMessage *message,
blob = os_zalloc(sizeof(*blob));
if (!blob) {
- reply = dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
goto err;
}
blob->data = os_malloc(blob_len);
if (!blob->data) {
- reply = dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
goto err;
}
os_memcpy(blob->data, blob_data, blob_len);
@@ -1543,8 +1554,7 @@ DBusMessage * wpas_dbus_handler_add_blob(DBusMessage *message,
blob->len = blob_len;
blob->name = os_strdup(blob_name);
if (!blob->name) {
- reply = dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
goto err;
}
@@ -1592,8 +1602,7 @@ DBusMessage * wpas_dbus_handler_get_blob(DBusMessage *message,
reply = dbus_message_new_method_return(message);
if (!reply) {
- reply = dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
goto out;
}
@@ -1603,23 +1612,20 @@ DBusMessage * wpas_dbus_handler_get_blob(DBusMessage *message,
DBUS_TYPE_BYTE_AS_STRING,
&array_iter)) {
dbus_message_unref(reply);
- reply = dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
goto out;
}
if (!dbus_message_iter_append_fixed_array(&array_iter, DBUS_TYPE_BYTE,
&(blob->data), blob->len)) {
dbus_message_unref(reply);
- reply = dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
goto out;
}
if (!dbus_message_iter_close_container(&iter, &array_iter)) {
dbus_message_unref(reply);
- reply = dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
goto out;
}
@@ -2015,7 +2021,7 @@ nomem:
if (reply)
dbus_message_unref(reply);
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY, NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
@@ -2041,8 +2047,7 @@ DBusMessage * wpas_dbus_getter_state(DBusMessage *message,
*/
state_ls = tmp = os_strdup(str_state);
if (!tmp) {
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
while (*tmp) {
*tmp = tolower(*tmp);
@@ -2453,17 +2458,14 @@ DBusMessage * wpas_dbus_getter_bsss(DBusMessage *message,
paths = os_zalloc(wpa_s->num_bss * sizeof(char *));
if (!paths) {
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
/* Loop through scan results and append each result's object path */
dl_list_for_each(bss, &wpa_s->bss_id, struct wpa_bss, list_id) {
paths[i] = os_zalloc(WPAS_DBUS_OBJECT_PATH_MAX);
if (paths[i] == NULL) {
- reply = dbus_message_new_error(message,
- DBUS_ERROR_NO_MEMORY,
- NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
goto out;
}
/* Construct the object path for this BSS. */
@@ -2513,8 +2515,7 @@ DBusMessage * wpas_dbus_getter_networks(DBusMessage *message,
paths = os_zalloc(num * sizeof(char *));
if (!paths) {
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
/* Loop through configured networks and append object path of each */
@@ -2523,9 +2524,7 @@ DBusMessage * wpas_dbus_getter_networks(DBusMessage *message,
continue;
paths[i] = os_zalloc(WPAS_DBUS_OBJECT_PATH_MAX);
if (paths[i] == NULL) {
- reply = dbus_message_new_error(message,
- DBUS_ERROR_NO_MEMORY,
- NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
goto out;
}
@@ -2567,8 +2566,7 @@ DBusMessage * wpas_dbus_getter_blobs(DBusMessage *message,
else
reply = dbus_message_new_method_return(message);
if (!reply)
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
dbus_message_iter_init_append(reply, &iter);
@@ -2577,8 +2575,7 @@ DBusMessage * wpas_dbus_getter_blobs(DBusMessage *message,
!dbus_message_iter_open_container(&variant_iter, DBUS_TYPE_ARRAY,
"{say}", &dict_iter)) {
dbus_message_unref(reply);
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
blob = wpa_s->conf->blobs;
@@ -2602,9 +2599,7 @@ DBusMessage * wpas_dbus_getter_blobs(DBusMessage *message,
!dbus_message_iter_close_container(&dict_iter,
&entry_iter)) {
dbus_message_unref(reply);
- return dbus_message_new_error(message,
- DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
blob = blob->next;
@@ -2613,8 +2608,7 @@ DBusMessage * wpas_dbus_getter_blobs(DBusMessage *message,
if (!dbus_message_iter_close_container(&variant_iter, &dict_iter) ||
!dbus_message_iter_close_container(&iter, &variant_iter)) {
dbus_message_unref(reply);
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
return reply;
@@ -2812,8 +2806,7 @@ DBusMessage * wpas_dbus_getter_bss_rates(DBusMessage *message,
real_rates = os_malloc(sizeof(u32) * rates_num);
if (!real_rates) {
os_free(ie_rates);
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
for (i = 0; i < rates_num; i++)
@@ -2937,7 +2930,7 @@ nomem:
if (reply)
dbus_message_unref(reply);
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY, NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
@@ -3104,16 +3097,14 @@ DBusMessage * wpas_dbus_getter_network_properties(
char **iterator;
char **props = wpa_config_get_all(net->ssid, 1);
if (!props)
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
if (message == NULL)
reply = dbus_message_new(DBUS_MESSAGE_TYPE_SIGNAL);
else
reply = dbus_message_new_method_return(message);
if (!reply) {
- reply = dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
goto out;
}
@@ -3123,8 +3114,7 @@ DBusMessage * wpas_dbus_getter_network_properties(
"a{sv}", &variant_iter) ||
!wpa_dbus_dict_open_write(&variant_iter, &dict_iter)) {
dbus_message_unref(reply);
- reply = dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
goto out;
}
@@ -3133,9 +3123,7 @@ DBusMessage * wpas_dbus_getter_network_properties(
if (!wpa_dbus_dict_append_string(&dict_iter, *iterator,
*(iterator + 1))) {
dbus_message_unref(reply);
- reply = dbus_message_new_error(message,
- DBUS_ERROR_NO_MEMORY,
- NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
goto out;
}
iterator += 2;
@@ -3145,8 +3133,7 @@ DBusMessage * wpas_dbus_getter_network_properties(
if (!wpa_dbus_dict_close_write(&variant_iter, &dict_iter) ||
!dbus_message_iter_close_container(&iter, &variant_iter)) {
dbus_message_unref(reply);
- reply = dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
goto out;
}
diff --git a/wpa_supplicant/dbus/dbus_new_handlers.h b/wpa_supplicant/dbus/dbus_new_handlers.h
index 978ee4c..1e84327 100644
--- a/wpa_supplicant/dbus/dbus_new_handlers.h
+++ b/wpa_supplicant/dbus/dbus_new_handlers.h
@@ -222,7 +222,11 @@ DBusMessage * wpas_dbus_getter_credentials(DBusMessage *message,
DBusMessage * wpas_dbus_error_invalid_args(DBusMessage *message,
const char *arg);
+
DBusMessage * wpas_dbus_error_unknown_error(DBusMessage *message,
const char *arg);
+DBusMessage * wpas_dbus_error_no_memory(DBusMessage *message,
+ const char *arg);
+
#endif /* CTRL_IFACE_DBUS_HANDLERS_NEW_H */
diff --git a/wpa_supplicant/dbus/dbus_new_handlers_p2p.c b/wpa_supplicant/dbus/dbus_new_handlers_p2p.c
index 28c4198..0d99d2f 100644
--- a/wpa_supplicant/dbus/dbus_new_handlers_p2p.c
+++ b/wpa_supplicant/dbus/dbus_new_handlers_p2p.c
@@ -170,12 +170,10 @@ DBusMessage * wpas_dbus_handler_p2p_listen(DBusMessage *message,
if (!dbus_message_get_args(message, NULL, DBUS_TYPE_INT32, &timeout,
DBUS_TYPE_INVALID))
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
if (wpas_p2p_listen(wpa_s, (unsigned int)timeout))
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
return NULL;
}
@@ -797,7 +795,7 @@ DBusMessage * wpas_dbus_getter_p2p_device_properties(
return reply;
err_no_mem:
dbus_message_unref(reply);
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY, NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
@@ -960,7 +958,7 @@ DBusMessage * wpas_dbus_setter_p2p_device_properties(
return reply;
err_no_mem_clear:
wpa_dbus_dict_entry_clear(&entry);
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY, NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
@@ -1036,8 +1034,7 @@ error:
os_free(node);
}
if (out_of_mem)
- reply = dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
return reply;
}
@@ -1247,7 +1244,7 @@ DBusMessage * wpas_dbus_getter_p2p_peer_properties(
return reply;
err_no_mem:
dbus_message_unref(reply);
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY, NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
@@ -1288,8 +1285,7 @@ DBusMessage * wpas_dbus_getter_persistent_groups(DBusMessage *message,
paths = os_zalloc(num * sizeof(char *));
if (!paths) {
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
/* Loop through configured networks and append object path of each */
@@ -1298,9 +1294,7 @@ DBusMessage * wpas_dbus_getter_persistent_groups(DBusMessage *message,
continue;
paths[i] = os_zalloc(WPAS_DBUS_OBJECT_PATH_MAX);
if (paths[i] == NULL) {
- reply = dbus_message_new_error(message,
- DBUS_ERROR_NO_MEMORY,
- NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
goto out;
}
/* Construct the object path for this network. */
@@ -1434,15 +1428,13 @@ DBusMessage * wpas_dbus_handler_add_persistent_group(
reply = dbus_message_new_method_return(message);
if (reply == NULL) {
- reply = dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
goto err;
}
if (!dbus_message_append_args(reply, DBUS_TYPE_OBJECT_PATH, &path,
DBUS_TYPE_INVALID)) {
dbus_message_unref(reply);
- reply = dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
goto err;
}
@@ -1619,7 +1611,7 @@ DBusMessage * wpas_dbus_getter_p2p_group_members(DBusMessage *message,
return reply;
out_of_memory:
- reply = dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY, NULL);
+ reply = wpas_dbus_error_no_memory(message, NULL);
if (paths) {
for (i = 0; i < num_members; i++)
os_free(paths[i]);
@@ -1680,7 +1672,7 @@ DBusMessage * wpas_dbus_getter_p2p_group_properties(
err_no_mem:
dbus_message_unref(reply);
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY, NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
diff --git a/wpa_supplicant/dbus/dbus_new_handlers_wps.c b/wpa_supplicant/dbus/dbus_new_handlers_wps.c
index c118d73..7b830d3 100644
--- a/wpa_supplicant/dbus/dbus_new_handlers_wps.c
+++ b/wpa_supplicant/dbus/dbus_new_handlers_wps.c
@@ -250,30 +250,25 @@ DBusMessage * wpas_dbus_handler_wps_start(DBusMessage *message,
reply = dbus_message_new_method_return(message);
if (!reply) {
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
dbus_message_iter_init_append(reply, &iter);
if (!wpa_dbus_dict_open_write(&iter, &dict_iter)) {
dbus_message_unref(reply);
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
if (os_strlen(npin) > 0) {
if (!wpa_dbus_dict_append_string(&dict_iter, "Pin", npin)) {
dbus_message_unref(reply);
- return dbus_message_new_error(message,
- DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
}
if (!wpa_dbus_dict_close_write(&iter, &dict_iter)) {
dbus_message_unref(reply);
- return dbus_message_new_error(message, DBUS_ERROR_NO_MEMORY,
- NULL);
+ return wpas_dbus_error_no_memory(message, NULL);
}
return reply;
diff --git a/wpa_supplicant/dbus/dbus_new_helpers.c b/wpa_supplicant/dbus/dbus_new_helpers.c
index 78611d4..005cfa6 100644
--- a/wpa_supplicant/dbus/dbus_new_helpers.c
+++ b/wpa_supplicant/dbus/dbus_new_helpers.c
@@ -99,11 +99,18 @@ static unsigned int fill_dict_with_properties(
WPAS_DBUS_INTERFACE_MAX) &&
dsc->access != W && dsc->getter) {
reply = dsc->getter(NULL, user_data);
- if (!reply)
+ if (!reply) {
+ wpa_printf(MSG_ERROR, "dbus: %s: Cannot get "
+ "value of property %s", __func__,
+ dsc->dbus_property);
continue;
+ }
if (dbus_message_get_type(reply) ==
DBUS_MESSAGE_TYPE_ERROR) {
+ wpa_printf(MSG_ERROR, "dbus: %s: Cannot get "
+ "value of property %s", __func__,
+ dsc->dbus_property);
dbus_message_unref(reply);
continue;
}
@@ -647,6 +654,8 @@ static void put_changed_properties(const struct wpa_dbus_object_desc *obj_dsc,
wpa_printf(MSG_ERROR, "dbus: %s: Cannot get new value "
"of property %s", __func__,
dsc->dbus_property);
+ if (getter_reply)
+ dbus_message_unref(getter_reply);
continue;
}
@@ -670,6 +679,9 @@ static void put_changed_properties(const struct wpa_dbus_object_desc *obj_dsc,
return;
err:
+ if (getter_reply)
+ dbus_message_unref(getter_reply);
+
wpa_printf(MSG_ERROR, "dbus: %s: Cannot construct signal", __func__);
}
--
1.7.0.4
More information about the Hostap
mailing list