| OLD | NEW |
| 1 /* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 /* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| 2 * Use of this source code is governed by a BSD-style license that can be | 2 * Use of this source code is governed by a BSD-style license that can be |
| 3 * found in the LICENSE file. | 3 * found in the LICENSE file. |
| 4 * | 4 * |
| 5 * Functions for querying, manipulating and locking rollback indices | 5 * Functions for querying, manipulating and locking rollback indices |
| 6 * stored in the TPM NVRAM. | 6 * stored in the TPM NVRAM. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 #include "rollback_index.h" | 9 #include "rollback_index.h" |
| 10 | 10 |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 RollbackSpaceFirmware* rsf) { | 177 RollbackSpaceFirmware* rsf) { |
| 178 | 178 |
| 179 int rsf_dirty = 0; | 179 int rsf_dirty = 0; |
| 180 uint8_t new_flags = 0; | 180 uint8_t new_flags = 0; |
| 181 uint8_t disable; | 181 uint8_t disable; |
| 182 uint8_t deactivated; | 182 uint8_t deactivated; |
| 183 uint32_t result; | 183 uint32_t result; |
| 184 | 184 |
| 185 VBDEBUG(("TPM: SetupTPM(r%d, d%d)\n", recovery_mode, developer_mode)); | 185 VBDEBUG(("TPM: SetupTPM(r%d, d%d)\n", recovery_mode, developer_mode)); |
| 186 | 186 |
| 187 if (recovery_mode) |
| 188 g_rollback_recovery_mode = 1; /* Global variables are usable in |
| 189 * recovery mode */ |
| 190 |
| 187 /* TODO: TlclLibInit() should be able to return failure */ | 191 /* TODO: TlclLibInit() should be able to return failure */ |
| 188 TlclLibInit(); | 192 TlclLibInit(); |
| 189 | 193 |
| 190 RETURN_ON_FAILURE(TlclStartup()); | 194 RETURN_ON_FAILURE(TlclStartup()); |
| 191 /* Use ContinueSelfTest rather than SelfTestFull(). It enables | 195 /* Use ContinueSelfTest rather than SelfTestFull(). It enables |
| 192 * access to the subset of TPM commands we need in the firmware, and | 196 * access to the subset of TPM commands we need in the firmware, and |
| 193 * allows the full self test to run in paralle with firmware | 197 * allows the full self test to run in paralle with firmware |
| 194 * startup. By the time we get to the OS, self test will have | 198 * startup. By the time we get to the OS, self test will have |
| 195 * completed. */ | 199 * completed. */ |
| 196 RETURN_ON_FAILURE(TlclContinueSelfTest()); | 200 RETURN_ON_FAILURE(TlclContinueSelfTest()); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 /* Clears ownership if developer flag has toggled */ | 238 /* Clears ownership if developer flag has toggled */ |
| 235 if ((developer_mode ? FLAG_LAST_BOOT_DEVELOPER : 0) != | 239 if ((developer_mode ? FLAG_LAST_BOOT_DEVELOPER : 0) != |
| 236 (rsf->flags & FLAG_LAST_BOOT_DEVELOPER)) { | 240 (rsf->flags & FLAG_LAST_BOOT_DEVELOPER)) { |
| 237 VBDEBUG(("TPM: Developer flag changed; clearing owner.\n")); | 241 VBDEBUG(("TPM: Developer flag changed; clearing owner.\n")); |
| 238 RETURN_ON_FAILURE(TPMClearAndReenable()); | 242 RETURN_ON_FAILURE(TPMClearAndReenable()); |
| 239 } | 243 } |
| 240 | 244 |
| 241 /* Updates flags */ | 245 /* Updates flags */ |
| 242 if (developer_mode) | 246 if (developer_mode) |
| 243 new_flags |= FLAG_LAST_BOOT_DEVELOPER; | 247 new_flags |= FLAG_LAST_BOOT_DEVELOPER; |
| 244 if (recovery_mode) | |
| 245 g_rollback_recovery_mode = 1; /* Global variables are usable in | |
| 246 * recovery mode */ | |
| 247 | |
| 248 if (rsf->flags != new_flags) { | 248 if (rsf->flags != new_flags) { |
| 249 rsf->flags = new_flags; | 249 rsf->flags = new_flags; |
| 250 rsf_dirty = 1; | 250 rsf_dirty = 1; |
| 251 } | 251 } |
| 252 | 252 |
| 253 /* If firmware space is dirty, this flushes it back to the TPM */ | 253 /* If firmware space is dirty, this flushes it back to the TPM */ |
| 254 if (rsf_dirty) { | 254 if (rsf_dirty) { |
| 255 VBDEBUG(("TPM: Updating firmware space.\n")); | 255 VBDEBUG(("TPM: Updating firmware space.\n")); |
| 256 RETURN_ON_FAILURE(WriteSpaceFirmware(rsf)); | 256 RETURN_ON_FAILURE(WriteSpaceFirmware(rsf)); |
| 257 } | 257 } |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 432 | 432 |
| 433 uint32_t RollbackKernelLock(void) { | 433 uint32_t RollbackKernelLock(void) { |
| 434 if (g_rollback_recovery_mode) { | 434 if (g_rollback_recovery_mode) { |
| 435 return TPM_SUCCESS; | 435 return TPM_SUCCESS; |
| 436 } else { | 436 } else { |
| 437 return TlclLockPhysicalPresence(); | 437 return TlclLockPhysicalPresence(); |
| 438 } | 438 } |
| 439 } | 439 } |
| 440 | 440 |
| 441 #endif // DISABLE_ROLLBACK_TPM | 441 #endif // DISABLE_ROLLBACK_TPM |
| OLD | NEW |