1 /* Copyright 2010 The ChromiumOS Authors
2 * Use of this source code is governed by a BSD-style license that can be
3 * found in the LICENSE file.
4 */
5
6 /* Test of protection from space redefinition when an owner is NOT present.
7 */
8
9 #include <stdio.h>
10 #include <stdint.h>
11 #include <stdlib.h>
12
13 #include "host_common.h"
14 #include "common/tests.h"
15 #include "tlcl.h"
16 #include "tlcl_tests.h"
17
main(int argc,char ** argv)18 int main(int argc, char** argv) {
19 uint32_t perm;
20 uint32_t x;
21
22 TlclLibInit();
23 TPM_CHECK(TlclStartupIfNeeded());
24 TPM_CHECK(TlclSelfTestFull());
25 TPM_CHECK(TlclAssertPhysicalPresence());
26
27 TEST_FALSE(TlclIsOwned(), "TlclIsOwned should return false");
28
29 /* Ensures spaces exist. */
30 TPM_CHECK(TlclRead(INDEX0, (uint8_t*) &x, sizeof(x)));
31 TPM_CHECK(TlclRead(INDEX1, (uint8_t*) &x, sizeof(x)));
32
33 /* Redefines spaces a couple of times. */
34 perm = TPM_NV_PER_PPWRITE | TPM_NV_PER_GLOBALLOCK;
35 TPM_CHECK(TlclDefineSpace(INDEX0, perm, 2 * sizeof(uint32_t)));
36 TPM_CHECK(TlclDefineSpace(INDEX0, perm, sizeof(uint32_t)));
37
38 perm = TPM_NV_PER_PPWRITE;
39 TPM_CHECK(TlclDefineSpace(INDEX1, perm, 2 * sizeof(uint32_t)));
40 TPM_CHECK(TlclDefineSpace(INDEX1, perm, sizeof(uint32_t)));
41
42 // Sets the global lock.
43 TlclSetGlobalLock();
44
45 // Verifies that index0 cannot be redefined.
46 TPM_EXPECT(TlclDefineSpace(INDEX0, perm, sizeof(uint32_t)),
47 TPM_E_AREA_LOCKED);
48
49 // Checks that index1 can.
50 TPM_CHECK(TlclDefineSpace(INDEX1, perm, 2 * sizeof(uint32_t)));
51 TPM_CHECK(TlclDefineSpace(INDEX1, perm, sizeof(uint32_t)));
52
53 // Turns off PP.
54 TlclLockPhysicalPresence();
55
56 // Verifies that neither index0 nor index1 can be redefined.
57 TPM_EXPECT(TlclDefineSpace(INDEX0, perm, sizeof(uint32_t)),
58 TPM_E_BAD_PRESENCE);
59 TPM_EXPECT(TlclDefineSpace(INDEX1, perm, sizeof(uint32_t)),
60 TPM_E_BAD_PRESENCE);
61
62 printf("TEST SUCCEEDED\n");
63 exit(0);
64 }
65