TpmTestingPkg: Add InputChannelLib

Adds a new library class (InputChannelLib) that allows the TPM replay
event log to be passed through a platform-specific mechanism.

Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
This commit is contained in:
Michael Kubacki 2023-11-06 08:09:41 -05:00
Родитель 07533b74f4
Коммит f56ffd8214
11 изменённых файлов: 112 добавлений и 8 удалений

Просмотреть файл

@ -0,0 +1,36 @@
/** @file
TPM Event Log Input Channel Library
Allows a TPM replay log to be passed through a custom interface.
Copyright (c) Microsoft Corporation.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef INPUT_CHANNEL_LIB_H
#define INPUT_CHANNEL_LIB_H
#include <Guid/TpmReplayEventLog.h>
/**
Retrieves a TPM Replay Event Log through a custom interface.
@param[out] ReplayEventLog A pointer to a pointer to the buffer to hold the event log data.
@param[out] ReplayEventLogSize The size of the data placed in the buffer.
@retval EFI_SUCCESS The TPM Replay event log was returned successfully.
@retval EFI_INVALID_PARAMETER A pointer argument given is NULL.
@retval EFI_UNSUPPORTED The function is not implemented yet. The arguments are not used.
@retval EFI_COMPROMISED_DATA The event log data found is not valid.
@retval EFI_NOT_FOUND The event log data was not found. The input channel is ignored in this case.
**/
EFI_STATUS
EFIAPI
GetReplayEventLogFromCustomInterface (
OUT VOID **ReplayEventLog,
OUT UINTN *ReplayEventLogSize
);
#endif

Просмотреть файл

@ -0,0 +1,33 @@
/** @file
A null instance of the Input Channel Library.
Copyright (c) Microsoft Corporation.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <Uefi.h>
#include <Library/InputChannelLib.h>
/**
Retrieves a TPM Replay Event Log through a custom interface.
@param[out] ReplayEventLog A pointer to a pointer to the buffer to hold the event log data.
@param[out] ReplayEventLogSize The size of the data placed in the buffer.
@retval EFI_SUCCESS The TPM Replay event log was returned successfully.
@retval EFI_INVALID_PARAMETER A pointer argument given is NULL.
@retval EFI_UNSUPPORTED The function is not implemented yet. The arguments are not used.
@retval EFI_COMPROMISED_DATA The event log data found is not valid.
@retval EFI_NOT_FOUND The event log data was not found. The input channel is ignored in this case.
**/
EFI_STATUS
EFIAPI
GetReplayEventLogFromCustomInterface (
OUT VOID **ReplayEventLog,
OUT UINTN *ReplayEventLogSize
)
{
return EFI_NOT_FOUND;
}

Просмотреть файл

@ -0,0 +1,24 @@
## @file
# A null instance of the Input Channel Library.
#
# Copyright (c) Microsoft Corporation.
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = BaseInputChannelLibNull
FILE_GUID = F35B1671-08BC-4231-9CEB-A08E809E32FF
MODULE_TYPE = BASE
VERSION_STRING = 1.0
LIBRARY_CLASS = InputChannelLib
[Packages]
MdePkg/MdePkg.dec
SecurityPkg/SecurityPkg.dec
TpmTestingPkg/TpmTestingPkg.dec
[Sources]
BaseInputChannelLibNull.c

Просмотреть файл

@ -8,10 +8,10 @@
**/
#include <PiPei.h>
#include <Guid/TpmReplayEventLog.h>
#include <Library/DebugLib.h>
#include <Library/PeiServicesLib.h>
#include "../TpmReplayEventLog.h"
#include "TpmReplayInputChannelInternal.h"
/**

Просмотреть файл

@ -8,9 +8,10 @@
**/
#include <Uefi.h>
#include <Guid/TpmReplayEventLog.h>
#include <Library/DebugLib.h>
#include <Library/InputChannelLib.h>
#include "../TpmReplayEventLog.h"
#include "TpmReplayInputChannel.h"
#include "TpmReplayInputChannelInternal.h"
@ -48,10 +49,20 @@ GetReplayEventLog (
goto Done;
}
// Second priority: FFS in the FW image
// Second priority: Custom interface
Status = GetReplayEventLogFromCustomInterface (&ReplayEventLogData, &ReplayEventLogDataSize);
if (!EFI_ERROR (Status)) {
DEBUG ((DEBUG_INFO, "[%a] - Using TPM replay event log from a custom interface.\n", __func__));
goto Done;
} else if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) {
DEBUG ((DEBUG_ERROR, "[%a] - TPM replay event log from custom interface failed - %r.\n", __func__, Status));
}
// Third priority: FFS in the FW image
Status = GetTpmReplayEventLogFfsFile (&ReplayEventLogData, &ReplayEventLogDataSize);
ASSERT (Status == EFI_SUCCESS || Status == EFI_NOT_FOUND);
if (!EFI_ERROR (Status)) {
DEBUG ((DEBUG_INFO, "[%a] - Using TPM replay event log from the firmware flash image.\n", __func__));
goto Done;
}

Просмотреть файл

@ -10,7 +10,7 @@
#ifndef TPM_REPLAY_INPUT_CHANNEL_H_
#define TPM_REPLAY_INPUT_CHANNEL_H_
#include "../TpmReplayEventLog.h"
#include <Guid/TpmReplayEventLog.h>
/**
Retrieves a TPM Replay Event Log from the highest priority input channel.

Просмотреть файл

@ -10,7 +10,7 @@
#ifndef TPM_REPLAY_INPUT_CHANNEL_INTERNAL_H_
#define TPM_REPLAY_INPUT_CHANNEL_INTERNAL_H_
#include "../TpmReplayEventLog.h"
#include <Guid/TpmReplayEventLog.h>
/**
Retrieves a TPM Replay Event Log from a FFS file.

Просмотреть файл

@ -8,12 +8,12 @@
**/
#include <PiPei.h>
#include <Guid/TpmReplayEventLog.h>
#include <Library/DebugLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/PeiServicesLib.h>
#include <Ppi/ReadOnlyVariable2.h>
#include "../TpmReplayEventLog.h"
#include "TpmReplayInputChannelInternal.h"
/**

Просмотреть файл

@ -20,7 +20,6 @@
ENTRY_POINT = TpmReplayPeiEntryPoint
[Sources]
../TpmReplayEventLog.h
../TpmReplayReportingManager.c
../TpmReplayReportingManager.h
../TpmReplayTcg.c
@ -51,6 +50,7 @@
DebugLib
FvMeasurementExclusionLib
HobLib
InputChannelLib
IoLib
MemoryAllocationLib
PcdLib

Просмотреть файл

@ -15,6 +15,7 @@
#include <PiPei.h>
#include <Guid/TcgEventHob.h>
#include <Guid/TpmReplayEventLog.h>
#include <IndustryStandard/Tpm2Acpi.h> // For locality code
#include <IndustryStandard/TpmPtp.h> // For locality code
#include <Library/BaseLib.h>
@ -32,7 +33,6 @@
#include <TpmReplayConfig.h>
#include "../InputChannel/TpmReplayInputChannel.h"
#include "../TpmReplayEventLog.h"
#include "../TpmReplayReportingManager.h"
#include "../TpmReplayTcg.h"
#include "../TpmReplayTcgRegs.h"