REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1186
This patch uses SetJump() to get the stack pointer from esp/rsp register to replace local variable way, which was marked by static code checker as an unsafe way. Cc: Dandan Bi <dandan...@intel.com> Cc: Hao A Wu <hao.a...@intel.com> Cc: Eric Dong <eric.d...@intel.com> Cc: Laszlo Ersek <ler...@redhat.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Jian J Wang <jian.j.w...@intel.com> --- UefiCpuPkg/CpuMpPei/CpuMpPei.h | 8 ++++++++ UefiCpuPkg/CpuMpPei/CpuPaging.c | 9 +++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.h b/UefiCpuPkg/CpuMpPei/CpuMpPei.h index d097a66aa8..fe61f5e3bc 100644 --- a/UefiCpuPkg/CpuMpPei/CpuMpPei.h +++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.h @@ -35,6 +35,14 @@ extern EFI_PEI_PPI_DESCRIPTOR mPeiCpuMpPpiDesc; +#if defined (MDE_CPU_IA32) +#define CPU_STACK_POINTER(Context) ((Context).Esp) +#elif defined (MDE_CPU_X64) +#define CPU_STACK_POINTER(Context) ((Context).Rsp) +#else +#error CPU type not supported! +#endif + /** This service retrieves the number of logical processor in the platform and the number of those logical processors that are enabled on this boot. diff --git a/UefiCpuPkg/CpuMpPei/CpuPaging.c b/UefiCpuPkg/CpuMpPei/CpuPaging.c index c7e0822452..997c20c26e 100644 --- a/UefiCpuPkg/CpuMpPei/CpuPaging.c +++ b/UefiCpuPkg/CpuMpPei/CpuPaging.c @@ -517,9 +517,14 @@ GetStackBase ( IN OUT VOID *Buffer ) { - EFI_PHYSICAL_ADDRESS StackBase; + EFI_PHYSICAL_ADDRESS StackBase; + BASE_LIBRARY_JUMP_BUFFER Context; - StackBase = (EFI_PHYSICAL_ADDRESS)(UINTN)&StackBase; + // + // Retrieve stack pointer from current processor context. + // + SetJump (&Context); + StackBase = (EFI_PHYSICAL_ADDRESS)CPU_STACK_POINTER (Context); StackBase += BASE_4KB; StackBase &= ~((EFI_PHYSICAL_ADDRESS)BASE_4KB - 1); StackBase -= PcdGet32(PcdCpuApStackSize); -- 2.16.2.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel