Skip to content

Commit 7dbb21e

Browse files
committed
Fix memory handling and coopilot comments
1 parent f1f6337 commit 7dbb21e

2 files changed

Lines changed: 36 additions & 16 deletions

File tree

src/tpm2_spdm.c

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -213,45 +213,62 @@ int wolfTPM2_SPDM_SecuredExchange(
213213
if (wolfSPDM_GetMode(ctx->spdmCtx) == WOLFSPDM_MODE_NUVOTON ||
214214
wolfSPDM_GetMode(ctx->spdmCtx) == WOLFSPDM_MODE_NATIONS ||
215215
wolfSPDM_GetMode(ctx->spdmCtx) == WOLFSPDM_MODE_NATIONS_PSK) {
216+
#ifdef WOLFTPM_SMALL_STACK
217+
byte* vdMsg = (byte*)XMALLOC(WOLFSPDM_MAX_MSG_SIZE, NULL,
218+
DYNAMIC_TYPE_TMP_BUFFER);
219+
byte* vdRsp = (byte*)XMALLOC(WOLFSPDM_MAX_MSG_SIZE, NULL,
220+
DYNAMIC_TYPE_TMP_BUFFER);
221+
#else
216222
byte vdMsg[WOLFSPDM_MAX_MSG_SIZE];
217223
byte vdRsp[WOLFSPDM_MAX_MSG_SIZE];
218-
word32 vdRspSz = sizeof(vdRsp);
224+
#endif
225+
word32 vdRspSz = WOLFSPDM_MAX_MSG_SIZE;
219226
char rspVdCode[WOLFSPDM_VDCODE_LEN + 1];
220227
int vdMsgSz;
221-
int rc;
228+
int rc = 0;
222229
byte ver;
223230

231+
#ifdef WOLFTPM_SMALL_STACK
232+
if (vdMsg == NULL || vdRsp == NULL) {
233+
XFREE(vdMsg, NULL, DYNAMIC_TYPE_TMP_BUFFER);
234+
XFREE(vdRsp, NULL, DYNAMIC_TYPE_TMP_BUFFER);
235+
return MEMORY_E;
236+
}
237+
#endif
238+
224239
/* Wrap TPM command in SPDM VENDOR_DEFINED_REQUEST("TPM2_CMD") */
225240
ver = wolfSPDM_GetNegotiatedVersion(ctx->spdmCtx);
226241
if (ver == 0) ver = SPDM_VERSION_13;
227242
vdMsgSz = wolfSPDM_BuildVendorDefined(ver,
228243
WOLFSPDM_VDCODE_TPM2_CMD,
229-
cmdPlain, cmdSz, vdMsg, sizeof(vdMsg));
244+
cmdPlain, cmdSz, vdMsg, WOLFSPDM_MAX_MSG_SIZE);
230245
if (vdMsgSz < 0) {
231-
return vdMsgSz;
246+
rc = vdMsgSz;
232247
}
233248

234249
/* Send encrypted VENDOR_DEFINED, receive encrypted response */
235-
rc = wolfSPDM_SecuredExchange(ctx->spdmCtx,
236-
vdMsg, (word32)vdMsgSz, vdRsp, &vdRspSz);
237-
if (rc != 0) {
238-
return rc;
250+
if (rc == 0) {
251+
rc = wolfSPDM_SecuredExchange(ctx->spdmCtx,
252+
vdMsg, (word32)vdMsgSz, vdRsp, &vdRspSz);
239253
}
240254

241255
/* Parse VENDOR_DEFINED_RESPONSE to extract TPM response */
242-
rc = wolfSPDM_ParseVendorDefined(vdRsp, vdRspSz,
243-
rspVdCode, rspPlain, rspSz);
244-
if (rc < 0) {
245-
return rc;
256+
if (rc == 0) {
257+
rc = wolfSPDM_ParseVendorDefined(vdRsp, vdRspSz,
258+
rspVdCode, rspPlain, rspSz);
246259
}
247260

248261
/* Verify response is for our TPM2_CMD request */
249-
if (XMEMCMP(rspVdCode, WOLFSPDM_VDCODE_TPM2_CMD,
262+
if (rc == 0 && XMEMCMP(rspVdCode, WOLFSPDM_VDCODE_TPM2_CMD,
250263
WOLFSPDM_VDCODE_LEN) != 0) {
251-
return WOLFSPDM_E_PEER_ERROR;
264+
rc = WOLFSPDM_E_PEER_ERROR;
252265
}
253266

254-
return TPM_RC_SUCCESS;
267+
#ifdef WOLFTPM_SMALL_STACK
268+
XFREE(vdMsg, NULL, DYNAMIC_TYPE_TMP_BUFFER);
269+
XFREE(vdRsp, NULL, DYNAMIC_TYPE_TMP_BUFFER);
270+
#endif
271+
return rc;
255272
}
256273
#endif /* WOLFTPM_SPDM_TCG */
257274

src/tpm2_wrap.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1290,7 +1290,10 @@ int wolfTPM2_SpdmConnectNuvoton(WOLFTPM2_DEV* dev,
12901290
pubKeyY, &ySz);
12911291
wc_ecc_free(&hostKey);
12921292
wc_FreeRng(&rng);
1293-
if (rc != 0) return rc;
1293+
if (rc != 0) {
1294+
wc_ForceZero(privKey, sizeof(privKey));
1295+
return rc;
1296+
}
12941297

12951298
/* Set raw key pair (X||Y format) */
12961299
XMEMCPY(rawPubKey, pubKeyX, 48);

0 commit comments

Comments
 (0)