SecurityPkg/OpalPassword: Change send BlockSID policy

https://bugzilla.tianocore.org/show_bug.cgi?id=1782

Change Send BlockSID command time from ReadyToBoot to
EndOfDxe.

Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Hao A Wu <hao.a.wu@intel.com>
This commit is contained in:
Eric Dong 2018-12-10 14:55:25 +08:00
parent e0972cfc7d
commit 539a6c9318

View File

@ -424,6 +424,47 @@ BuildOpalDeviceInfo (
FreePool (S3InitDevices);
}
/**
Send BlockSid command if needed.
**/
VOID
SendBlockSidCommand (
VOID
)
{
OPAL_DRIVER_DEVICE *Itr;
TCG_RESULT Result;
OPAL_SESSION Session;
UINT32 PpStorageFlag;
PpStorageFlag = Tcg2PhysicalPresenceLibGetManagementFlags ();
if ((PpStorageFlag & TCG2_BIOS_STORAGE_MANAGEMENT_FLAG_ENABLE_BLOCK_SID) != 0) {
//
// Send BlockSID command to each Opal disk
//
Itr = mOpalDriver.DeviceList;
while (Itr != NULL) {
if (Itr->OpalDisk.SupportedAttributes.BlockSid) {
ZeroMem(&Session, sizeof(Session));
Session.Sscp = Itr->OpalDisk.Sscp;
Session.MediaId = Itr->OpalDisk.MediaId;
Session.OpalBaseComId = Itr->OpalDisk.OpalBaseComId;
DEBUG ((DEBUG_INFO, "OpalPassword: EndOfDxe point, send BlockSid command to device!\n"));
Result = OpalBlockSid (&Session, TRUE); // HardwareReset must always be TRUE
if (Result != TcgResultSuccess) {
DEBUG ((DEBUG_ERROR, "OpalBlockSid fail\n"));
break;
}
}
Itr = Itr->Next;
}
}
}
/**
Notification function of EFI_END_OF_DXE_EVENT_GROUP_GUID event group.
@ -475,6 +516,11 @@ OpalEndOfDxeEventNotify (
TmpDev = TmpDev->Next;
}
//
// Send BlockSid command if needed.
//
SendBlockSidCommand ();
DEBUG ((DEBUG_INFO, "%a() - exit\n", __FUNCTION__));
gBS->CloseEvent (Event);
@ -2262,53 +2308,6 @@ OpalDriverGetDeviceList(
return mOpalDriver.DeviceList;
}
/**
ReadyToBoot callback to send BlockSid command.
@param Event Pointer to this event
@param Context Event handler private Data
**/
VOID
EFIAPI
ReadyToBootCallback (
IN EFI_EVENT Event,
IN VOID *Context
)
{
OPAL_DRIVER_DEVICE *Itr;
TCG_RESULT Result;
OPAL_SESSION Session;
UINT32 PpStorageFlag;
gBS->CloseEvent (Event);
PpStorageFlag = Tcg2PhysicalPresenceLibGetManagementFlags ();
if ((PpStorageFlag & TCG2_BIOS_STORAGE_MANAGEMENT_FLAG_ENABLE_BLOCK_SID) != 0) {
//
// Send BlockSID command to each Opal disk
//
Itr = mOpalDriver.DeviceList;
while (Itr != NULL) {
if (Itr->OpalDisk.SupportedAttributes.BlockSid) {
ZeroMem(&Session, sizeof(Session));
Session.Sscp = Itr->OpalDisk.Sscp;
Session.MediaId = Itr->OpalDisk.MediaId;
Session.OpalBaseComId = Itr->OpalDisk.OpalBaseComId;
DEBUG ((DEBUG_INFO, "OpalPassword: ReadyToBoot point, send BlockSid command to device!\n"));
Result = OpalBlockSid (&Session, TRUE); // HardwareReset must always be TRUE
if (Result != TcgResultSuccess) {
DEBUG ((DEBUG_ERROR, "OpalBlockSid fail\n"));
break;
}
}
Itr = Itr->Next;
}
}
}
/**
Stop this Controller.
@ -2571,7 +2570,6 @@ EfiDriverEntryPoint(
)
{
EFI_STATUS Status;
EFI_EVENT ReadyToBootEvent;
EFI_EVENT EndOfDxeEvent;
Status = EfiLibInstallDriverBindingComponentName2 (
@ -2604,16 +2602,6 @@ EfiDriverEntryPoint(
);
ASSERT_EFI_ERROR (Status);
//
// register a ReadyToBoot event callback for sending BlockSid command
//
Status = EfiCreateEventReadyToBootEx (
TPL_CALLBACK,
ReadyToBootCallback,
(VOID *) &ImageHandle,
&ReadyToBootEvent
);
//
// Install Hii packages.
//