diff options
author | Andreas Fuchs <andreas.fuchs@sit.fraunhofer.de> | 2018-03-27 17:26:57 +0200 |
---|---|---|
committer | Tadeusz Struk <tadeusz.struk@intel.com> | 2018-03-28 16:18:40 -0700 |
commit | 2bcb5b40124ec67f13e16eb453ff76d44f7dd13b (patch) | |
tree | fe34e7aa8124b6fce75c0d72bf53c8c769c76a11 /src/tss2-mu | |
parent | d20c6b79eadc463e7a879309df22940821b7aa7b (diff) | |
download | tpm2-tss-2bcb5b40124ec67f13e16eb453ff76d44f7dd13b.tar.gz |
MU: TPML/TPMS: initialize dest and save stack
This will now initialize dest parameters to Zero,
such that they can be passed in uninitialized.
Also remove a variable from stack to save some memory.
Fixes: #847
Signed-off-by: Andreas Fuchs <andreas.fuchs@sit.fraunhofer.de>
Diffstat (limited to 'src/tss2-mu')
-rw-r--r-- | src/tss2-mu/tpml-types.c | 12 | ||||
-rw-r--r-- | src/tss2-mu/tpms-types.c | 24 |
2 files changed, 30 insertions, 6 deletions
diff --git a/src/tss2-mu/tpml-types.c b/src/tss2-mu/tpml-types.c index feb95523..a3842c95 100644 --- a/src/tss2-mu/tpml-types.c +++ b/src/tss2-mu/tpml-types.c @@ -113,7 +113,6 @@ TSS2_RC Tss2_MU_##type##_Unmarshal(uint8_t const buffer[], size_t buffer_size, \ size_t local_offset = 0; \ UINT32 i, count = 0; \ TSS2_RC ret = TSS2_RC_SUCCESS; \ - type local_dst; \ \ if (offset != NULL) { \ LOG_TRACE("offset non-NULL, initial value: %zu", *offset); \ @@ -142,9 +141,6 @@ TSS2_RC Tss2_MU_##type##_Unmarshal(uint8_t const buffer[], size_t buffer_size, \ (uintptr_t)dest, \ local_offset); \ \ - if (dest == NULL) \ - dest = &local_dst; \ -\ ret = Tss2_MU_UINT32_Unmarshal(buffer, buffer_size, &local_offset, &count); \ if (ret) \ return ret; \ @@ -154,11 +150,15 @@ TSS2_RC Tss2_MU_##type##_Unmarshal(uint8_t const buffer[], size_t buffer_size, \ return TSS2_SYS_RC_MALFORMED_RESPONSE; \ } \ \ - dest->count = count; \ + if (dest != NULL) { \ + memset(dest, 0, sizeof(*dest)); \ + dest->count = count; \ + } \ \ for (i = 0; i < count; i++) \ { \ - ret = unmarshal_func(buffer, buffer_size, &local_offset, &dest->buf_name[i]); \ + ret = unmarshal_func(buffer, buffer_size, &local_offset, \ + (dest == NULL)? NULL: &dest->buf_name[i]); \ if (ret) \ return ret; \ } \ diff --git a/src/tss2-mu/tpms-types.c b/src/tss2-mu/tpms-types.c index 17d920f7..b913595f 100644 --- a/src/tss2-mu/tpms-types.c +++ b/src/tss2-mu/tpms-types.c @@ -274,6 +274,9 @@ TSS2_RC Tss2_MU_##type##_Unmarshal(uint8_t const buffer[], size_t buffer_size, \ return TSS2_MU_RC_BAD_REFERENCE; \ } \ \ + if (dest) \ + memset(dest, 0, sizeof(*dest)); \ +\ ret = fn1(buffer, buffer_size, &local_offset, dest ? &dest->m1 : &tmp_dest.m1); \ if (ret != TSS2_RC_SUCCESS) \ return ret; \ @@ -337,6 +340,9 @@ TSS2_RC Tss2_MU_##type##_Unmarshal(uint8_t const buffer[], size_t buffer_size, \ return TSS2_MU_RC_BAD_REFERENCE; \ } \ \ + if (dest) \ + memset(dest, 0, sizeof(*dest)); \ +\ ret = fn1(buffer, buffer_size, &local_offset, dest ? &dest->m1 : NULL); \ if (ret != TSS2_RC_SUCCESS) \ return ret; \ @@ -404,6 +410,9 @@ TSS2_RC Tss2_MU_##type##_Unmarshal(uint8_t const buffer[], size_t buffer_size, \ return TSS2_MU_RC_BAD_REFERENCE; \ } \ \ + if (dest) \ + memset(dest, 0, sizeof(*dest)); \ +\ ret = fn1(buffer, buffer_size, &local_offset, dest ? &dest->m1 : NULL); \ if (ret != TSS2_RC_SUCCESS) \ return ret; \ @@ -475,6 +484,9 @@ TSS2_RC Tss2_MU_##type##_Unmarshal(uint8_t const buffer[], size_t buffer_size, \ return TSS2_MU_RC_BAD_REFERENCE; \ } \ \ + if (dest) \ + memset(dest, 0, sizeof(*dest)); \ +\ LOG_DEBUG(\ "Unmarshalling " #type " from 0x%" PRIxPTR " to buffer 0x%" PRIxPTR \ " at index 0x%zx", (uintptr_t)dest, (uintptr_t)buffer, offset?*offset:0xffff); \ @@ -563,6 +575,9 @@ TSS2_RC Tss2_MU_##type##_Unmarshal(uint8_t const buffer[], size_t buffer_size, \ return TSS2_MU_RC_BAD_REFERENCE; \ } \ \ + if (dest) \ + memset(dest, 0, sizeof(*dest)); \ +\ ret = fn1(buffer, buffer_size, &local_offset, dest ? &dest->m1 : NULL); \ if (ret != TSS2_RC_SUCCESS) \ return ret; \ @@ -659,6 +674,9 @@ TSS2_RC Tss2_MU_##type##_Unmarshal(uint8_t const buffer[], size_t buffer_size, \ return TSS2_MU_RC_BAD_REFERENCE; \ } \ \ + if (dest) \ + memset(dest, 0, sizeof(*dest)); \ +\ ret = fn1(buffer, buffer_size, &local_offset, dest ? &dest->m1 : NULL); \ if (ret != TSS2_RC_SUCCESS) \ return ret; \ @@ -763,6 +781,9 @@ TSS2_RC Tss2_MU_##type##_Unmarshal(uint8_t const buffer[], size_t buffer_size, \ return TSS2_MU_RC_BAD_REFERENCE; \ } \ \ + if (dest) \ + memset(dest, 0, sizeof(*dest)); \ +\ ret = fn1(buffer, buffer_size, &local_offset, dest ? &dest->m1 : NULL); \ if (ret != TSS2_RC_SUCCESS) \ return ret; \ @@ -885,6 +906,9 @@ TSS2_RC Tss2_MU_##type##_Unmarshal(uint8_t const buffer[], size_t buffer_size, \ return TSS2_MU_RC_BAD_REFERENCE; \ } \ \ + if (dest) \ + memset(dest, 0, sizeof(*dest)); \ +\ ret = fn1(buffer, buffer_size, &local_offset, dest ? &dest->m1 : NULL); \ if (ret != TSS2_RC_SUCCESS) \ return ret; \ |