From 43d145082f832619cbfe220c16a4442507e9feaf Mon Sep 17 00:00:00 2001 Message-Id: <43d145082f832619cbfe220c16a4442507e9feaf.1389183250.git.jdenemar@redhat.com> From: John Ferlan Date: Tue, 7 Jan 2014 14:18:28 -0700 Subject: [PATCH] PanicCheckABIStability: Need to check for existence https://bugzilla.redhat.com/show_bug.cgi?id=996520 Commit id '4313fead' added a call to virDomainPanicCheckABIStability() which did not check whether the panic device existed before making a call to virDomainDeviceInfoCheckABIStability() which ended up segfaulting: Thread 1 (Thread 0x7f5332837700 (LWP 10964)): (src=, dst=) at conf/domain_conf.c:13007 (dst=, src=) at conf/domain_conf.c:13712 (src=, dst=) at conf/domain_conf.c:14056 (domain=domain@entry=0x7f53000057c0, vm=vm@entry=0x7f53000036d0, defptr=defptr@entry=0x7f5332836978, snap=snap@entry=0x7f5332836970, update_current=update_current@entry=0x7f5332836962, flags=flags@entry=1) at conf/snapshot_conf.c:1230 (domain=0x7f53000057c0, xmlDesc=, flags=1) at qemu/qemu_driver.c:12719 (domain=domain@entry=0x7f53000057c0, xmlDesc=0x7f53000081d0 "\n snap2\n new-desc\n running\n \n snap1\n \n 1387487268\n def->dom $2 = {virtType = 2, id = -1, .. ... rng = 0x0, panic = 0x0, namespaceData = 0x0,... ... (gdb) print *def->dom $3 = {virtType = 2, id = -1, ... ... rng = 0x0, panic = 0x0, namespaceData = 0x0,... ... (gdb) Also seen using following sequence: virsh save $dom $file virsh save-image-edit $file add (or remove) a line ...
... (cherry picked from commit d53c57b806b94adaed650b7ff10893905ff2fa1f) Signed-off-by: Jiri Denemark --- src/conf/domain_conf.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index bc53a89..06ec82d 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -13539,6 +13539,17 @@ static bool virDomainPanicCheckABIStability(virDomainPanicDefPtr src, virDomainPanicDefPtr dst) { + if (!src && !dst) + return true; + + if (!src || !dst) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Target domain panic device count '%d' " + "does not match source count '%d'"), + src ? 1 : 0, dst ? 1 : 0); + return false; + } + return virDomainDeviceInfoCheckABIStability(&src->info, &dst->info); } -- 1.8.5.2