MdeModulePkg/Core/DxeIplPeim: Enhance Code in DxeIplFindDxeCore Function

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4653

In DxeIplFindDxeCore function, there exists different behavior between
Debug and Release built BIOS. This change is used to unify both of
the code flow and fix the potential overflow of "Instance" variable.

In this change,
  [1] Move the ASSERT_EFI_ERROR (Status) in failure to find DxeCore
      in any firmware volume condition.
  [2] Break the while-loop when not found required DxeCore.
      This would make the Instance variable not overflow in while-loop.
  [3] Add the CpuDeadLoop () in the end of the function and do not
      return since DxeCore is mandatory for the following booting
      to hand-off the PEI phase to DXE phase.
  [4] In case of the CpuDeadLoop () is de-assert by debugger,
      return the NULL pointer.

Signed-off-by: Jason1 Lin <jason1.lin@intel.com>
This commit is contained in:
Jason1 Lin 2024-07-15 22:29:40 +08:00 committed by mergify[bot]
parent 43b7a856fa
commit b3441e0100
1 changed files with 10 additions and 3 deletions

View File

@ -3,7 +3,7 @@
Responsibility of this module is to load the DXE Core from a Firmware Volume.
Copyright (c) 2016 HP Development Company, L.P.
Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2006 - 2024, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@ -487,10 +487,10 @@ DxeIplFindDxeCore (
//
if (EFI_ERROR (Status)) {
REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_SOFTWARE_PEI_MODULE | EFI_SW_PEI_CORE_EC_DXE_CORRUPT));
ASSERT_EFI_ERROR (Status);
break;
}
ASSERT_EFI_ERROR (Status);
//
// Find the DxeCore file type from the beginning in this firmware volume.
//
@ -509,6 +509,13 @@ DxeIplFindDxeCore (
//
Instance++;
}
//
// DxeCore cannot find in any firmware volume.
//
CpuDeadLoop ();
return NULL;
}
/**