3c79777cd6
The new kernel secdata v1 stores the last read EC hash, and reboots the device during EC software sync when that hash didn't match the currently active hash on the EC (this is used with TPM_CR50 to support EC-EFS2 and pretty much a no-op for other devices). Generally, of course the whole point of secdata is always that it persists across reboots, but with MOCK_SECDATA we can't do that. Previously we always happened to somewhat get away with presenting freshly-reinitialized data for MOCK_SECDATA on every boot, but with the EC hash feature in secdata v1, that would cause a reboot loop. The simplest solution is to just pretend we're a secdata v0 device when using MOCK_SECDATA. This was encountered on using a firmware built with MOCK_SECDATA but had EC software sync enabled. BUG=b:187843114 BRANCH=None TEST=`USE=mocktpm cros build-ap -b keeby`; Flash keeby device, verify that DUT does not continuously reboot with EC software sync enabled. Signed-off-by: Aseda Aboagye <aaboagye@google.com> Change-Id: Id8e81afcddadf27d9eec274f7f85ff1520315aaa Reviewed-on: https://review.coreboot.org/c/coreboot/+/54304 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Julius Werner <jwerner@chromium.org>
71 lines
1.9 KiB
C
71 lines
1.9 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause */
|
|
|
|
/*
|
|
* Functions for querying, manipulating and locking rollback indices
|
|
* stored in the TPM NVRAM.
|
|
*/
|
|
|
|
#include <security/tpm/tspi.h>
|
|
#include <vb2_api.h>
|
|
|
|
#include "antirollback.h"
|
|
|
|
vb2_error_t vb2ex_tpm_clear_owner(struct vb2_context *ctx)
|
|
{
|
|
return VB2_SUCCESS;
|
|
}
|
|
|
|
vb2_error_t antirollback_read_space_firmware(struct vb2_context *ctx)
|
|
{
|
|
vb2api_secdata_firmware_create(ctx);
|
|
return VB2_SUCCESS;
|
|
}
|
|
|
|
vb2_error_t antirollback_write_space_firmware(struct vb2_context *ctx)
|
|
{
|
|
return VB2_SUCCESS;
|
|
}
|
|
|
|
vb2_error_t antirollback_read_space_kernel(struct vb2_context *ctx)
|
|
{
|
|
/*
|
|
* The new kernel secdata v1 stores the last read EC hash, and reboots the
|
|
* device during EC software sync when that hash didn't match the currently
|
|
* active hash on the EC (this is used with TPM_CR50 to support EC-EFS2 and
|
|
* pretty much a no-op for other devices). Generally, of course the whole
|
|
* point of secdata is always that it persists across reboots, but with
|
|
* MOCK_SECDATA we can't do that. Previously we always happened to somewhat
|
|
* get away with presenting freshly-reinitialized data for MOCK_SECDATA on
|
|
* every boot, but with the EC hash feature in secdata v1, that would cause
|
|
* a reboot loop. The simplest solution is to just pretend we're a secdata
|
|
* v0 device when using MOCK_SECDATA.
|
|
*/
|
|
vb2api_secdata_kernel_create_v0(ctx);
|
|
return VB2_SUCCESS;
|
|
}
|
|
|
|
vb2_error_t antirollback_write_space_kernel(struct vb2_context *ctx)
|
|
{
|
|
return VB2_SUCCESS;
|
|
}
|
|
|
|
vb2_error_t antirollback_lock_space_firmware(void)
|
|
{
|
|
return VB2_SUCCESS;
|
|
}
|
|
|
|
vb2_error_t antirollback_lock_space_mrc_hash(uint32_t index)
|
|
{
|
|
return VB2_SUCCESS;
|
|
}
|
|
|
|
vb2_error_t antirollback_read_space_mrc_hash(uint32_t index, uint8_t *data, uint32_t size)
|
|
{
|
|
return VB2_SUCCESS;
|
|
}
|
|
|
|
vb2_error_t antirollback_write_space_mrc_hash(uint32_t index, const uint8_t *data,
|
|
uint32_t size)
|
|
{
|
|
return VB2_SUCCESS;
|
|
}
|