hw/misc/mmio_interface: Return after error_setg() to avoid crash
authorThomas Huth <thuth@redhat.com>
Mon, 14 Aug 2017 06:10:29 +0000 (08:10 +0200)
committerMichael Tokarev <mjt@tls.msk.ru>
Mon, 14 Aug 2017 10:06:54 +0000 (13:06 +0300)
QEMU currently abort()s if the user tries to specify the mmio_interface
device without parameters:

x86_64-softmmu/qemu-system-x86_64 -nographic -device mmio_interface
qemu-system-x86_64: /home/thuth/devel/qemu/util/error.c:57: error_setv:
 Assertion `*errp == ((void *)0)' failed.
Aborted (core dumped)

This happens because the realize function is trying to set the errp
twice in this case. After setting an error, the realize function
should immediately return instead.

Signed-off-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
hw/misc/mmio_interface.c

index 6f004d2bab9cb9fc79f849edfc87514eb7a6055c..da154e5c955a6a27918a8d816c3f8750e924eaca 100644 (file)
@@ -63,10 +63,12 @@ static void mmio_interface_realize(DeviceState *dev, Error **errp)
 
     if (!s->host_ptr) {
         error_setg(errp, "host_ptr property must be set");
+        return;
     }
 
     if (!s->subregion) {
         error_setg(errp, "subregion property must be set");
+        return;
     }
 
     memory_region_init_ram_ptr(&s->ram_mem, OBJECT(s), "ram",