Skip to content

Commit 960cb90

Browse files
authored
Merge pull request #462 from jackctj117/CONTENT_SIZE
Use heap allocation for CSR PEM conversion on small stack builds
2 parents b4b4509 + 2d68f82 commit 960cb90

1 file changed

Lines changed: 32 additions & 6 deletions

File tree

src/tpm2_wrap.c

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7526,15 +7526,28 @@ static int CSR_MakeAndSign(WOLFTPM2_DEV* dev, WOLFTPM2_CSR* csr, CSRKey* key,
75267526
/* Optionally convert to PEM */
75277527
if (rc >= 0 && outFormat == ENCODING_TYPE_PEM) {
75287528
#ifdef WOLFSSL_DER_TO_PEM
7529+
#ifdef WOLFTPM_SMALL_STACK
7530+
byte* tmp = (byte*)XMALLOC(rc, NULL, DYNAMIC_TYPE_TMP_BUFFER);
7531+
if (tmp == NULL) {
7532+
rc = MEMORY_E;
7533+
}
7534+
else
7535+
#else
75297536
byte tmp[MAX_CONTEXT_SIZE];
75307537
if (rc > (int)sizeof(tmp)) {
75317538
rc = BUFFER_E;
75327539
}
7533-
else {
7534-
XMEMCPY(tmp, out, rc);
7540+
else
7541+
#endif
7542+
{
7543+
int derSz = rc;
7544+
XMEMCPY(tmp, out, derSz);
75357545
XMEMSET(out, 0, outSz);
7536-
rc = wc_DerToPem(tmp, (word32)rc, out, outSz,
7546+
rc = wc_DerToPem(tmp, (word32)derSz, out, outSz,
75377547
selfSignCert ? CERT_TYPE : CERTREQ_TYPE);
7548+
#ifdef WOLFTPM_SMALL_STACK
7549+
XFREE(tmp, NULL, DYNAMIC_TYPE_TMP_BUFFER);
7550+
#endif
75387551
}
75397552
#else
75407553
#ifdef DEBUG_WOLFTPM
@@ -7666,15 +7679,28 @@ static int CSR_MakeAndSign_Cb(WOLFTPM2_DEV* dev, WOLFTPM2_CSR* csr,
76667679
/* Optionally convert to PEM */
76677680
if (rc >= 0 && outFormat == ENCODING_TYPE_PEM) {
76687681
#ifdef WOLFSSL_DER_TO_PEM
7682+
#ifdef WOLFTPM_SMALL_STACK
7683+
byte* tmp = (byte*)XMALLOC(rc, NULL, DYNAMIC_TYPE_TMP_BUFFER);
7684+
if (tmp == NULL) {
7685+
rc = MEMORY_E;
7686+
}
7687+
else
7688+
#else
76697689
byte tmp[MAX_CONTEXT_SIZE];
76707690
if (rc > (int)sizeof(tmp)) {
76717691
rc = BUFFER_E;
76727692
}
7673-
else {
7674-
XMEMCPY(tmp, out, rc);
7693+
else
7694+
#endif
7695+
{
7696+
int derSz = rc;
7697+
XMEMCPY(tmp, out, derSz);
76757698
XMEMSET(out, 0, outSz);
7676-
rc = wc_DerToPem(tmp, (word32)rc, out, outSz,
7699+
rc = wc_DerToPem(tmp, (word32)derSz, out, outSz,
76777700
selfSignCert ? CERT_TYPE : CERTREQ_TYPE);
7701+
#ifdef WOLFTPM_SMALL_STACK
7702+
XFREE(tmp, NULL, DYNAMIC_TYPE_TMP_BUFFER);
7703+
#endif
76787704
}
76797705
#else
76807706
#ifdef DEBUG_WOLFTPM

0 commit comments

Comments
 (0)