From 472d93c146403c0f95b656e182b972e15ff11835 Mon Sep 17 00:00:00 2001 From: Shawn Nematbakhsh Date: Mon, 22 Jul 2013 16:19:13 -0700 Subject: rollback_index: Remove recovery_mode parameter to SetupTPM. SetupTPM no longer uses recovery_mode parameter for anything other than a debug print. This change moves the debug print to a caller function, then removes recovery_mode from SetupTPM and some caller functions that no longer have a use for it. BUG=chrome-os-partner:20913. TEST=Manual. Boot factory install shim in recovery mode and verify TPM clear operations succeed. Boot in dev mode and verify "Lock physical presence" print on UART. BRANCH=None. Signed-off-by: Shawn Nematbakhsh Change-Id: I2f671f6680a6e67cf722855e659e99752bc0783c Reviewed-on: https://gerrit.chromium.org/gerrit/62916 Reviewed-by: Randall Spangler --- firmware/lib/include/rollback_index.h | 7 +++---- firmware/lib/mocked_rollback_index.c | 7 +++---- firmware/lib/rollback_index.c | 14 +++++--------- firmware/lib/vboot_api_init.c | 4 +++- firmware/linktest/main.c | 2 +- tests/rollback_index2_tests.c | 34 +++++++++++++++++----------------- tests/rollback_index3_tests.c | 2 +- tests/vboot_api_init_tests.c | 2 +- 8 files changed, 34 insertions(+), 38 deletions(-) diff --git a/firmware/lib/include/rollback_index.h b/firmware/lib/include/rollback_index.h index 386ad77f..7c410eec 100644 --- a/firmware/lib/include/rollback_index.h +++ b/firmware/lib/include/rollback_index.h @@ -83,7 +83,7 @@ uint32_t RollbackS3Resume(void); /** * This must be called. */ -uint32_t RollbackFirmwareSetup(int recovery_mode, int is_hw_dev, +uint32_t RollbackFirmwareSetup(int is_hw_dev, int disable_dev_request, int clear_tpm_owner_request, /* two outputs on success */ @@ -161,9 +161,8 @@ uint32_t OneTimeInitializeTPM(RollbackSpaceFirmware *rsf, * Start the TPM and establish the root of trust for the anti-rollback * mechanism. */ -uint32_t SetupTPM(int recovery_mode, int developer_mode, - int disable_dev_request, int clear_tpm_owner_request, - RollbackSpaceFirmware *rsf); +uint32_t SetupTPM(int developer_mode, int disable_dev_request, + int clear_tpm_owner_request, RollbackSpaceFirmware *rsf); /** * Utility function to turn the virtual dev-mode flag on or off. 0=off, 1=on. diff --git a/firmware/lib/mocked_rollback_index.c b/firmware/lib/mocked_rollback_index.c index 6f026a33..f83e0378 100644 --- a/firmware/lib/mocked_rollback_index.c +++ b/firmware/lib/mocked_rollback_index.c @@ -23,9 +23,8 @@ uint32_t TPMClearAndReenable(void) { } -uint32_t SetupTPM(int recovery_mode, int developer_mode, - int disable_dev_request, int clear_tpm_owner_request, - RollbackSpaceFirmware* rsf) { +uint32_t SetupTPM(int developer_mode, int disable_dev_request, + int clear_tpm_owner_request, RollbackSpaceFirmware* rsf) { return TPM_SUCCESS; } @@ -35,7 +34,7 @@ uint32_t RollbackS3Resume(void) { } -uint32_t RollbackFirmwareSetup(int recovery_mode, int is_hw_dev, +uint32_t RollbackFirmwareSetup(int is_hw_dev, int disable_dev_request, int clear_tpm_owner_request, int *is_virt_dev, uint32_t *version) { diff --git a/firmware/lib/rollback_index.c b/firmware/lib/rollback_index.c index 619ba013..e372d9b6 100644 --- a/firmware/lib/rollback_index.c +++ b/firmware/lib/rollback_index.c @@ -341,9 +341,8 @@ uint32_t OneTimeInitializeTPM(RollbackSpaceFirmware *rsf, * to the TPM flashram at every reboot or wake-up, because of concerns about * the durability of the NVRAM. */ -uint32_t SetupTPM(int recovery_mode, int developer_mode, - int disable_dev_request, int clear_tpm_owner_request, - RollbackSpaceFirmware* rsf) +uint32_t SetupTPM(int developer_mode, int disable_dev_request, + int clear_tpm_owner_request, RollbackSpaceFirmware* rsf) { uint8_t in_flags; uint8_t disable; @@ -351,8 +350,6 @@ uint32_t SetupTPM(int recovery_mode, int developer_mode, uint32_t result; uint32_t versions; - VBDEBUG(("TPM: SetupTPM(r%d, d%d)\n", recovery_mode, developer_mode)); - RETURN_ON_FAILURE(TlclLibInit()); #ifdef TEGRA_SOFT_REBOOT_WORKAROUND @@ -494,7 +491,7 @@ uint32_t RollbackS3Resume(void) return TPM_SUCCESS; } -uint32_t RollbackFirmwareSetup(int recovery_mode, int is_hw_dev, +uint32_t RollbackFirmwareSetup(int is_hw_dev, int disable_dev_request, int clear_tpm_owner_request, int *is_virt_dev, uint32_t *version) @@ -556,7 +553,7 @@ uint32_t RollbackS3Resume(void) return result; } -uint32_t RollbackFirmwareSetup(int recovery_mode, int is_hw_dev, +uint32_t RollbackFirmwareSetup(int is_hw_dev, int disable_dev_request, int clear_tpm_owner_request, int *is_virt_dev, uint32_t *version) @@ -566,8 +563,7 @@ uint32_t RollbackFirmwareSetup(int recovery_mode, int is_hw_dev, /* Set version to 0 in case we fail */ *version = 0; - RETURN_ON_FAILURE(SetupTPM(recovery_mode, is_hw_dev, - disable_dev_request, + RETURN_ON_FAILURE(SetupTPM(is_hw_dev, disable_dev_request, clear_tpm_owner_request, &rsf)); Memcpy(version, &rsf.fw_versions, sizeof(*version)); *is_virt_dev = (rsf.flags & FLAG_VIRTUAL_DEV_MODE_ON) ? 1 : 0; diff --git a/firmware/lib/vboot_api_init.c b/firmware/lib/vboot_api_init.c index 20502971..5174aa1f 100644 --- a/firmware/lib/vboot_api_init.c +++ b/firmware/lib/vboot_api_init.c @@ -175,7 +175,9 @@ VbError_t VbInit(VbCommonParams *cparams, VbInitParams *iparams) * TPM space is initialized by this call, the virtual * dev-switch will be disabled by default) */ - tpm_status = RollbackFirmwareSetup(recovery, is_hw_dev, + VBDEBUG(("TPM: Call RollbackFirmwareSetup(r%d, d%d)\n", + recovery, is_hw_dev)); + tpm_status = RollbackFirmwareSetup(is_hw_dev, disable_dev_request, clear_tpm_owner_request, /* two outputs on success */ diff --git a/firmware/linktest/main.c b/firmware/linktest/main.c index abbc165b..bdf1483a 100644 --- a/firmware/linktest/main.c +++ b/firmware/linktest/main.c @@ -31,7 +31,7 @@ int main(void) /* rollback_index.h */ RollbackS3Resume(); - RollbackFirmwareSetup(0, 0, 0, 0, 0, 0); + RollbackFirmwareSetup(0, 0, 0, 0, 0); RollbackFirmwareWrite(0); RollbackFirmwareLock(); RollbackKernelRead(0); diff --git a/tests/rollback_index2_tests.c b/tests/rollback_index2_tests.c index 384895fb..6d28a9c9 100644 --- a/tests/rollback_index2_tests.c +++ b/tests/rollback_index2_tests.c @@ -598,7 +598,7 @@ static void SetupTpmTest(void) /* Complete setup */ ResetMocks(0, 0); - TEST_EQ(SetupTPM(0, 0, 0, 0, &rsf), 0, "SetupTPM()"); + TEST_EQ(SetupTPM(0, 0, 0, &rsf), 0, "SetupTPM()"); TEST_STR_EQ(mock_calls, "TlclLibInit()\n" "TlclStartup()\n" @@ -610,7 +610,7 @@ static void SetupTpmTest(void) /* If TPM is disabled or deactivated, must enable it */ ResetMocks(0, 0); mock_pflags.disable = 1; - TEST_EQ(SetupTPM(0, 0, 0, 0, &rsf), TPM_E_MUST_REBOOT, + TEST_EQ(SetupTPM(0, 0, 0, &rsf), TPM_E_MUST_REBOOT, "SetupTPM() disabled"); TEST_STR_EQ(mock_calls, "TlclLibInit()\n" @@ -623,7 +623,7 @@ static void SetupTpmTest(void) ResetMocks(0, 0); mock_pflags.deactivated = 1; - TEST_EQ(SetupTPM(0, 0, 0, 0, &rsf), TPM_E_MUST_REBOOT, + TEST_EQ(SetupTPM(0, 0, 0, &rsf), TPM_E_MUST_REBOOT, "SetupTPM() deactivated"); TEST_STR_EQ(mock_calls, "TlclLibInit()\n" @@ -636,7 +636,7 @@ static void SetupTpmTest(void) /* If physical presence command isn't enabled, try to enable it */ ResetMocks(3, TPM_E_IOERROR); - TEST_EQ(SetupTPM(0, 0, 0, 0, &rsf), 0, "SetupTPM() pp cmd"); + TEST_EQ(SetupTPM(0, 0, 0, &rsf), 0, "SetupTPM() pp cmd"); TEST_STR_EQ(mock_calls, "TlclLibInit()\n" "TlclStartup()\n" @@ -651,7 +651,7 @@ static void SetupTpmTest(void) ResetMocks(5, TPM_E_BADINDEX); mock_pflags.physicalPresenceLifetimeLock = 1; mock_pflags.nvLocked = 1; - TEST_EQ(SetupTPM(0, 0, 0, 0, &rsf), 0, "SetupTPM() no firmware space"); + TEST_EQ(SetupTPM(0, 0, 0, &rsf), 0, "SetupTPM() no firmware space"); TEST_STR_EQ(mock_calls, "TlclLibInit()\n" "TlclStartup()\n" @@ -674,7 +674,7 @@ static void SetupTpmTest(void) /* Other firmware space error is passed through */ ResetMocks(5, TPM_E_IOERROR); - TEST_EQ(SetupTPM(0, 0, 0, 0, &rsf), TPM_E_CORRUPTED_STATE, + TEST_EQ(SetupTPM(0, 0, 0, &rsf), TPM_E_CORRUPTED_STATE, "SetupTPM() bad firmware space"); TEST_STR_EQ(mock_calls, "TlclLibInit()\n" @@ -686,7 +686,7 @@ static void SetupTpmTest(void) /* If developer flag has toggled, clear ownership and write new flag */ ResetMocks(0, 0); - TEST_EQ(SetupTPM(0, 1, 0, 0, &rsf), 0, "SetupTPM() to dev"); + TEST_EQ(SetupTPM(1, 0, 0, &rsf), 0, "SetupTPM() to dev"); TEST_STR_EQ(mock_calls, "TlclLibInit()\n" "TlclStartup()\n" @@ -704,7 +704,7 @@ static void SetupTpmTest(void) ResetMocks(0, 0); mock_rsf.flags = FLAG_LAST_BOOT_DEVELOPER; - TEST_EQ(SetupTPM(0, 0, 0, 0, &rsf), 0, "SetupTPM() from dev"); + TEST_EQ(SetupTPM(0, 0, 0, &rsf), 0, "SetupTPM() from dev"); TEST_STR_EQ(mock_calls, "TlclLibInit()\n" "TlclStartup()\n" @@ -721,7 +721,7 @@ static void SetupTpmTest(void) /* If TPM clear request, clear ownership also */ ResetMocks(0, 0); - TEST_EQ(SetupTPM(0, 0, 0, 1, &rsf), 0, "SetupTPM() clear owner"); + TEST_EQ(SetupTPM(0, 0, 1, &rsf), 0, "SetupTPM() clear owner"); TEST_STR_EQ(mock_calls, "TlclLibInit()\n" "TlclStartup()\n" @@ -736,13 +736,13 @@ static void SetupTpmTest(void) /* Handle request to clear virtual dev switch */ ResetMocks(0, 0); mock_rsf.flags = FLAG_VIRTUAL_DEV_MODE_ON | FLAG_LAST_BOOT_DEVELOPER; - TEST_EQ(SetupTPM(0, 0, 1, 0, &rsf), 0, "SetupTPM() clear virtual dev"); + TEST_EQ(SetupTPM(0, 1, 0, &rsf), 0, "SetupTPM() clear virtual dev"); TEST_EQ(mock_rsf.flags, 0, "Clear virtual dev"); /* If virtual dev switch is on, that should set last boot developer */ ResetMocks(0, 0); mock_rsf.flags = FLAG_VIRTUAL_DEV_MODE_ON; - SetupTPM(0, 0, 0, 0, &rsf); + SetupTPM(0, 0, 0, &rsf); TEST_EQ(mock_rsf.flags, FLAG_VIRTUAL_DEV_MODE_ON | FLAG_LAST_BOOT_DEVELOPER, "virtual dev sets last boot"); @@ -767,7 +767,7 @@ static void RollbackFirmwareTest(void) dev_mode = 0; version = 123; mock_rsf.fw_versions = 0x12345678; - TEST_EQ(RollbackFirmwareSetup(0, 0, dev_mode, 0, &dev_mode, &version), + TEST_EQ(RollbackFirmwareSetup(0, dev_mode, 0, &dev_mode, &version), 0, "RollbackFirmwareSetup()"); TEST_STR_EQ(mock_calls, "TlclLibInit()\n" @@ -783,7 +783,7 @@ static void RollbackFirmwareTest(void) dev_mode = 0; version = 123; mock_rsf.fw_versions = 0x12345678; - TEST_EQ(RollbackFirmwareSetup(0, 0, dev_mode, 0, &dev_mode, &version), + TEST_EQ(RollbackFirmwareSetup(0, dev_mode, 0, &dev_mode, &version), TPM_E_IOERROR, "RollbackFirmwareSetup() error"); TEST_STR_EQ(mock_calls, @@ -794,7 +794,7 @@ static void RollbackFirmwareTest(void) /* Developer mode flag gets passed properly */ ResetMocks(0, 0); dev_mode = 1; - TEST_EQ(RollbackFirmwareSetup(0, dev_mode, 0, 0, &dev_mode, &version), + TEST_EQ(RollbackFirmwareSetup(dev_mode, 0, 0, &dev_mode, &version), 0, "RollbackFirmwareSetup() to dev"); TEST_STR_EQ(mock_calls, "TlclLibInit()\n" @@ -814,7 +814,7 @@ static void RollbackFirmwareTest(void) /* So does clear-TPM request */ ResetMocks(0, 0); dev_mode = 0; - TEST_EQ(RollbackFirmwareSetup(0, dev_mode, 0, 1, &dev_mode, &version), + TEST_EQ(RollbackFirmwareSetup(dev_mode, 0, 1, &dev_mode, &version), 0, "RollbackFirmwareSetup() clear owner"); TEST_STR_EQ(mock_calls, "TlclLibInit()\n" @@ -886,7 +886,7 @@ static void RollbackKernelTest(void) * rollback_index.c based on recovery mode, which is set by SetupTPM(). * Clear the flag for the first set of tests. */ - TEST_EQ(SetupTPM(0, 0, 0, 0, &rsf), 0, "SetupTPM()"); + TEST_EQ(SetupTPM(0, 0, 0, &rsf), 0, "SetupTPM()"); /* Normal read */ ResetMocks(0, 0); @@ -948,7 +948,7 @@ static void RollbackKernelTest(void) "RollbackKernelLock() error"); /* Test lock with recovery on; shouldn't lock PP */ - SetupTPM(1, 0, 0, 0, &rsf); + SetupTPM(0, 0, 0, &rsf); ResetMocks(0, 0); TEST_EQ(RollbackKernelLock(1), 0, "RollbackKernelLock() in recovery"); TEST_STR_EQ(mock_calls, "", "no tlcl calls"); diff --git a/tests/rollback_index3_tests.c b/tests/rollback_index3_tests.c index 2fc1f059..e89ad0ce 100644 --- a/tests/rollback_index3_tests.c +++ b/tests/rollback_index3_tests.c @@ -24,7 +24,7 @@ int main(int argc, char* argv[]) is_virt_dev = 1; version = 1; - TEST_EQ(RollbackFirmwareSetup(0, 0, 0, 0, &is_virt_dev, &version), + TEST_EQ(RollbackFirmwareSetup(0, 0, 0, &is_virt_dev, &version), 0, "RollbackFirmwareSetup()"); TEST_EQ(is_virt_dev, 0, "rfs is_virt_dev"); TEST_EQ(version, 0, "rfs version"); diff --git a/tests/vboot_api_init_tests.c b/tests/vboot_api_init_tests.c index e04554a7..6451bd81 100644 --- a/tests/vboot_api_init_tests.c +++ b/tests/vboot_api_init_tests.c @@ -100,7 +100,7 @@ uint32_t RollbackS3Resume(void) return rollback_s3_retval; } -uint32_t RollbackFirmwareSetup(int recovery_mode, int is_hw_dev, +uint32_t RollbackFirmwareSetup(int is_hw_dev, int disable_dev_request, int clear_tpm_owner_request, /* two outputs on success */ -- cgit v1.2.1