mirror of https://github.com/acidanthera/audk.git
MdeModulePkg: Variable: Update PCR[7] measure for new TCG spec
Measure DBT into PCR[7] when it is updated between initial measure and ExitBootService. Measure "SecureBoot" change after PK update. Spec version : TCG PC Client PFP 00.37. http://www.trustedcomputinggroup.org/wp-content/uploads/PC-ClientSpecific_Platform_Profile_for_TPM_2p0_Systems_v21.pdf Cc: Star Zeng <star.zeng@intel.com> Cc: Yao Jiewen <jiewen.yao@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chao Zhang <chao.b.zhang@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com> Reviewed-by: Yao Jiewen <jiewen.yao@intel.com>
This commit is contained in:
parent
1404e3a150
commit
dc9bd6ed28
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
Measure TrEE required variable.
|
||||
|
||||
Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2013 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
|
@ -36,8 +36,16 @@ VARIABLE_TYPE mVariableType[] = {
|
|||
{EFI_KEY_EXCHANGE_KEY_NAME, &gEfiGlobalVariableGuid},
|
||||
{EFI_IMAGE_SECURITY_DATABASE, &gEfiImageSecurityDatabaseGuid},
|
||||
{EFI_IMAGE_SECURITY_DATABASE1, &gEfiImageSecurityDatabaseGuid},
|
||||
{EFI_IMAGE_SECURITY_DATABASE2, &gEfiImageSecurityDatabaseGuid},
|
||||
};
|
||||
|
||||
//
|
||||
// "SecureBoot" may update following PK Del/Add
|
||||
// Cache its value to detect value update
|
||||
//
|
||||
UINT8 *mSecureBootVarData = NULL;
|
||||
UINTN mSecureBootVarDataSize = 0;
|
||||
|
||||
/**
|
||||
This function will return if this variable is SecureBootPolicy Variable.
|
||||
|
||||
|
@ -251,5 +259,77 @@ SecureBootHook (
|
|||
FreePool (VariableData);
|
||||
}
|
||||
|
||||
//
|
||||
// "SecureBoot" is 8bit & read-only. It can only be changed according to PK update
|
||||
//
|
||||
if ((StrCmp (VariableName, EFI_PLATFORM_KEY_NAME) == 0) &&
|
||||
CompareGuid (VendorGuid, &gEfiGlobalVariableGuid)) {
|
||||
Status = InternalGetVariable (
|
||||
EFI_SECURE_BOOT_MODE_NAME,
|
||||
&gEfiGlobalVariableGuid,
|
||||
&VariableData,
|
||||
&VariableDataSize
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// If PK update is successful. "SecureBoot" shall always exist ever since variable write service is ready
|
||||
//
|
||||
ASSERT(mSecureBootVarData != NULL);
|
||||
|
||||
if (CompareMem(mSecureBootVarData, VariableData, VariableDataSize) != 0) {
|
||||
FreePool(mSecureBootVarData);
|
||||
mSecureBootVarData = VariableData;
|
||||
mSecureBootVarDataSize = VariableDataSize;
|
||||
|
||||
DEBUG((DEBUG_INFO, "%s variable updated according to PK change. Remeasure the value!\n", EFI_SECURE_BOOT_MODE_NAME));
|
||||
Status = MeasureVariable (
|
||||
EFI_SECURE_BOOT_MODE_NAME,
|
||||
&gEfiGlobalVariableGuid,
|
||||
mSecureBootVarData,
|
||||
mSecureBootVarDataSize
|
||||
);
|
||||
DEBUG ((DEBUG_INFO, "MeasureBootPolicyVariable - %r\n", Status));
|
||||
} else {
|
||||
//
|
||||
// "SecureBoot" variable is not changed
|
||||
//
|
||||
FreePool(VariableData);
|
||||
}
|
||||
}
|
||||
|
||||
return ;
|
||||
}
|
||||
|
||||
/**
|
||||
Some Secure Boot Policy Variable may update following other variable changes(SecureBoot follows PK change, etc).
|
||||
Record their initial State when variable write service is ready.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
RecordSecureBootPolicyVarData(
|
||||
VOID
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
|
||||
//
|
||||
// Record initial "SecureBoot" variable value.
|
||||
// It is used to detect SecureBoot variable change in SecureBootHook.
|
||||
//
|
||||
Status = InternalGetVariable (
|
||||
EFI_SECURE_BOOT_MODE_NAME,
|
||||
&gEfiGlobalVariableGuid,
|
||||
(VOID **)&mSecureBootVarData,
|
||||
&mSecureBootVarDataSize
|
||||
);
|
||||
if (EFI_ERROR(Status)) {
|
||||
//
|
||||
// Read could fail when Auth Variable solution is not supported
|
||||
//
|
||||
DEBUG((DEBUG_INFO, "RecordSecureBootPolicyVarData GetVariable %s Status %x\n", EFI_SECURE_BOOT_MODE_NAME, Status));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
and volatile storage space and install variable architecture protocol.
|
||||
|
||||
Copyright (C) 2013, Red Hat, Inc.
|
||||
Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||
(C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
|
@ -31,6 +31,17 @@ EDKII_VAR_CHECK_PROTOCOL mVarCheck = { VarCheckRegis
|
|||
VarCheckVariablePropertySet,
|
||||
VarCheckVariablePropertyGet };
|
||||
|
||||
/**
|
||||
Some Secure Boot Policy Variable may update following other variable changes(SecureBoot follows PK change, etc).
|
||||
Record their initial State when variable write service is ready.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
RecordSecureBootPolicyVarData(
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Return TRUE if ExitBootServices () has been called.
|
||||
|
||||
|
@ -414,6 +425,12 @@ FtwNotificationEvent (
|
|||
DEBUG ((DEBUG_ERROR, "Variable write service initialization failed. Status = %r\n", Status));
|
||||
}
|
||||
|
||||
//
|
||||
// Some Secure Boot Policy Var (SecureBoot, etc) updates following other
|
||||
// Secure Boot Policy Variable change. Record their initial value.
|
||||
//
|
||||
RecordSecureBootPolicyVarData();
|
||||
|
||||
//
|
||||
// Install the Variable Write Architectural protocol.
|
||||
//
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
# This external input must be validated carefully to avoid security issues such as
|
||||
# buffer overflow or integer overflow.
|
||||
#
|
||||
# Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
|
||||
# Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||
# This program and the accompanying materials
|
||||
# are licensed and made available under the terms and conditions of the BSD License
|
||||
# which accompanies this distribution. The full text of the license may be found at
|
||||
|
@ -94,6 +94,9 @@
|
|||
## SOMETIMES_PRODUCES ## Variable:L"PlatformLang"
|
||||
## SOMETIMES_CONSUMES ## Variable:L"Lang"
|
||||
## SOMETIMES_PRODUCES ## Variable:L"Lang"
|
||||
## SOMETIMES_CONSUMES ## Variable:L"PK"
|
||||
## SOMETIMES_CONSUMES ## Variable:L"KEK"
|
||||
## SOMETIMES_CONSUMES ## Variable:L"SecureBoot"
|
||||
gEfiGlobalVariableGuid
|
||||
|
||||
gEfiMemoryOverwriteControlDataGuid ## SOMETIMES_CONSUMES ## Variable:L"MemoryOverwriteRequestControl"
|
||||
|
@ -108,8 +111,9 @@
|
|||
## SOMETIMES_PRODUCES ## Variable:L"VarErrorFlag"
|
||||
gEdkiiVarErrorFlagGuid
|
||||
|
||||
## SOMETIMES_CONSUMES ## Variable:L"DB"
|
||||
## SOMETIMES_CONSUMES ## Variable:L"DBX"
|
||||
## SOMETIMES_CONSUMES ## Variable:L"db"
|
||||
## SOMETIMES_CONSUMES ## Variable:L"dbx"
|
||||
## SOMETIMES_CONSUMES ## Variable:L"dbt"
|
||||
gEfiImageSecurityDatabaseGuid
|
||||
|
||||
[Pcd]
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
InitCommunicateBuffer() is really function to check the variable data size.
|
||||
|
||||
Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
|
@ -70,6 +70,17 @@ SecureBootHook (
|
|||
IN EFI_GUID *VendorGuid
|
||||
);
|
||||
|
||||
/**
|
||||
Some Secure Boot Policy Variable may update following other variable changes(SecureBoot follows PK change, etc).
|
||||
Record their initial State when variable write service is ready.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
RecordSecureBootPolicyVarData(
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Acquires lock only at boot time. Simply returns at runtime.
|
||||
|
||||
|
@ -1079,6 +1090,12 @@ SmmVariableWriteReady (
|
|||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// Some Secure Boot Policy Var (SecureBoot, etc) updates following other
|
||||
// Secure Boot Policy Variable change. Record their initial value.
|
||||
//
|
||||
RecordSecureBootPolicyVarData();
|
||||
|
||||
Status = gBS->InstallProtocolInterface (
|
||||
&mHandle,
|
||||
&gEfiVariableWriteArchProtocolGuid,
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
# may not be modified without authorization. If platform fails to protect these resources,
|
||||
# the authentication service provided in this driver will be broken, and the behavior is undefined.
|
||||
#
|
||||
# Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
# Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||
# This program and the accompanying materials
|
||||
# are licensed and made available under the terms and conditions of the BSD License
|
||||
# which accompanies this distribution. The full text of the license may be found at
|
||||
|
@ -81,8 +81,9 @@
|
|||
## SOMETIMES_CONSUMES ## Variable:L"SecureBoot"
|
||||
gEfiGlobalVariableGuid
|
||||
|
||||
## SOMETIMES_CONSUMES ## Variable:L"DB"
|
||||
## SOMETIMES_CONSUMES ## Variable:L"DBX"
|
||||
## SOMETIMES_CONSUMES ## Variable:L"db"
|
||||
## SOMETIMES_CONSUMES ## Variable:L"dbx"
|
||||
## SOMETIMES_CONSUMES ## Variable:L"dbt"
|
||||
gEfiImageSecurityDatabaseGuid
|
||||
|
||||
[Depex]
|
||||
|
|
Loading…
Reference in New Issue