On 03/12/14 19:28, Eduardo Habkost wrote: > The ACPI CPU hotplug code requires APIC IDs to be smaller than > ACPI_CPU_HOTPLUG_ID_LIMIT, so enforce the limit before trying to hotplug > a new vCPU, returning an error instead of crashing. > > Signed-off-by: Eduardo Habkost <ehabk...@redhat.com> > --- > hw/i386/pc.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/hw/i386/pc.c b/hw/i386/pc.c > index e715a33..74cb4f9 100644 > --- a/hw/i386/pc.c > +++ b/hw/i386/pc.c > @@ -53,6 +53,7 @@ > #include "qemu/bitmap.h" > #include "qemu/config-file.h" > #include "hw/acpi/acpi.h" > +#include "hw/acpi/cpu_hotplug.h" > #include "hw/cpu/icc_bus.h" > #include "hw/boards.h" > #include "hw/pci/pci_host.h" > @@ -974,6 +975,13 @@ void pc_hot_add_cpu(const int64_t id, Error **errp) > return; > } > > + if (apic_id >= ACPI_CPU_HOTPLUG_ID_LIMIT) { > + error_setg(errp, "Unable to add CPU: %" PRIi64 > + ", resulting APIC ID (%" PRIi64 ") is too large", > + id, apic_id); > + return; > + } > + > icc_bridge = DEVICE(object_resolve_path_type("icc-bridge", > TYPE_ICC_BRIDGE, NULL)); > pc_new_cpu(current_cpu_model, apic_id, icc_bridge, errp); >
Reviewed-by: Laszlo Ersek <ler...@redhat.com>