• Thomas Huth's avatar
    qdev: Check for the availability of a hotplug controller before adding a device · 03fcbd9d
    Thomas Huth authored
    The qdev_unplug() function contains a g_assert(hotplug_ctrl) statement,
    so QEMU crashes when the user tries to device_add + device_del a device
    that does not have a corresponding hotplug controller. This could be
    provoked for a couple of devices in the past (see commit 4c939506
    or 84ebd3e8 for example), and can currently for example also be
    triggered like this:
    $ s390x-softmmu/qemu-system-s390x -M none -nographic
    QEMU 2.10.50 monitor - type 'help' for more information
    (qemu) device_add qemu-s390x-cpu,id=x
    (qemu) device_del x
    ERROR:qemu/qdev-monitor.c:872:qdev_unplug: assertion failed: (hotplug_ctrl)
    Aborted (core dumped)
    So devices clearly need a hotplug controller when they should be usable
    with device_add.
    The code in qdev_device_add() already checks whether the bus has a proper
    hotplug controller, but for devices that do not have a corresponding bus,
    there is no appropriate check available yet. In that case we should check
    whether the machine itself provides a suitable hotplug controller and
    refuse to plug the device if none is available.
    Reviewed-by: 's avatarIgor Mammedov <imammedo@redhat.com>
    Signed-off-by: 's avatarThomas Huth <thuth@redhat.com>
    Message-Id: <1509617407-21191-3-git-send-email-thuth@redhat.com>
    Reviewed-by: 's avatarCornelia Huck <cohuck@redhat.com>
    Signed-off-by: 's avatarEduardo Habkost <ehabkost@redhat.com>
qdev-monitor.c 26.6 KB