summaryrefslogtreecommitdiff
path: root/pe.c
diff options
context:
space:
mode:
Diffstat (limited to 'pe.c')
-rw-r--r--pe.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/pe.c b/pe.c
index 9fa62d68..45dd4714 100644
--- a/pe.c
+++ b/pe.c
@@ -1043,10 +1043,14 @@ handle_image (void *data, unsigned int datasize,
return EFI_UNSUPPORTED;
}
- /* If it has nonzero size, and our bounds check made
- * sense, sizes match, then we believe it's okay. */
+ /* The virtual size corresponds to the size of the SBAT
+ * metadata and isn't necessarily a multiple of the file
+ * alignment. The on-disk size is a multiple of the file
+ * alignment and is zero padded. Make sure that the
+ * on-disk size is at least as large as virtual size,
+ * and ignore the section if it isn't. */
if (Section->SizeOfRawData &&
- Section->SizeOfRawData == Section->Misc.VirtualSize &&
+ Section->SizeOfRawData >= Section->Misc.VirtualSize &&
base && end) {
SBATBase = base;
/* +1 because of size vs last byte location */