From cfa02256a5098e8449b4cbc1830990fac75d5fc1 Mon Sep 17 00:00:00 2001 From: Patrick Rudolph Date: Tue, 2 Feb 2021 18:14:24 +0100 Subject: [PATCH] mb/emulation/qemu: Fix SMP boot Fix booting with SMP enabled, when specifying more CPUs than supported by the code. Change-Id: Ib3d7c1a1a7a8633d4d434ccbd46cf92b0074b724 Signed-off-by: Patrick Rudolph Reviewed-on: https://review.coreboot.org/c/coreboot/+/50235 Tested-by: build bot (Jenkins) Reviewed-by: Arthur Heymans --- src/cpu/qemu-x86/Kconfig | 4 ++-- src/mainboard/emulation/qemu-i440fx/northbridge.c | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/cpu/qemu-x86/Kconfig b/src/cpu/qemu-x86/Kconfig index 641cea815c..a22d7f9eab 100644 --- a/src/cpu/qemu-x86/Kconfig +++ b/src/cpu/qemu-x86/Kconfig @@ -44,8 +44,8 @@ endchoice config MAX_CPUS int - default 4 if SMM_ASEG - default 32 + default 32 if SMM_TSEG + default 4 config CPU_QEMU_X86_64 bool "Experimental 64bit support" diff --git a/src/mainboard/emulation/qemu-i440fx/northbridge.c b/src/mainboard/emulation/qemu-i440fx/northbridge.c index f49d47dac9..80fba1de07 100644 --- a/src/mainboard/emulation/qemu-i440fx/northbridge.c +++ b/src/mainboard/emulation/qemu-i440fx/northbridge.c @@ -271,6 +271,12 @@ static void cpu_bus_scan(struct device *bus) if (max_cpus < 0) return; + /* + * Do not install more CPUs than supported by coreboot. + * This will cause a buffer overflow where fixed arrays of CONFIG_MAX_CPUS + * are used and might result in a boot failure. + */ + max_cpus = MIN(max_cpus, CONFIG_MAX_CPUS); /* * TODO: This only handles the simple "qemu -smp $nr" case