The callers interested in the return status of build_and_send_cmd() are only interested in the command return code status (returnCode) and not the status of the message transmission (rc). Simplify the callers by returning returnCode directly instead of via a pointer parameter. For the unlikely case that the command transmission fails, return -1 to signal the failure to the callers.
Signed-off-by: Kevin O'Connor kevin@koconnor.net --- src/tcgbios.c | 139 ++++++++++++++++++++++++++++------------------------------ 1 file changed, 66 insertions(+), 73 deletions(-)
diff --git a/src/tcgbios.c b/src/tcgbios.c index c578fd2..ee5e9f7 100644 --- a/src/tcgbios.c +++ b/src/tcgbios.c @@ -171,7 +171,7 @@ tpm_is_working(void) */ static u32 build_and_send_cmd(u8 locty, u32 ordinal, const u8 *append, u32 append_size, - u32 *returnCode, enum tpmDurationType to_t) + enum tpmDurationType to_t) { struct { struct tpm_req_header trqh; @@ -195,30 +195,26 @@ build_and_send_cmd(u8 locty, u32 ordinal, const u8 *append, u32 append_size,
u32 rc = tpmhw_transmit(locty, &req.trqh, obuffer, &obuffer_len, to_t); if (rc) - return rc; - - *returnCode = be32_to_cpu(trsh->errcode); - return 0; + return -1; + return be32_to_cpu(trsh->errcode); }
static void tpm_set_failure(void) { - u32 returnCode; - /* we will try to deactivate the TPM now - ignoring all errors */ build_and_send_cmd(0, TPM_ORD_PhysicalPresence, PhysicalPresence_CMD_ENABLE, sizeof(PhysicalPresence_CMD_ENABLE), - &returnCode, TPM_DURATION_TYPE_SHORT); + TPM_DURATION_TYPE_SHORT);
build_and_send_cmd(0, TPM_ORD_PhysicalPresence, PhysicalPresence_PRESENT, sizeof(PhysicalPresence_PRESENT), - &returnCode, TPM_DURATION_TYPE_SHORT); + TPM_DURATION_TYPE_SHORT);
build_and_send_cmd(0, TPM_ORD_SetTempDeactivated, - NULL, 0, &returnCode, TPM_DURATION_TYPE_SHORT); + NULL, 0, TPM_DURATION_TYPE_SHORT);
TPM_working = 0; } @@ -429,44 +425,42 @@ tpm_startup(void) return TCG_GENERAL_ERROR;
dprintf(DEBUG_tcg, "TCGBIOS: Starting with TPM_Startup(ST_CLEAR)\n"); - rc = build_and_send_cmd(0, TPM_ORD_Startup, - Startup_ST_CLEAR, sizeof(Startup_ST_CLEAR), - &returnCode, TPM_DURATION_TYPE_SHORT); + returnCode = build_and_send_cmd(0, TPM_ORD_Startup, + Startup_ST_CLEAR, sizeof(Startup_ST_CLEAR), + TPM_DURATION_TYPE_SHORT);
dprintf(DEBUG_tcg, "Return code from TPM_Startup = 0x%08x\n", returnCode);
- if (CONFIG_COREBOOT) { + if (CONFIG_COREBOOT && returnCode == TPM_INVALID_POSTINIT) /* with other firmware on the system the TPM may already have been * initialized */ - if (returnCode == TPM_INVALID_POSTINIT) - returnCode = 0; - } + returnCode = 0;
- if (rc || returnCode) + if (returnCode) goto err_exit;
rc = determine_timeouts(); if (rc) goto err_exit;
- rc = build_and_send_cmd(0, TPM_ORD_SelfTestFull, NULL, 0, - &returnCode, TPM_DURATION_TYPE_LONG); + returnCode = build_and_send_cmd(0, TPM_ORD_SelfTestFull, NULL, 0, + TPM_DURATION_TYPE_LONG);
dprintf(DEBUG_tcg, "Return code from TPM_SelfTestFull = 0x%08x\n", returnCode);
- if (rc || returnCode) + if (returnCode) goto err_exit;
- rc = build_and_send_cmd(3, TSC_ORD_ResetEstablishmentBit, NULL, 0, - &returnCode, TPM_DURATION_TYPE_SHORT); + returnCode = build_and_send_cmd(3, TSC_ORD_ResetEstablishmentBit, NULL, 0, + TPM_DURATION_TYPE_SHORT);
dprintf(DEBUG_tcg, "Return code from TSC_ResetEstablishmentBit = 0x%08x\n", returnCode);
- if (rc || (returnCode != 0 && returnCode != TPM_BAD_LOCALITY)) + if (returnCode != 0 && returnCode != TPM_BAD_LOCALITY) goto err_exit;
rc = tpm_smbios_measure(); @@ -519,18 +513,18 @@ tpm_prepboot(void) if (!tpm_is_working()) return;
- rc = build_and_send_cmd(0, TPM_ORD_PhysicalPresence, - PhysicalPresence_CMD_ENABLE, - sizeof(PhysicalPresence_CMD_ENABLE), - &returnCode, TPM_DURATION_TYPE_SHORT); - if (rc || returnCode) + returnCode = build_and_send_cmd(0, TPM_ORD_PhysicalPresence, + PhysicalPresence_CMD_ENABLE, + sizeof(PhysicalPresence_CMD_ENABLE), + TPM_DURATION_TYPE_SHORT); + if (returnCode) goto err_exit;
- rc = build_and_send_cmd(0, TPM_ORD_PhysicalPresence, - PhysicalPresence_NOT_PRESENT_LOCK, - sizeof(PhysicalPresence_NOT_PRESENT_LOCK), - &returnCode, TPM_DURATION_TYPE_SHORT); - if (rc || returnCode) + returnCode = build_and_send_cmd(0, TPM_ORD_PhysicalPresence, + PhysicalPresence_NOT_PRESENT_LOCK, + sizeof(PhysicalPresence_NOT_PRESENT_LOCK), + TPM_DURATION_TYPE_SHORT); + if (returnCode) goto err_exit;
rc = tpm_add_action(4, "Calling INT 19h"); @@ -643,7 +637,6 @@ tpm_add_cdrom_catalog(const u8 *addr, u32 length) void tpm_s3_resume(void) { - u32 rc; u32 returnCode;
if (!tpm_is_working()) @@ -651,14 +644,14 @@ tpm_s3_resume(void)
dprintf(DEBUG_tcg, "TCGBIOS: Resuming with TPM_Startup(ST_STATE)\n");
- rc = build_and_send_cmd(0, TPM_ORD_Startup, - Startup_ST_STATE, sizeof(Startup_ST_STATE), - &returnCode, TPM_DURATION_TYPE_SHORT); + returnCode = build_and_send_cmd(0, TPM_ORD_Startup, + Startup_ST_STATE, sizeof(Startup_ST_STATE), + TPM_DURATION_TYPE_SHORT);
dprintf(DEBUG_tcg, "TCGBIOS: ReturnCode from TPM_Startup = 0x%08x\n", returnCode);
- if (rc || returnCode) + if (returnCode) goto err_exit;
return; @@ -984,31 +977,31 @@ assert_physical_presence(int verbose) /* physical presence already asserted */ return 0;
- rc = build_and_send_cmd(0, TPM_ORD_PhysicalPresence, - PhysicalPresence_CMD_ENABLE, - sizeof(PhysicalPresence_CMD_ENABLE), - &returnCode, TPM_DURATION_TYPE_SHORT); + returnCode = build_and_send_cmd(0, TPM_ORD_PhysicalPresence, + PhysicalPresence_CMD_ENABLE, + sizeof(PhysicalPresence_CMD_ENABLE), + TPM_DURATION_TYPE_SHORT);
dprintf(DEBUG_tcg, - "Return code from TSC_PhysicalPresence(CMD_ENABLE) = 0x%08x\n", - returnCode); + "Return code from TSC_PhysicalPresence(CMD_ENABLE) = 0x%08x\n", + returnCode);
- if (rc || returnCode) { + if (returnCode) { if (verbose) printf("Error: Could not enable physical presence.\n\n"); goto err_exit; }
- rc = build_and_send_cmd(0, TPM_ORD_PhysicalPresence, - PhysicalPresence_PRESENT, - sizeof(PhysicalPresence_PRESENT), - &returnCode, TPM_DURATION_TYPE_SHORT); + returnCode = build_and_send_cmd(0, TPM_ORD_PhysicalPresence, + PhysicalPresence_PRESENT, + sizeof(PhysicalPresence_PRESENT), + TPM_DURATION_TYPE_SHORT);
dprintf(DEBUG_tcg, - "Return code from TSC_PhysicalPresence(PRESENT) = 0x%08x\n", - returnCode); + "Return code from TSC_PhysicalPresence(PRESENT) = 0x%08x\n", + returnCode);
- if (rc || returnCode) { + if (returnCode) { if (verbose) printf("Error: Could not set presence flag.\n\n"); goto err_exit; @@ -1074,9 +1067,9 @@ enable_tpm(int enable, u32 *returnCode, int verbose) return rc; }
- rc = build_and_send_cmd(0, enable ? TPM_ORD_PhysicalEnable - : TPM_ORD_PhysicalDisable, - NULL, 0, returnCode, TPM_DURATION_TYPE_SHORT); + *returnCode = build_and_send_cmd(0, enable ? TPM_ORD_PhysicalEnable + : TPM_ORD_PhysicalDisable, + NULL, 0, TPM_DURATION_TYPE_SHORT); if (enable) dprintf(DEBUG_tcg, "Return code from TPM_PhysicalEnable = 0x%08x\n", *returnCode); @@ -1084,7 +1077,7 @@ enable_tpm(int enable, u32 *returnCode, int verbose) dprintf(DEBUG_tcg, "Return code from TPM_PhysicalDisable = 0x%08x\n", *returnCode);
- if (rc || *returnCode) + if (*returnCode) goto err_exit;
return 0; @@ -1125,18 +1118,18 @@ activate_tpm(int activate, int allow_reset, u32 *returnCode, int verbose) return rc; }
- rc = build_and_send_cmd(0, TPM_ORD_PhysicalSetDeactivated, - activate ? CommandFlag_FALSE - : CommandFlag_TRUE, - activate ? sizeof(CommandFlag_FALSE) - : sizeof(CommandFlag_TRUE), - returnCode, TPM_DURATION_TYPE_SHORT); + *returnCode = build_and_send_cmd(0, TPM_ORD_PhysicalSetDeactivated, + activate ? CommandFlag_FALSE + : CommandFlag_TRUE, + activate ? sizeof(CommandFlag_FALSE) + : sizeof(CommandFlag_TRUE), + TPM_DURATION_TYPE_SHORT);
dprintf(DEBUG_tcg, "Return code from PhysicalSetDeactivated(%d) = 0x%08x\n", activate ? 0 : 1, *returnCode);
- if (rc || *returnCode) + if (*returnCode) goto err_exit;
if (activate && allow_reset) { @@ -1204,13 +1197,13 @@ force_clear(int enable_activate_before, int enable_activate_after, return rc; }
- rc = build_and_send_cmd(0, TPM_ORD_ForceClear, - NULL, 0, returnCode, TPM_DURATION_TYPE_SHORT); + *returnCode = build_and_send_cmd(0, TPM_ORD_ForceClear, + NULL, 0, TPM_DURATION_TYPE_SHORT);
dprintf(DEBUG_tcg, "Return code from TPM_ForceClear() = 0x%08x\n", *returnCode);
- if (rc || *returnCode) + if (*returnCode) goto err_exit;
if (!enable_activate_after) { @@ -1265,16 +1258,16 @@ set_owner_install(int allow, u32 *returnCode, int verbose) return rc; }
- rc = build_and_send_cmd(0, TPM_ORD_SetOwnerInstall, - (allow) ? CommandFlag_TRUE : - CommandFlag_FALSE, - sizeof(CommandFlag_TRUE), - returnCode, TPM_DURATION_TYPE_SHORT); + *returnCode = build_and_send_cmd(0, TPM_ORD_SetOwnerInstall, + (allow) ? CommandFlag_TRUE + : CommandFlag_FALSE, + sizeof(CommandFlag_TRUE), + TPM_DURATION_TYPE_SHORT);
dprintf(DEBUG_tcg, "Return code from TPM_SetOwnerInstall() = 0x%08x\n", *returnCode);
- if (rc || *returnCode) + if (*returnCode) goto err_exit;
if (verbose)