From: Jan Janssen Date: Sat, 17 Sep 2022 20:35:23 +0000 (+0200) Subject: stub: Refuse operation if kernel lacks EFI handover support X-Git-Tag: v252-rc1~124^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=757d6c916d7248090aee5cc36ee2fdb5cf44d69e;p=thirdparty%2Fsystemd.git stub: Refuse operation if kernel lacks EFI handover support --- diff --git a/src/boot/efi/linux_x86.c b/src/boot/efi/linux_x86.c index eeb3c7abc60..1174aa3ece9 100644 --- a/src/boot/efi/linux_x86.c +++ b/src/boot/efi/linux_x86.c @@ -28,6 +28,13 @@ enum { XLF_KERNEL_64 = 1 << 0, XLF_CAN_BE_LOADED_ABOVE_4G = 1 << 1, + XLF_EFI_HANDOVER_32 = 1 << 2, + XLF_EFI_HANDOVER_64 = 1 << 3, +#ifdef __x86_64__ + XLF_EFI_HANDOVER = XLF_EFI_HANDOVER_64, +#else + XLF_EFI_HANDOVER = XLF_EFI_HANDOVER_32, +#endif }; typedef struct { @@ -138,6 +145,12 @@ EFI_STATUS linux_exec( if (!image_params->hdr.relocatable_kernel) return log_error_status_stall(EFI_UNSUPPORTED, u"Kernel is not relocatable."); + /* The xloadflags were added in version 2.12+ of the boot protocol but the handover support predates + * that, so we cannot safety-check this for 2.11. */ + if (image_params->hdr.version >= SETUP_VERSION_2_12 && + !FLAGS_SET(image_params->hdr.xloadflags, XLF_EFI_HANDOVER)) + return log_error_status_stall(EFI_UNSUPPORTED, u"Kernel does not support EFI handover protocol."); + bool can_4g = image_params->hdr.version >= SETUP_VERSION_2_12 && FLAGS_SET(image_params->hdr.xloadflags, XLF_CAN_BE_LOADED_ABOVE_4G);