summaryrefslogtreecommitdiff
path: root/firmware/lib/tpm2_lite
diff options
context:
space:
mode:
authorAndrey Pronin <apronin@google.com>2016-07-22 19:33:07 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-07-26 23:54:27 -0700
commitc37f0f82056adca65de7b99419663dff437365c1 (patch)
tree85b1d7a8539aeea78b463357dea24ee7cdf0b4fc /firmware/lib/tpm2_lite
parent98263a1b17397032b3f7d747d48f8fd914217237 (diff)
downloadvboot-c37f0f82056adca65de7b99419663dff437365c1.tar.gz
tlcl: automatically detect if platform hierarchy is disabled
Instead of passing a special flag when 'tpmc' starts, auto-detect if platform hierarchy is disabled in TlclLibInit(). See discussion in https://chromium-review.googlesource.com/#/c/362520/. BRANCH=none BUG=chrome-os-partner:55210 BUG=chrome-os-partner:55250 TEST=boot on kevin, verify that 'tpmc read 0x1008 0xd' works Change-Id: Id94e7faadf835f7ea58a944e914163d6849e85c1 Reviewed-on: https://chromium-review.googlesource.com/362771 Commit-Ready: Andrey Pronin <apronin@chromium.org> Tested-by: Andrey Pronin <apronin@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'firmware/lib/tpm2_lite')
-rw-r--r--firmware/lib/tpm2_lite/tlcl.c39
1 files changed, 31 insertions, 8 deletions
diff --git a/firmware/lib/tpm2_lite/tlcl.c b/firmware/lib/tpm2_lite/tlcl.c
index 9d7e1dfb..a03125d3 100644
--- a/firmware/lib/tpm2_lite/tlcl.c
+++ b/firmware/lib/tpm2_lite/tlcl.c
@@ -10,6 +10,7 @@
#include "rollback_index.h"
#include "tpm2_marshaling.h"
#include "utility.h"
+#include "tlcl.h"
static struct tpm2_response *tpm_process_command(TPM_CC command,
void *command_body)
@@ -42,19 +43,40 @@ static struct tpm2_response *tpm_process_command(TPM_CC command,
return response;
}
-uint32_t TlclLibInit(void)
+static uint32_t tlcl_read_ph_disabled(void)
{
- return VbExTpmInit();
+ uint32_t rv;
+ TPM_STCLEAR_FLAGS flags;
+
+ rv = TlclGetSTClearFlags(&flags);
+ if (rv != TPM_SUCCESS)
+ return rv;
+
+ tpm_set_ph_disabled(!flags.phEnable);
+
+ return TPM_SUCCESS;
}
-uint32_t TlclLibClose(void)
+uint32_t TlclLibInit(void)
{
- return VbExTpmClose();
+ uint32_t rv;
+
+ rv = VbExTpmInit();
+ if (rv != TPM_SUCCESS)
+ return rv;
+
+ rv = tlcl_read_ph_disabled();
+ if (rv != TPM_SUCCESS) {
+ TlclLibClose();
+ return rv;
+ }
+
+ return TPM_SUCCESS;
}
-void TlclLibAccessAsUser(void)
+uint32_t TlclLibClose(void)
{
- tpm_set_ph_disabled(1);
+ return VbExTpmClose();
}
uint32_t TlclSendReceive(const uint8_t *request, uint8_t *response,
@@ -100,7 +122,7 @@ uint32_t TlclContinueSelfTest(void)
return TPM_SUCCESS;
}
-int32_t TlclDefineSpace(uint32_t index, uint32_t perm, uint32_t size)
+uint32_t TlclDefineSpace(uint32_t index, uint32_t perm, uint32_t size)
{
VBDEBUG(("%s called, NOT YET IMPLEMENTED\n", __func__));
return TPM_SUCCESS;
@@ -250,6 +272,7 @@ static uint32_t tlcl_disable_platform_hierarchy(void)
if (!response || response->hdr.tpm_code)
return TPM_E_INTERNAL_INCONSISTENCY;
+ tpm_set_ph_disabled(1);
return TPM_SUCCESS;
}
@@ -334,7 +357,7 @@ uint32_t TlclWrite(uint32_t index, const void *data, uint32_t length)
return TPM_SUCCESS;
}
-int32_t TlclPCRRead(uint32_t index, void *data, uint32_t length)
+uint32_t TlclPCRRead(uint32_t index, void *data, uint32_t length)
{
VBDEBUG(("%s called, NOT YET IMPLEMENTED\n", __func__));
return TPM_SUCCESS;