qemu-patch-raspberry4/hw/core
Kevin Wolf a9d52a7563 block/qdev: Fix NULL access when using BB twice
BlockBackend has only a single pointer to its guest device, so it makes
sure that only a single guest device is attached to it. device-add
returns an error if you try to attach a second device to a BB. In order
to make the error message nicer, -device that manually connects to a
if=none block device get a different message than -drive that implicitly
creates a guest device. The if=... option is stored in DriveInfo.

However, since blockdev-add exists, not every BlockBackend has a
DriveInfo any more. Check that it exists before we dereference it.

QMP reproducer resulting in a segfault:

{"execute":"blockdev-add","arguments":{"options":{"id":"disk","driver":"file","filename":"/tmp/test.img"}}}
{"execute":"device_add","arguments":{"driver":"virtio-blk-pci","drive":"disk"}}
{"execute":"device_add","arguments":{"driver":"virtio-blk-pci","drive":"disk"}}

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
2016-07-05 16:46:26 +02:00
..
bus.c qdev: Start disentangling bus from device 2016-05-26 14:06:41 +01:00
empty_slot.c
fw-path-provider.c
hotplug.c qdev: hotplug: Introduce HotplugHandler.pre_plug() callback 2016-06-17 16:33:48 +10:00
irq.c
loader.c
machine.c
Makefile.objs register: Add Register API 2016-07-04 13:15:22 +01:00
nmi.c
null-machine.c
platform-bus.c
ptimer.c hw/ptimer: Introduce ptimer_get_limit 2016-06-06 16:59:31 +01:00
qdev-properties-system.c block/qdev: Fix NULL access when using BB twice 2016-07-05 16:46:26 +02:00
qdev-properties.c qdev: Use GList for global properties 2016-06-17 10:42:21 -03:00
qdev.c qdev: hotplug: Introduce HotplugHandler.pre_plug() callback 2016-06-17 16:33:48 +10:00
register.c register: Add block initialise helper 2016-07-04 13:15:22 +01:00
stream.c
sysbus.c
uboot_image.h