From c09b254bdc6050cc8b580a26558f692f958645d6 Mon Sep 17 00:00:00 2001 From: "Chasel, Chiu" Date: Fri, 26 Oct 2018 15:12:33 +0800 Subject: IntelFsp2Pkg: Fixed potentially NULL pointer accessing REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1280 When copying IDT table in SecMain, the pointer might be NULL so added the check to fix it. Test: Verified on internal platform and boots successfully. Cc: Jiewen Yao Cc: Desimone Nathaniel L Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Chasel Chiu --- IntelFsp2Pkg/FspSecCore/SecMain.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'IntelFsp2Pkg') diff --git a/IntelFsp2Pkg/FspSecCore/SecMain.c b/IntelFsp2Pkg/FspSecCore/SecMain.c index f319c68cc5..70460a3c8b 100644 --- a/IntelFsp2Pkg/FspSecCore/SecMain.c +++ b/IntelFsp2Pkg/FspSecCore/SecMain.c @@ -100,7 +100,7 @@ SecStartup ( // |-------------------|----> TempRamBase IdtTableInStack.PeiService = NULL; AsmReadIdtr (&IdtDescriptor); - if ((IdtDescriptor.Base == 0) && (IdtDescriptor.Limit == 0xFFFF)) { + if (IdtDescriptor.Base == 0) { ExceptionHandler = FspGetExceptionHandler(mIdtEntryTemplate); for (Index = 0; Index < FixedPcdGet8(PcdFspMaxInterruptSupported); Index ++) { CopyMem ((VOID*)&IdtTableInStack.IdtTable[Index], (VOID*)&ExceptionHandler, sizeof (UINT64)); @@ -113,8 +113,9 @@ SecStartup ( // ERROR: IDT table size from boot loader is larger than FSP can support, DeadLoop here! // CpuDeadLoop(); + } else { + CopyMem ((VOID *) (UINTN) &IdtTableInStack.IdtTable, (VOID *) IdtDescriptor.Base, IdtSize); } - CopyMem ((VOID *) (UINTN) &IdtTableInStack.IdtTable, (VOID *) IdtDescriptor.Base, IdtSize); } IdtDescriptor.Base = (UINTN) &IdtTableInStack.IdtTable; IdtDescriptor.Limit = (UINT16)(IdtSize - 1); -- cgit v1.2.3