@@ -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
0 commit comments