pc: Refuse CPU hotplug if the resulting APIC ID is too large
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 <ehabkost@redhat.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
1d14ac5af0
commit
5ff020b7b0
|
@ -53,6 +53,7 @@
|
||||||
#include "qemu/bitmap.h"
|
#include "qemu/bitmap.h"
|
||||||
#include "qemu/config-file.h"
|
#include "qemu/config-file.h"
|
||||||
#include "hw/acpi/acpi.h"
|
#include "hw/acpi/acpi.h"
|
||||||
|
#include "hw/acpi/cpu_hotplug.h"
|
||||||
#include "hw/cpu/icc_bus.h"
|
#include "hw/cpu/icc_bus.h"
|
||||||
#include "hw/boards.h"
|
#include "hw/boards.h"
|
||||||
#include "hw/pci/pci_host.h"
|
#include "hw/pci/pci_host.h"
|
||||||
|
@ -974,6 +975,13 @@ void pc_hot_add_cpu(const int64_t id, Error **errp)
|
||||||
return;
|
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",
|
icc_bridge = DEVICE(object_resolve_path_type("icc-bridge",
|
||||||
TYPE_ICC_BRIDGE, NULL));
|
TYPE_ICC_BRIDGE, NULL));
|
||||||
pc_new_cpu(current_cpu_model, apic_id, icc_bridge, errp);
|
pc_new_cpu(current_cpu_model, apic_id, icc_bridge, errp);
|
||||||
|
|
Loading…
Reference in a new issue