MdeModulePkg/UefiBootManagerLib: Initialize Handle before using it
BmExpandMediaDevicePath contains a bug that it uses the uninitialized Handle. Since the function is called when the Handle supports BlockIo or SimpleFileSystem, when there is no SimpleFileSystem installed on the Handle, BlockIo is *guaranteed* to be installed on the Handle. The fix initializes the Handle by locating the BlockIo protocol from the device path. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Cc: Jeff Fan <jeff.fan@intel.com> Reviewed-by: Sunny Wang <sunnywang@hpe.com>
This commit is contained in:
@ -991,9 +991,13 @@ BmExpandMediaDevicePath (
|
|||||||
return FileBuffer;
|
return FileBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Status = gBS->LocateDevicePath (&gEfiBlockIoProtocolGuid, &TempDevicePath, &Handle);
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
//
|
//
|
||||||
// For device boot option only pointing to the removable device handle,
|
// For device boot option only pointing to the removable device handle,
|
||||||
// should make sure all its children handles (its child partion or media handles) are created and connected.
|
// should make sure all its children handles (its child partion or media handles)
|
||||||
|
// are created and connected.
|
||||||
//
|
//
|
||||||
gBS->ConnectController (Handle, NULL, NULL, TRUE);
|
gBS->ConnectController (Handle, NULL, NULL, TRUE);
|
||||||
|
|
||||||
@ -1004,8 +1008,6 @@ BmExpandMediaDevicePath (
|
|||||||
// returned. After the Block IO protocol is reinstalled, subsequent
|
// returned. After the Block IO protocol is reinstalled, subsequent
|
||||||
// Block IO read/write will success.
|
// Block IO read/write will success.
|
||||||
//
|
//
|
||||||
Status = gBS->LocateDevicePath (&gEfiBlockIoProtocolGuid, &TempDevicePath, &Handle);
|
|
||||||
ASSERT_EFI_ERROR (Status);
|
|
||||||
Status = gBS->HandleProtocol (Handle, &gEfiBlockIoProtocolGuid, (VOID **) &BlockIo);
|
Status = gBS->HandleProtocol (Handle, &gEfiBlockIoProtocolGuid, (VOID **) &BlockIo);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
Buffer = AllocatePool (BlockIo->Media->BlockSize);
|
Buffer = AllocatePool (BlockIo->Media->BlockSize);
|
||||||
|
Reference in New Issue
Block a user