From: Erik Skultety Date: Tue, 30 May 2017 08:28:18 +0000 (+0200) Subject: qemu: json: Fix daemon crash on handling domain shutdown event X-Git-Tag: v3.4.0-rc2^0 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f9b69c828994ceea61759d4be43f66da67559033;p=thirdparty%2Flibvirt.git qemu: json: Fix daemon crash on handling domain shutdown event 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 --- diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 757595dd74..f208dd05a0 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -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);