SecurityPkg: AuthVariableLib: Cache UserPhysicalPresent in AuthVariableLib
AuthVariableLib is updated to cache the UserPhysicalPresent state to global variable. This avoids calling PlatformSecureLib during runtime and makes PhysicalPresent state consistent during one boot. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chao Zhang <chao.b.zhang@intel.com> Reviewed-by: Yao Jiewen <jiewen.yao@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com>
This commit is contained in:
parent
6b5677e1bb
commit
90fa53213e
|
@ -931,7 +931,7 @@ ProcessVarWithPk (
|
||||||
// Init state of Del. State may change due to secure check
|
// Init state of Del. State may change due to secure check
|
||||||
//
|
//
|
||||||
Del = FALSE;
|
Del = FALSE;
|
||||||
if ((InCustomMode() && UserPhysicalPresent()) || (mPlatformMode == SETUP_MODE && !IsPk)) {
|
if ((InCustomMode() && mUserPhysicalPresent) || (mPlatformMode == SETUP_MODE && !IsPk)) {
|
||||||
Payload = (UINT8 *) Data + AUTHINFO2_SIZE (Data);
|
Payload = (UINT8 *) Data + AUTHINFO2_SIZE (Data);
|
||||||
PayloadSize = DataSize - AUTHINFO2_SIZE (Data);
|
PayloadSize = DataSize - AUTHINFO2_SIZE (Data);
|
||||||
if (PayloadSize == 0) {
|
if (PayloadSize == 0) {
|
||||||
|
@ -1049,7 +1049,7 @@ ProcessVarWithKek (
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = EFI_SUCCESS;
|
Status = EFI_SUCCESS;
|
||||||
if (mPlatformMode == USER_MODE && !(InCustomMode() && UserPhysicalPresent())) {
|
if (mPlatformMode == USER_MODE && !(InCustomMode() && mUserPhysicalPresent)) {
|
||||||
//
|
//
|
||||||
// Time-based, verify against X509 Cert KEK.
|
// Time-based, verify against X509 Cert KEK.
|
||||||
//
|
//
|
||||||
|
@ -1204,7 +1204,7 @@ ProcessVariable (
|
||||||
&OrgVariableInfo
|
&OrgVariableInfo
|
||||||
);
|
);
|
||||||
|
|
||||||
if ((!EFI_ERROR (Status)) && IsDeleteAuthVariable (OrgVariableInfo.Attributes, Data, DataSize, Attributes) && UserPhysicalPresent()) {
|
if ((!EFI_ERROR (Status)) && IsDeleteAuthVariable (OrgVariableInfo.Attributes, Data, DataSize, Attributes) && mUserPhysicalPresent) {
|
||||||
//
|
//
|
||||||
// Allow the delete operation of common authenticated variable at user physical presence.
|
// Allow the delete operation of common authenticated variable at user physical presence.
|
||||||
//
|
//
|
||||||
|
@ -1222,7 +1222,7 @@ ProcessVariable (
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NeedPhysicallyPresent (VariableName, VendorGuid) && !UserPhysicalPresent()) {
|
if (NeedPhysicallyPresent (VariableName, VendorGuid) && !mUserPhysicalPresent) {
|
||||||
//
|
//
|
||||||
// This variable is protected, only physical present user could modify its value.
|
// This variable is protected, only physical present user could modify its value.
|
||||||
//
|
//
|
||||||
|
|
|
@ -128,6 +128,7 @@ extern UINT8 *mCertDbStore;
|
||||||
extern UINT32 mMaxCertDbSize;
|
extern UINT32 mMaxCertDbSize;
|
||||||
extern UINT32 mPlatformMode;
|
extern UINT32 mPlatformMode;
|
||||||
extern UINT8 mVendorKeyState;
|
extern UINT8 mVendorKeyState;
|
||||||
|
extern BOOLEAN mUserPhysicalPresent;
|
||||||
|
|
||||||
extern VOID *mHashCtx;
|
extern VOID *mHashCtx;
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,7 @@ UINT8 *mCertDbStore;
|
||||||
UINT32 mMaxCertDbSize;
|
UINT32 mMaxCertDbSize;
|
||||||
UINT32 mPlatformMode;
|
UINT32 mPlatformMode;
|
||||||
UINT8 mVendorKeyState;
|
UINT8 mVendorKeyState;
|
||||||
|
BOOLEAN mUserPhysicalPresent;
|
||||||
|
|
||||||
EFI_GUID mSignatureSupport[] = {EFI_CERT_SHA1_GUID, EFI_CERT_SHA256_GUID, EFI_CERT_RSA2048_GUID, EFI_CERT_X509_GUID};
|
EFI_GUID mSignatureSupport[] = {EFI_CERT_SHA1_GUID, EFI_CERT_SHA256_GUID, EFI_CERT_RSA2048_GUID, EFI_CERT_X509_GUID};
|
||||||
|
|
||||||
|
@ -435,6 +436,12 @@ AuthVariableLibInitialize (
|
||||||
AuthVarLibContextOut->AddressPointer = mAuthVarAddressPointer;
|
AuthVarLibContextOut->AddressPointer = mAuthVarAddressPointer;
|
||||||
AuthVarLibContextOut->AddressPointerCount = sizeof (mAuthVarAddressPointer) / sizeof (mAuthVarAddressPointer[0]);
|
AuthVarLibContextOut->AddressPointerCount = sizeof (mAuthVarAddressPointer) / sizeof (mAuthVarAddressPointer[0]);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Cache UserPhysicalPresent State.
|
||||||
|
// Platform should report PhysicalPresent before this point
|
||||||
|
//
|
||||||
|
mUserPhysicalPresent = UserPhysicalPresent();
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue