Skip to content

Commit

Permalink
SecurityPkg/OpalPassword: Fix "Enable Feature" Menu disappear issue
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reviewed-by: Hao A Wu <[email protected]>
  • Loading branch information
ydong10 committed May 9, 2019
1 parent 539a6c9 commit 46e6960
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 10 deletions.
11 changes: 11 additions & 0 deletions SecurityPkg/Tcg/Opal/OpalPassword/OpalDriver.c
Original file line number Diff line number Diff line change
Expand Up @@ -458,6 +458,11 @@ SendBlockSidCommand (
DEBUG ((DEBUG_ERROR, "OpalBlockSid fail\n"));
break;
}

//
// Record BlockSID command has been sent.
//
Itr->OpalDisk.SentBlockSID = TRUE;
}

Itr = Itr->Next;
Expand Down Expand Up @@ -2204,6 +2209,12 @@ ProcessOpalRequest (
ProcessOpalRequestEnableFeature (Dev, L"Enable Feature:");
}

//
// Update Device ownership.
// Later BlockSID command may block the update.
//
OpalDiskUpdateOwnerShip (&Dev->OpalDisk);

break;
}

Expand Down
1 change: 1 addition & 0 deletions SecurityPkg/Tcg/Opal/OpalPassword/OpalDriver.h
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ typedef struct {
UINT8 Password[OPAL_MAX_PASSWORD_SIZE];

UINT32 EstimateTimeCost;
BOOLEAN SentBlockSID; // Check whether BlockSid command has been sent.
} OPAL_DISK;

//
Expand Down
46 changes: 36 additions & 10 deletions SecurityPkg/Tcg/Opal/OpalPassword/OpalHii.c
Original file line number Diff line number Diff line change
Expand Up @@ -1215,6 +1215,40 @@ OpalDiskInitialize (
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.
Expand All @@ -1223,6 +1257,7 @@ OpalDiskInitialize (
@retval EFI_SUCESS Initialize the device success.
@retval EFI_DEVICE_ERROR Get info from device failed.
@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
Expand All @@ -1243,15 +1278,6 @@ OpalDiskUpdateStatus (
return EFI_DEVICE_ERROR;
}

if (OpalDisk->MsidLength == 0) {
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;
return OpalDiskUpdateOwnerShip (OpalDisk);
}

Expand Down
15 changes: 15 additions & 0 deletions SecurityPkg/Tcg/Opal/OpalPassword/OpalHii.h
Original file line number Diff line number Diff line change
Expand Up @@ -357,4 +357,19 @@ OpalDiskInitialize (
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_

0 comments on commit 46e6960

Please sign in to comment.