diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2016-04-12 21:19:27 +0200 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2016-06-03 22:19:38 +0200 |
commit | 963b72bccbd9ae85cc272d0271c43251266112b9 (patch) | |
tree | e9247126bb14f752f844b0b5dd7c63a6c045f0da | |
parent | 74a0e74d125887d91c6b450df213cf22327e6a9b (diff) | |
download | NetworkManager-963b72bccbd9ae85cc272d0271c43251266112b9.tar.gz |
ifnet: fix memory leaks
Fix memory leaks in ifnet plugin and tests, and re-enable valgrind for
tests.
-rw-r--r-- | src/settings/plugins/ifnet/connection_parser.c | 2 | ||||
-rw-r--r-- | src/settings/plugins/ifnet/net_parser.c | 10 | ||||
-rw-r--r-- | src/settings/plugins/ifnet/tests/Makefile.am | 2 | ||||
-rw-r--r-- | src/settings/plugins/ifnet/tests/test-ifnet.c | 2 | ||||
-rw-r--r-- | src/settings/plugins/ifnet/wpa_parser.c | 13 | ||||
-rw-r--r-- | valgrind.suppressions | 8 |
6 files changed, 28 insertions, 9 deletions
diff --git a/src/settings/plugins/ifnet/connection_parser.c b/src/settings/plugins/ifnet/connection_parser.c index 80b8253561..9917463f98 100644 --- a/src/settings/plugins/ifnet/connection_parser.c +++ b/src/settings/plugins/ifnet/connection_parser.c @@ -679,7 +679,7 @@ make_ip4_setting (NMConnection *connection, /* DNS searches */ value = ifnet_get_data (conn_name, "dns_search"); if (value) { - char *stripped = g_strdup (value); + gs_free char *stripped = g_strdup (value); char **searches = NULL; strip_string (stripped, '"'); diff --git a/src/settings/plugins/ifnet/net_parser.c b/src/settings/plugins/ifnet/net_parser.c index 6e1061c673..db5e7a13e7 100644 --- a/src/settings/plugins/ifnet/net_parser.c +++ b/src/settings/plugins/ifnet/net_parser.c @@ -501,13 +501,13 @@ GList * ifnet_get_connection_names (void) { GList *names = g_hash_table_get_keys (conn_table); - GList *result = NULL; + GList *iter, *result = NULL; - while (names) { - if (!ignore_connection_name (names->data)) - result = g_list_prepend (result, names->data); - names = names->next; + for (iter = names; iter; iter = iter->next) { + if (!ignore_connection_name (iter->data)) + result = g_list_prepend (result, iter->data); } + g_list_free (names); return g_list_reverse (result); } diff --git a/src/settings/plugins/ifnet/tests/Makefile.am b/src/settings/plugins/ifnet/tests/Makefile.am index 6590d4ae4c..eb813ab29d 100644 --- a/src/settings/plugins/ifnet/tests/Makefile.am +++ b/src/settings/plugins/ifnet/tests/Makefile.am @@ -34,7 +34,7 @@ test_ifnet_LDFLAGS = \ test_ifnet_LDADD = $(top_builddir)/src/libNetworkManager.la -#@VALGRIND_RULES@ +@VALGRIND_RULES@ TESTS = test-ifnet endif diff --git a/src/settings/plugins/ifnet/tests/test-ifnet.c b/src/settings/plugins/ifnet/tests/test-ifnet.c index 89df9af806..49f88f1c1c 100644 --- a/src/settings/plugins/ifnet/tests/test-ifnet.c +++ b/src/settings/plugins/ifnet/tests/test-ifnet.c @@ -346,7 +346,7 @@ test_delete_connection (void) static void test_missing_config (void) { - GError *error = NULL; + gs_free_error GError *error = NULL; NMConnection *connection; connection = ifnet_update_connection_from_config_block ("eth8", NULL, &error); diff --git a/src/settings/plugins/ifnet/wpa_parser.c b/src/settings/plugins/ifnet/wpa_parser.c index 8e2559b300..505222ab51 100644 --- a/src/settings/plugins/ifnet/wpa_parser.c +++ b/src/settings/plugins/ifnet/wpa_parser.c @@ -77,8 +77,10 @@ add_security (GHashTable *security) /* Hex format begins with " */ is_hex_ssid = (ssid[0] != '"'); if ((value = g_hash_table_lookup (security, "disabled")) != NULL) { - if (strcmp (value, "1") == 0) + if (strcmp (value, "1") == 0) { + destroy_security (security); return NULL; + } } /* Default priority is 1 */ @@ -111,6 +113,7 @@ add_security (GHashTable *security) static void add_key_value (GHashTable * network, gchar * line) { + gpointer orig_key, orig_value; gchar **key_value; if (g_str_has_prefix (line, "network={")) @@ -133,6 +136,14 @@ add_key_value (GHashTable * network, gchar * line) && !g_str_has_prefix (key_value[0], "wep_key") && strcmp (key_value[0], "ssid") != 0) strip_string (key_value[1], '"'); + + /* This sucks */ + if (g_hash_table_lookup_extended (network, key_value[0], &orig_key, &orig_value)) { + g_hash_table_remove (network, orig_key); + g_free (orig_key); + g_free (orig_value); + } + g_hash_table_insert (network, g_strdup (key_value[0]), g_strdup (key_value[1])); g_strfreev (key_value); diff --git a/valgrind.suppressions b/valgrind.suppressions index 46b4a5ba76..596d5611fc 100644 --- a/valgrind.suppressions +++ b/valgrind.suppressions @@ -440,3 +440,11 @@ fun:start_thread fun:clone } +{ + _btrfs_io_clone + Memcheck:Param + ioctl(generic) + fun:ioctl + fun:btrfs_reflink_with_progress + ... +} |