From: Daniel Wagner <[email protected]>
This is fixing the accessing after freed bug.
==3580== Invalid read of size 8
==3580== at 0x494FE2: destroy_server (dnsproxy.c:1877)
==3580== by 0x4961ED: remove_server (dnsproxy.c:2417)
==3580== by 0x496291: __connman_dnsproxy_remove (dnsproxy.c:2434)
==3580== by 0x462D4B: remove_entries (resolver.c:271)
==3580== by 0x4635CF: connman_resolver_remove (resolver.c:523)
==3580== by 0x44FDE4: remove_nameservers (service.c:933)
==3580== by 0x450021: update_nameservers (service.c:1010)
==3580== by 0x4505EC: __connman_service_nameserver_remove (service.c:1156)
==3580== by 0x46EC33: dhcp_invalidate (dhcp.c:116)
==3580== by 0x46FE7A: remove_network (dhcp.c:593)
==3580== by 0x3919238519: g_hash_table_remove_internal (ghash.c:1276)
==3580== by 0x46FF9B: __connman_dhcp_stop (dhcp.c:626)
==3580== Address 0x4e8a318 is 8 bytes inside a block of size 24 free'd
==3580== at 0x4A07577: free (in
/usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==3580== by 0x391924EF7E: g_free (gmem.c:197)
==3580== by 0x39192655CA: g_slice_free1 (gslice.c:1124)
==3580== by 0x3919245543: g_list_remove (glist.c:480)
==3580== by 0x494FC9: destroy_server (dnsproxy.c:1880)
==3580== by 0x4961ED: remove_server (dnsproxy.c:2417)
==3580== by 0x496291: __connman_dnsproxy_remove (dnsproxy.c:2434)
==3580== by 0x462D4B: remove_entries (resolver.c:271)
==3580== by 0x4635CF: connman_resolver_remove (resolver.c:523)
==3580== by 0x44FDE4: remove_nameservers (service.c:933)
==3580== by 0x450021: update_nameservers (service.c:1010)
==3580== by 0x4505EC: __connman_service_nameserver_remove (service.c:1156)
==3580==
---
src/dnsproxy.c | 9 +--------
1 file changed, 1 insertion(+), 8 deletions(-)
diff --git a/src/dnsproxy.c b/src/dnsproxy.c
index a5d6841..b17c9cb 100644
--- a/src/dnsproxy.c
+++ b/src/dnsproxy.c
@@ -1861,8 +1861,6 @@ static void server_destroy_socket(struct server_data
*data)
static void destroy_server(struct server_data *server)
{
- GList *list;
-
DBG("index %d server %s sock %d", server->index, server->server,
server->channel ?
g_io_channel_unix_get_fd(server->channel): -1);
@@ -1874,12 +1872,7 @@ static void destroy_server(struct server_data *server)
DBG("Removing DNS server %s", server->server);
g_free(server->server);
- for (list = server->domains; list; list = list->next) {
- char *domain = list->data;
-
- server->domains = g_list_remove(server->domains, domain);
- g_free(domain);
- }
+ g_list_free_full(server->domains, g_free);
g_free(server->server_addr);
/*
--
1.8.5.3
_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman