summaryrefslogtreecommitdiff
path: root/src/lib/tpm2_marshaling.c
diff options
context:
space:
mode:
authorDuncan Laurie <dlaurie@chromium.org>2016-09-01 16:09:43 -0700
committerDuncan Laurie <dlaurie@chromium.org>2016-09-06 22:51:13 +0200
commit4a560769ad7811b9cab09325f577d389491f17ed (patch)
tree2b55c9f7889cb160ab2d6df1447211f1fd38e78d /src/lib/tpm2_marshaling.c
parente937513352ca1f5f9ac3e0e7d554cd649f55cb5e (diff)
downloadcoreboot-4a560769ad7811b9cab09325f577d389491f17ed.tar.xz
tpm2: Fix tlcl and marshaling code for CAR usage
Fix a few more instances of global variable usage in the tlcl and marshaling code for tpm2. For the tlcl case this buffer doesn't need to be static as it isn't used after this function exits. Change-Id: Ia739c81d79c6cee9046ae96061045fe4f7fb7c23 Signed-off-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-on: https://review.coreboot.org/16393 Tested-by: build bot (Jenkins) Reviewed-by: Philipp Deppenwiese <zaolin.daisuki@googlemail.com>
Diffstat (limited to 'src/lib/tpm2_marshaling.c')
-rw-r--r--src/lib/tpm2_marshaling.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/src/lib/tpm2_marshaling.c b/src/lib/tpm2_marshaling.c
index f4fd3cbc76..1edc69007a 100644
--- a/src/lib/tpm2_marshaling.c
+++ b/src/lib/tpm2_marshaling.c
@@ -546,7 +546,8 @@ struct tpm2_response *tpm_unmarshal_response(TPM_CC command,
void *response_body,
size_t in_size)
{
- static struct tpm2_response tpm2_resp;
+ static struct tpm2_response tpm2_static_resp CAR_GLOBAL;
+ struct tpm2_response *tpm2_resp = car_get_var_ptr(&tpm2_static_resp);
/*
* Should be 0 when done, positive and negaitive values indicate
* unmarshaling errors.
@@ -556,16 +557,16 @@ struct tpm2_response *tpm_unmarshal_response(TPM_CC command,
if ((cr_size < 0) || (in_size < sizeof(struct tpm_header)))
return NULL;
- tpm2_resp.hdr.tpm_tag = unmarshal_u16(&response_body, &cr_size);
- tpm2_resp.hdr.tpm_size = unmarshal_u32(&response_body, &cr_size);
- tpm2_resp.hdr.tpm_code = unmarshal_TPM_CC(&response_body, &cr_size);
+ tpm2_resp->hdr.tpm_tag = unmarshal_u16(&response_body, &cr_size);
+ tpm2_resp->hdr.tpm_size = unmarshal_u32(&response_body, &cr_size);
+ tpm2_resp->hdr.tpm_code = unmarshal_TPM_CC(&response_body, &cr_size);
if (!cr_size) {
- if (tpm2_resp.hdr.tpm_size != sizeof(tpm2_resp.hdr))
+ if (tpm2_resp->hdr.tpm_size != sizeof(tpm2_resp->hdr))
printk(BIOS_ERR,
"%s: size mismatch in response to command %#x\n",
__func__, command);
- return &tpm2_resp;
+ return tpm2_resp;
}
switch (command) {
@@ -574,12 +575,12 @@ struct tpm2_response *tpm_unmarshal_response(TPM_CC command,
case TPM2_GetCapability:
unmarshal_get_capability(&response_body, &cr_size,
- &tpm2_resp.gc);
+ &tpm2_resp->gc);
break;
case TPM2_NV_Read:
unmarshal_nv_read(&response_body, &cr_size,
- &tpm2_resp.nvr);
+ &tpm2_resp->nvr);
break;
case TPM2_Clear:
@@ -599,7 +600,7 @@ struct tpm2_response *tpm_unmarshal_response(TPM_CC command,
"Request to unmarshal unexpected command %#x,"
" code %#x",
__func__, __LINE__, command,
- tpm2_resp.hdr.tpm_code);
+ tpm2_resp->hdr.tpm_code);
for (i = 0; i < cr_size; i++) {
if (!(i % 16))
@@ -616,11 +617,11 @@ struct tpm2_response *tpm_unmarshal_response(TPM_CC command,
printk(BIOS_INFO,
"%s:%d got %d bytes back in response to %#x,"
" failed to parse (%d)\n",
- __func__, __LINE__, tpm2_resp.hdr.tpm_size,
+ __func__, __LINE__, tpm2_resp->hdr.tpm_size,
command, cr_size);
return NULL;
}
/* The entire message have been parsed. */
- return &tpm2_resp;
+ return tpm2_resp;
}