Vlv2TbltDevicePkg/PlatformBootManager: Add capsule/recovery handling.

1) Add capsule and recovery boot path handling in platform BDS.
2) Add check if the platform is using default test key for capsule.
Produce PcdTestKeyUsed to indicate if there is any
test key used in current BIOS, such as recovery key,
or capsule update key.
Then the generic UI may consume this PCD to show warning information.

Cc: David Wei <david.wei@intel.com>
Cc: Feng Tian <feng.tian@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Chao Zhang <chao.b.zhang@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jiewen Yao <jiewen.yao@intel.com>
Reviewed-by: David Wei <david.wei@intel.com>
This commit is contained in:
Jiewen Yao 2016-09-21 11:50:09 +08:00
parent 7a0a32f163
commit 1ed0b254a2
2 changed files with 83 additions and 5 deletions

View File

@ -1872,9 +1872,9 @@ PlatformBdsPolicyBehavior (
PlatformBdsConnectConsole (gPlatformConsole);
PlatformBdsDiagnostics (EXTENSIVE, FALSE, BaseMemoryTest);
DEBUG((EFI_D_INFO, "ProcessCapsules Before EndOfDxe......\n"));
DEBUG((DEBUG_INFO, "ProcessCapsules Before EndOfDxe......\n"));
ProcessCapsules ();
DEBUG((EFI_D_INFO, "ProcessCapsules Done\n"));
DEBUG((DEBUG_INFO, "ProcessCapsules Done\n"));
//
// Close boot script and install ready to lock
@ -1901,9 +1901,9 @@ PlatformBdsPolicyBehavior (
EsrtManagement->SyncEsrtFmp();
}
DEBUG((EFI_D_INFO, "ProcessCapsules After ConnectAll......\n"));
DEBUG((DEBUG_INFO, "ProcessCapsules After ConnectAll......\n"));
ProcessCapsules();
DEBUG((EFI_D_INFO, "ProcessCapsules Done\n"));
DEBUG((DEBUG_INFO, "ProcessCapsules Done\n"));
break;
case BOOT_IN_RECOVERY_MODE:
@ -2411,6 +2411,12 @@ ShowProgressHotKey (
EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL Color;
UINT32 GpioValue;
CHAR16 *TmpStr1;
CHAR16 *TmpStr2;
CHAR16 *TmpStr3;
UINTN TmpStrSize;
VOID *Buffer;
UINTN Size;
if (TimeoutDefault == 0) {
return EFI_TIMEOUT;
@ -2434,10 +2440,76 @@ ShowProgressHotKey (
SetMem (&Background, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0x0);
SetMem (&Color, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0xff);
TmpStr2 = NULL;
TmpStr3 = NULL;
//
// Check if the platform is using test key.
//
Status = GetSectionFromAnyFv(
PcdGetPtr(PcdEdkiiRsa2048Sha256TestPublicKeyFileGuid),
EFI_SECTION_RAW,
0,
&Buffer,
&Size
);
if (!EFI_ERROR(Status)) {
if ((Size == PcdGetSize(PcdRsa2048Sha256PublicKeyBuffer)) &&
(CompareMem(Buffer, PcdGetPtr(PcdRsa2048Sha256PublicKeyBuffer), Size) == 0)) {
TmpStr2 = L"WARNING: Recovery Test Key is used.\r\n";
if (DebugAssertEnabled()) {
DEBUG ((DEBUG_INFO, "\n\nWARNING: Recovery Test Key is used.\n"));
} else {
SerialPortWrite((UINT8 *)"\n\nWARNING: Recovery Test Key is used.", sizeof("\n\nWARNING: Recovery Test Key is used."));
}
PcdSetBoolS(PcdTestKeyUsed, TRUE);
}
FreePool(Buffer);
}
Status = GetSectionFromAnyFv(
PcdGetPtr(PcdEdkiiPkcs7TestPublicKeyFileGuid),
EFI_SECTION_RAW,
0,
&Buffer,
&Size
);
if (!EFI_ERROR(Status)) {
if ((Size == PcdGetSize(PcdPkcs7CertBuffer)) &&
(CompareMem(Buffer, PcdGetPtr(PcdPkcs7CertBuffer), Size) == 0)) {
TmpStr3 = L"WARNING: Capsule Test Key is used.\r\n";
if (DebugAssertEnabled()) {
DEBUG ((DEBUG_INFO, "\n\nWARNING: Capsule Test Key is used.\r\n"));
} else {
SerialPortWrite((UINT8 *)"\n\nWARNING: Capsule Test Key is used.", sizeof("\n\nWARNING: Capsule Test Key is used."));
}
PcdSetBoolS(PcdTestKeyUsed, TRUE);
}
FreePool(Buffer);
}
//
// Clear the progress status bar first
//
TmpStr = L"Start boot option, Press <F2> or <DEL> to enter setup page.";
TmpStr1 = L"Start boot option, Press <F2> or <DEL> to enter setup page.\r\n";
TmpStrSize = StrSize(TmpStr1);
if (TmpStr2 != NULL) {
TmpStrSize += StrSize(TmpStr2);
}
if (TmpStr3 != NULL) {
TmpStrSize += StrSize(TmpStr3);
}
TmpStr = AllocatePool (TmpStrSize);
if (TmpStr == NULL) {
TmpStr = TmpStr1;
} else {
StrCpyS(TmpStr, TmpStrSize/sizeof(CHAR16), TmpStr1);
if (TmpStr2 != NULL) {
StrCatS(TmpStr, TmpStrSize/sizeof(CHAR16), TmpStr2);
}
if (TmpStr3 != NULL) {
StrCatS(TmpStr, TmpStrSize/sizeof(CHAR16), TmpStr3);
}
}
PlatformBdsShowProgress (Foreground, Background, TmpStr, Color, 0, 0);
TimeoutRemain = TimeoutDefault;

View File

@ -49,6 +49,7 @@
ShellPkg/ShellPkg.dec
CryptoPkg/CryptoPkg.dec
SecurityPkg/SecurityPkg.dec
SignedCapsulePkg/SignedCapsulePkg.dec
[LibraryClasses]
DxeServicesTableLib
@ -102,6 +103,11 @@
gEfiEndOfDxeEventGroupGuid
[Pcd]
gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiRsa2048Sha256TestPublicKeyFileGuid
gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiPkcs7TestPublicKeyFileGuid
gEfiSecurityPkgTokenSpaceGuid.PcdRsa2048Sha256PublicKeyBuffer
gEfiSecurityPkgTokenSpaceGuid.PcdPkcs7CertBuffer
gEfiMdeModulePkgTokenSpaceGuid.PcdTestKeyUsed
gPlatformModuleTokenSpaceGuid.PcdFlashFvRecovery2Base
gPlatformModuleTokenSpaceGuid.PcdFlashFvMainBase
gPlatformModuleTokenSpaceGuid.PcdFlashFvRecoveryBase