summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJukka Rissanen <jukka.rissanen@linux.intel.com>2011-11-25 17:05:37 +0200
committerSamuel Ortiz <sameo@linux.intel.com>2011-11-28 17:55:13 +0100
commitee29e7046e205e1e2eb3bab6f608c5cac8a6bf3a (patch)
tree0d12e6f293da0d75a1908fe028449d22bb8fac1d /src
parentd436afd59968222b29e6fad922c2f0941d2a79f3 (diff)
downloadconnman-ee29e7046e205e1e2eb3bab6f608c5cac8a6bf3a.tar.gz
connman-ee29e7046e205e1e2eb3bab6f608c5cac8a6bf3a.tar.bz2
connman-ee29e7046e205e1e2eb3bab6f608c5cac8a6bf3a.zip
ipconfig: Remove ipconfig from ipconfig_list
It is possible that ipdevice does not contain ipconfig for some reason. If that happens, then ipconfig is not removed from ipconfig_list which will then escalate into freed memory access when interface is taken down. The problem was seen with valgrind when tethering was enabled and then disabled for wifi.
Diffstat (limited to 'src')
-rw-r--r--src/ipconfig.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/ipconfig.c b/src/ipconfig.c
index b4729903..f817699f 100644
--- a/src/ipconfig.c
+++ b/src/ipconfig.c
@@ -1330,7 +1330,8 @@ void connman_ipconfig_unref(struct connman_ipconfig *ipconfig)
if (__sync_fetch_and_sub(&ipconfig->refcount, 1) != 1)
return;
- __connman_ipconfig_disable(ipconfig);
+ if (__connman_ipconfig_disable(ipconfig) < 0)
+ ipconfig_list = g_list_remove(ipconfig_list, ipconfig);
connman_ipconfig_set_ops(ipconfig, NULL);