Fix a gap where acpi_pcihp_find_hotplug_bus() returns a non-hotpluggable bus
commit8ad038abb98e36fa391ed1cc09a9b569a08b6bff
authorAni Sinha <ani@anisinha.ca>
Fri, 18 Sep 2020 08:41:02 +0000 (18 14:11 +0530)
committerMichael S. Tsirkin <mst@redhat.com>
Tue, 29 Sep 2020 07:06:12 +0000 (29 03:06 -0400)
tree0817d34f18e5ac5477cf75434470eb40c9d95890
parentdf00a529727d7795f9d796cddd1139ffe48eddb2
Fix a gap where acpi_pcihp_find_hotplug_bus() returns a non-hotpluggable bus

When ACPI hotplug for the root bus is disabled, the bsel property for that
bus is not set. Please see the following commit:

3d7e78aa7777f ("Introduce a new flag for i440fx to disable PCI hotplug on the
root bus").

As a result, when acpi_pcihp_find_hotplug_bus() is called
with bsel set to 0, it may return the root bus. This can cause devices
attached to the root bus to get hot-unplugged if the user issues the following
set of commmands:

outl 0xae10 0
outl 0xae08 your_slot

Thanks to Julia for pointing this out here:
https://www.mail-archive.com/qemu-devel@nongnu.org/msg734548.html

In this patch, we fix the issue in this function by checking if the bus which
is returned by the function is actually hotpluggable. If not, we simply return
NULL. This avoids the scenario where we were returning a non-hotpluggable bus.

Signed-off-by: Ani Sinha <ani@anisinha.ca>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Message-Id: <20200918084111.15339-5-ani@anisinha.ca>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
hw/acpi/pcihp.c