ACK: [focal:linux-azure-cvm][PATCH 0/1] LP:#1980023 - Properly realocate the the kernel image

Khaled Elmously khalid.elmously at canonical.com
Tue Jun 28 00:26:59 UTC 2022


Acked-by: Khalid Elmously <khalid.elmously at canonical.com>


On 2022-06-27 20:38:36 , Marcelo Henrique Cerri wrote:
> BugLink: https://bugs.launchpad.net/bugs/1980023
> 
> [Impact]
> 
> The kernel header defines a field called init_size that specifies the
> amount of memory that the kernel requires for the in-place
> decompression, and the bootloader is expected to load the kernel into
> a buffer of this size. This doesn't happen when using the systemd EFI
> stub to load the kernel though - the kernel image is stored on disk in
> a PE section with a virtual size no larger than the compressed size,
> so it's loaded into memory by the bootloader into a buffer that's too
> small for the in-place decompression. The initrd is loaded into memory
> immediately after the kernel.
> 
> To work around this, the kernel's EFI stub allocates a new buffer of
> init_size bytes and relocates the kernel image into it (21cb9b41:
> "efi/x86: Always relocate the kernel for EFI handover entry"), but
> this code has a bug - it copies init_size bytes from the source buffer
> (ie, where the kernel image was loaded into memory by the bootloader)
> to the new buffer. This ends up reading past the end of the .linux and
> .initrd PE sections and all of the memory regions allocated by the
> bootloader, resulting in an out of bounds read and causing problem
> with Confidential VMs.
> 
> This is fixed by 688eb282: "efi/x86: Only copy the compressed kernel
> image in efi_relocate_kernel()", which needs to be backported to the
> kernel we provide for CVM. Ideally, this would have been fixed in
> systemd's EFI stub by setting the virtual size of the .linux PE
> section to init_size, which would cause the bootloader load the kernel
> into a buffer large enough, making this additional relocation
> unnecessary.
> 
> [Test Plan]
> 
> Tested by Microsoft and boot tested by me.
> 
> [Where problems could occur]
> 
> Decompression might fail if init_size is wrong causing the system to
> not boot.
> 
> ---
> Arvind Sankar (1):
>   efi/x86: Only copy the compressed kernel image in
>     efi_relocate_kernel()
> 
>  arch/x86/boot/compressed/eboot.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> -- 
> 2.25.1
> 
> 
> -- 
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team



More information about the kernel-team mailing list