qemu-e2k/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 hw/core: Clean up includes 2016-01-29 15:07:25 +00:00
fw-path-provider.c hw/core: Clean up includes 2016-01-29 15:07:25 +00:00
hotplug.c qdev: hotplug: Introduce HotplugHandler.pre_plug() callback 2016-06-17 16:33:48 +10:00
irq.c hw/core: Clean up includes 2016-01-29 15:07:25 +00:00
loader.c loader: fix potential memory leak 2016-05-18 15:04:26 +03:00
machine.c machine: add properties to compat_props incrementaly 2016-05-20 14:28:54 -03:00
Makefile.objs register: Add Register API 2016-07-04 13:15:22 +01:00
nmi.c nmi: remove x86 specific nmi handling 2016-05-23 16:53:46 +02:00
null-machine.c hw/core: Clean up includes 2016-01-29 15:07:25 +00:00
platform-bus.c hw/core: Clean up includes 2016-01-29 15:07:25 +00:00
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 hw/core: Clean up includes 2016-01-29 15:07:25 +00:00
sysbus.c hw: remove pio_addr_t 2016-05-19 16:42:30 +02:00
uboot_image.h hw: move private headers to hw/ subdirectories. 2013-04-08 18:13:16 +02:00