]> xenbits.xensource.com Git - libvirt.git/commitdiff
util: identity: Harden virIdentitySetCurrent()
authorPeter Krempa <pkrempa@redhat.com>
Wed, 25 Mar 2015 07:25:45 +0000 (08:25 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 25 Mar 2015 12:37:41 +0000 (13:37 +0100)
Don't unref the old identity unless we set the new one correctly and
unref the new one on failure to set it so that we don't leak any
references or use invalid pointers.

src/util/viridentity.c

index 6f3baeeb1111975165ed9011db3052f94a554f47..9b8ba4ae245728de2665f9908e32243974793915 100644 (file)
@@ -111,15 +111,17 @@ int virIdentitySetCurrent(virIdentityPtr ident)
         return -1;
 
     old = virThreadLocalGet(&virIdentityCurrent);
-    virObjectUnref(old);
 
     if (virThreadLocalSet(&virIdentityCurrent,
                           virObjectRef(ident)) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("Unable to set thread local identity"));
+        virObjectUnref(ident);
         return -1;
     }
 
+    virObjectUnref(old);
+
     return 0;
 }