From 3a16df0e2d3f0af4431b953b68c49d2f1a93f0c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20Ha=CC=88user?= <8659494+mhaeuser@users.noreply.github.com> Date: Mon, 24 Apr 2023 10:33:36 +0200 Subject: [PATCH] MdePkg/BasePeCoffLib2: Fix RuntimeRelocate sanity-check --- MdePkg/Library/BasePeCoffLib2/PeCoffRelocate.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/MdePkg/Library/BasePeCoffLib2/PeCoffRelocate.c b/MdePkg/Library/BasePeCoffLib2/PeCoffRelocate.c index 1fb84e64cc..39a2b26dff 100644 --- a/MdePkg/Library/BasePeCoffLib2/PeCoffRelocate.c +++ b/MdePkg/Library/BasePeCoffLib2/PeCoffRelocate.c @@ -891,6 +891,15 @@ PeCoffRuntimeRelocateImage ( RelocBlockOffset += RelocBlockSize; } // + // Align TopOfRelocDir because, if the policy does not demand Relocation Block + // sizes to be aligned, the code below will manually align them. Thus, the + // end offset of the last Relocation Block must be compared to a manually + // aligned Relocation Directoriy end offset. + // + if ((PcdGet32 (PcdImageLoaderAlignmentPolicy) & PCD_ALIGNMENT_POLICY_RELOCATION_BLOCK_SIZES) != 0) { + TopOfRelocDir = ALIGN_VALUE (TopOfRelocDir, ALIGNOF (EFI_IMAGE_BASE_RELOCATION_BLOCK)); + } + // // This condition is verified by PeCoffRelocateImage(). // ASSERT (RelocBlockOffset == TopOfRelocDir);