| Index: firmware/lib/rollback_index.c
|
| diff --git a/firmware/lib/rollback_index.c b/firmware/lib/rollback_index.c
|
| index 9442b7792c3004483475d9465f8ae01a4a4a264a..697bd0e79645529e1bf01b3bf4447ff795a0451b 100644
|
| --- a/firmware/lib/rollback_index.c
|
| +++ b/firmware/lib/rollback_index.c
|
| @@ -301,6 +301,11 @@ uint32_t RollbackFirmwareSetup(int developer_mode, uint32_t* version) {
|
| return TPM_SUCCESS;
|
| }
|
|
|
| +uint32_t RollbackFirmwareRead(uint32_t* version) {
|
| + *version = 0;
|
| + return TPM_SUCCESS;
|
| +}
|
| +
|
| uint32_t RollbackFirmwareWrite(uint32_t version) {
|
| return TPM_SUCCESS;
|
| }
|
| @@ -357,6 +362,16 @@ uint32_t RollbackFirmwareSetup(int developer_mode, uint32_t* version) {
|
| return TPM_SUCCESS;
|
| }
|
|
|
| +uint32_t RollbackFirmwareRead(uint32_t* version) {
|
| + RollbackSpaceFirmware rsf;
|
| +
|
| + RETURN_ON_FAILURE(ReadSpaceFirmware(&rsf));
|
| + VBDEBUG(("TPM: RollbackFirmwareRead %x --> %x\n", (int)rsf.fw_versions,
|
| + (int)version));
|
| + *version = rsf.fw_versions;
|
| + VBDEBUG(("TPM: RollbackFirmwareRead %x\n", (int)rsf.fw_versions));
|
| + return TPM_SUCCESS;
|
| +}
|
|
|
| uint32_t RollbackFirmwareWrite(uint32_t version) {
|
| RollbackSpaceFirmware rsf;
|
| @@ -390,40 +405,32 @@ uint32_t RollbackKernelRecovery(int developer_mode) {
|
| }
|
|
|
| uint32_t RollbackKernelRead(uint32_t* version) {
|
| - if (g_rollback_recovery_mode) {
|
| - *version = 0;
|
| - } else {
|
| - RollbackSpaceKernel rsk;
|
| - uint32_t perms;
|
| -
|
| - /* Read the kernel space and verify its permissions. If the kernel
|
| - * space has the wrong permission, or it doesn't contain the right
|
| - * identifier, we give up. This will need to be fixed by the
|
| - * recovery kernel. We have to worry about this because at any time
|
| - * (even with PP turned off) the TPM owner can remove and redefine a
|
| - * PP-protected space (but not write to it). */
|
| - RETURN_ON_FAILURE(ReadSpaceKernel(&rsk));
|
| - RETURN_ON_FAILURE(TlclGetPermissions(KERNEL_NV_INDEX, &perms));
|
| - if (TPM_NV_PER_PPWRITE != perms || ROLLBACK_SPACE_KERNEL_UID != rsk.uid)
|
| - return TPM_E_CORRUPTED_STATE;
|
| -
|
| - *version = rsk.kernel_versions;
|
| - VBDEBUG(("TPM: RollbackKernelRead %x\n", (int)rsk.kernel_versions));
|
| - }
|
| + RollbackSpaceKernel rsk;
|
| + uint32_t perms;
|
| +
|
| + /* Read the kernel space and verify its permissions. If the kernel
|
| + * space has the wrong permission, or it doesn't contain the right
|
| + * identifier, we give up. This will need to be fixed by the
|
| + * recovery kernel. We have to worry about this because at any time
|
| + * (even with PP turned off) the TPM owner can remove and redefine a
|
| + * PP-protected space (but not write to it). */
|
| + RETURN_ON_FAILURE(ReadSpaceKernel(&rsk));
|
| + RETURN_ON_FAILURE(TlclGetPermissions(KERNEL_NV_INDEX, &perms));
|
| + if (TPM_NV_PER_PPWRITE != perms || ROLLBACK_SPACE_KERNEL_UID != rsk.uid)
|
| + return TPM_E_CORRUPTED_STATE;
|
| +
|
| + *version = rsk.kernel_versions;
|
| + VBDEBUG(("TPM: RollbackKernelRead %x\n", (int)rsk.kernel_versions));
|
| return TPM_SUCCESS;
|
| }
|
|
|
| uint32_t RollbackKernelWrite(uint32_t version) {
|
| - if (g_rollback_recovery_mode) {
|
| - return TPM_SUCCESS;
|
| - } else {
|
| - RollbackSpaceKernel rsk;
|
| - RETURN_ON_FAILURE(ReadSpaceKernel(&rsk));
|
| - VBDEBUG(("TPM: RollbackKernelWrite %x --> %x\n", (int)rsk.kernel_versions,
|
| - (int)version));
|
| - rsk.kernel_versions = version;
|
| - return WriteSpaceKernel(&rsk);
|
| - }
|
| + RollbackSpaceKernel rsk;
|
| + RETURN_ON_FAILURE(ReadSpaceKernel(&rsk));
|
| + VBDEBUG(("TPM: RollbackKernelWrite %x --> %x\n", (int)rsk.kernel_versions,
|
| + (int)version));
|
| + rsk.kernel_versions = version;
|
| + return WriteSpaceKernel(&rsk);
|
| }
|
|
|
| uint32_t RollbackKernelLock(void) {
|
|
|