SecurityPkg OpalPasswordDxe: Check BlockSid capability before send command.

Not all opal device support BlockSid feature. So Add
code logic to check the capability before send BlockSid
command.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Feng Tian <feng.tian@intel.com>
This commit is contained in:
Eric Dong 2016-04-22 10:59:34 +08:00 committed by Liming Gao
parent 8d3d84508f
commit be08755355
1 changed files with 10 additions and 13 deletions

View File

@ -388,14 +388,11 @@ ReadyToBootCallback (
{ {
EFI_STATUS Status; EFI_STATUS Status;
OPAL_DRIVER_DEVICE* Itr; OPAL_DRIVER_DEVICE* Itr;
UINT8 Count;
TCG_RESULT Result; TCG_RESULT Result;
OPAL_EXTRA_INFO_VAR OpalExtraInfo; OPAL_EXTRA_INFO_VAR OpalExtraInfo;
UINTN DataSize; UINTN DataSize;
OPAL_SESSION Session; OPAL_SESSION Session;
Count = 0;
gBS->CloseEvent (Event); gBS->CloseEvent (Event);
DataSize = sizeof (OPAL_EXTRA_INFO_VAR); DataSize = sizeof (OPAL_EXTRA_INFO_VAR);
@ -415,21 +412,21 @@ ReadyToBootCallback (
// Send BlockSID command to each Opal disk // Send BlockSID command to each Opal disk
// //
Itr = mOpalDriver.DeviceList; Itr = mOpalDriver.DeviceList;
Count = 0;
while (Itr != NULL) { while (Itr != NULL) {
ZeroMem(&Session, sizeof(Session)); if (Itr->OpalDisk.SupportedAttributes.BlockSid) {
Session.Sscp = Itr->OpalDisk.Sscp; ZeroMem(&Session, sizeof(Session));
Session.MediaId = Itr->OpalDisk.MediaId; Session.Sscp = Itr->OpalDisk.Sscp;
Session.OpalBaseComId = Itr->OpalDisk.OpalBaseComId; Session.MediaId = Itr->OpalDisk.MediaId;
Session.OpalBaseComId = Itr->OpalDisk.OpalBaseComId;
Result = OpalBlockSid (&Session, TRUE); // HardwareReset must always be TRUE Result = OpalBlockSid (&Session, TRUE); // HardwareReset must always be TRUE
if (Result != TcgResultSuccess) { if (Result != TcgResultSuccess) {
DEBUG ((DEBUG_ERROR, "OpalBlockSid fail\n")); DEBUG ((DEBUG_ERROR, "OpalBlockSid fail\n"));
break; break;
}
} }
Itr = Itr->Next; Itr = Itr->Next;
Count++;
} }
} }
} }