diff options
author | Marshall Dawson <marshalldawson3rd@gmail.com> | 2018-10-25 13:01:55 -0600 |
---|---|---|
committer | Martin Roth <martinroth@google.com> | 2018-10-29 18:01:43 +0000 |
commit | 46fc6847832e77f3b1fc1a5c27265874508f2926 (patch) | |
tree | 1ba57c7bf371d815c721856262379345893ef566 | |
parent | bf00401e8a4d58c2717ae0d9d45ea5a0114b0990 (diff) | |
download | coreboot-46fc6847832e77f3b1fc1a5c27265874508f2926.tar.xz |
x86/mp_init: Add configurable stack size for SMM relocate
A stack overrun has been observed on AMD64 CPUs during the SMM module
relocation process. Change the assumed required size from equaling the
save structure's size to a Kconfig symbol.
A value of 0x400 doubles the size used by AMD64 systems and maintains
the size used by EM64T.
BUG=b:118420852
TEST=S3 on Grunt and verify 0x2f000-0x30000 uncorrupted
Change-Id: Ib1d590ee4afb06ca649afd6ad253cdfd969ae777
Signed-off-by: Marshall Dawson <marshalldawson3rd@gmail.com>
Reviewed-on: https://review.coreboot.org/29277
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Richard Spiegel <richard.spiegel@silverbackltd.com>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
-rw-r--r-- | src/cpu/x86/Kconfig | 8 | ||||
-rw-r--r-- | src/cpu/x86/mp_init.c | 2 |
2 files changed, 9 insertions, 1 deletions
diff --git a/src/cpu/x86/Kconfig b/src/cpu/x86/Kconfig index 5e2d79657e..232fe63f32 100644 --- a/src/cpu/x86/Kconfig +++ b/src/cpu/x86/Kconfig @@ -118,6 +118,14 @@ config SMM_MODULE_STACK_SIZE This option determines the size of the stack within the SMM handler modules. +config SMM_STUB_STACK_SIZE + hex + default 0x400 + depends on SMM_TSEG + help + This option determines the size of the stack within the SMM handler + modules. + config SMM_LAPIC_REMAP_MITIGATION bool default y if NORTHBRIDGE_INTEL_I945 diff --git a/src/cpu/x86/mp_init.c b/src/cpu/x86/mp_init.c index aa2a4695a4..fb3a98691b 100644 --- a/src/cpu/x86/mp_init.c +++ b/src/cpu/x86/mp_init.c @@ -773,7 +773,7 @@ static void adjust_smm_apic_id_map(struct smm_loader_params *smm_params) static int install_relocation_handler(int num_cpus, size_t save_state_size) { struct smm_loader_params smm_params = { - .per_cpu_stack_size = save_state_size, + .per_cpu_stack_size = CONFIG_SMM_STUB_STACK_SIZE, .num_concurrent_stacks = num_cpus, .per_cpu_save_state_size = save_state_size, .num_concurrent_save_states = 1, |