mirror of https://github.com/acidanthera/audk.git
SecurityPkg/OpalPassword: Fix "Enable Feature" Menu disappear issue
https://bugzilla.tianocore.org/show_bug.cgi?id=1782 After change behavior to send BlockSid command at EndOfDxe point, check device ownership command will return un-authority error, it finally caused opal driver can't show "Enable Feature" menu. Update the code logic to send detect device ownership command before send BlockSID command. Signed-off-by: Eric Dong <eric.dong@intel.com> Reviewed-by: Hao A Wu <hao.a.wu@intel.com>
This commit is contained in:
parent
539a6c9318
commit
46e696088a
|
@ -458,6 +458,11 @@ SendBlockSidCommand (
|
||||||
DEBUG ((DEBUG_ERROR, "OpalBlockSid fail\n"));
|
DEBUG ((DEBUG_ERROR, "OpalBlockSid fail\n"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Record BlockSID command has been sent.
|
||||||
|
//
|
||||||
|
Itr->OpalDisk.SentBlockSID = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
Itr = Itr->Next;
|
Itr = Itr->Next;
|
||||||
|
@ -2204,6 +2209,12 @@ ProcessOpalRequest (
|
||||||
ProcessOpalRequestEnableFeature (Dev, L"Enable Feature:");
|
ProcessOpalRequestEnableFeature (Dev, L"Enable Feature:");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Update Device ownership.
|
||||||
|
// Later BlockSID command may block the update.
|
||||||
|
//
|
||||||
|
OpalDiskUpdateOwnerShip (&Dev->OpalDisk);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -143,6 +143,7 @@ typedef struct {
|
||||||
UINT8 Password[OPAL_MAX_PASSWORD_SIZE];
|
UINT8 Password[OPAL_MAX_PASSWORD_SIZE];
|
||||||
|
|
||||||
UINT32 EstimateTimeCost;
|
UINT32 EstimateTimeCost;
|
||||||
|
BOOLEAN SentBlockSID; // Check whether BlockSid command has been sent.
|
||||||
} OPAL_DISK;
|
} OPAL_DISK;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -1215,6 +1215,40 @@ OpalDiskInitialize (
|
||||||
return OpalDiskUpdateStatus (&Dev->OpalDisk);
|
return OpalDiskUpdateStatus (&Dev->OpalDisk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Update the device ownship
|
||||||
|
|
||||||
|
@param OpalDisk The Opal device.
|
||||||
|
|
||||||
|
@retval EFI_SUCESS Get ownership success.
|
||||||
|
@retval EFI_ACCESS_DENIED Has send BlockSID command, can't change ownership.
|
||||||
|
@retval EFI_INVALID_PARAMETER Not get Msid info before get ownership info.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
OpalDiskUpdateOwnerShip (
|
||||||
|
OPAL_DISK *OpalDisk
|
||||||
|
)
|
||||||
|
{
|
||||||
|
OPAL_SESSION Session;
|
||||||
|
|
||||||
|
if (OpalDisk->MsidLength == 0) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (OpalDisk->SentBlockSID) {
|
||||||
|
return EFI_ACCESS_DENIED;
|
||||||
|
}
|
||||||
|
|
||||||
|
ZeroMem(&Session, sizeof(Session));
|
||||||
|
Session.Sscp = OpalDisk->Sscp;
|
||||||
|
Session.MediaId = OpalDisk->MediaId;
|
||||||
|
Session.OpalBaseComId = OpalDisk->OpalBaseComId;
|
||||||
|
|
||||||
|
OpalDisk->Owner = OpalUtilDetermineOwnership(&Session, OpalDisk->Msid, OpalDisk->MsidLength);
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Update the device info.
|
Update the device info.
|
||||||
|
|
||||||
|
@ -1223,6 +1257,7 @@ OpalDiskInitialize (
|
||||||
@retval EFI_SUCESS Initialize the device success.
|
@retval EFI_SUCESS Initialize the device success.
|
||||||
@retval EFI_DEVICE_ERROR Get info from device failed.
|
@retval EFI_DEVICE_ERROR Get info from device failed.
|
||||||
@retval EFI_INVALID_PARAMETER Not get Msid info before get ownership info.
|
@retval EFI_INVALID_PARAMETER Not get Msid info before get ownership info.
|
||||||
|
@retval EFI_ACCESS_DENIED Has send BlockSID command, can't change ownership.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
|
@ -1243,15 +1278,6 @@ OpalDiskUpdateStatus (
|
||||||
return EFI_DEVICE_ERROR;
|
return EFI_DEVICE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (OpalDisk->MsidLength == 0) {
|
return OpalDiskUpdateOwnerShip (OpalDisk);
|
||||||
return EFI_INVALID_PARAMETER;
|
|
||||||
} else {
|
|
||||||
//
|
|
||||||
// Base on the Msid info to get the ownership, so Msid info must get first.
|
|
||||||
//
|
|
||||||
OpalDisk->Owner = OpalUtilDetermineOwnership(&Session, OpalDisk->Msid, OpalDisk->MsidLength);
|
|
||||||
}
|
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -357,4 +357,19 @@ OpalDiskInitialize (
|
||||||
IN OPAL_DRIVER_DEVICE *Dev
|
IN OPAL_DRIVER_DEVICE *Dev
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Update the device ownership
|
||||||
|
|
||||||
|
@param OpalDisk The Opal device.
|
||||||
|
|
||||||
|
@retval EFI_SUCESS Get ownership success.
|
||||||
|
@retval EFI_ACCESS_DENIED Has send BlockSID command, can't change ownership.
|
||||||
|
@retval EFI_INVALID_PARAMETER Not get Msid info before get ownership info.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
OpalDiskUpdateOwnerShip (
|
||||||
|
OPAL_DISK *OpalDisk
|
||||||
|
);
|
||||||
|
|
||||||
#endif // _HII_H_
|
#endif // _HII_H_
|
||||||
|
|
Loading…
Reference in New Issue