summaryrefslogtreecommitdiff
path: root/src/ipconfig.c
diff options
context:
space:
mode:
authorJukka Rissanen <jukka.rissanen@linux.intel.com>2012-01-18 12:48:35 +0200
committerSamuel Ortiz <sameo@linux.intel.com>2012-01-20 01:46:59 +0100
commit0a2d884684c4201219c4cc1e96ad9918eb1a9ecf (patch)
tree1ef63ff6d6aa0924a444120ea049658f8d68ee88 /src/ipconfig.c
parent28cfb9f31a6ef26df6917a9aa4f3c3eb676a5bc9 (diff)
downloadconnman-0a2d884684c4201219c4cc1e96ad9918eb1a9ecf.tar.gz
connman-0a2d884684c4201219c4cc1e96ad9918eb1a9ecf.tar.bz2
connman-0a2d884684c4201219c4cc1e96ad9918eb1a9ecf.zip
ipconfig: Possible to have double unref
Because we do not check that origin pointer is not this ipconfig, it is possible that we might try to unref the ipconfig one time too many. Something like this was seen in the log file: connmand[19208]: src/ipconfig.c:enable_ipv6() connmand[19208]: src/ipconfig.c:__connman_ipconfig_unref() ipconfig 0x47502f0 refcount 0 connmand[19208]: src/ipconfig.c:__connman_ipconfig_disable() ipconfig 0x47502f0 connmand[19208]: src/ipconfig.c:disable_ipv6() connmand[19208]: src/ipconfig.c:__connman_ipconfig_unref() ipconfig 0x47502f0 refcount -1
Diffstat (limited to 'src/ipconfig.c')
-rw-r--r--src/ipconfig.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/ipconfig.c b/src/ipconfig.c
index 3429d1b8..75cb56e5 100644
--- a/src/ipconfig.c
+++ b/src/ipconfig.c
@@ -1327,7 +1327,7 @@ void __connman_ipconfig_unref(struct connman_ipconfig *ipconfig)
__connman_ipconfig_set_ops(ipconfig, NULL);
- if (ipconfig->origin != NULL) {
+ if (ipconfig->origin != NULL && ipconfig->origin != ipconfig) {
__connman_ipconfig_unref(ipconfig->origin);
ipconfig->origin = NULL;
}