aboutsummaryrefslogtreecommitdiff
path: root/src/tss2-mu
diff options
context:
space:
mode:
authorAndreas Fuchs <andreas.fuchs@sit.fraunhofer.de>2018-03-27 17:26:57 +0200
committerTadeusz Struk <tadeusz.struk@intel.com>2018-03-28 16:18:40 -0700
commit2bcb5b40124ec67f13e16eb453ff76d44f7dd13b (patch)
treefe34e7aa8124b6fce75c0d72bf53c8c769c76a11 /src/tss2-mu
parentd20c6b79eadc463e7a879309df22940821b7aa7b (diff)
downloadtpm2-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.c12
-rw-r--r--src/tss2-mu/tpms-types.c24
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; \