diff options
author | Ming Huang <ming.huang@linaro.org> | 2019-03-19 20:59:13 +0800 |
---|---|---|
committer | Hao Wu <hao.a.wu@intel.com> | 2019-03-21 09:09:43 +0800 |
commit | 6c27a4d337d0034cecf9f2c05d1f20c342d41e01 (patch) | |
tree | c5106fbe2e371d087493d200ea776f3792d00b43 /MdeModulePkg | |
parent | c606f47291e40664bbb368e49c779039443ab566 (diff) | |
download | edk2-6c27a4d337d0034cecf9f2c05d1f20c342d41e01.tar.gz edk2-6c27a4d337d0034cecf9f2c05d1f20c342d41e01.tar.bz2 edk2-6c27a4d337d0034cecf9f2c05d1f20c342d41e01.zip |
MdeModulePkg/UefiBootManangerLib: Fix exception issue
The system environment: virtual-CDROM(USB interface) via BMC, insert a
iso file to CDROM, like ubuntu-18.04.1-server-arm64.iso, change CDROM
to first boot option.
With release version bios, disconnecting CDROM when boot to
"1 seconds left, Press Esc or F2 to enter Setup"
then system will get a exception.
The root cause is the EFI_BLOCK_IO_PROTOCOL for UsbMass will be uninstalled
in this situation after print some transfer error. The status will be
invalid parameter. This line will get a exception for BlockIo not point
to right address:
AllocatePool (BlockIo->Media->BlockSize)
So, here need to judge the status after ASSERT_EFI_ERROR.
The Bugzilla tracker for this:
https://bugzilla.tianocore.org/show_bug.cgi?id=1631
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ming Huang <ming.huang@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
Reviewed-by: Hao Wu <hao.a.wu@intel.com>
Diffstat (limited to 'MdeModulePkg')
-rw-r--r-- | MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c index 4ce83ce22d..0535cd7335 100644 --- a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c @@ -1069,6 +1069,9 @@ BmExpandMediaDevicePath ( //
Status = gBS->HandleProtocol (Handle, &gEfiBlockIoProtocolGuid, (VOID **) &BlockIo);
ASSERT_EFI_ERROR (Status);
+ if (EFI_ERROR (Status)) {
+ return NULL;
+ }
Buffer = AllocatePool (BlockIo->Media->BlockSize);
if (Buffer != NULL) {
BlockIo->ReadBlocks (
|