util: identity: Harden virIdentitySetCurrent()

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.
This commit is contained in:
Peter Krempa 2015-03-25 08:25:45 +01:00
parent 785fd9fa12
commit ad886fa6c8

View 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;
}