F-13532 - Bound the advanced IO SPI size to the frame buffer

pull/604/head
Aidan Garske 2026-09-10 11:14:43 -07:00
parent 03446a7169
commit 4b76ba64a0
1 changed files with 22 additions and 17 deletions

View File

@ -183,27 +183,32 @@ int TPM2_IoCb(TPM2_CTX* ctx, INT32 isRead, UINT32 addr,
(void)userCtx;
#endif
#else
/* Build TPM header */
txBuf[1] = (addr>>16) & 0xFF;
txBuf[2] = (addr>>8) & 0xFF;
txBuf[3] = (addr) & 0xFF;
if (isRead) {
txBuf[0] = TPM_TIS_READ | ((size & 0xFF) - 1);
XMEMSET(&txBuf[TPM_TIS_HEADER_SZ], 0,
sizeof(txBuf) - TPM_TIS_HEADER_SZ);
if (buf == NULL || size == 0 || size > MAX_SPI_FRAMESIZE) {
ret = BAD_FUNC_ARG;
}
else {
txBuf[0] = TPM_TIS_WRITE | ((size & 0xFF) - 1);
XMEMCPY(&txBuf[TPM_TIS_HEADER_SZ], buf, size);
XMEMSET(&txBuf[TPM_TIS_HEADER_SZ + size], 0,
sizeof(txBuf) - TPM_TIS_HEADER_SZ - size);
}
XMEMSET(rxBuf, 0, sizeof(rxBuf));
/* Build TPM header */
txBuf[1] = (addr>>16) & 0xFF;
txBuf[2] = (addr>>8) & 0xFF;
txBuf[3] = (addr) & 0xFF;
if (isRead) {
txBuf[0] = TPM_TIS_READ | ((size & 0xFF) - 1);
XMEMSET(&txBuf[TPM_TIS_HEADER_SZ], 0,
sizeof(txBuf) - TPM_TIS_HEADER_SZ);
}
else {
txBuf[0] = TPM_TIS_WRITE | ((size & 0xFF) - 1);
XMEMCPY(&txBuf[TPM_TIS_HEADER_SZ], buf, size);
XMEMSET(&txBuf[TPM_TIS_HEADER_SZ + size], 0,
sizeof(txBuf) - TPM_TIS_HEADER_SZ - size);
}
XMEMSET(rxBuf, 0, sizeof(rxBuf));
ret = TPM2_IoCb_SPI(ctx, txBuf, rxBuf, size + TPM_TIS_HEADER_SZ, userCtx);
ret = TPM2_IoCb_SPI(ctx, txBuf, rxBuf, size + TPM_TIS_HEADER_SZ, userCtx);
if (isRead) {
XMEMCPY(buf, &rxBuf[TPM_TIS_HEADER_SZ], size);
if (isRead) {
XMEMCPY(buf, &rxBuf[TPM_TIS_HEADER_SZ], size);
}
}
#endif