Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions ccel/replay.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,14 @@ import (
// trusted. Users can establish trust in RTMR values by either calling
// client.ReadRTMRs() themselves or by verifying the values via a RTMR quote.
func ReplayAndExtract(acpiTableFile []byte, rawEventLog []byte, rtmrBank register.RTMRBank, opts extract.Opts) (*pb.FirmwareLogState, error) {
table, err := parseCCELACPITable(acpiTableFile)
if err != nil {
return nil, fmt.Errorf("failed to parse CCEL ACPI Table file: %v", err)
}
if table.CCType != TDX {
return nil, fmt.Errorf("only TDX Confidential Computing event logs are supported: received %v", table.CCType)
if !opts.SkipACPITableCheck {
table, err := parseCCELACPITable(acpiTableFile)
if err != nil {
return nil, fmt.Errorf("failed to parse CCEL ACPI Table file: %v", err)
}
if table.CCType != TDX {
return nil, fmt.Errorf("only TDX Confidential Computing event logs are supported: received %v", table.CCType)
}
}

cryptoHash, err := rtmrBank.CryptoHash()
Expand Down
11 changes: 10 additions & 1 deletion ccel/replay_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ func TestReplayAndExtract(t *testing.T) {
opts: extract.Opts{Loader: extract.GRUB},
wantErr: true,
},
{
el: COS113TDX,
opts: extract.Opts{Loader: extract.GRUB, SkipACPITableCheck: true},
},
}
for _, tt := range tests {
t.Run(tt.el.fname+strconv.FormatBool(tt.wantErr), func(t *testing.T) {
Expand All @@ -55,7 +59,12 @@ func TestReplayAndExtract(t *testing.T) {
t.Fatal(err)
}

_, err = ReplayAndExtract(tableBytes, elBytes, register.RTMRBank{RTMRs: tt.el.rtmrs}, tt.opts)
tb := tableBytes
if tt.opts.SkipACPITableCheck {
tb = []byte("invalid table")
}

_, err = ReplayAndExtract(tb, elBytes, register.RTMRBank{RTMRs: tt.el.rtmrs}, tt.opts)
if (err != nil) != tt.wantErr {
t.Errorf("ReplayAndExtract: got %v, wantErr %v", err, tt.wantErr)
}
Expand Down
2 changes: 2 additions & 0 deletions extract/extract.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ type Opts struct {
// "Calling EFI Application from Boot Option". This option is useful when
// the host platform loads EFI Applications unrelated to OS boot.
AllowEFIAppBeforeCallingEvent bool
// SkipACPITableCheck drops the check of the ACPI table.
SkipACPITableCheck bool
}

// FirmwareLogState extracts event info from a verified TCG PC Client event
Expand Down
Loading