Home | History | Annotate | Download | only in tpm_lite
      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
      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 "tlcl.h"
     15 #include "tlcl_tests.h"
     16 
     17 int main(int argc, char** argv) {
     18   uint32_t perm;
     19   uint32_t x;
     20 
     21   TlclLibInit();
     22   TPM_CHECK(TlclStartupIfNeeded());
     23   TPM_CHECK(TlclSelfTestFull());
     24   TPM_CHECK(TlclAssertPhysicalPresence());
     25 
     26   VbAssert(!TlclIsOwned());
     27 
     28   /* Ensures spaces exist. */
     29   TPM_CHECK(TlclRead(INDEX0, (uint8_t*) &x, sizeof(x)));
     30   TPM_CHECK(TlclRead(INDEX1, (uint8_t*) &x, sizeof(x)));
     31 
     32   /* Redefines spaces a couple of times. */
     33   perm = TPM_NV_PER_PPWRITE | TPM_NV_PER_GLOBALLOCK;
     34   TPM_CHECK(TlclDefineSpace(INDEX0, perm, 2 * sizeof(uint32_t)));
     35   TPM_CHECK(TlclDefineSpace(INDEX0, perm, sizeof(uint32_t)));
     36 
     37   perm = TPM_NV_PER_PPWRITE;
     38   TPM_CHECK(TlclDefineSpace(INDEX1, perm, 2 * sizeof(uint32_t)));
     39   TPM_CHECK(TlclDefineSpace(INDEX1, perm, sizeof(uint32_t)));
     40 
     41   // Sets the global lock.
     42   TlclSetGlobalLock();
     43 
     44   // Verifies that index0 cannot be redefined.
     45   TPM_EXPECT(TlclDefineSpace(INDEX0, perm, sizeof(uint32_t)),
     46              TPM_E_AREA_LOCKED);
     47 
     48   // Checks that index1 can.
     49   TPM_CHECK(TlclDefineSpace(INDEX1, perm, 2 * sizeof(uint32_t)));
     50   TPM_CHECK(TlclDefineSpace(INDEX1, perm, sizeof(uint32_t)));
     51 
     52   // Turns off PP.
     53   TlclLockPhysicalPresence();
     54 
     55   // Verifies that neither index0 nor index1 can be redefined.
     56   TPM_EXPECT(TlclDefineSpace(INDEX0, perm, sizeof(uint32_t)),
     57              TPM_E_BAD_PRESENCE);
     58   TPM_EXPECT(TlclDefineSpace(INDEX1, perm, sizeof(uint32_t)),
     59              TPM_E_BAD_PRESENCE);
     60 
     61   printf("TEST SUCCEEDED\n");
     62   exit(0);
     63 }
     64