]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
efi_loader: don't load beyond VirtualSize
authorAsherah Connor <ashe@kivikakk.ee>
Tue, 9 Feb 2021 06:19:48 +0000 (06:19 +0000)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Sun, 14 Feb 2021 09:34:15 +0000 (10:34 +0100)
PE section table entries' SizeOfRawData must be a multiple of
FileAlignment, and thus may be rounded up and larger than their
VirtualSize.

We should not load beyond the VirtualSize, which is "the total size of
the section when loaded into memory" -- we may clobber real data at the
target in some other section, since we load sections in reverse order
and sections are usually laid out sequentially.

Signed-off-by: Asherah Connor <ashe@kivikakk.ee>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
lib/efi_loader/efi_image_loader.c

index d4dd9e943395002f19abe1503537bfe8bc9db576..f53ef367ec1d6fe805910a2b0cde2d8255f8ecf9 100644 (file)
@@ -843,7 +843,7 @@ efi_status_t efi_load_pe(struct efi_loaded_image_obj *handle,
                       sec->Misc.VirtualSize);
                memcpy(efi_reloc + sec->VirtualAddress,
                       efi + sec->PointerToRawData,
-                      sec->SizeOfRawData);
+                      min(sec->Misc.VirtualSize, sec->SizeOfRawData));
        }
 
        /* Run through relocations */