/** @file
Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
typedef struct {
CHAR16 *Name;
EFI_GUID *Guid;
UINT8 ExpectedSize;
UINT8 ExpectedData;
} VARIABLE_LIST;
VARIABLE_LIST mUefiSecureBootVariable[] = {
{EFI_PLATFORM_KEY_NAME, &gEfiGlobalVariableGuid},
{EFI_KEY_EXCHANGE_KEY_NAME, &gEfiGlobalVariableGuid},
{EFI_IMAGE_SECURITY_DATABASE, &gEfiImageSecurityDatabaseGuid},
{EFI_IMAGE_SECURITY_DATABASE1, &gEfiImageSecurityDatabaseGuid},
};
VARIABLE_LIST mUefiSecureBootModeVariable[] = {
{EFI_SECURE_BOOT_MODE_NAME, &gEfiGlobalVariableGuid, sizeof(UINT8), 1},
{EFI_SETUP_MODE_NAME, &gEfiGlobalVariableGuid, sizeof(UINT8), 0},
};
EFI_STATUS
EFIAPI
TestPointCheckUefiSecureBoot (
VOID
)
{
VOID *Variable;
UINTN Size;
UINTN Index;
EFI_STATUS Status;
EFI_STATUS ReturnStatus;
DEBUG ((DEBUG_INFO, "==== TestPointCheckUefiSecureBoot - Enter\n"));
ReturnStatus = EFI_SUCCESS;
for (Index = 0; Index < sizeof(mUefiSecureBootVariable)/sizeof(mUefiSecureBootVariable[0]); Index++) {
Status = GetVariable2 (mUefiSecureBootVariable[Index].Name, mUefiSecureBootVariable[Index].Guid, &Variable, &Size);
if(Variable == NULL) {
return EFI_NOT_FOUND;
}
if (EFI_ERROR(Status)) {
DEBUG ((DEBUG_ERROR, "Variable - %S not found\n", mUefiSecureBootVariable[Index].Name));
ReturnStatus = Status;
TestPointLibAppendErrorString (
PLATFORM_TEST_POINT_ROLE_PLATFORM_IBV,
NULL,
TEST_POINT_BYTE5_READY_TO_BOOT_UEFI_SECURE_BOOT_ENABLED_ERROR_CODE \
TEST_POINT_READY_TO_BOOT \
TEST_POINT_BYTE5_READY_TO_BOOT_UEFI_SECURE_BOOT_ENABLED_ERROR_STRING
);
} else {
FreePool (Variable);
}
}
for (Index = 0; Index < sizeof(mUefiSecureBootModeVariable)/sizeof(mUefiSecureBootModeVariable[0]); Index++) {
Status = GetVariable2 (mUefiSecureBootModeVariable[Index].Name, mUefiSecureBootModeVariable[Index].Guid, &Variable, &Size);
if(Variable == NULL) {
return EFI_NOT_FOUND;
}
if (EFI_ERROR(Status)) {
DEBUG ((DEBUG_ERROR, "Variable - %S not found\n", mUefiSecureBootModeVariable[Index].Name));
ReturnStatus = Status;
TestPointLibAppendErrorString (
PLATFORM_TEST_POINT_ROLE_PLATFORM_IBV,
NULL,
TEST_POINT_BYTE5_READY_TO_BOOT_UEFI_SECURE_BOOT_ENABLED_ERROR_CODE \
TEST_POINT_READY_TO_BOOT \
TEST_POINT_BYTE5_READY_TO_BOOT_UEFI_SECURE_BOOT_ENABLED_ERROR_STRING
);
} else {
if ((Size != mUefiSecureBootModeVariable[Index].ExpectedSize) ||
(*(UINT8 *)Variable != mUefiSecureBootModeVariable[Index].ExpectedData)) {
DEBUG ((DEBUG_ERROR, "Variable - %S is not expected (0x%x)\n", mUefiSecureBootModeVariable[Index].Name, *(UINT8 *)Variable));
ReturnStatus = EFI_SECURITY_VIOLATION;
TestPointLibAppendErrorString (
PLATFORM_TEST_POINT_ROLE_PLATFORM_IBV,
NULL,
TEST_POINT_BYTE5_READY_TO_BOOT_UEFI_SECURE_BOOT_ENABLED_ERROR_CODE \
TEST_POINT_READY_TO_BOOT \
TEST_POINT_BYTE5_READY_TO_BOOT_UEFI_SECURE_BOOT_ENABLED_ERROR_STRING
);
}
FreePool (Variable);
}
}
DEBUG ((DEBUG_INFO, "==== TestPointCheckUefiSecureBoot - Exit\n"));
return ReturnStatus;
}