Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(487)

Side by Side Diff: tests/tpm_lite/globallock.c

Issue 3389004: Rehaul of firmware TPM tests (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/vboot_reference.git
Patch Set: remove leaked change Created 10 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tests/tpm_lite/fastenable.c ('k') | tests/tpm_lite/readonly.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 5
6 /* Test of two-stage locking using bGlobalLock and PP. 6 /* Test of two-stage locking using bGlobalLock and PP.
7 */ 7 */
8 8
9 #include <stdio.h> 9 #include <stdio.h>
10 #include <stdint.h> 10 #include <stdint.h>
11 #include <stdlib.h> 11 #include <stdlib.h>
12 12
13 #include "tlcl.h" 13 #include "tlcl.h"
14 #include "tlcl_tests.h"
14 #include "utility.h" 15 #include "utility.h"
15 16
16 #define INDEX0 0xcafe
17 #define INDEX1 0xcaff
18
19 int main(int argc, char** argv) { 17 int main(int argc, char** argv) {
20 uint32_t zero = 0; 18 uint32_t zero = 0;
21 uint32_t perm;
22 uint32_t result; 19 uint32_t result;
23 uint32_t x; 20 uint32_t x;
24 21
25 TlclLibInit(); 22 TlclLibInit();
26 23 TPM_CHECK(TlclStartupIfNeeded());
27 TlclStartup(); 24 TPM_CHECK(TlclSelfTestFull());
28 TlclSelfTestFull(); 25 TPM_CHECK(TlclAssertPhysicalPresence());
29 26 TPM_CHECK(TlclRead(INDEX0, (uint8_t*) &x, sizeof(x)));
30 TlclAssertPhysicalPresence(); 27 TPM_CHECK(TlclWrite(INDEX0, (uint8_t*) &zero, sizeof(uint32_t)));
31 28 TPM_CHECK(TlclRead(INDEX1, (uint8_t*) &x, sizeof(x)));
32 result = TlclRead(INDEX0, (uint8_t*) &x, sizeof(x)); 29 TPM_CHECK(TlclWrite(INDEX1, (uint8_t*) &zero, sizeof(uint32_t)));
33 if (result == TPM_E_BADINDEX) { 30 TPM_CHECK(TlclSetGlobalLock());
34 perm = TPM_NV_PER_PPWRITE | TPM_NV_PER_GLOBALLOCK;
35 TlclDefineSpace(INDEX0, perm, sizeof(uint32_t));
36 }
37 result = TlclWrite(INDEX0, (uint8_t*) &zero, sizeof(uint32_t));
38 assert(result == TPM_SUCCESS);
39
40 result = TlclRead(INDEX1, (uint8_t*) &x, sizeof(x));
41 if (result == TPM_E_BADINDEX) {
42 perm = TPM_NV_PER_PPWRITE;
43 TlclDefineSpace(INDEX1, perm, sizeof(uint32_t));
44 }
45 result = TlclWrite(INDEX1, (uint8_t*) &zero, sizeof(uint32_t));
46 assert(result == TPM_SUCCESS);
47
48 // Sets the global lock.
49 TlclSetGlobalLock();
50 31
51 // Verifies that write to index0 fails. 32 // Verifies that write to index0 fails.
52 x = 1; 33 x = 1;
53 result = TlclWrite(INDEX0, (uint8_t*) &x, sizeof(x)); 34 result = TlclWrite(INDEX0, (uint8_t*) &x, sizeof(x));
54 if (result != TPM_E_AREA_LOCKED) { 35 assert(result == TPM_E_AREA_LOCKED);
55 error("INDEX0 is not locked\n"); 36 TPM_CHECK(TlclRead(INDEX0, (uint8_t*) &x, sizeof(x)));
56 exit(1); 37 assert(x == 0);
57 }
58 38
59 // Verifies that write to index1 is still possible. 39 // Verifies that write to index1 is still possible.
60 x = 2; 40 x = 2;
61 result = TlclWrite(INDEX1, (uint8_t*) &x, sizeof(x)); 41 TPM_CHECK(TlclWrite(INDEX1, (uint8_t*) &x, sizeof(x)));
62 if (result != TPM_SUCCESS) { 42 TPM_CHECK(TlclRead(INDEX1, (uint8_t*) &x, sizeof(x)));
63 error("failure to write at INDEX1\n"); 43 assert(x == 2);
64 exit(2);
65 }
66 44
67 // Turns off PP. 45 // Turns off PP.
68 TlclLockPhysicalPresence(); 46 TlclLockPhysicalPresence();
69 47
70 // Verifies that write to index1 fails. 48 // Verifies that write to index1 fails.
71 x = 3; 49 x = 3;
72 result = TlclWrite(INDEX1, (uint8_t*) &x, sizeof(x)); 50 result = TlclWrite(INDEX1, (uint8_t*) &x, sizeof(x));
73 if (result != TPM_E_BAD_PRESENCE) { 51 assert(result == TPM_E_BAD_PRESENCE);
74 error("INDEX1 is not locked\n"); 52 TPM_CHECK(TlclRead(INDEX1, (uint8_t*) &x, sizeof(x)));
75 exit(3); 53 assert(x == 2);
76 } 54 printf("TEST SUCCEEDED\n");
77
78 printf("Test completed successfully\n");
79 exit(0); 55 exit(0);
80 } 56 }
OLDNEW
« no previous file with comments | « tests/tpm_lite/fastenable.c ('k') | tests/tpm_lite/readonly.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698