summaryrefslogtreecommitdiff
path: root/src/device.c
diff options
context:
space:
mode:
authorSamuel Ortiz <sameo@linux.intel.com>2011-08-03 19:04:24 +0200
committerSamuel Ortiz <sameo@linux.intel.com>2011-08-03 19:04:24 +0200
commitbed1650a98c998447ae085d9f4e882554c62a7cc (patch)
tree35e889cac4256170444912c2b97a065faca8a494 /src/device.c
parenta669c62a2f99a01b42372e7c89c9496c0d8e3176 (diff)
downloadconnman-bed1650a98c998447ae085d9f4e882554c62a7cc.tar.gz
connman-bed1650a98c998447ae085d9f4e882554c62a7cc.tar.bz2
connman-bed1650a98c998447ae085d9f4e882554c62a7cc.zip
device: Free network after resetting service
After g_hash_table_remove(device->networks, identifier); the previously cached service pointer can be invalid. Bug reported by: Daniel Wagner <daniel.wagner@bmw-carit.de>
Diffstat (limited to 'src/device.c')
-rw-r--r--src/device.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/device.c b/src/device.c
index e5bd84db..a3718a95 100644
--- a/src/device.c
+++ b/src/device.c
@@ -1117,11 +1117,13 @@ int connman_device_remove_network(struct connman_device *device,
service = __connman_service_lookup_from_network(network);
identifier = connman_network_get_identifier(network);
- g_hash_table_remove(device->networks, identifier);
+ g_hash_table_steal(device->networks, identifier);
if (service != NULL)
__connman_service_reset_from_networks(service, device->networks);
+ free_network(network);
+
return 0;
}