summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2015-02-18 18:12:34 +0100
committerLubomir Rintel <lkundrak@v3.sk>2015-02-18 18:12:34 +0100
commit148a6656b8da09779d2da2b59e2d6a9c392b5eb1 (patch)
treec770d36940b876fa6bec5fb11532c394d3477bb9
parent5df024f57afe1cbc2a31e10bcb3b6e92bbc33104 (diff)
parentbe6ce67213066c9348d60894cb59546d74407096 (diff)
downloadNetworkManager-148a6656b8da09779d2da2b59e2d6a9c392b5eb1.tar.gz
merge: fix errors found with valgrind
A handful of memory leaks and one read-after-free().
-rw-r--r--configure.ac6
-rw-r--r--src/dhcp-manager/nm-dhcp-client.c2
-rw-r--r--src/nm-auth-utils.c5
-rw-r--r--src/nm-connectivity.c2
-rw-r--r--src/nm-manager.c1
-rw-r--r--src/platform/nm-linux-platform.c2
-rw-r--r--src/rdisc/nm-lndp-rdisc.c1
-rw-r--r--src/settings/nm-agent-manager.c9
-rw-r--r--src/settings/nm-settings-connection.c2
9 files changed, 20 insertions, 10 deletions
diff --git a/configure.ac b/configure.ac
index 883a2e2977..a6780114a5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -873,13 +873,13 @@ VAPIGEN_CHECK(0.17.1.24)
# Tests, utilities and documentation
AC_ARG_ENABLE(tests, AS_HELP_STRING([--enable-tests=root|yes|no], [Build NetworkManager tests (default: yes)]))
-AC_ARG_WITH(valgrind, AS_HELP_STRING([--with-valgrind=yes|no|path], [Use valgrind to memory-check the tests (default: yes)]))
+AC_ARG_WITH(valgrind, AS_HELP_STRING([--with-valgrind=yes|no|path], [Use valgrind to memory-check the tests (default: no)]))
# Fallback to --with-tests
AC_ARG_WITH(tests, AS_HELP_STRING([--with-tests], [Build NetworkManager tests (deprecated)]))
AS_IF([test -n "$with_tests"], enable_tests="$with_tests")
-# Default to --enable-tests --with-valgrind
+# Default to --enable-tests --with-valgrind=no
AS_IF([test -z "$enable_tests"], enable_tests="yes")
-AS_IF([test -z "$with_valgrind"], with_valgrind="yes")
+AS_IF([test -z "$with_valgrind"], with_valgrind="no")
# Normalize values
AS_IF([test "$enable_tests" != "yes" -a "$enable_tests" != "root"], enable_tests="no")
# Search for tools
diff --git a/src/dhcp-manager/nm-dhcp-client.c b/src/dhcp-manager/nm-dhcp-client.c
index 951674953a..a39ffcca0d 100644
--- a/src/dhcp-manager/nm-dhcp-client.c
+++ b/src/dhcp-manager/nm-dhcp-client.c
@@ -884,6 +884,8 @@ dispose (GObject *object)
timeout_cleanup (self);
g_clear_pointer (&priv->iface, g_free);
+ g_clear_pointer (&priv->hostname, g_free);
+ g_clear_pointer (&priv->uuid, g_free);
if (priv->hwaddr) {
g_byte_array_free (priv->hwaddr, TRUE);
diff --git a/src/nm-auth-utils.c b/src/nm-auth-utils.c
index 12924e7894..1e14c7babf 100644
--- a/src/nm-auth-utils.c
+++ b/src/nm-auth-utils.c
@@ -158,17 +158,18 @@ nm_auth_chain_steal_data (NMAuthChain *self, const char *tag)
{
ChainData *tmp;
gpointer value = NULL;
+ void *orig_key;
g_return_val_if_fail (self != NULL, NULL);
g_return_val_if_fail (tag != NULL, NULL);
- tmp = g_hash_table_lookup (self->data, tag);
- if (tmp) {
+ if (g_hash_table_lookup_extended (self->data, tag, &orig_key, (gpointer)&tmp)) {
g_hash_table_steal (self->data, tag);
value = tmp->data;
/* Make sure the destroy handler isn't called when freeing */
tmp->destroy = NULL;
free_data (tmp);
+ g_free (orig_key);
}
return value;
}
diff --git a/src/nm-connectivity.c b/src/nm-connectivity.c
index 804e3935fe..34465aad03 100644
--- a/src/nm-connectivity.c
+++ b/src/nm-connectivity.c
@@ -186,6 +186,7 @@ nm_connectivity_check_cb (SoupSession *session, SoupMessage *msg, gpointer user_
g_simple_async_result_set_op_res_gssize (simple, new_state);
g_simple_async_result_complete (simple);
+ g_object_unref (simple);
g_free (cb_data->uri);
g_free (cb_data->response);
@@ -321,6 +322,7 @@ nm_connectivity_check_async (NMConnectivity *self,
g_simple_async_result_set_op_res_gssize (simple, priv->state);
g_simple_async_result_complete_in_idle (simple);
+ g_object_unref (simple);
}
NMConnectivityState
diff --git a/src/nm-manager.c b/src/nm-manager.c
index d16a912880..c6f87cb983 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -5112,6 +5112,7 @@ dispose (GObject *object)
}
g_clear_object (&priv->settings);
+ g_free (priv->state_file);
g_clear_object (&priv->vpn_manager);
/* Unregister property filter */
diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c
index 091791f4b8..e1887e5a4b 100644
--- a/src/platform/nm-linux-platform.c
+++ b/src/platform/nm-linux-platform.c
@@ -1008,7 +1008,7 @@ init_link (NMPlatform *platform, NMPlatformLink *info, struct rtnl_link *rtnllin
if (udev_device) {
info->driver = udev_get_driver (platform, udev_device, info->ifindex);
if (!info->driver)
- info->driver = rtnl_link_get_type (rtnllink);
+ info->driver = g_intern_string (rtnl_link_get_type (rtnllink));
if (!info->driver)
info->driver = ethtool_get_driver (info->name);
if (!info->driver)
diff --git a/src/rdisc/nm-lndp-rdisc.c b/src/rdisc/nm-lndp-rdisc.c
index ff1bd33ded..922cb3dd76 100644
--- a/src/rdisc/nm-lndp-rdisc.c
+++ b/src/rdisc/nm-lndp-rdisc.c
@@ -720,6 +720,7 @@ dispose (GObject *object)
g_clear_pointer (&priv->event_channel, g_io_channel_unref);
if (priv->ndp) {
+ ndp_msgrcv_handler_unregister (priv->ndp, receive_ra, NDP_MSG_RA, NM_RDISC (rdisc)->ifindex, rdisc);
ndp_close (priv->ndp);
priv->ndp = NULL;
}
diff --git a/src/settings/nm-agent-manager.c b/src/settings/nm-agent-manager.c
index 6228dd5adb..99602d9483 100644
--- a/src/settings/nm-agent-manager.c
+++ b/src/settings/nm-agent-manager.c
@@ -318,6 +318,7 @@ impl_agent_manager_register_with_capabilities (NMAgentManager *self,
priv->chains = g_slist_append (priv->chains, chain);
} else {
+ g_object_unref (agent);
error = g_error_new_literal (NM_AGENT_MANAGER_ERROR,
NM_AGENT_MANAGER_ERROR_FAILED,
"Unable to start agent authentication.");
@@ -585,11 +586,12 @@ request_next_agent (Request *req)
{
GError *error = NULL;
+ req->current_call_id = NULL;
+ if (req->current)
+ g_object_unref (req->current);
+
if (req->pending) {
/* Send the request to the next agent */
- req->current_call_id = NULL;
- if (req->current)
- g_object_unref (req->current);
req->current = req->pending->data;
req->pending = g_slist_remove (req->pending, req->current);
@@ -599,7 +601,6 @@ request_next_agent (Request *req)
req->next_callback (req);
} else {
- req->current_call_id = NULL;
req->current = NULL;
/* No more secret agents are available to fulfill this secrets request */
diff --git a/src/settings/nm-settings-connection.c b/src/settings/nm-settings-connection.c
index ef993c39c4..9285dfbfa5 100644
--- a/src/settings/nm-settings-connection.c
+++ b/src/settings/nm-settings-connection.c
@@ -2314,6 +2314,8 @@ dispose (GObject *object)
}
g_clear_object (&priv->agent_mgr);
+ g_clear_pointer (&priv->filename, g_free);
+
G_OBJECT_CLASS (nm_settings_connection_parent_class)->dispose (object);
}