Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 22 additions & 16 deletions src/wh_server_crypto.c
Original file line number Diff line number Diff line change
Expand Up @@ -2823,8 +2823,9 @@ static int _HandleAesCtr(whServerContext* ctx, uint16_t magic, int devId,
uint32_t key_len = req.keyLen;
uint32_t len = req.sz;
uint32_t left = req.left;
uint64_t needed_size = sizeof(whMessageCrypto_AesCtrRequest) + len +
key_len + AES_IV_SIZE + AES_BLOCK_SIZE;
uint64_t needed_size = (uint64_t)sizeof(whMessageCrypto_AesCtrRequest) +
(uint64_t)len + (uint64_t)key_len +
(uint64_t)AES_IV_SIZE + (uint64_t)AES_BLOCK_SIZE;
if (needed_size != inSize) {
return WH_ERROR_BADARGS;
}
Expand Down Expand Up @@ -2966,8 +2967,9 @@ static int _HandleAesCtrDma(whServerContext* ctx, uint16_t magic, int devId,
uint32_t keyLen = req.keySz;
uint32_t len = req.input.sz;
uint32_t left = req.left;
uint64_t needed_size = sizeof(whMessageCrypto_AesCtrDmaRequest) + keyLen +
AES_IV_SIZE + AES_BLOCK_SIZE;
uint64_t needed_size = (uint64_t)sizeof(whMessageCrypto_AesCtrDmaRequest) +
(uint64_t)keyLen + (uint64_t)AES_IV_SIZE +
(uint64_t)AES_BLOCK_SIZE;
if (needed_size != inSize) {
return WH_ERROR_BADARGS;
}
Expand Down Expand Up @@ -3153,8 +3155,8 @@ static int _HandleAesEcb(whServerContext* ctx, uint16_t magic, int devId,
uint32_t enc = req.enc;
uint32_t key_len = req.keyLen;
uint32_t len = req.sz;
uint64_t needed_size =
sizeof(whMessageCrypto_AesEcbRequest) + len + key_len;
uint64_t needed_size = (uint64_t)sizeof(whMessageCrypto_AesEcbRequest) +
(uint64_t)len + (uint64_t)key_len;
if (needed_size != inSize) {
return WH_ERROR_BADARGS;
}
Expand Down Expand Up @@ -3272,7 +3274,8 @@ static int _HandleAesEcbDma(whServerContext* ctx, uint16_t magic, int devId,

uint32_t keyLen = req.keySz;
uint32_t len = req.input.sz;
uint64_t needed_size = sizeof(whMessageCrypto_AesEcbDmaRequest) + keyLen;
uint64_t needed_size =
(uint64_t)sizeof(whMessageCrypto_AesEcbDmaRequest) + (uint64_t)keyLen;
if (needed_size != inSize) {
return WH_ERROR_BADARGS;
}
Expand Down Expand Up @@ -3435,8 +3438,9 @@ static int _HandleAesCbc(whServerContext* ctx, uint16_t magic, int devId,
uint32_t enc = req.enc;
uint32_t key_len = req.keyLen;
uint32_t len = req.sz;
uint64_t needed_size = sizeof(whMessageCrypto_AesCbcRequest) + len +
key_len + AES_BLOCK_SIZE;
uint64_t needed_size = (uint64_t)sizeof(whMessageCrypto_AesCbcRequest) +
(uint64_t)len + (uint64_t)key_len +
(uint64_t)AES_BLOCK_SIZE;
if (needed_size != inSize) {
return WH_ERROR_BADARGS;
}
Expand Down Expand Up @@ -3558,8 +3562,8 @@ static int _HandleAesCbcDma(whServerContext* ctx, uint16_t magic, int devId,
uint32_t enc = req.enc;
uint32_t keyLen = req.keySz;
uint32_t len = req.input.sz;
uint64_t needed_size = sizeof(whMessageCrypto_AesCbcDmaRequest) + keyLen +
AES_IV_SIZE;
uint64_t needed_size = (uint64_t)sizeof(whMessageCrypto_AesCbcDmaRequest) +
(uint64_t)keyLen + (uint64_t)AES_IV_SIZE;
if (needed_size != inSize) {
return WH_ERROR_BADARGS;
}
Expand Down Expand Up @@ -3730,9 +3734,10 @@ static int _HandleAesGcm(whServerContext* ctx, uint16_t magic, int devId,
uint32_t tag_len = req.authTagSz;
whKeyId key_id = wh_KeyId_TranslateFromClient(
WH_KEYTYPE_CRYPTO, ctx->comm->client_id, req.keyId);
uint64_t needed_size = sizeof(whMessageCrypto_AesGcmRequest) + len +
key_len + iv_len + authin_len +
((enc == 0) ? tag_len : 0);
uint64_t needed_size = (uint64_t)sizeof(whMessageCrypto_AesGcmRequest) +
(uint64_t)len + (uint64_t)key_len +
(uint64_t)iv_len + (uint64_t)authin_len +
(uint64_t)((enc == 0) ? tag_len : 0);
if (needed_size != inSize) {
return WH_ERROR_BADARGS;
}
Expand Down Expand Up @@ -3885,8 +3890,9 @@ static int _HandleAesGcmDma(whServerContext* ctx, uint16_t magic, int devId,
uint32_t len = req.input.sz;
uint32_t ivLen = req.ivSz;
uint32_t tagLen = req.authTagSz;
uint64_t needed_size = sizeof(whMessageCrypto_AesGcmDmaRequest) + keyLen +
ivLen + (enc != 0 ? 0 : tagLen);
uint64_t needed_size = (uint64_t)sizeof(whMessageCrypto_AesGcmDmaRequest) +
(uint64_t)keyLen + (uint64_t)ivLen +
(uint64_t)(enc != 0 ? 0 : tagLen);
if (needed_size != inSize) {
return WH_ERROR_BADARGS;
}
Expand Down
8 changes: 6 additions & 2 deletions src/wh_server_she.c
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,9 @@ static int _SecureBootUpdate(whServerContext* server, uint16_t magic,
if (ret == 0) {
/* the bootloader chunk is after the fixed fields */
in = (uint8_t*)req_packet + sizeof(req);
if (req_size < (sizeof(req) + req.sz)) {
/* Guard against 32-bit size_t overflow: check req.sz alone first */
if (req.sz > WOLFHSM_CFG_COMM_DATA_LEN ||
req_size < (sizeof(req) + req.sz)) {
ret = WH_ERROR_BUFFER_SIZE;
}
}
Expand Down Expand Up @@ -1523,7 +1525,9 @@ static int _GenerateMac(whServerContext* server, uint16_t magic,
}

if (ret == 0) {
if (req_size < (sizeof(req) + req.sz)) {
/* Guard against 32-bit size_t overflow: check req.sz alone first */
if (req.sz > WOLFHSM_CFG_COMM_DATA_LEN ||
req_size < (sizeof(req) + req.sz)) {
ret = WH_ERROR_BUFFER_SIZE;
}
}
Expand Down
Loading