]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: json: Fix daemon crash on handling domain shutdown event v3.4.0-rc2
authorErik Skultety <eskultet@redhat.com>
Tue, 30 May 2017 08:28:18 +0000 (10:28 +0200)
committerErik Skultety <eskultet@redhat.com>
Tue, 30 May 2017 08:56:53 +0000 (10:56 +0200)
commit a8eba5036 added further checking of the guest shutdown cause, but
this enhancement is available since qemu 2.10, causing a crash because
of a NULL pointer dereference on older qemus.

Thread 1 "libvirtd" received signal SIGSEGV, Segmentation fault.
0x00007ffff72441af in virJSONValueObjectGet (object=0x0,
                                             key=0x7fffd5ef11bf "guest")
    at util/virjson.c:769
769     if (object->type != VIR_JSON_TYPE_OBJECT)
(gdb) bt
0  in virJSONValueObjectGet
1  in virJSONValueObjectGetBoolean
2  in qemuMonitorJSONHandleShutdown
3  in qemuMonitorJSONIOProcessEvent
4  in qemuMonitorJSONIOProcessLine
5  in qemuMonitorJSONIOProcess
6  in qemuMonitorIOProcess

Signed-off-by: Erik Skultety <eskultet@redhat.com>
src/qemu/qemu_monitor_json.c

index 757595dd74725535fa891b264eecaa7a5fa91066..f208dd05a0389b085651201d9a2b5d47dca95c76 100644 (file)
@@ -528,7 +528,7 @@ static void qemuMonitorJSONHandleShutdown(qemuMonitorPtr mon, virJSONValuePtr da
     bool guest = false;
     virTristateBool guest_initiated = VIR_TRISTATE_BOOL_ABSENT;
 
-    if (virJSONValueObjectGetBoolean(data, "guest", &guest) == 0)
+    if (data && virJSONValueObjectGetBoolean(data, "guest", &guest) == 0)
         guest_initiated = guest ? VIR_TRISTATE_BOOL_YES : VIR_TRISTATE_BOOL_NO;
 
     qemuMonitorEmitShutdown(mon, guest_initiated);