Index: firmware/lib/include/rollback_index.h |
diff --git a/firmware/lib/include/rollback_index.h b/firmware/lib/include/rollback_index.h |
index df132e76c661790edff7c53f24b3aca8760c5e4e..f13b6ede0c35ab4dd8b79fb9d41c6be355deb005 100644 |
--- a/firmware/lib/include/rollback_index.h |
+++ b/firmware/lib/include/rollback_index.h |
@@ -12,30 +12,47 @@ |
#include "sysincludes.h" |
#include "tss_constants.h" |
-/* Rollback version types. */ |
-#define FIRMWARE_VERSIONS 0 |
-#define KERNEL_VERSIONS 1 |
- |
-/* Initialization mode */ |
-#define RO_RECOVERY_MODE 0 |
-#define RO_NORMAL_MODE 1 |
-#define RW_NORMAL_MODE 2 |
- |
/* TPM NVRAM location indices. */ |
-#define FIRST_ROLLBACK_NV_INDEX 0x1001 /* First index used here */ |
-#define FIRMWARE_VERSIONS_NV_INDEX 0x1001 |
-#define KERNEL_VERSIONS_NV_INDEX 0x1002 |
-#define TPM_IS_INITIALIZED_NV_INDEX 0x1003 |
-#define KERNEL_VERSIONS_BACKUP_NV_INDEX 0x1004 |
-#define KERNEL_MUST_USE_BACKUP_NV_INDEX 0x1005 |
-#define DEVELOPER_MODE_NV_INDEX 0x1006 |
-#define LAST_ROLLBACK_NV_INDEX 0x1006 /* Last index used here */ |
- |
-/* Unique ID to detect kernel space redefinition */ |
-#define KERNEL_SPACE_UID "GRWL" /* unique ID with secret meaning */ |
-#define KERNEL_SPACE_UID_SIZE (sizeof(KERNEL_SPACE_UID) - 1) |
-#define KERNEL_SPACE_INIT_DATA ((uint8_t*) "\0\0\0\0" KERNEL_SPACE_UID) |
-#define KERNEL_SPACE_SIZE (sizeof(uint32_t) + KERNEL_SPACE_UID_SIZE) |
+#define FIRMWARE_NV_INDEX 0x1007 |
+#define KERNEL_NV_INDEX 0x1008 |
+ |
+/* Structure definitions for TPM spaces */ |
+ |
+__pragma(pack(push, 1)) /* Support packing for MSVC. */ |
+ |
+/* Kernel space - KERNEL_NV_INDEX, locked with physical presence. */ |
+#define ROLLBACK_SPACE_KERNEL_VERSION 1 |
+#define ROLLBACK_SPACE_KERNEL_UID 0x4752574C /* 'GRWL' */ |
+typedef struct RollbackSpaceKernel { |
+ uint8_t struct_version; /* Struct version, for backwards |
+ * compatibility */ |
+ uint32_t uid; /* Unique ID to detect space redefinition */ |
+ uint32_t kernel_versions; /* Kernel versions */ |
+ uint32_t reserved; /* Reserved for future expansion */ |
+} __attribute__((packed)) RollbackSpaceKernel; |
+ |
+ |
+/* Flags for firmware space */ |
+/* Last boot was developer mode. TPM ownership is cleared when |
+ * transitioning to/from developer mode. */ |
+#define FLAG_LAST_BOOT_DEVELOPER 0x01 |
+/* There have been one or more boots which left PP unlocked, so the |
+ * contents of the kernel space are untrusted and must be restored |
+ * from the backup copy. */ |
+#define FLAG_KERNEL_SPACE_USE_BACKUP 0x02 |
+ |
+#define ROLLBACK_SPACE_FIRMWARE_VERSION 1 |
+/* Firmware space - FIRMWARE_NV_INDEX, locked with global lock. */ |
+typedef struct RollbackSpaceFirmware { |
+ uint8_t struct_version; /* Struct version, for backwards compatibility */ |
+ uint8_t flags; /* Flags (see FLAG_* above) */ |
+ uint32_t fw_versions; /* Firmware versions */ |
+ uint32_t reserved; /* Reserved for future expansion */ |
+ RollbackSpaceKernel kernel_backup; /* Backup of kernel space */ |
+} __attribute__((packed)) RollbackSpaceFirmware; |
+ |
+__pragma(pack(pop)) /* Support packing for MSVC. */ |
+ |
/* All functions return TPM_SUCCESS (zero) if successful, non-zero if error */ |
@@ -72,10 +89,12 @@ Call from LoadKernel() |
/* Setup must be called. Pass developer_mode=nonzero if in developer |
* mode. */ |
-uint32_t RollbackFirmwareSetup(int developer_mode); |
-/* Read and Write may be called after Setup. */ |
-uint32_t RollbackFirmwareRead(uint16_t* key_version, uint16_t* version); |
+/* TODO: use a 32-bit version instead of 2 version pieces */ |
+uint32_t RollbackFirmwareSetup(int developer_mode, uint16_t* key_version, |
+ uint16_t* version); |
+ |
/* Write may be called if the versions change */ |
+/* TODO: use a 32-bit version instead of 2 version pieces */ |
Luigi Semenzato
2010/08/12 01:12:30
Maybe have Gaurav review this (future) change.
|
uint32_t RollbackFirmwareWrite(uint16_t key_version, uint16_t version); |
/* Lock must be called */ |
@@ -92,6 +111,7 @@ uint32_t RollbackKernelRecovery(int developer_mode); |
/* Read and write may be called if not in developer mode. If called in |
* recovery mode, the effect is undefined. */ |
+/* TODO: use a 32-bit version instead of 2 version pieces */ |
uint32_t RollbackKernelRead(uint16_t* key_version, uint16_t* version); |
uint32_t RollbackKernelWrite(uint16_t key_version, uint16_t version); |
@@ -100,10 +120,6 @@ uint32_t RollbackKernelLock(void); |
/* The following functions are here for testing only. */ |
-/* Store 1 in *|initialized| if the TPM NVRAM spaces have been initialized, 0 |
- * otherwise. Return TPM errors. */ |
-uint32_t GetSpacesInitialized(int* initialized); |
- |
/* Issue a TPM_Clear and reenable/reactivate the TPM. */ |
uint32_t TPMClearAndReenable(void); |