| Index: src/platform/tpm_lite/src/testsuite/readonly.c
|
| diff --git a/src/platform/tpm_lite/src/testsuite/readonly.c b/src/platform/tpm_lite/src/testsuite/readonly.c
|
| index 1707d599c9d2ac0f5022b0221535a4aa0bc00530..47ee0a4b18eec6a6196a4223bee42cde57a48fd7 100644
|
| --- a/src/platform/tpm_lite/src/testsuite/readonly.c
|
| +++ b/src/platform/tpm_lite/src/testsuite/readonly.c
|
| @@ -35,20 +35,23 @@
|
| */
|
| void InitializeSpaces(void) {
|
| uint32_t zero = 0;
|
| + uint32_t perm = TPM_NV_PER_WRITE_STCLEAR;
|
|
|
| + printf("Initializing spaces\n");
|
| TlclSetNvLocked(); /* useful only the first time */
|
|
|
| - TlclDefineSpace(INDEX0, TPM_NV_PER_WRITE_STCLEAR, 4);
|
| + TlclDefineSpace(INDEX0, perm, 4);
|
| TlclWrite(INDEX0, (uint8_t *) &zero, 4);
|
| - TlclDefineSpace(INDEX1, TPM_NV_PER_WRITE_STCLEAR, 4);
|
| + TlclDefineSpace(INDEX1, perm, 4);
|
| TlclWrite(INDEX1, (uint8_t *) &zero, 4);
|
| - TlclDefineSpace(INDEX2, TPM_NV_PER_WRITE_STCLEAR, 4);
|
| + TlclDefineSpace(INDEX2, perm, 4);
|
| TlclWrite(INDEX2, (uint8_t *) &zero, 4);
|
| - TlclDefineSpace(INDEX3, TPM_NV_PER_WRITE_STCLEAR, 4);
|
| + TlclDefineSpace(INDEX3, perm, 4);
|
| TlclWrite(INDEX3, (uint8_t *) &zero, 4);
|
|
|
| - TlclDefineSpace(INDEX_INITIALIZED, TPM_NV_PER_READ_STCLEAR, 1);
|
| - TlclReadLock(INDEX_INITIALIZED);
|
| + perm = TPM_NV_PER_READ_STCLEAR | TPM_NV_PER_WRITE_STCLEAR |
|
| + TPM_NV_PER_PPWRITE;
|
| + TlclDefineSpace(INDEX_INITIALIZED, perm, 1);
|
| }
|
|
|
|
|
| @@ -71,9 +74,10 @@ int main(void) {
|
|
|
| TlclAssertPhysicalPresence();
|
|
|
| - /* Checks if initialization has completed.
|
| + /* Checks if initialization has completed by trying to read-lock a space
|
| + * that's created at the end of initialization.
|
| */
|
| - if (TlclRead(INDEX_INITIALIZED, &c, 1) != TPM_E_DISABLED_CMD) {
|
| + if (TlclRead(INDEX_INITIALIZED, &c, 0) == TPM_E_BADINDEX) {
|
| /* The initialization did not complete.
|
| */
|
| InitializeSpaces();
|
| @@ -81,15 +85,27 @@ int main(void) {
|
|
|
| /* Checks if spaces are OK or messed up.
|
| */
|
| - if (TlclRead(INDEX0, (uint8_t *) &index_0, sizeof(index_0)) != TPM_SUCCESS ||
|
| - TlclRead(INDEX1, (uint8_t *) &index_1, sizeof(index_1)) != TPM_SUCCESS ||
|
| - TlclRead(INDEX2, (uint8_t *) &index_2, sizeof(index_2)) != TPM_SUCCESS ||
|
| - TlclRead(INDEX3, (uint8_t *) &index_3, sizeof(index_3)) != TPM_SUCCESS) {
|
| + if (TlclRead(INDEX0, (uint8_t*) &index_0, sizeof(index_0)) != TPM_SUCCESS ||
|
| + TlclRead(INDEX1, (uint8_t*) &index_1, sizeof(index_1)) != TPM_SUCCESS ||
|
| + TlclRead(INDEX2, (uint8_t*) &index_2, sizeof(index_2)) != TPM_SUCCESS ||
|
| + TlclRead(INDEX3, (uint8_t*) &index_3, sizeof(index_3)) != TPM_SUCCESS) {
|
| EnterRecoveryMode();
|
| }
|
|
|
| + /* Writes space, and locks it. Then attempts to write again. I really wish
|
| + * I could use the imperative.
|
| + */
|
| + index_0 += 1;
|
| + if (TlclWrite(INDEX0, (uint8_t*) &index_0, sizeof(index_0) != TPM_SUCCESS)) {
|
| + error("could not write index 0\n");
|
| + }
|
| + TlclWriteLock(INDEX0);
|
| + if (TlclWrite(INDEX0, (uint8_t*) &index_0, sizeof(index_0)) == TPM_SUCCESS) {
|
| + error("index 0 is not locked\n");
|
| + }
|
| +
|
| /* Done for now.
|
| */
|
| + printf("Test completed successfully\n");
|
| exit(0);
|
| }
|
| -
|
|
|