drivers/tpm: Make temp test value naming consistent
Make naming convention consistent across all functions return values. BUG=b:296439237 TEST=Boot to OS on Skyrim BRANCH=None Change-Id: If86805b39048800276ab90b7687644ec2a0d4bee Signed-off-by: Jon Murphy <jpmurphy@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/77536 Reviewed-by: Yu-Ping Wu <yupingso@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Karthik Ramasubramanian <kramasub@google.com> Reviewed-by: Eric Lai <eric_lai@quanta.corp-partner.google.com>
This commit is contained in:
parent
277db94ebb
commit
2460481025
|
@ -122,14 +122,14 @@ static int tpm_get_cap(uint32_t property, uint32_t *value)
|
|||
{
|
||||
TPMS_CAPABILITY_DATA cap_data;
|
||||
int i;
|
||||
uint32_t status;
|
||||
uint32_t rc;
|
||||
|
||||
if (!value)
|
||||
return -1;
|
||||
|
||||
status = tlcl_get_capability(TPM_CAP_TPM_PROPERTIES, property, 1, &cap_data);
|
||||
rc = tlcl_get_capability(TPM_CAP_TPM_PROPERTIES, property, 1, &cap_data);
|
||||
|
||||
if (status)
|
||||
if (rc)
|
||||
return -1;
|
||||
|
||||
for (i = 0 ; i < cap_data.data.tpmProperties.count; i++) {
|
||||
|
|
|
@ -132,7 +132,7 @@ static int cr50_i2c_write(uint8_t addr, const uint8_t *buffer, size_t len)
|
|||
static int process_reset(void)
|
||||
{
|
||||
struct stopwatch sw;
|
||||
int rv = 0;
|
||||
int rc = 0;
|
||||
uint8_t access;
|
||||
|
||||
/*
|
||||
|
@ -148,9 +148,9 @@ static int process_reset(void)
|
|||
const uint8_t mask =
|
||||
TPM_ACCESS_VALID | TPM_ACCESS_ACTIVE_LOCALITY;
|
||||
|
||||
rv = cr50_i2c_read(TPM_ACCESS(0),
|
||||
rc = cr50_i2c_read(TPM_ACCESS(0),
|
||||
&access, sizeof(access));
|
||||
if (rv || ((access & mask) == mask)) {
|
||||
if (rc || ((access & mask) == mask)) {
|
||||
/*
|
||||
* Don't bombard the chip with traffic, let it keep
|
||||
* processing the command.
|
||||
|
@ -165,7 +165,7 @@ static int process_reset(void)
|
|||
return 0;
|
||||
} while (!stopwatch_expired(&sw));
|
||||
|
||||
if (rv)
|
||||
if (rc)
|
||||
printk(BIOS_ERR, "Failed to read TPM\n");
|
||||
else
|
||||
printk(BIOS_ERR,
|
||||
|
|
|
@ -73,7 +73,7 @@ static const uint8_t crtm_version[] =
|
|||
|
||||
int mb_crtm(void)
|
||||
{
|
||||
int status = TPM_E_IOERROR;
|
||||
int rc = TPM_E_IOERROR;
|
||||
TCG_PCR_EVENT2_HDR tcgEventHdr;
|
||||
|
||||
/* Use FirmwareVersion string to represent CRTM version. */
|
||||
|
@ -84,13 +84,13 @@ int mb_crtm(void)
|
|||
tcgEventHdr.eventSize = sizeof(crtm_version);
|
||||
printk(BIOS_DEBUG, "%s: EventSize - %u\n", __func__, tcgEventHdr.eventSize);
|
||||
|
||||
status = mboot_hash_extend_log(0, (uint8_t *)crtm_version,
|
||||
rc = mboot_hash_extend_log(0, (uint8_t *)crtm_version,
|
||||
tcgEventHdr.eventSize, &tcgEventHdr,
|
||||
(uint8_t *)crtm_version);
|
||||
if (status) {
|
||||
printk(BIOS_DEBUG, "Measure CRTM Version returned 0x%x\n", status);
|
||||
if (rc) {
|
||||
printk(BIOS_DEBUG, "Measure CRTM Version returned 0x%x\n", rc);
|
||||
}
|
||||
|
||||
return status;
|
||||
return rc;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -34,11 +34,11 @@ static void mainboard_smbios_strings(struct device *dev, struct smbios_type11 *t
|
|||
|
||||
void mainboard_update_soc_chip_config(struct soc_intel_alderlake_config *config)
|
||||
{
|
||||
int ret;
|
||||
int rc;
|
||||
|
||||
ret = tlcl_lib_init();
|
||||
if (ret != VB2_SUCCESS) {
|
||||
printk(BIOS_ERR, "tlcl_lib_init() failed: 0x%x\n", ret);
|
||||
rc = tlcl_lib_init();
|
||||
if (rc != VB2_SUCCESS) {
|
||||
printk(BIOS_ERR, "tlcl_lib_init() failed: 0x%x\n", rc);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -14,11 +14,11 @@
|
|||
static void mainboard_update_soc_chip_config(void)
|
||||
{
|
||||
struct soc_intel_jasperlake_config *cfg = config_of_soc();
|
||||
int ret;
|
||||
int rc;
|
||||
|
||||
ret = tlcl_lib_init();
|
||||
if (ret != VB2_SUCCESS) {
|
||||
printk(BIOS_ERR, "tlcl_lib_init() failed: 0x%x\n", ret);
|
||||
rc = tlcl_lib_init();
|
||||
if (rc != VB2_SUCCESS) {
|
||||
printk(BIOS_ERR, "tlcl_lib_init() failed: 0x%x\n", rc);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -82,7 +82,7 @@ static void mainboard_enable(struct device *dev)
|
|||
|
||||
void mainboard_update_soc_chip_config(struct soc_intel_tigerlake_config *cfg)
|
||||
{
|
||||
int ret;
|
||||
int rc;
|
||||
if (!CONFIG(TPM_GOOGLE_CR50) || !CONFIG(SPI_TPM)) {
|
||||
/*
|
||||
* Negotiation of long interrupt pulses is only supported via SPI. I2C is only
|
||||
|
@ -93,9 +93,9 @@ void mainboard_update_soc_chip_config(struct soc_intel_tigerlake_config *cfg)
|
|||
return;
|
||||
}
|
||||
|
||||
ret = tlcl_lib_init();
|
||||
if (ret != VB2_SUCCESS) {
|
||||
printk(BIOS_ERR, "tlcl_lib_init() failed: 0x%x\n", ret);
|
||||
rc = tlcl_lib_init();
|
||||
if (rc != VB2_SUCCESS) {
|
||||
printk(BIOS_ERR, "tlcl_lib_init() failed: 0x%x\n", rc);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -192,11 +192,11 @@ int tspi_measure_cache_to_pcr(void)
|
|||
i = 0;
|
||||
while (!tpm_log_get(i++, &pcr, &digest_data, &digest_algo, &event_name)) {
|
||||
printk(BIOS_DEBUG, "TPM: Write digest for %s into PCR %d\n", event_name, pcr);
|
||||
int result = tlcl_extend(pcr, digest_data, digest_algo);
|
||||
if (result != TPM_SUCCESS) {
|
||||
int rc = tlcl_extend(pcr, digest_data, digest_algo);
|
||||
if (rc != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR,
|
||||
"TPM: Writing digest of %s into PCR failed with error %d\n",
|
||||
event_name, result);
|
||||
event_name, rc);
|
||||
return VB2_ERROR_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,49 +15,49 @@ static uint32_t tpm1_invoke_state_machine(void)
|
|||
{
|
||||
uint8_t disabled;
|
||||
uint8_t deactivated;
|
||||
uint32_t result = TPM_SUCCESS;
|
||||
uint32_t rc = TPM_SUCCESS;
|
||||
|
||||
/* Check that the TPM is enabled and activated. */
|
||||
result = tlcl_get_flags(&disabled, &deactivated, NULL);
|
||||
if (result != TPM_SUCCESS) {
|
||||
rc = tlcl_get_flags(&disabled, &deactivated, NULL);
|
||||
if (rc != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR, "TPM: Can't read capabilities.\n");
|
||||
return result;
|
||||
return rc;
|
||||
}
|
||||
|
||||
if (disabled) {
|
||||
printk(BIOS_INFO, "TPM: is disabled. Enabling...\n");
|
||||
|
||||
result = tlcl_set_enable();
|
||||
if (result != TPM_SUCCESS) {
|
||||
rc = tlcl_set_enable();
|
||||
if (rc != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR, "TPM: Can't set enabled state.\n");
|
||||
return result;
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
if (!!deactivated != CONFIG(TPM_DEACTIVATE)) {
|
||||
printk(BIOS_INFO,
|
||||
"TPM: Unexpected TPM deactivated state. Toggling...\n");
|
||||
result = tlcl_set_deactivated(!deactivated);
|
||||
if (result != TPM_SUCCESS) {
|
||||
rc = tlcl_set_deactivated(!deactivated);
|
||||
if (rc != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR,
|
||||
"TPM: Can't toggle deactivated state.\n");
|
||||
return result;
|
||||
return rc;
|
||||
}
|
||||
|
||||
deactivated = !deactivated;
|
||||
result = TPM_E_MUST_REBOOT;
|
||||
rc = TPM_E_MUST_REBOOT;
|
||||
}
|
||||
|
||||
return result;
|
||||
return rc;
|
||||
}
|
||||
#endif
|
||||
|
||||
static uint32_t tpm_setup_s3_helper(void)
|
||||
{
|
||||
uint32_t result;
|
||||
uint32_t rc;
|
||||
|
||||
result = tlcl_resume();
|
||||
switch (result) {
|
||||
rc = tlcl_resume();
|
||||
switch (rc) {
|
||||
case TPM_SUCCESS:
|
||||
break;
|
||||
|
||||
|
@ -67,25 +67,25 @@ static uint32_t tpm_setup_s3_helper(void)
|
|||
* in S3, so it's already initialized.
|
||||
*/
|
||||
printk(BIOS_INFO, "TPM: Already initialized.\n");
|
||||
result = TPM_SUCCESS;
|
||||
rc = TPM_SUCCESS;
|
||||
break;
|
||||
|
||||
default:
|
||||
printk(BIOS_ERR, "TPM: Resume failed (%#x).\n", result);
|
||||
printk(BIOS_ERR, "TPM: Resume failed (%#x).\n", rc);
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
return rc;
|
||||
}
|
||||
|
||||
static uint32_t tpm_setup_epilogue(uint32_t result)
|
||||
static uint32_t tpm_setup_epilogue(uint32_t rc)
|
||||
{
|
||||
if (result != TPM_SUCCESS)
|
||||
if (rc != TPM_SUCCESS)
|
||||
post_code(POSTCODE_TPM_FAILURE);
|
||||
else
|
||||
printk(BIOS_INFO, "TPM: setup succeeded\n");
|
||||
|
||||
return result;
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int tpm_is_setup;
|
||||
|
@ -135,12 +135,12 @@ static inline int tspi_tpm_is_setup(void)
|
|||
*/
|
||||
uint32_t tpm_setup(int s3flag)
|
||||
{
|
||||
uint32_t result;
|
||||
uint32_t rc;
|
||||
|
||||
result = tlcl_lib_init();
|
||||
if (result != TPM_SUCCESS) {
|
||||
rc = tlcl_lib_init();
|
||||
if (rc != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR, "TPM: Can't initialize.\n");
|
||||
return tpm_setup_epilogue(result);
|
||||
return tpm_setup_epilogue(rc);
|
||||
}
|
||||
|
||||
/* Handle special init for S3 resume path */
|
||||
|
@ -149,69 +149,69 @@ uint32_t tpm_setup(int s3flag)
|
|||
return tpm_setup_epilogue(tpm_setup_s3_helper());
|
||||
}
|
||||
|
||||
result = tlcl_startup();
|
||||
rc = tlcl_startup();
|
||||
if (CONFIG(TPM_STARTUP_IGNORE_POSTINIT)
|
||||
&& result == TPM_E_INVALID_POSTINIT) {
|
||||
&& rc == TPM_E_INVALID_POSTINIT) {
|
||||
printk(BIOS_DEBUG, "TPM: ignoring invalid POSTINIT\n");
|
||||
result = TPM_SUCCESS;
|
||||
rc = TPM_SUCCESS;
|
||||
}
|
||||
if (result != TPM_SUCCESS) {
|
||||
if (rc != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR, "TPM: Can't run startup command.\n");
|
||||
return tpm_setup_epilogue(result);
|
||||
return tpm_setup_epilogue(rc);
|
||||
}
|
||||
|
||||
result = tlcl_assert_physical_presence();
|
||||
if (result != TPM_SUCCESS) {
|
||||
rc = tlcl_assert_physical_presence();
|
||||
if (rc != TPM_SUCCESS) {
|
||||
/*
|
||||
* It is possible that the TPM was delivered with the physical
|
||||
* presence command disabled. This tries enabling it, then
|
||||
* tries asserting PP again.
|
||||
*/
|
||||
result = tlcl_physical_presence_cmd_enable();
|
||||
if (result != TPM_SUCCESS) {
|
||||
rc = tlcl_physical_presence_cmd_enable();
|
||||
if (rc != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR, "TPM: Can't enable physical presence command.\n");
|
||||
return tpm_setup_epilogue(result);
|
||||
return tpm_setup_epilogue(rc);
|
||||
}
|
||||
|
||||
result = tlcl_assert_physical_presence();
|
||||
if (result != TPM_SUCCESS) {
|
||||
rc = tlcl_assert_physical_presence();
|
||||
if (rc != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR, "TPM: Can't assert physical presence.\n");
|
||||
return tpm_setup_epilogue(result);
|
||||
return tpm_setup_epilogue(rc);
|
||||
}
|
||||
}
|
||||
|
||||
#if CONFIG(TPM1)
|
||||
result = tpm1_invoke_state_machine();
|
||||
rc = tpm1_invoke_state_machine();
|
||||
#endif
|
||||
if (CONFIG(TPM_MEASURED_BOOT))
|
||||
result = tspi_measure_cache_to_pcr();
|
||||
rc = tspi_measure_cache_to_pcr();
|
||||
|
||||
tpm_is_setup = 1;
|
||||
return tpm_setup_epilogue(result);
|
||||
return tpm_setup_epilogue(rc);
|
||||
}
|
||||
|
||||
uint32_t tpm_clear_and_reenable(void)
|
||||
{
|
||||
uint32_t result;
|
||||
uint32_t rc;
|
||||
|
||||
printk(BIOS_INFO, "TPM: Clear and re-enable\n");
|
||||
result = tlcl_force_clear();
|
||||
if (result != TPM_SUCCESS) {
|
||||
rc = tlcl_force_clear();
|
||||
if (rc != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR, "TPM: Can't initiate a force clear.\n");
|
||||
return result;
|
||||
return rc;
|
||||
}
|
||||
|
||||
#if CONFIG(TPM1)
|
||||
result = tlcl_set_enable();
|
||||
if (result != TPM_SUCCESS) {
|
||||
rc = tlcl_set_enable();
|
||||
if (rc != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR, "TPM: Can't set enabled state.\n");
|
||||
return result;
|
||||
return rc;
|
||||
}
|
||||
|
||||
result = tlcl_set_deactivated(0);
|
||||
if (result != TPM_SUCCESS) {
|
||||
rc = tlcl_set_deactivated(0);
|
||||
if (rc != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR, "TPM: Can't set deactivated state.\n");
|
||||
return result;
|
||||
return rc;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -221,24 +221,24 @@ uint32_t tpm_clear_and_reenable(void)
|
|||
uint32_t tpm_extend_pcr(int pcr, enum vb2_hash_algorithm digest_algo,
|
||||
const uint8_t *digest, size_t digest_len, const char *name)
|
||||
{
|
||||
uint32_t result;
|
||||
uint32_t rc;
|
||||
|
||||
if (!digest)
|
||||
return TPM_E_IOERROR;
|
||||
|
||||
if (tspi_tpm_is_setup()) {
|
||||
result = tlcl_lib_init();
|
||||
if (result != TPM_SUCCESS) {
|
||||
rc = tlcl_lib_init();
|
||||
if (rc != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR, "TPM: Can't initialize library.\n");
|
||||
return result;
|
||||
return rc;
|
||||
}
|
||||
|
||||
printk(BIOS_DEBUG, "TPM: Extending digest for `%s` into PCR %d\n", name, pcr);
|
||||
result = tlcl_extend(pcr, digest, digest_algo);
|
||||
if (result != TPM_SUCCESS) {
|
||||
rc = tlcl_extend(pcr, digest, digest_algo);
|
||||
if (rc != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR, "TPM: Extending hash for `%s` into PCR %d failed.\n",
|
||||
name, pcr);
|
||||
return result;
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -57,9 +57,9 @@ static inline int tpm_command_size(const uint8_t *buffer)
|
|||
/* Gets the code field of a TPM command. */
|
||||
static inline int tpm_command_code(const uint8_t *buffer)
|
||||
{
|
||||
uint32_t code;
|
||||
from_tpm_uint32(buffer + sizeof(uint16_t) + sizeof(uint32_t), &code);
|
||||
return code;
|
||||
uint32_t rc;
|
||||
from_tpm_uint32(buffer + sizeof(uint16_t) + sizeof(uint32_t), &rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* Gets the return code field of a TPM result. */
|
||||
|
@ -76,27 +76,27 @@ static uint32_t tlcl_send_receive_no_retry(const uint8_t *request,
|
|||
uint8_t *response, int max_length)
|
||||
{
|
||||
uint32_t response_length = max_length;
|
||||
uint32_t result;
|
||||
uint32_t rc;
|
||||
|
||||
result = tpm_send_receive(request, tpm_command_size(request),
|
||||
rc = tpm_send_receive(request, tpm_command_size(request),
|
||||
response, &response_length);
|
||||
if (result != 0) {
|
||||
if (rc != 0) {
|
||||
/* Communication with TPM failed, so response is garbage */
|
||||
VBDEBUG("TPM: command 0x%x send/receive failed: 0x%x\n",
|
||||
tpm_command_code(request), result);
|
||||
return result;
|
||||
tpm_command_code(request), rc);
|
||||
return rc;
|
||||
}
|
||||
/* Otherwise, use the result code from the response */
|
||||
result = tpm_return_code(response);
|
||||
rc = tpm_return_code(response);
|
||||
|
||||
/* TODO: add paranoia about returned response_length vs. max_length
|
||||
* (and possibly expected length from the response header). See
|
||||
* crosbug.com/17017 */
|
||||
|
||||
VBDEBUG("TPM: command 0x%x returned 0x%x\n",
|
||||
tpm_command_code(request), result);
|
||||
tpm_command_code(request), rc);
|
||||
|
||||
return result;
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* Sends a TPM command and gets a response. Returns 0 if success or the TPM
|
||||
|
@ -104,17 +104,17 @@ return result;
|
|||
uint32_t tlcl_send_receive(const uint8_t *request, uint8_t *response,
|
||||
int max_length)
|
||||
{
|
||||
uint32_t result = tlcl_send_receive_no_retry(request, response,
|
||||
uint32_t rc = tlcl_send_receive_no_retry(request, response,
|
||||
max_length);
|
||||
/* If the command fails because the self test has not completed, try it
|
||||
* again after attempting to ensure that the self test has completed. */
|
||||
if (result == TPM_E_NEEDS_SELFTEST || result == TPM_E_DOING_SELFTEST) {
|
||||
result = tlcl_continue_self_test();
|
||||
if (result != TPM_SUCCESS)
|
||||
return result;
|
||||
if (rc == TPM_E_NEEDS_SELFTEST || rc == TPM_E_DOING_SELFTEST) {
|
||||
rc = tlcl_continue_self_test();
|
||||
if (rc != TPM_SUCCESS)
|
||||
return rc;
|
||||
#if defined(TPM_BLOCKING_CONTINUESELFTEST) || defined(VB_RECOVERY_MODE)
|
||||
/* Retry only once */
|
||||
result = tlcl_send_receive_no_retry(request, response,
|
||||
rc = tlcl_send_receive_no_retry(request, response,
|
||||
max_length);
|
||||
#else
|
||||
/* This needs serious testing. The TPM specification says: "iii.
|
||||
|
@ -123,12 +123,12 @@ uint32_t tlcl_send_receive(const uint8_t *request, uint8_t *response,
|
|||
* ContinueSelfTest is non-blocking, how do we know that the
|
||||
* actions have completed other than trying again? */
|
||||
do {
|
||||
result = tlcl_send_receive_no_retry(request, response,
|
||||
rc = tlcl_send_receive_no_retry(request, response,
|
||||
max_length);
|
||||
} while (result == TPM_E_DOING_SELFTEST);
|
||||
} while (rc == TPM_E_DOING_SELFTEST);
|
||||
#endif
|
||||
}
|
||||
return result;
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* Sends a command and returns the error code. */
|
||||
|
@ -226,15 +226,15 @@ uint32_t tlcl_read(uint32_t index, void *data, uint32_t length)
|
|||
struct s_tpm_nv_read_cmd cmd;
|
||||
uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE];
|
||||
uint32_t result_length;
|
||||
uint32_t result;
|
||||
uint32_t rc;
|
||||
|
||||
VBDEBUG("TPM: %s(0x%x, %d)\n", __func__, index, length);
|
||||
memcpy(&cmd, &tpm_nv_read_cmd, sizeof(cmd));
|
||||
to_tpm_uint32(cmd.buffer + tpm_nv_read_cmd.index, index);
|
||||
to_tpm_uint32(cmd.buffer + tpm_nv_read_cmd.length, length);
|
||||
|
||||
result = tlcl_send_receive(cmd.buffer, response, sizeof(response));
|
||||
if (result == TPM_SUCCESS && length > 0) {
|
||||
rc = tlcl_send_receive(cmd.buffer, response, sizeof(response));
|
||||
if (rc == TPM_SUCCESS && length > 0) {
|
||||
uint8_t *nv_read_cursor = response + kTpmResponseHeaderLength;
|
||||
from_tpm_uint32(nv_read_cursor, &result_length);
|
||||
if (result_length > length)
|
||||
|
@ -243,7 +243,7 @@ uint32_t tlcl_read(uint32_t index, void *data, uint32_t length)
|
|||
memcpy(data, nv_read_cursor, result_length);
|
||||
}
|
||||
|
||||
return result;
|
||||
return rc;
|
||||
}
|
||||
|
||||
uint32_t tlcl_assert_physical_presence(void)
|
||||
|
@ -295,24 +295,24 @@ uint32_t tlcl_get_permanent_flags(TPM_PERMANENT_FLAGS *pflags)
|
|||
{
|
||||
uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE];
|
||||
uint32_t size;
|
||||
uint32_t result = tlcl_send_receive(tpm_getflags_cmd.buffer, response,
|
||||
uint32_t rc = tlcl_send_receive(tpm_getflags_cmd.buffer, response,
|
||||
sizeof(response));
|
||||
if (result != TPM_SUCCESS)
|
||||
return result;
|
||||
if (rc != TPM_SUCCESS)
|
||||
return rc;
|
||||
from_tpm_uint32(response + kTpmResponseHeaderLength, &size);
|
||||
if (size != sizeof(TPM_PERMANENT_FLAGS))
|
||||
return TPM_E_IOERROR;
|
||||
memcpy(pflags, response + kTpmResponseHeaderLength + sizeof(size),
|
||||
sizeof(TPM_PERMANENT_FLAGS));
|
||||
return result;
|
||||
return rc;
|
||||
}
|
||||
|
||||
uint32_t tlcl_get_flags(uint8_t *disable, uint8_t *deactivated,
|
||||
uint8_t *nvlocked)
|
||||
{
|
||||
TPM_PERMANENT_FLAGS pflags;
|
||||
uint32_t result = tlcl_get_permanent_flags(&pflags);
|
||||
if (result == TPM_SUCCESS) {
|
||||
uint32_t rc = tlcl_get_permanent_flags(&pflags);
|
||||
if (rc == TPM_SUCCESS) {
|
||||
if (disable)
|
||||
*disable = pflags.disable;
|
||||
if (deactivated)
|
||||
|
@ -322,7 +322,7 @@ uint32_t tlcl_get_flags(uint8_t *disable, uint8_t *deactivated,
|
|||
VBDEBUG("TPM: flags disable=%d, deactivated=%d, nvlocked=%d\n",
|
||||
pflags.disable, pflags.deactivated, pflags.nvLocked);
|
||||
}
|
||||
return result;
|
||||
return rc;
|
||||
}
|
||||
|
||||
uint32_t tlcl_set_global_lock(void)
|
||||
|
@ -352,16 +352,16 @@ uint32_t tlcl_get_permissions(uint32_t index, uint32_t *permissions)
|
|||
struct s_tpm_getpermissions_cmd cmd;
|
||||
uint8_t response[TPM_LARGE_ENOUGH_COMMAND_SIZE];
|
||||
uint8_t *nvdata;
|
||||
uint32_t result;
|
||||
uint32_t rc;
|
||||
uint32_t size;
|
||||
|
||||
memcpy(&cmd, &tpm_getpermissions_cmd, sizeof(cmd));
|
||||
to_tpm_uint32(cmd.buffer + tpm_getpermissions_cmd.index, index);
|
||||
result = tlcl_send_receive(cmd.buffer, response, sizeof(response));
|
||||
if (result != TPM_SUCCESS)
|
||||
return result;
|
||||
rc = tlcl_send_receive(cmd.buffer, response, sizeof(response));
|
||||
if (rc != TPM_SUCCESS)
|
||||
return rc;
|
||||
|
||||
nvdata = response + kTpmResponseHeaderLength + sizeof(size);
|
||||
from_tpm_uint32(nvdata + kNvDataPublicPermissionsOffset, permissions);
|
||||
return result;
|
||||
return rc;
|
||||
}
|
||||
|
|
|
@ -18,11 +18,11 @@
|
|||
printk(BIOS_INFO, "%s():%d: " format, __func__, __LINE__, ## args)
|
||||
|
||||
#define RETURN_ON_FAILURE(tpm_cmd) do { \
|
||||
uint32_t result_; \
|
||||
if ((result_ = (tpm_cmd)) != TPM_SUCCESS) { \
|
||||
uint32_t rc_; \
|
||||
if ((rc_ = (tpm_cmd)) != TPM_SUCCESS) { \
|
||||
VBDEBUG("Antirollback: %08x returned by " #tpm_cmd \
|
||||
"\n", (int)result_); \
|
||||
return result_; \
|
||||
"\n", (int)rc_); \
|
||||
return rc_; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
|
@ -51,17 +51,17 @@ uint32_t antirollback_read_space_kernel(struct vb2_context *ctx)
|
|||
}
|
||||
|
||||
uint8_t size = VB2_SECDATA_KERNEL_SIZE;
|
||||
uint32_t ret;
|
||||
uint32_t rc;
|
||||
|
||||
/* Start with the version 1.0 size used by all modern Cr50/Ti50 boards. */
|
||||
ret = tlcl_read(KERNEL_NV_INDEX, ctx->secdata_kernel, size);
|
||||
if (ret == TPM_E_RANGE) {
|
||||
rc = tlcl_read(KERNEL_NV_INDEX, ctx->secdata_kernel, size);
|
||||
if (rc == TPM_E_RANGE) {
|
||||
/* Fallback to version 0.2(minimum) size and re-read. */
|
||||
VBDEBUG("Antirollback: NV read out of range, trying min size\n");
|
||||
size = VB2_SECDATA_KERNEL_MIN_SIZE;
|
||||
ret = tlcl_read(KERNEL_NV_INDEX, ctx->secdata_kernel, size);
|
||||
rc = tlcl_read(KERNEL_NV_INDEX, ctx->secdata_kernel, size);
|
||||
}
|
||||
RETURN_ON_FAILURE(ret);
|
||||
RETURN_ON_FAILURE(rc);
|
||||
|
||||
if (vb2api_secdata_kernel_check(ctx, &size) == VB2_ERROR_SECDATA_KERNEL_INCOMPLETE)
|
||||
/* Re-read. vboot will run the check and handle errors. */
|
||||
|
@ -206,11 +206,11 @@ static uint32_t define_space(const char *name, uint32_t index, uint32_t length,
|
|||
const TPMA_NV nv_attributes,
|
||||
const uint8_t *nv_policy, size_t nv_policy_size)
|
||||
{
|
||||
uint32_t rv;
|
||||
uint32_t rc;
|
||||
|
||||
rv = tlcl_define_space(index, length, nv_attributes, nv_policy,
|
||||
rc = tlcl_define_space(index, length, nv_attributes, nv_policy,
|
||||
nv_policy_size);
|
||||
if (rv == TPM_E_NV_DEFINED) {
|
||||
if (rc == TPM_E_NV_DEFINED) {
|
||||
/*
|
||||
* Continue with writing: it may be defined, but not written
|
||||
* to. In that case a subsequent tlcl_read() would still return
|
||||
|
@ -220,10 +220,10 @@ static uint32_t define_space(const char *name, uint32_t index, uint32_t length,
|
|||
* in writing once again even if it was written already.
|
||||
*/
|
||||
VBDEBUG("%s: %s space already exists\n", __func__, name);
|
||||
rv = TPM_SUCCESS;
|
||||
rc = TPM_SUCCESS;
|
||||
}
|
||||
|
||||
return rv;
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* Nothing special in the TPM2 path yet. */
|
||||
|
@ -236,12 +236,12 @@ static uint32_t setup_space(const char *name, uint32_t index, const void *data,
|
|||
uint32_t length, const TPMA_NV nv_attributes,
|
||||
const uint8_t *nv_policy, size_t nv_policy_size)
|
||||
{
|
||||
uint32_t rv;
|
||||
uint32_t rc;
|
||||
|
||||
rv = define_space(name, index, length, nv_attributes, nv_policy,
|
||||
rc = define_space(name, index, length, nv_attributes, nv_policy,
|
||||
nv_policy_size);
|
||||
if (rv != TPM_SUCCESS)
|
||||
return rv;
|
||||
if (rc != TPM_SUCCESS)
|
||||
return rc;
|
||||
|
||||
return safe_write(index, data, length);
|
||||
}
|
||||
|
@ -291,7 +291,7 @@ static uint32_t set_mrc_hash_space(uint32_t index, const uint8_t *data)
|
|||
*/
|
||||
static uint32_t setup_zte_spaces(void)
|
||||
{
|
||||
uint32_t rv;
|
||||
uint32_t rc;
|
||||
uint64_t rma_bytes_counter_default = 0;
|
||||
uint8_t rma_sn_bits_default[16];
|
||||
uint8_t board_id_default[12];
|
||||
|
@ -302,47 +302,47 @@ static uint32_t setup_zte_spaces(void)
|
|||
memset(board_id_default, 0xFF, ARRAY_SIZE(board_id_default));
|
||||
|
||||
/* Set up RMA + SN Bits */
|
||||
rv = setup_space("RMA + SN Bits", ZTE_RMA_SN_BITS_INDEX,
|
||||
rc = setup_space("RMA + SN Bits", ZTE_RMA_SN_BITS_INDEX,
|
||||
rma_sn_bits_default, sizeof(rma_sn_bits_default),
|
||||
zte_attr,
|
||||
unsatisfiable_policy, sizeof(unsatisfiable_policy));
|
||||
if (rv != TPM_SUCCESS) {
|
||||
if (rc != TPM_SUCCESS) {
|
||||
VBDEBUG("%s: Failed to set up RMA + SN Bits space\n", __func__);
|
||||
return rv;
|
||||
return rc;
|
||||
}
|
||||
|
||||
rv = setup_space("Board ID", ZTE_BOARD_ID_NV_INDEX,
|
||||
rc = setup_space("Board ID", ZTE_BOARD_ID_NV_INDEX,
|
||||
board_id_default, sizeof(board_id_default),
|
||||
zte_attr,
|
||||
unsatisfiable_policy, sizeof(unsatisfiable_policy));
|
||||
if (rv != TPM_SUCCESS) {
|
||||
if (rc != TPM_SUCCESS) {
|
||||
VBDEBUG("%s: Failed to set up Board ID space\n", __func__);
|
||||
return rv;
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* Set up RMA Bytes counter */
|
||||
rv = define_space("RMA Bytes Counter", ZTE_RMA_BYTES_COUNTER_INDEX,
|
||||
rc = define_space("RMA Bytes Counter", ZTE_RMA_BYTES_COUNTER_INDEX,
|
||||
sizeof(rma_bytes_counter_default),
|
||||
zte_rma_bytes_attr,
|
||||
unsatisfiable_policy, sizeof(unsatisfiable_policy));
|
||||
if (rv != TPM_SUCCESS) {
|
||||
if (rc != TPM_SUCCESS) {
|
||||
VBDEBUG("%s: Failed to define RMA Bytes space\n", __func__);
|
||||
return rv;
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* Since the RMA counter has the BITS attribute, we need to call
|
||||
* TPM2_NV_SetBits() in order to initialize it.
|
||||
*/
|
||||
rv = tlcl_set_bits(ZTE_RMA_BYTES_COUNTER_INDEX,
|
||||
rc = tlcl_set_bits(ZTE_RMA_BYTES_COUNTER_INDEX,
|
||||
rma_bytes_counter_default);
|
||||
if (rv != TPM_SUCCESS) {
|
||||
if (rc != TPM_SUCCESS) {
|
||||
VBDEBUG("%s: Failed to init RMA Bytes counter space\n",
|
||||
__func__);
|
||||
return rv;
|
||||
return rc;
|
||||
}
|
||||
|
||||
return rv;
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -363,13 +363,17 @@ static uint32_t enterprise_rollback_create_space(void)
|
|||
|
||||
static uint32_t setup_widevine_counter_spaces(void)
|
||||
{
|
||||
uint32_t index, rv;
|
||||
uint32_t index, rc;
|
||||
|
||||
for (index = 0; index < NUM_WIDEVINE_COUNTERS; index++) {
|
||||
rv = define_space(WIDEVINE_COUNTER_NAME, WIDEVINE_COUNTER_NV_INDEX(index),
|
||||
WIDEVINE_COUNTER_SIZE, rw_orderly_counter_attributes, NULL, 0);
|
||||
if (rv != TPM_SUCCESS)
|
||||
return rv;
|
||||
rc = define_space(WIDEVINE_COUNTER_NAME,
|
||||
WIDEVINE_COUNTER_NV_INDEX(index),
|
||||
WIDEVINE_COUNTER_SIZE,
|
||||
rw_orderly_counter_attributes,
|
||||
NULL,
|
||||
0);
|
||||
if (rc != TPM_SUCCESS)
|
||||
return rc;
|
||||
}
|
||||
return TPM_SUCCESS;
|
||||
}
|
||||
|
@ -443,7 +447,7 @@ uint32_t antirollback_read_space_mrc_hash(uint32_t index, uint8_t *data, uint32_
|
|||
uint32_t antirollback_write_space_mrc_hash(uint32_t index, const uint8_t *data, uint32_t size)
|
||||
{
|
||||
uint8_t spc_data[HASH_NV_SIZE];
|
||||
uint32_t rv;
|
||||
uint32_t rc;
|
||||
|
||||
if (size != HASH_NV_SIZE) {
|
||||
VBDEBUG("TPM: Incorrect buffer size for hash idx 0x%x. "
|
||||
|
@ -452,8 +456,8 @@ uint32_t antirollback_write_space_mrc_hash(uint32_t index, const uint8_t *data,
|
|||
return TPM_E_WRITE_FAILURE;
|
||||
}
|
||||
|
||||
rv = read_space_mrc_hash(index, spc_data);
|
||||
if (rv == TPM_E_BADINDEX) {
|
||||
rc = read_space_mrc_hash(index, spc_data);
|
||||
if (rc == TPM_E_BADINDEX) {
|
||||
/*
|
||||
* If space is not defined already for hash, define
|
||||
* new space.
|
||||
|
@ -462,8 +466,8 @@ uint32_t antirollback_write_space_mrc_hash(uint32_t index, const uint8_t *data,
|
|||
return set_mrc_hash_space(index, data);
|
||||
}
|
||||
|
||||
if (rv != TPM_SUCCESS)
|
||||
return rv;
|
||||
if (rc != TPM_SUCCESS)
|
||||
return rc;
|
||||
|
||||
return safe_write(index, data, size);
|
||||
}
|
||||
|
@ -493,7 +497,7 @@ uint32_t antirollback_read_space_vbios_hash(uint8_t *data, uint32_t size)
|
|||
uint32_t antirollback_write_space_vbios_hash(const uint8_t *data, uint32_t size)
|
||||
{
|
||||
uint8_t spc_data[HASH_NV_SIZE];
|
||||
uint32_t rv;
|
||||
uint32_t rc;
|
||||
|
||||
if (size != HASH_NV_SIZE) {
|
||||
VBDEBUG("TPM: Incorrect buffer size for hash idx 0x%x. "
|
||||
|
@ -502,8 +506,8 @@ uint32_t antirollback_write_space_vbios_hash(const uint8_t *data, uint32_t size)
|
|||
return TPM_E_WRITE_FAILURE;
|
||||
}
|
||||
|
||||
rv = read_space_vbios_hash(spc_data);
|
||||
if (rv == TPM_E_BADINDEX) {
|
||||
rc = read_space_vbios_hash(spc_data);
|
||||
if (rc == TPM_E_BADINDEX) {
|
||||
/*
|
||||
* If space is not defined already for hash, define
|
||||
* new space.
|
||||
|
@ -513,8 +517,8 @@ uint32_t antirollback_write_space_vbios_hash(const uint8_t *data, uint32_t size)
|
|||
rw_space_attributes, NULL, 0);
|
||||
}
|
||||
|
||||
if (rv != TPM_SUCCESS)
|
||||
return rv;
|
||||
if (rc != TPM_SUCCESS)
|
||||
return rc;
|
||||
|
||||
return safe_write(VBIOS_CACHE_NV_INDEX, data, size);
|
||||
}
|
||||
|
@ -530,12 +534,12 @@ uint32_t antirollback_write_space_vbios_hash(const uint8_t *data, uint32_t size)
|
|||
|
||||
static uint32_t safe_write(uint32_t index, const void *data, uint32_t length)
|
||||
{
|
||||
uint32_t result = tlcl_write(index, data, length);
|
||||
if (result == TPM_E_MAXNVWRITES) {
|
||||
uint32_t rc = tlcl_write(index, data, length);
|
||||
if (rc == TPM_E_MAXNVWRITES) {
|
||||
RETURN_ON_FAILURE(tpm_clear_and_reenable());
|
||||
return tlcl_write(index, data, length);
|
||||
} else {
|
||||
return result;
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -547,26 +551,26 @@ static uint32_t safe_write(uint32_t index, const void *data, uint32_t length)
|
|||
*/
|
||||
static uint32_t safe_define_space(uint32_t index, uint32_t perm, uint32_t size)
|
||||
{
|
||||
uint32_t result = tlcl_define_space(index, perm, size);
|
||||
if (result == TPM_E_MAXNVWRITES) {
|
||||
uint32_t rc = tlcl_define_space(index, perm, size);
|
||||
if (rc == TPM_E_MAXNVWRITES) {
|
||||
RETURN_ON_FAILURE(tpm_clear_and_reenable());
|
||||
return tlcl_define_space(index, perm, size);
|
||||
} else {
|
||||
return result;
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
static uint32_t _factory_initialize_tpm(struct vb2_context *ctx)
|
||||
{
|
||||
TPM_PERMANENT_FLAGS pflags;
|
||||
uint32_t result;
|
||||
uint32_t rc;
|
||||
|
||||
vb2api_secdata_firmware_create(ctx);
|
||||
vb2api_secdata_kernel_create_v0(ctx);
|
||||
|
||||
result = tlcl_get_permanent_flags(&pflags);
|
||||
if (result != TPM_SUCCESS)
|
||||
return result;
|
||||
rc = tlcl_get_permanent_flags(&pflags);
|
||||
if (rc != TPM_SUCCESS)
|
||||
return rc;
|
||||
|
||||
/*
|
||||
* TPM may come from the factory without physical presence finalized.
|
||||
|
@ -630,7 +634,7 @@ uint32_t antirollback_lock_space_firmware(void)
|
|||
*/
|
||||
static uint32_t factory_initialize_tpm(struct vb2_context *ctx)
|
||||
{
|
||||
uint32_t result;
|
||||
uint32_t rc;
|
||||
|
||||
VBDEBUG("TPM: factory initialization\n");
|
||||
|
||||
|
@ -642,13 +646,13 @@ static uint32_t factory_initialize_tpm(struct vb2_context *ctx)
|
|||
* test---specifically the ones that set lifetime flags, and are only
|
||||
* executed once per physical TPM.
|
||||
*/
|
||||
result = tlcl_self_test_full();
|
||||
if (result != TPM_SUCCESS)
|
||||
return result;
|
||||
rc = tlcl_self_test_full();
|
||||
if (rc != TPM_SUCCESS)
|
||||
return rc;
|
||||
|
||||
result = _factory_initialize_tpm(ctx);
|
||||
if (result != TPM_SUCCESS)
|
||||
return result;
|
||||
rc = _factory_initialize_tpm(ctx);
|
||||
if (rc != TPM_SUCCESS)
|
||||
return rc;
|
||||
|
||||
/* _factory_initialize_tpm() writes initial secdata values to TPM
|
||||
immediately, so let vboot know that it's up to date now. */
|
||||
|
@ -662,15 +666,15 @@ static uint32_t factory_initialize_tpm(struct vb2_context *ctx)
|
|||
|
||||
uint32_t antirollback_read_space_firmware(struct vb2_context *ctx)
|
||||
{
|
||||
uint32_t rv;
|
||||
uint32_t rc;
|
||||
|
||||
rv = tlcl_read(FIRMWARE_NV_INDEX, ctx->secdata_firmware, VB2_SECDATA_FIRMWARE_SIZE);
|
||||
if (rv == TPM_E_BADINDEX) {
|
||||
rc = tlcl_read(FIRMWARE_NV_INDEX, ctx->secdata_firmware, VB2_SECDATA_FIRMWARE_SIZE);
|
||||
if (rc == TPM_E_BADINDEX) {
|
||||
/* This seems the first time we've run. Initialize the TPM. */
|
||||
VBDEBUG("TPM: Not initialized yet\n");
|
||||
RETURN_ON_FAILURE(factory_initialize_tpm(ctx));
|
||||
} else if (rv != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR, "TPM: Failed to read firmware space: %#x\n", rv);
|
||||
} else if (rc != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR, "TPM: Failed to read firmware space: %#x\n", rc);
|
||||
return TPM_E_CORRUPTED_STATE;
|
||||
}
|
||||
|
||||
|
@ -706,10 +710,10 @@ uint32_t antirollback_write_space_kernel(struct vb2_context *ctx)
|
|||
|
||||
vb2_error_t vb2ex_tpm_clear_owner(struct vb2_context *ctx)
|
||||
{
|
||||
uint32_t rv;
|
||||
uint32_t rc;
|
||||
printk(BIOS_INFO, "Clearing TPM owner\n");
|
||||
rv = tpm_clear_and_reenable();
|
||||
if (rv)
|
||||
rc = tpm_clear_and_reenable();
|
||||
if (rc)
|
||||
return VB2_ERROR_EX_TPM_CLEAR_OWNER;
|
||||
return VB2_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -10,13 +10,13 @@
|
|||
|
||||
uint32_t vboot_setup_tpm(struct vb2_context *ctx)
|
||||
{
|
||||
uint32_t result;
|
||||
uint32_t rc;
|
||||
|
||||
result = tpm_setup(ctx->flags & VB2_CONTEXT_S3_RESUME);
|
||||
if (result == TPM_E_MUST_REBOOT)
|
||||
rc = tpm_setup(ctx->flags & VB2_CONTEXT_S3_RESUME);
|
||||
if (rc == TPM_E_MUST_REBOOT)
|
||||
ctx->flags |= VB2_CONTEXT_SECDATA_WANTS_REBOOT;
|
||||
|
||||
return result;
|
||||
return rc;
|
||||
}
|
||||
|
||||
vb2_error_t vboot_extend_pcr(struct vb2_context *ctx, int pcr,
|
||||
|
|
|
@ -127,7 +127,7 @@ static vb2_error_t hash_body(struct vb2_context *ctx,
|
|||
const size_t hash_digest_sz = sizeof(hash_digest);
|
||||
size_t block_size = sizeof(block);
|
||||
size_t offset;
|
||||
vb2_error_t rv;
|
||||
vb2_error_t rc;
|
||||
|
||||
/* Clear the full digest so that any hash digests less than the
|
||||
* max have trailing zeros. */
|
||||
|
@ -146,9 +146,9 @@ static vb2_error_t hash_body(struct vb2_context *ctx,
|
|||
offset = 0;
|
||||
|
||||
/* Start the body hash */
|
||||
rv = vb2api_init_hash(ctx, VB2_HASH_TAG_FW_BODY);
|
||||
if (rv)
|
||||
return rv;
|
||||
rc = vb2api_init_hash(ctx, VB2_HASH_TAG_FW_BODY);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
/* Extend over the body */
|
||||
while (remaining) {
|
||||
|
@ -161,9 +161,9 @@ static vb2_error_t hash_body(struct vb2_context *ctx,
|
|||
return VB2_ERROR_UNKNOWN;
|
||||
load_ts += timestamp_get() - temp_ts;
|
||||
|
||||
rv = vb2api_extend_hash(ctx, block, block_size);
|
||||
if (rv)
|
||||
return rv;
|
||||
rc = vb2api_extend_hash(ctx, block, block_size);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
remaining -= block_size;
|
||||
offset += block_size;
|
||||
|
@ -173,9 +173,9 @@ static vb2_error_t hash_body(struct vb2_context *ctx,
|
|||
timestamp_add_now(TS_HASHING_END);
|
||||
|
||||
/* Check the result (with RSA signature verification) */
|
||||
rv = vb2api_check_hash_get_digest(ctx, hash_digest, hash_digest_sz);
|
||||
if (rv)
|
||||
return rv;
|
||||
rc = vb2api_check_hash_get_digest(ctx, hash_digest, hash_digest_sz);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
timestamp_add_now(TS_HASH_BODY_END);
|
||||
|
||||
|
@ -210,10 +210,10 @@ static const char *get_boot_mode_string(uint8_t boot_mode)
|
|||
static void check_boot_mode(struct vb2_context *ctx)
|
||||
{
|
||||
uint8_t boot_mode;
|
||||
int rv;
|
||||
int rc;
|
||||
|
||||
rv = tlcl_cr50_get_boot_mode(&boot_mode);
|
||||
switch (rv) {
|
||||
rc = tlcl_cr50_get_boot_mode(&boot_mode);
|
||||
switch (rc) {
|
||||
case TPM_E_NO_SUCH_COMMAND:
|
||||
printk(BIOS_WARNING, "GSC does not support GET_BOOT_MODE.\n");
|
||||
/* Proceed to legacy boot model. */
|
||||
|
@ -223,7 +223,7 @@ static void check_boot_mode(struct vb2_context *ctx)
|
|||
default:
|
||||
printk(BIOS_ERR,
|
||||
"Communication error in getting GSC boot mode.\n");
|
||||
vb2api_fail(ctx, VB2_RECOVERY_GSC_BOOT_MODE, rv);
|
||||
vb2api_fail(ctx, VB2_RECOVERY_GSC_BOOT_MODE, rc);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -208,7 +208,7 @@ static uint32_t save_buffers(void)
|
|||
*/
|
||||
static void psp_verstage_s0i3_resume(void)
|
||||
{
|
||||
uint32_t rv;
|
||||
uint32_t rc;
|
||||
|
||||
post_code(POSTCODE_VERSTAGE_S0I3_RESUME);
|
||||
|
||||
|
@ -217,15 +217,15 @@ static void psp_verstage_s0i3_resume(void)
|
|||
if (!CONFIG(PSP_INIT_TPM_ON_S0I3_RESUME))
|
||||
return;
|
||||
|
||||
rv = tpm_setup(true);
|
||||
if (rv != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR, "tpm_setup failed rv:%d\n", rv);
|
||||
rc = tpm_setup(true);
|
||||
if (rc != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR, "tpm_setup failed rc:%d\n", rc);
|
||||
reboot_into_recovery(vboot_get_context(), POSTCODE_INIT_TPM_FAILED);
|
||||
}
|
||||
|
||||
rv = tlcl_disable_platform_hierarchy();
|
||||
if (rv != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR, "tlcl_disable_platform_hierarchy failed rv:%d\n", rv);
|
||||
rc = tlcl_disable_platform_hierarchy();
|
||||
if (rc != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR, "tlcl_disable_platform_hierarchy failed rc:%d\n", rc);
|
||||
reboot_into_recovery(vboot_get_context(), POSTCODE_INIT_TPM_FAILED);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,14 +13,14 @@
|
|||
*/
|
||||
EFI_TCG2_EVENT_ALGORITHM_BITMAP tpm2_get_active_pcrs(void)
|
||||
{
|
||||
int status;
|
||||
int rc;
|
||||
TPML_PCR_SELECTION Pcrs;
|
||||
EFI_TCG2_EVENT_ALGORITHM_BITMAP tpmHashAlgorithmBitmap = 0;
|
||||
uint32_t activePcrBanks = 0;
|
||||
uint32_t index;
|
||||
|
||||
status = tpm2_get_capability_pcrs(&Pcrs);
|
||||
if (status != TPM_SUCCESS) {
|
||||
rc = tpm2_get_capability_pcrs(&Pcrs);
|
||||
if (rc != TPM_SUCCESS) {
|
||||
tpmHashAlgorithmBitmap = EFI_TCG2_BOOT_HASH_ALG_SHA1;
|
||||
activePcrBanks = EFI_TCG2_BOOT_HASH_ALG_SHA1;
|
||||
} else {
|
||||
|
@ -78,11 +78,11 @@ EFI_TCG2_EVENT_ALGORITHM_BITMAP tpm2_get_active_pcrs(void)
|
|||
int tpm2_get_capability_pcrs(TPML_PCR_SELECTION *Pcrs)
|
||||
{
|
||||
TPMS_CAPABILITY_DATA TpmCap;
|
||||
int status;
|
||||
int rc;
|
||||
int index;
|
||||
|
||||
status = tlcl_get_capability(TPM_CAP_PCRS, 0, 1, &TpmCap);
|
||||
if (status == TPM_SUCCESS) {
|
||||
rc = tlcl_get_capability(TPM_CAP_PCRS, 0, 1, &TpmCap);
|
||||
if (rc == TPM_SUCCESS) {
|
||||
Pcrs->count = TpmCap.data.assignedPCR.count;
|
||||
printk(BIOS_DEBUG, "Pcrs->count = %d\n", Pcrs->count);
|
||||
for (index = 0; index < Pcrs->count; index++) {
|
||||
|
@ -97,7 +97,7 @@ int tpm2_get_capability_pcrs(TPML_PCR_SELECTION *Pcrs)
|
|||
Pcrs->pcrSelections[index].sizeofSelect);
|
||||
}
|
||||
}
|
||||
return status;
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -149,7 +149,7 @@ int mboot_hash_extend_log(uint64_t flags, uint8_t *hashData, uint32_t hashDataLe
|
|||
void invalidate_pcrs(void)
|
||||
{
|
||||
int pcr;
|
||||
int status;
|
||||
int rc;
|
||||
|
||||
TCG_PCR_EVENT2_HDR tcgEventHdr;
|
||||
uint8_t invalidate = 1;
|
||||
|
@ -161,12 +161,12 @@ void invalidate_pcrs(void)
|
|||
tcgEventHdr.eventType = EV_NO_ACTION;
|
||||
tcgEventHdr.eventSize = (uint32_t) sizeof(invalidate);
|
||||
|
||||
status = mboot_hash_extend_log(0, (uint8_t *)&invalidate,
|
||||
rc = mboot_hash_extend_log(0, (uint8_t *)&invalidate,
|
||||
tcgEventHdr.eventSize, &tcgEventHdr,
|
||||
(uint8_t *)"Invalidate PCR");
|
||||
if (status != TPM_SUCCESS)
|
||||
if (rc != TPM_SUCCESS)
|
||||
printk(BIOS_DEBUG, "%s: invalidating pcr %d returned"
|
||||
" 0x%x\n", __func__, pcr, status);
|
||||
" 0x%x\n", __func__, pcr, rc);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -230,7 +230,7 @@ void mboot_print_buffer(uint8_t *buffer, uint32_t bufferSize)
|
|||
int mb_measure_log_worker(const char *name, uint32_t type, uint32_t pcr,
|
||||
TCG_EVENTTYPE eventType, const char *event_msg)
|
||||
{
|
||||
int status;
|
||||
int rc;
|
||||
TCG_PCR_EVENT2_HDR tcgEventHdr;
|
||||
uint8_t *base;
|
||||
size_t size;
|
||||
|
@ -250,8 +250,8 @@ int mb_measure_log_worker(const char *name, uint32_t type, uint32_t pcr,
|
|||
if (event_msg)
|
||||
tcgEventHdr.eventSize = (uint32_t) strlen(event_msg);
|
||||
|
||||
status = mboot_hash_extend_log(0, base, size, &tcgEventHdr, (uint8_t *)event_msg);
|
||||
return status;
|
||||
rc = mboot_hash_extend_log(0, base, size, &tcgEventHdr, (uint8_t *)event_msg);
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -273,7 +273,7 @@ int mb_measure_log_worker(const char *name, uint32_t type, uint32_t pcr,
|
|||
|
||||
__weak int mb_entry(int wake_from_s3)
|
||||
{
|
||||
int status;
|
||||
int rc;
|
||||
|
||||
/* Initialize TPM driver. */
|
||||
printk(BIOS_DEBUG, "%s: tlcl_lib_init\n", __func__);
|
||||
|
@ -284,16 +284,16 @@ __weak int mb_entry(int wake_from_s3)
|
|||
|
||||
if (wake_from_s3) {
|
||||
printk(BIOS_DEBUG, "%s: tlcl_resume\n", __func__);
|
||||
status = tlcl_resume();
|
||||
rc = tlcl_resume();
|
||||
} else {
|
||||
printk(BIOS_DEBUG, "%s: tlcl_startup\n", __func__);
|
||||
status = tlcl_startup();
|
||||
rc = tlcl_startup();
|
||||
}
|
||||
|
||||
if (status)
|
||||
printk(BIOS_ERR, "%s: StartUp failed 0x%x!\n", __func__, status);
|
||||
if (rc)
|
||||
printk(BIOS_ERR, "%s: StartUp failed 0x%x!\n", __func__, rc);
|
||||
|
||||
return status;
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -317,25 +317,25 @@ __weak int mb_entry(int wake_from_s3)
|
|||
|
||||
__weak int mb_measure(int wake_from_s3)
|
||||
{
|
||||
uint32_t status;
|
||||
uint32_t rc;
|
||||
|
||||
status = mb_entry(wake_from_s3);
|
||||
if (status == TPM_SUCCESS) {
|
||||
rc = mb_entry(wake_from_s3);
|
||||
if (rc == TPM_SUCCESS) {
|
||||
printk(BIOS_DEBUG, "%s: StartUp, successful!\n", __func__);
|
||||
status = mb_measure_log_start();
|
||||
if (status == TPM_SUCCESS) {
|
||||
rc = mb_measure_log_start();
|
||||
if (rc == TPM_SUCCESS) {
|
||||
printk(BIOS_DEBUG, "%s: Measuring, successful!\n", __func__);
|
||||
} else {
|
||||
invalidate_pcrs();
|
||||
printk(BIOS_ERR, "%s: Measuring returned 0x%x unsuccessful! PCRs invalidated.\n",
|
||||
__func__, status);
|
||||
__func__, rc);
|
||||
}
|
||||
} else {
|
||||
invalidate_pcrs();
|
||||
printk(BIOS_ERR, "%s: StartUp returned 0x%x, unsuccessful! PCRs invalidated.\n", __func__,
|
||||
status);
|
||||
rc);
|
||||
}
|
||||
return status;
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -359,7 +359,7 @@ __weak int mb_measure(int wake_from_s3)
|
|||
*/
|
||||
__weak int mb_measure_log_start(void)
|
||||
{
|
||||
int status;
|
||||
int rc;
|
||||
uint32_t i;
|
||||
|
||||
if ((tpm2_get_active_pcrs() & EFI_TCG2_BOOT_HASH_ALG_SHA256) == 0x0) {
|
||||
|
@ -368,32 +368,32 @@ __weak int mb_measure_log_start(void)
|
|||
return TPM_E_IOERROR;
|
||||
}
|
||||
|
||||
status = mb_crtm();
|
||||
if (status != TPM_SUCCESS) {
|
||||
rc = mb_crtm();
|
||||
if (rc != TPM_SUCCESS) {
|
||||
printk(BIOS_DEBUG, "%s: Fail! CRTM Version can't be measured."
|
||||
" ABORTING!!!\n", __func__);
|
||||
return status;
|
||||
return rc;
|
||||
}
|
||||
printk(BIOS_DEBUG, "%s: Success! CRTM Version measured.\n", __func__);
|
||||
|
||||
/* Log the items defined by the mainboard */
|
||||
for (i = 0; i < ARRAY_SIZE(mb_log_list); i++) {
|
||||
status = mb_measure_log_worker(
|
||||
rc = mb_measure_log_worker(
|
||||
mb_log_list[i].cbfs_name,
|
||||
mb_log_list[i].cbfs_type, mb_log_list[i].pcr,
|
||||
mb_log_list[i].eventType,
|
||||
mb_log_list[i].event_msg);
|
||||
if (status != TPM_SUCCESS) {
|
||||
if (rc != TPM_SUCCESS) {
|
||||
printk(BIOS_DEBUG, "%s: Fail! %s can't be measured."
|
||||
"ABORTING!!!\n", __func__,
|
||||
mb_log_list[i].cbfs_name);
|
||||
return status;
|
||||
return rc;
|
||||
}
|
||||
printk(BIOS_DEBUG, "%s: Success! %s measured to pcr"
|
||||
"%d.\n", __func__, mb_log_list[i].cbfs_name,
|
||||
mb_log_list[i].pcr);
|
||||
}
|
||||
return status;
|
||||
return rc;
|
||||
}
|
||||
|
||||
static const uint8_t crtm_version[] =
|
||||
|
@ -416,7 +416,7 @@ static const uint8_t crtm_version[] =
|
|||
**/
|
||||
__weak int mb_crtm(void)
|
||||
{
|
||||
int status;
|
||||
int rc;
|
||||
TCG_PCR_EVENT2_HDR tcgEventHdr;
|
||||
uint8_t hash[VB2_SHA256_DIGEST_SIZE];
|
||||
uint8_t *msgPtr;
|
||||
|
@ -430,18 +430,18 @@ __weak int mb_crtm(void)
|
|||
printk(BIOS_DEBUG, "%s: EventSize - %u\n", __func__,
|
||||
tcgEventHdr.eventSize);
|
||||
|
||||
status = mboot_hash_extend_log(0, (uint8_t *)crtm_version, tcgEventHdr.eventSize,
|
||||
rc = mboot_hash_extend_log(0, (uint8_t *)crtm_version, tcgEventHdr.eventSize,
|
||||
&tcgEventHdr, (uint8_t *)crtm_version);
|
||||
if (status) {
|
||||
printk(BIOS_DEBUG, "Measure CRTM Version returned 0x%x\n", status);
|
||||
return status;
|
||||
if (rc) {
|
||||
printk(BIOS_DEBUG, "Measure CRTM Version returned 0x%x\n", rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
status = get_intel_me_hash(hash);
|
||||
if (status) {
|
||||
printk(BIOS_DEBUG, "get_intel_me_hash returned 0x%x\n", status);
|
||||
status = TPM_E_IOERROR;
|
||||
return status;
|
||||
rc = get_intel_me_hash(hash);
|
||||
if (rc) {
|
||||
printk(BIOS_DEBUG, "get_intel_me_hash returned 0x%x\n", rc);
|
||||
rc = TPM_E_IOERROR;
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* Add the me hash */
|
||||
|
@ -453,10 +453,10 @@ __weak int mb_crtm(void)
|
|||
|
||||
msgPtr = NULL;
|
||||
tcgEventHdr.eventSize = 0;
|
||||
status = mboot_hash_extend_log(MBOOT_HASH_PROVIDED, hash, sizeof(hash), &tcgEventHdr,
|
||||
rc = mboot_hash_extend_log(MBOOT_HASH_PROVIDED, hash, sizeof(hash), &tcgEventHdr,
|
||||
msgPtr);
|
||||
if (status)
|
||||
printk(BIOS_DEBUG, "Add ME hash returned 0x%x\n", status);
|
||||
if (rc)
|
||||
printk(BIOS_DEBUG, "Add ME hash returned 0x%x\n", rc);
|
||||
|
||||
return status;
|
||||
return rc;
|
||||
}
|
||||
|
|
|
@ -25,27 +25,27 @@ void __weak mainboard_prepare_cr50_reset(void) {}
|
|||
*/
|
||||
static int cr50_is_reset_needed(void)
|
||||
{
|
||||
int ret;
|
||||
int rc;
|
||||
uint8_t tpm_mode;
|
||||
|
||||
ret = tlcl_cr50_get_tpm_mode(&tpm_mode);
|
||||
rc = tlcl_cr50_get_tpm_mode(&tpm_mode);
|
||||
|
||||
if (ret == TPM_E_NO_SUCH_COMMAND) {
|
||||
if (rc == TPM_E_NO_SUCH_COMMAND) {
|
||||
printk(BIOS_INFO,
|
||||
"Cr50 does not support TPM mode command\n");
|
||||
/* Older Cr50 firmware, assume no Cr50 reset is required */
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ret == TPM_E_MUST_REBOOT) {
|
||||
if (rc == TPM_E_MUST_REBOOT) {
|
||||
/*
|
||||
* Cr50 indicated a reboot is required to restore TPM
|
||||
* functionality.
|
||||
*/
|
||||
return 1;
|
||||
} else if (ret != TPM_SUCCESS) {
|
||||
} else if (rc != TPM_SUCCESS) {
|
||||
/* TPM command failed, continue booting. */
|
||||
printk(BIOS_ERR, "Attempt to get CR50 TPM mode failed: %x\n", ret);
|
||||
printk(BIOS_ERR, "Attempt to get CR50 TPM mode failed: %x\n", rc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -70,7 +70,7 @@ static int cr50_is_reset_needed(void)
|
|||
|
||||
static void enable_update(void *unused)
|
||||
{
|
||||
int ret;
|
||||
int rc;
|
||||
int cr50_reset_reqd = 0;
|
||||
uint8_t num_restored_headers;
|
||||
|
||||
|
@ -82,23 +82,23 @@ static void enable_update(void *unused)
|
|||
if (vboot_get_context()->flags & VB2_CONTEXT_FORCE_RECOVERY_MODE)
|
||||
return;
|
||||
|
||||
ret = tlcl_lib_init();
|
||||
rc = tlcl_lib_init();
|
||||
|
||||
if (ret != VB2_SUCCESS) {
|
||||
if (rc != VB2_SUCCESS) {
|
||||
printk(BIOS_ERR, "tlcl_lib_init() failed for CR50 update: %x\n",
|
||||
ret);
|
||||
rc);
|
||||
return;
|
||||
}
|
||||
|
||||
timestamp_add_now(TS_TPM_ENABLE_UPDATE_START);
|
||||
|
||||
/* Reboot in 1000 ms if necessary. */
|
||||
ret = tlcl_cr50_enable_update(CR50_RESET_DELAY_MS,
|
||||
rc = tlcl_cr50_enable_update(CR50_RESET_DELAY_MS,
|
||||
&num_restored_headers);
|
||||
|
||||
if (ret != TPM_SUCCESS) {
|
||||
if (rc != TPM_SUCCESS) {
|
||||
printk(BIOS_ERR, "Attempt to enable CR50 update failed: %x\n",
|
||||
ret);
|
||||
rc);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -142,16 +142,16 @@ static void enable_update(void *unused)
|
|||
* the mainboard specific code runs.
|
||||
*/
|
||||
if (cr50_reset_reqd) {
|
||||
ret = tlcl_cr50_immediate_reset(CR50_RESET_DELAY_MS);
|
||||
rc = tlcl_cr50_immediate_reset(CR50_RESET_DELAY_MS);
|
||||
|
||||
if (ret != TPM_SUCCESS) {
|
||||
if (rc != TPM_SUCCESS) {
|
||||
/*
|
||||
* Reset request failed due to TPM error, continue
|
||||
* booting but the current boot will likely end up at
|
||||
* the recovery screen.
|
||||
*/
|
||||
printk(BIOS_ERR, "Attempt to reset CR50 failed: %x\n",
|
||||
ret);
|
||||
rc);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
void cse_board_reset(void)
|
||||
{
|
||||
int ret;
|
||||
int rc;
|
||||
struct cr50_firmware_version version;
|
||||
|
||||
if (CONFIG(CSE_RESET_CLEAR_EC_AP_IDLE_FLAG))
|
||||
|
@ -21,9 +21,9 @@ void cse_board_reset(void)
|
|||
|
||||
if (CONFIG(TPM2) && CONFIG(TPM_GOOGLE_CR50)) {
|
||||
/* Initialize TPM and get the cr50 firmware version. */
|
||||
ret = tlcl_lib_init();
|
||||
if (ret != VB2_SUCCESS) {
|
||||
printk(BIOS_ERR, "tlcl_lib_init() failed: 0x%x\n", ret);
|
||||
rc = tlcl_lib_init();
|
||||
if (rc != VB2_SUCCESS) {
|
||||
printk(BIOS_ERR, "tlcl_lib_init() failed: 0x%x\n", rc);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
static void disable_platform_hierarchy(void *unused)
|
||||
{
|
||||
int ret;
|
||||
int rc;
|
||||
|
||||
if (!CONFIG(TPM2))
|
||||
return;
|
||||
|
@ -15,17 +15,17 @@ static void disable_platform_hierarchy(void *unused)
|
|||
if (!CONFIG(RESUME_PATH_SAME_AS_BOOT))
|
||||
return;
|
||||
|
||||
ret = tlcl_lib_init();
|
||||
rc = tlcl_lib_init();
|
||||
|
||||
if (ret != VB2_SUCCESS) {
|
||||
printk(BIOS_ERR, "tlcl_lib_init() failed: %x\n", ret);
|
||||
if (rc != VB2_SUCCESS) {
|
||||
printk(BIOS_ERR, "tlcl_lib_init() failed: %x\n", rc);
|
||||
return;
|
||||
}
|
||||
|
||||
ret = tlcl_disable_platform_hierarchy();
|
||||
if (ret != TPM_SUCCESS)
|
||||
rc = tlcl_disable_platform_hierarchy();
|
||||
if (rc != TPM_SUCCESS)
|
||||
printk(BIOS_ERR, "Platform hierarchy disablement failed: %x\n",
|
||||
ret);
|
||||
rc);
|
||||
}
|
||||
|
||||
BOOT_STATE_INIT_ENTRY(BS_OS_RESUME, BS_ON_ENTRY, disable_platform_hierarchy,
|
||||
|
|
Loading…
Reference in New Issue