tpmtest_writelimit.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /* Copyright (c) 2011 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. /* Test of recovery when we hit the NVRAM write limit for an unowned TPM.
  6. */
  7. #include <stdio.h>
  8. #include <stdint.h>
  9. #include <stdlib.h>
  10. #include "host_common.h"
  11. #include "tlcl.h"
  12. #include "tlcl_tests.h"
  13. #define TPM_MAX_NV_WRITES_NOOWNER 64
  14. int main(int argc, char** argv) {
  15. int i;
  16. uint32_t result;
  17. TlclLibInit();
  18. TPM_CHECK(TlclStartupIfNeeded());
  19. TPM_CHECK(TlclSelfTestFull());
  20. TPM_CHECK(TlclAssertPhysicalPresence());
  21. TPM_CHECK(TlclForceClear());
  22. TPM_CHECK(TlclSetEnable());
  23. TPM_CHECK(TlclSetDeactivated(0));
  24. for (i = 0; i < TPM_MAX_NV_WRITES_NOOWNER + 2; i++) {
  25. printf("writing %d\n", i);
  26. if ((result = TlclWrite(INDEX0, (uint8_t*)&i, sizeof(i))) != TPM_SUCCESS) {
  27. switch (result) {
  28. case TPM_E_MAXNVWRITES:
  29. VbAssert(i >= TPM_MAX_NV_WRITES_NOOWNER);
  30. break;
  31. default:
  32. VbExError("unexpected error code %d (0x%x)\n", result, result);
  33. }
  34. }
  35. }
  36. /* Reset write count */
  37. TPM_CHECK(TlclForceClear());
  38. TPM_CHECK(TlclSetEnable());
  39. TPM_CHECK(TlclSetDeactivated(0));
  40. /* Try writing again. */
  41. TPM_CHECK(TlclWrite(INDEX0, (uint8_t*)&i, sizeof(i)));
  42. printf("TEST SUCCEEDED\n");
  43. exit(0);
  44. }