diff -Nru libvirt-1.2.2/debian/changelog libvirt-1.2.2/debian/changelog --- libvirt-1.2.2/debian/changelog 2015-02-11 05:43:07.000000000 +0900 +++ libvirt-1.2.2/debian/changelog 2015-06-11 18:30:11.000000000 +0900 @@ -1,3 +1,14 @@ +libvirt (1.2.2-0ubuntu13.1.11) trusty; urgency=medium + + * virObjectUnref() libvirtd killed by SIGSEGV (LP: #1464175) + - upstream, util: identity: Harden virIdentitySetCurrent() + - upstream, daemon: Clear fake domain def object that is used to check + ACL prior to use + - upstream, rpc: Don't unref identity object while callbacks still can + be executed + + -- Seyeong Kim Thu, 11 Jun 2015 18:27:12 +0900 + libvirt (1.2.2-0ubuntu13.1.10) trusty-proposed; urgency=medium * 9035-qemu-snapshot-save-persistent-domain-config: upstream fix for a diff -Nru libvirt-1.2.2/debian/patches/fix_libvirtd_killed_by_sigsegv.patch libvirt-1.2.2/debian/patches/fix_libvirtd_killed_by_sigsegv.patch --- libvirt-1.2.2/debian/patches/fix_libvirtd_killed_by_sigsegv.patch 1970-01-01 09:00:00.000000000 +0900 +++ libvirt-1.2.2/debian/patches/fix_libvirtd_killed_by_sigsegv.patch 2015-06-11 18:54:02.000000000 +0900 @@ -0,0 +1,63 @@ +Description: virObjectUnref() libvirtd killed by SIGSEGV + While memory load is high, libvirtd could be crashed(segfault) if you + command something ( destroy, migrate, etc ) + +Author: Peter Krempa + +Origin: upstream, http://libvirt.org/git/?p=libvirt.git;a=commitdiff;h=ad886fa6c8ebc321a0386a75c187d315111cf1f3 + upstream, http://libvirt.org/git/?p=libvirt.git;a=commitdiff;h=6ca857c7c8a1f7b571132d6c7fff5a06301a5e9a + upstream, http://libvirt.org/git/?p=libvirt.git;a=commitdiff;h=a98129c0ee52b6a8fdd39988a6d090057f149ae9 +Bug-Ubuntu: https://bugs.launchpad.net/bugs/1464175 +Last-Update: 2015-03-25 +Index: libvirt-1.2.2/daemon/remote.c +=================================================================== +--- libvirt-1.2.2.orig/daemon/remote.c ++++ libvirt-1.2.2/daemon/remote.c +@@ -143,6 +143,7 @@ remoteRelayDomainEventCheckACL(virNetSer + /* For now, we just create a virDomainDef with enough contents to + * satisfy what viraccessdriverpolkit.c references. This is a bit + * fragile, but I don't know of anything better. */ ++ memset(&def, 0, sizeof(def)); + def.name = dom->name; + memcpy(def.uuid, dom->uuid, VIR_UUID_BUFLEN); + +Index: libvirt-1.2.2/src/rpc/virnetserverclient.c +=================================================================== +--- libvirt-1.2.2.orig/src/rpc/virnetserverclient.c ++++ libvirt-1.2.2/src/rpc/virnetserverclient.c +@@ -910,12 +910,12 @@ void virNetServerClientDispose(void *obj + PROBE(RPC_SERVER_CLIENT_DISPOSE, + "client=%p", client); + +- virObjectUnref(client->identity); +- + if (client->privateData && + client->privateDataFreeFunc) + client->privateDataFreeFunc(client->privateData); + ++ virObjectUnref(client->identity); ++ + #if WITH_SASL + virObjectUnref(client->sasl); + #endif +Index: libvirt-1.2.2/src/util/viridentity.c +=================================================================== +--- libvirt-1.2.2.orig/src/util/viridentity.c ++++ libvirt-1.2.2/src/util/viridentity.c +@@ -110,14 +110,15 @@ int virIdentitySetCurrent(virIdentityPtr + 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; + } diff -Nru libvirt-1.2.2/debian/patches/series libvirt-1.2.2/debian/patches/series --- libvirt-1.2.2/debian/patches/series 2015-02-11 05:41:13.000000000 +0900 +++ libvirt-1.2.2/debian/patches/series 2015-06-11 18:18:24.000000000 +0900 @@ -42,3 +42,4 @@ numa-cgroups-fix-cpuset-mems-init.patch 9035-qemu-snapshot-save-persistent-domain-config 9036-dont-fail-without-cpu-model.patch +fix_libvirtd_killed_by_sigsegv.patch