diff options
author | Ruiyu Ni <ruiyu.ni@intel.com> | 2015-11-30 03:08:49 +0000 |
---|---|---|
committer | niruiyu <niruiyu@Edk2> | 2015-11-30 03:08:49 +0000 |
commit | 404bd44294da1222bd9a00658456af5f9ea5dd7f (patch) | |
tree | 46e949dafe275948bfd3b39ec67dfac3cd675a18 | |
parent | 81438fe8d0fc63f9bc9fcee0113baf6bd395f29c (diff) | |
download | edk2-404bd44294da1222bd9a00658456af5f9ea5dd7f.tar.gz edk2-404bd44294da1222bd9a00658456af5f9ea5dd7f.tar.bz2 edk2-404bd44294da1222bd9a00658456af5f9ea5dd7f.zip |
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 <ruiyu.ni@intel.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19007 6f19259b-4bc3-4df7-8a09-765794883524
-rw-r--r-- | MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c | 32 |
1 files 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 @@ -53,6 +53,28 @@ EfiBootManagerRegisterLegacyBootSupport ( }
/**
+ 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.
@param DevicePath The bootable device Path to check
@@ -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
|