diff options
-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; \ |