[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC] Fix SCSI hotplug with invalid slot
From: |
Kevin Wolf |
Subject: |
Re: [Qemu-devel] [RFC] Fix SCSI hotplug with invalid slot |
Date: |
Fri, 13 Jul 2012 11:47:44 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120605 Thunderbird/13.0 |
[ Whoops, forgot qemu-devel in my original mail, added now ]
Am 12.07.2012 20:11, schrieb Anthony Liguori:
> Kevin Wolf <address@hidden> writes:
>
>> While trying to hotplug an if=scsi disk with drive_add, I didn't pay
>> attention to using a valid slot (it doesn't matter with the usual
>> if=none...), and so I got:
>>
>> (qemu) drive_add 0 file=/tmp/test.qcow2,if=scsi
>> Segmentation fault.
>>
>> qemu just takes the PCI device at slot 0 and starts working on its first
>> child bus, no matter what device it is, and whether it even has a bus.
>> This NULL pointer access is easy enough to fix, it's what this patch
>> does.
>>
>> However this leaves a second case where the device in the slot does
>> exist, has child buses and still isn't a SCSI bus. For example (here
>> it's IDE):
>>
>> (qemu) drive_add 1 file=/tmp/test.qcow2,if=scsi
>> Object 0x7fadb204bbf0 is not an instance of type SCSI
>> Aborted.
>>
>> I couldn't find any obvious solution for checking if it has the right
>> type without aborting. I'm sure that this is a pretty standard case, but
>> my QOM knowledge is lacking...
>>
>> Signed-off-by: Kevin Wolf <address@hidden>
>> ---
>> hw/pci-hotplug.c | 8 +++++++-
>> 1 files changed, 7 insertions(+), 1 deletions(-)
>>
>> diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c
>> index e7fb780..87d4721 100644
>> --- a/hw/pci-hotplug.c
>> +++ b/hw/pci-hotplug.c
>> @@ -77,10 +77,16 @@ static PCIDevice *qemu_pci_hot_add_nic(Monitor *mon,
>> static int scsi_hot_add(Monitor *mon, DeviceState *adapter,
>> DriveInfo *dinfo, int printinfo)
>> {
>> + BusState *bus;
>> SCSIBus *scsibus;
>> SCSIDevice *scsidev;
>>
>> - scsibus = SCSI_BUS(QLIST_FIRST(&adapter->child_bus));
>> + bus = QLIST_FIRST(&adapter->child_bus);
>> + if (bus == NULL) {
>
> if (bus == NULL || object_dynamic_cast(bus, TYPE_SCSI_BUS) == NULL) {
Ah well, so this is really the official way... Then I could as well use
the result of that instead of calling it a second time in SCSI_BUS().
Should I send an updated patch for this, or is it a more general problem
of the QOM conversions that checks were lost and you'll post a broader fix?
Kevin
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [RFC] Fix SCSI hotplug with invalid slot,
Kevin Wolf <=