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>
This commit is contained in:
Ming Huang 2019-03-19 20:59:13 +08:00 committed by Hao Wu
parent c606f47291
commit 6c27a4d337
1 changed files with 3 additions and 0 deletions

View File

@ -1069,6 +1069,9 @@ BmExpandMediaDevicePath (
// //
Status = gBS->HandleProtocol (Handle, &gEfiBlockIoProtocolGuid, (VOID **) &BlockIo); Status = gBS->HandleProtocol (Handle, &gEfiBlockIoProtocolGuid, (VOID **) &BlockIo);
ASSERT_EFI_ERROR (Status); ASSERT_EFI_ERROR (Status);
if (EFI_ERROR (Status)) {
return NULL;
}
Buffer = AllocatePool (BlockIo->Media->BlockSize); Buffer = AllocatePool (BlockIo->Media->BlockSize);
if (Buffer != NULL) { if (Buffer != NULL) {
BlockIo->ReadBlocks ( BlockIo->ReadBlocks (