Skip to content

Commit 2d68f82

Browse files
committed
Fix MAX_CONTEXT_SIZE stack buffer in CSR PEM conversion using heap allocation for small stack builds
1 parent bdd6277 commit 2d68f82

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
@@ -7482,15 +7482,28 @@ static int CSR_MakeAndSign(WOLFTPM2_DEV* dev, WOLFTPM2_CSR* csr, CSRKey* key,
74827482
/* Optionally convert to PEM */
74837483
if (rc >= 0 && outFormat == ENCODING_TYPE_PEM) {
74847484
#ifdef WOLFSSL_DER_TO_PEM
7485+
#ifdef WOLFTPM_SMALL_STACK
7486+
byte* tmp = (byte*)XMALLOC(rc, NULL, DYNAMIC_TYPE_TMP_BUFFER);
7487+
if (tmp == NULL) {
7488+
rc = MEMORY_E;
7489+
}
7490+
else
7491+
#else
74857492
byte tmp[MAX_CONTEXT_SIZE];
74867493
if (rc > (int)sizeof(tmp)) {
74877494
rc = BUFFER_E;
74887495
}
7489-
else {
7490-
XMEMCPY(tmp, out, rc);
7496+
else
7497+
#endif
7498+
{
7499+
int derSz = rc;
7500+
XMEMCPY(tmp, out, derSz);
74917501
XMEMSET(out, 0, outSz);
7492-
rc = wc_DerToPem(tmp, (word32)rc, out, outSz,
7502+
rc = wc_DerToPem(tmp, (word32)derSz, out, outSz,
74937503
selfSignCert ? CERT_TYPE : CERTREQ_TYPE);
7504+
#ifdef WOLFTPM_SMALL_STACK
7505+
XFREE(tmp, NULL, DYNAMIC_TYPE_TMP_BUFFER);
7506+
#endif
74947507
}
74957508
#else
74967509
#ifdef DEBUG_WOLFTPM
@@ -7622,15 +7635,28 @@ static int CSR_MakeAndSign_Cb(WOLFTPM2_DEV* dev, WOLFTPM2_CSR* csr,
76227635
/* Optionally convert to PEM */
76237636
if (rc >= 0 && outFormat == ENCODING_TYPE_PEM) {
76247637
#ifdef WOLFSSL_DER_TO_PEM
7638+
#ifdef WOLFTPM_SMALL_STACK
7639+
byte* tmp = (byte*)XMALLOC(rc, NULL, DYNAMIC_TYPE_TMP_BUFFER);
7640+
if (tmp == NULL) {
7641+
rc = MEMORY_E;
7642+
}
7643+
else
7644+
#else
76257645
byte tmp[MAX_CONTEXT_SIZE];
76267646
if (rc > (int)sizeof(tmp)) {
76277647
rc = BUFFER_E;
76287648
}
7629-
else {
7630-
XMEMCPY(tmp, out, rc);
7649+
else
7650+
#endif
7651+
{
7652+
int derSz = rc;
7653+
XMEMCPY(tmp, out, derSz);
76317654
XMEMSET(out, 0, outSz);
7632-
rc = wc_DerToPem(tmp, (word32)rc, out, outSz,
7655+
rc = wc_DerToPem(tmp, (word32)derSz, out, outSz,
76337656
selfSignCert ? CERT_TYPE : CERTREQ_TYPE);
7657+
#ifdef WOLFTPM_SMALL_STACK
7658+
XFREE(tmp, NULL, DYNAMIC_TYPE_TMP_BUFFER);
7659+
#endif
76347660
}
76357661
#else
76367662
#ifdef DEBUG_WOLFTPM

0 commit comments

Comments
 (0)