From 404bd44294da1222bd9a00658456af5f9ea5dd7f Mon Sep 17 00:00:00 2001 From: Ruiyu Ni Date: Mon, 30 Nov 2015 03:08:49 +0000 Subject: [PATCH] MdeModulePkg/BDS: Do not pass unnecessary option to boot option BDS puts a special GUID in boot option optional data for auto-discovered boot option. But when launching that boot option, the BDS core unconditionally pass the special GUID to the executable. A good written application/OS loader can ignore the unexpected parameters, but BDS core should still avoid passing the unnecessary GUID. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni Reviewed-by: Eric Dong git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19007 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Library/UefiBootManagerLib/BmBoot.c | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c index e9634580f4..7297a1ddda 100644 --- a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c @@ -52,6 +52,28 @@ EfiBootManagerRegisterLegacyBootSupport ( mBmLegacyBoot = LegacyBoot; } +/** + Return TRUE when the boot option is auto-created instead of manually added. + + @param BootOption Pointer to the boot option to check. + + @retval TRUE The boot option is auto-created. + @retval FALSE The boot option is manually added. +**/ +BOOLEAN +BmIsAutoCreateBootOption ( + EFI_BOOT_MANAGER_LOAD_OPTION *BootOption + ) +{ + if ((BootOption->OptionalDataSize == sizeof (EFI_GUID)) && + CompareGuid ((EFI_GUID *) BootOption->OptionalData, &mBmAutoCreateBootOptionGuid) + ) { + return TRUE; + } else { + return FALSE; + } +} + /** For a bootable Device path, return its boot type. @@ -1814,8 +1836,10 @@ EfiBootManagerBoot ( Status = gBS->HandleProtocol (ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID **) &ImageInfo); ASSERT_EFI_ERROR (Status); - ImageInfo->LoadOptionsSize = BootOption->OptionalDataSize; - ImageInfo->LoadOptions = BootOption->OptionalData; + if (!BmIsAutoCreateBootOption (BootOption)) { + ImageInfo->LoadOptionsSize = BootOption->OptionalDataSize; + ImageInfo->LoadOptions = BootOption->OptionalData; + } // // Clean to NULL because the image is loaded directly from the firmwares boot manager. @@ -2231,9 +2255,7 @@ EfiBootManagerRefreshAllBootOption ( for (Index = 0; Index < NvBootOptionCount; Index++) { if (((DevicePathType (NvBootOptions[Index].FilePath) != BBS_DEVICE_PATH) || (DevicePathSubType (NvBootOptions[Index].FilePath) != BBS_BBS_DP) - ) && - (NvBootOptions[Index].OptionalDataSize == sizeof (EFI_GUID)) && - CompareGuid ((EFI_GUID *) NvBootOptions[Index].OptionalData, &mBmAutoCreateBootOptionGuid) + ) && BmIsAutoCreateBootOption (&NvBootOptions[Index]) ) { // // Only check those added by BDS -- 2.39.5