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 <shawnn@chromium.org>
Change-Id: I2f671f6680a6e67cf722855e659e99752bc0783c
Reviewed-on: https://gerrit.chromium.org/gerrit/62916
Reviewed-by: Randall Spangler <rspangler@chromium.org>
This commit is contained in:
Shawn Nematbakhsh
2013-07-22 16:19:13 -07:00
committed by ChromeBot
parent 964144bf2f
commit 472d93c146
8 changed files with 34 additions and 38 deletions

View File

@@ -83,7 +83,7 @@ uint32_t RollbackS3Resume(void);
/** /**
* This must be called. * 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 disable_dev_request,
int clear_tpm_owner_request, int clear_tpm_owner_request,
/* two outputs on success */ /* 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 * Start the TPM and establish the root of trust for the anti-rollback
* mechanism. * mechanism.
*/ */
uint32_t SetupTPM(int recovery_mode, int developer_mode, uint32_t SetupTPM(int developer_mode, int disable_dev_request,
int disable_dev_request, int clear_tpm_owner_request, int clear_tpm_owner_request, RollbackSpaceFirmware *rsf);
RollbackSpaceFirmware *rsf);
/** /**
* Utility function to turn the virtual dev-mode flag on or off. 0=off, 1=on. * Utility function to turn the virtual dev-mode flag on or off. 0=off, 1=on.

View File

@@ -23,9 +23,8 @@ uint32_t TPMClearAndReenable(void) {
} }
uint32_t SetupTPM(int recovery_mode, int developer_mode, uint32_t SetupTPM(int developer_mode, int disable_dev_request,
int disable_dev_request, int clear_tpm_owner_request, int clear_tpm_owner_request, RollbackSpaceFirmware* rsf) {
RollbackSpaceFirmware* rsf) {
return TPM_SUCCESS; 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 disable_dev_request,
int clear_tpm_owner_request, int clear_tpm_owner_request,
int *is_virt_dev, uint32_t *version) { int *is_virt_dev, uint32_t *version) {

View File

@@ -341,9 +341,8 @@ uint32_t OneTimeInitializeTPM(RollbackSpaceFirmware *rsf,
* to the TPM flashram at every reboot or wake-up, because of concerns about * to the TPM flashram at every reboot or wake-up, because of concerns about
* the durability of the NVRAM. * the durability of the NVRAM.
*/ */
uint32_t SetupTPM(int recovery_mode, int developer_mode, uint32_t SetupTPM(int developer_mode, int disable_dev_request,
int disable_dev_request, int clear_tpm_owner_request, int clear_tpm_owner_request, RollbackSpaceFirmware* rsf)
RollbackSpaceFirmware* rsf)
{ {
uint8_t in_flags; uint8_t in_flags;
uint8_t disable; uint8_t disable;
@@ -351,8 +350,6 @@ uint32_t SetupTPM(int recovery_mode, int developer_mode,
uint32_t result; uint32_t result;
uint32_t versions; uint32_t versions;
VBDEBUG(("TPM: SetupTPM(r%d, d%d)\n", recovery_mode, developer_mode));
RETURN_ON_FAILURE(TlclLibInit()); RETURN_ON_FAILURE(TlclLibInit());
#ifdef TEGRA_SOFT_REBOOT_WORKAROUND #ifdef TEGRA_SOFT_REBOOT_WORKAROUND
@@ -494,7 +491,7 @@ uint32_t RollbackS3Resume(void)
return TPM_SUCCESS; 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 disable_dev_request,
int clear_tpm_owner_request, int clear_tpm_owner_request,
int *is_virt_dev, uint32_t *version) int *is_virt_dev, uint32_t *version)
@@ -556,7 +553,7 @@ uint32_t RollbackS3Resume(void)
return result; return result;
} }
uint32_t RollbackFirmwareSetup(int recovery_mode, int is_hw_dev, uint32_t RollbackFirmwareSetup(int is_hw_dev,
int disable_dev_request, int disable_dev_request,
int clear_tpm_owner_request, int clear_tpm_owner_request,
int *is_virt_dev, uint32_t *version) 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 */ /* Set version to 0 in case we fail */
*version = 0; *version = 0;
RETURN_ON_FAILURE(SetupTPM(recovery_mode, is_hw_dev, RETURN_ON_FAILURE(SetupTPM(is_hw_dev, disable_dev_request,
disable_dev_request,
clear_tpm_owner_request, &rsf)); clear_tpm_owner_request, &rsf));
Memcpy(version, &rsf.fw_versions, sizeof(*version)); Memcpy(version, &rsf.fw_versions, sizeof(*version));
*is_virt_dev = (rsf.flags & FLAG_VIRTUAL_DEV_MODE_ON) ? 1 : 0; *is_virt_dev = (rsf.flags & FLAG_VIRTUAL_DEV_MODE_ON) ? 1 : 0;

View File

@@ -175,7 +175,9 @@ VbError_t VbInit(VbCommonParams *cparams, VbInitParams *iparams)
* TPM space is initialized by this call, the virtual * TPM space is initialized by this call, the virtual
* dev-switch will be disabled by default) * 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, disable_dev_request,
clear_tpm_owner_request, clear_tpm_owner_request,
/* two outputs on success */ /* two outputs on success */

View File

@@ -31,7 +31,7 @@ int main(void)
/* rollback_index.h */ /* rollback_index.h */
RollbackS3Resume(); RollbackS3Resume();
RollbackFirmwareSetup(0, 0, 0, 0, 0, 0); RollbackFirmwareSetup(0, 0, 0, 0, 0);
RollbackFirmwareWrite(0); RollbackFirmwareWrite(0);
RollbackFirmwareLock(); RollbackFirmwareLock();
RollbackKernelRead(0); RollbackKernelRead(0);

View File

@@ -598,7 +598,7 @@ static void SetupTpmTest(void)
/* Complete setup */ /* Complete setup */
ResetMocks(0, 0); 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, TEST_STR_EQ(mock_calls,
"TlclLibInit()\n" "TlclLibInit()\n"
"TlclStartup()\n" "TlclStartup()\n"
@@ -610,7 +610,7 @@ static void SetupTpmTest(void)
/* If TPM is disabled or deactivated, must enable it */ /* If TPM is disabled or deactivated, must enable it */
ResetMocks(0, 0); ResetMocks(0, 0);
mock_pflags.disable = 1; 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"); "SetupTPM() disabled");
TEST_STR_EQ(mock_calls, TEST_STR_EQ(mock_calls,
"TlclLibInit()\n" "TlclLibInit()\n"
@@ -623,7 +623,7 @@ static void SetupTpmTest(void)
ResetMocks(0, 0); ResetMocks(0, 0);
mock_pflags.deactivated = 1; 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"); "SetupTPM() deactivated");
TEST_STR_EQ(mock_calls, TEST_STR_EQ(mock_calls,
"TlclLibInit()\n" "TlclLibInit()\n"
@@ -636,7 +636,7 @@ static void SetupTpmTest(void)
/* If physical presence command isn't enabled, try to enable it */ /* If physical presence command isn't enabled, try to enable it */
ResetMocks(3, TPM_E_IOERROR); 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, TEST_STR_EQ(mock_calls,
"TlclLibInit()\n" "TlclLibInit()\n"
"TlclStartup()\n" "TlclStartup()\n"
@@ -651,7 +651,7 @@ static void SetupTpmTest(void)
ResetMocks(5, TPM_E_BADINDEX); ResetMocks(5, TPM_E_BADINDEX);
mock_pflags.physicalPresenceLifetimeLock = 1; mock_pflags.physicalPresenceLifetimeLock = 1;
mock_pflags.nvLocked = 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, TEST_STR_EQ(mock_calls,
"TlclLibInit()\n" "TlclLibInit()\n"
"TlclStartup()\n" "TlclStartup()\n"
@@ -674,7 +674,7 @@ static void SetupTpmTest(void)
/* Other firmware space error is passed through */ /* Other firmware space error is passed through */
ResetMocks(5, TPM_E_IOERROR); 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"); "SetupTPM() bad firmware space");
TEST_STR_EQ(mock_calls, TEST_STR_EQ(mock_calls,
"TlclLibInit()\n" "TlclLibInit()\n"
@@ -686,7 +686,7 @@ static void SetupTpmTest(void)
/* If developer flag has toggled, clear ownership and write new flag */ /* If developer flag has toggled, clear ownership and write new flag */
ResetMocks(0, 0); 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, TEST_STR_EQ(mock_calls,
"TlclLibInit()\n" "TlclLibInit()\n"
"TlclStartup()\n" "TlclStartup()\n"
@@ -704,7 +704,7 @@ static void SetupTpmTest(void)
ResetMocks(0, 0); ResetMocks(0, 0);
mock_rsf.flags = FLAG_LAST_BOOT_DEVELOPER; 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, TEST_STR_EQ(mock_calls,
"TlclLibInit()\n" "TlclLibInit()\n"
"TlclStartup()\n" "TlclStartup()\n"
@@ -721,7 +721,7 @@ static void SetupTpmTest(void)
/* If TPM clear request, clear ownership also */ /* If TPM clear request, clear ownership also */
ResetMocks(0, 0); 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, TEST_STR_EQ(mock_calls,
"TlclLibInit()\n" "TlclLibInit()\n"
"TlclStartup()\n" "TlclStartup()\n"
@@ -736,13 +736,13 @@ static void SetupTpmTest(void)
/* Handle request to clear virtual dev switch */ /* Handle request to clear virtual dev switch */
ResetMocks(0, 0); ResetMocks(0, 0);
mock_rsf.flags = FLAG_VIRTUAL_DEV_MODE_ON | FLAG_LAST_BOOT_DEVELOPER; 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"); TEST_EQ(mock_rsf.flags, 0, "Clear virtual dev");
/* If virtual dev switch is on, that should set last boot developer */ /* If virtual dev switch is on, that should set last boot developer */
ResetMocks(0, 0); ResetMocks(0, 0);
mock_rsf.flags = FLAG_VIRTUAL_DEV_MODE_ON; mock_rsf.flags = FLAG_VIRTUAL_DEV_MODE_ON;
SetupTPM(0, 0, 0, 0, &rsf); SetupTPM(0, 0, 0, &rsf);
TEST_EQ(mock_rsf.flags, TEST_EQ(mock_rsf.flags,
FLAG_VIRTUAL_DEV_MODE_ON | FLAG_LAST_BOOT_DEVELOPER, FLAG_VIRTUAL_DEV_MODE_ON | FLAG_LAST_BOOT_DEVELOPER,
"virtual dev sets last boot"); "virtual dev sets last boot");
@@ -767,7 +767,7 @@ static void RollbackFirmwareTest(void)
dev_mode = 0; dev_mode = 0;
version = 123; version = 123;
mock_rsf.fw_versions = 0x12345678; 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()"); 0, "RollbackFirmwareSetup()");
TEST_STR_EQ(mock_calls, TEST_STR_EQ(mock_calls,
"TlclLibInit()\n" "TlclLibInit()\n"
@@ -783,7 +783,7 @@ static void RollbackFirmwareTest(void)
dev_mode = 0; dev_mode = 0;
version = 123; version = 123;
mock_rsf.fw_versions = 0x12345678; 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, TPM_E_IOERROR,
"RollbackFirmwareSetup() error"); "RollbackFirmwareSetup() error");
TEST_STR_EQ(mock_calls, TEST_STR_EQ(mock_calls,
@@ -794,7 +794,7 @@ static void RollbackFirmwareTest(void)
/* Developer mode flag gets passed properly */ /* Developer mode flag gets passed properly */
ResetMocks(0, 0); ResetMocks(0, 0);
dev_mode = 1; 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"); 0, "RollbackFirmwareSetup() to dev");
TEST_STR_EQ(mock_calls, TEST_STR_EQ(mock_calls,
"TlclLibInit()\n" "TlclLibInit()\n"
@@ -814,7 +814,7 @@ static void RollbackFirmwareTest(void)
/* So does clear-TPM request */ /* So does clear-TPM request */
ResetMocks(0, 0); ResetMocks(0, 0);
dev_mode = 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"); 0, "RollbackFirmwareSetup() clear owner");
TEST_STR_EQ(mock_calls, TEST_STR_EQ(mock_calls,
"TlclLibInit()\n" "TlclLibInit()\n"
@@ -886,7 +886,7 @@ static void RollbackKernelTest(void)
* rollback_index.c based on recovery mode, which is set by SetupTPM(). * rollback_index.c based on recovery mode, which is set by SetupTPM().
* Clear the flag for the first set of tests. * 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 */ /* Normal read */
ResetMocks(0, 0); ResetMocks(0, 0);
@@ -948,7 +948,7 @@ static void RollbackKernelTest(void)
"RollbackKernelLock() error"); "RollbackKernelLock() error");
/* Test lock with recovery on; shouldn't lock PP */ /* Test lock with recovery on; shouldn't lock PP */
SetupTPM(1, 0, 0, 0, &rsf); SetupTPM(0, 0, 0, &rsf);
ResetMocks(0, 0); ResetMocks(0, 0);
TEST_EQ(RollbackKernelLock(1), 0, "RollbackKernelLock() in recovery"); TEST_EQ(RollbackKernelLock(1), 0, "RollbackKernelLock() in recovery");
TEST_STR_EQ(mock_calls, "", "no tlcl calls"); TEST_STR_EQ(mock_calls, "", "no tlcl calls");

View File

@@ -24,7 +24,7 @@ int main(int argc, char* argv[])
is_virt_dev = 1; is_virt_dev = 1;
version = 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()"); 0, "RollbackFirmwareSetup()");
TEST_EQ(is_virt_dev, 0, "rfs is_virt_dev"); TEST_EQ(is_virt_dev, 0, "rfs is_virt_dev");
TEST_EQ(version, 0, "rfs version"); TEST_EQ(version, 0, "rfs version");

View File

@@ -100,7 +100,7 @@ uint32_t RollbackS3Resume(void)
return rollback_s3_retval; 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 disable_dev_request,
int clear_tpm_owner_request, int clear_tpm_owner_request,
/* two outputs on success */ /* two outputs on success */