Skip to content

x86/efistub: Use 1:1 file:memory mapping for PE/COFF .compat section

Lenny Szubowicz requested to merge lszubowi/centos-stream-9:rhel-31446 into main

JIRA: https://issues.redhat.com/browse/RHEL-31446
CVE: 2024-26678

commit 1ad55cecf22f05f1c884adf63cc09d3c3e609ebf
Author: Ard Biesheuvel ardb@kernel.org
Date: Mon Feb 5 09:11:07 2024 +0100

x86/efistub: Use 1:1 file:memory mapping for PE/COFF .compat section  

The .compat section is a dummy PE section that contains the address of  
the 32-bit entrypoint of the 64-bit kernel image if it is bootable from  
32-bit firmware (i.e., CONFIG_EFI_MIXED=y)  

This section is only 8 bytes in size and is only referenced from the  
loader, and so it is placed at the end of the memory view of the image,  
to avoid the need for padding it to 4k, which is required for sections  
appearing in the middle of the image.  

Unfortunately, this violates the PE/COFF spec, and even if most EFI  
loaders will work correctly (including the Tianocore reference  
implementation), PE loaders do exist that reject such images, on the  
basis that both the file and memory views of the file contents should be  
described by the section headers in a monotonically increasing manner  
without leaving any gaps.  

So reorganize the sections to avoid this issue. This results in a slight  
padding overhead (< 4k) which can be avoided if desired by disabling  
CONFIG_EFI_MIXED (which is only needed in rare cases these days)  

Fixes: 3e3eabe26dc8 ("x86/boot: Increase section and file alignment to 4k/512")  
Reported-by: Mike Beaton <mjsbeaton@gmail.com>  
Link: https://lkml.kernel.org/r/CAHzAAWQ6srV6LVNdmfbJhOwhBw5ZzxxZZ07aHt9oKkfYAdvuQQ%40mail.gmail.com  
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>  

Signed-off-by: Lenny Szubowicz lszubowi@redhat.com

Merge request reports