Skip to content

Commit 3bcb435

Browse files
committed
fix (wh_message): Add NULL checks and use WH_TXX macros
- Replace wh_Translate32/64 usages with WH_T32/WH_T64/WH_T64 macros in message translation files. - Use WH_NVM_LABEL_LEN for label memcpy to avoid sizeof mismatch. - Make internal DMA translation helpers static and add NULL checks. - Change hashType from int to uint32_t in wh_message_crypto.h for consistent (de)serialization. Signed-off-by: Badr Bacem KAABIA <[email protected]>
1 parent 04b199f commit 3bcb435

File tree

4 files changed

+41
-46
lines changed

4 files changed

+41
-46
lines changed

src/wh_message_comm.c

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ int wh_MessageComm_TranslateInitRequest(uint16_t magic,
4141
(dest == NULL) ) {
4242
return WH_ERROR_BADARGS;
4343
}
44-
dest->client_id = wh_Translate32(magic, src->client_id);
44+
WH_T32(magic, dest, src, client_id);
4545
return 0;
4646
}
4747

@@ -53,8 +53,8 @@ int wh_MessageComm_TranslateInitResponse(uint16_t magic,
5353
(dest == NULL) ) {
5454
return WH_ERROR_BADARGS;
5555
}
56-
dest->client_id = wh_Translate32(magic, src->client_id);
57-
dest->server_id = wh_Translate32(magic, src->server_id);
56+
WH_T32(magic, dest, src, client_id);
57+
WH_T32(magic, dest, src, server_id);
5858
return 0;
5959
}
6060

@@ -68,18 +68,18 @@ int wh_MessageComm_TranslateInfoResponse(uint16_t magic,
6868
}
6969
memcpy(dest->version, src->version, sizeof(dest->version));
7070
memcpy(dest->build, src->build, sizeof(dest->build));
71-
dest->cfg_comm_data_len = wh_Translate32(magic, src->cfg_comm_data_len);
72-
dest->cfg_nvm_object_count = wh_Translate32(magic, src->cfg_nvm_object_count);
73-
dest->cfg_server_keycache_count = wh_Translate32(magic, src->cfg_server_keycache_count);
74-
dest->cfg_server_keycache_bufsize = wh_Translate32(magic, src->cfg_server_keycache_bufsize);
75-
dest->cfg_server_keycache_bigcount = wh_Translate32(magic, src->cfg_server_keycache_bigcount);
76-
dest->cfg_server_keycache_bigbufsize = wh_Translate32(magic, src->cfg_server_keycache_bigbufsize);
77-
dest->cfg_server_customcb_count = wh_Translate32(magic, src->cfg_server_customcb_count);
78-
dest->cfg_server_dmaaddr_count = wh_Translate32(magic, src->cfg_server_dmaaddr_count);
79-
dest->debug_state = wh_Translate32(magic, src->debug_state);
80-
dest->boot_state = wh_Translate32(magic, src->boot_state);
81-
dest->lifecycle_state = wh_Translate32(magic, src->lifecycle_state);
82-
dest->nvm_state = wh_Translate32(magic, src->nvm_state);
71+
WH_T32(magic, dest, src, cfg_comm_data_len);
72+
WH_T32(magic, dest, src, cfg_nvm_object_count);
73+
WH_T32(magic, dest, src, cfg_server_keycache_count);
74+
WH_T32(magic, dest, src, cfg_server_keycache_bufsize);
75+
WH_T32(magic, dest, src, cfg_server_keycache_bigcount);
76+
WH_T32(magic, dest, src, cfg_server_keycache_bigbufsize);
77+
WH_T32(magic, dest, src, cfg_server_customcb_count);
78+
WH_T32(magic, dest, src, cfg_server_dmaaddr_count);
79+
WH_T32(magic, dest, src, debug_state);
80+
WH_T32(magic, dest, src, boot_state);
81+
WH_T32(magic, dest, src, lifecycle_state);
82+
WH_T32(magic, dest, src, nvm_state);
8383
return 0;
8484
}
8585

src/wh_message_crypto.c

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ int wh_MessageCrypto_TranslateEccKeyGenRequest(
357357
WH_T32(magic, dest, src, access);
358358
/* Label is just a byte array, no translation needed */
359359
if (src != dest) {
360-
memcpy(dest->label, src->label, sizeof(src->label));
360+
memcpy(dest->label, src->label, WH_NVM_LABEL_LEN);
361361
}
362362
return 0;
363363
}
@@ -493,7 +493,7 @@ int wh_MessageCrypto_TranslateCurve25519KeyGenRequest(
493493
WH_T32(magic, dest, src, keyId);
494494
/* Label is just a byte array, no translation needed */
495495
if (src != dest) {
496-
memcpy(dest->label, src->label, sizeof(src->label));
496+
memcpy(dest->label, src->label, WH_NVM_LABEL_LEN);
497497
}
498498
return 0;
499499
}
@@ -652,7 +652,7 @@ int wh_MessageCrypto_TranslateMlDsaKeyGenRequest(
652652
WH_T32(magic, dest, src, access);
653653
/* Label is just a byte array, no translation needed */
654654
if (src != dest) {
655-
memcpy(dest->label, src->label, sizeof(src->label));
655+
memcpy(dest->label, src->label, WH_NVM_LABEL_LEN);
656656
}
657657
return 0;
658658
}
@@ -730,7 +730,7 @@ int wh_MessageCrypto_TranslateMlDsaVerifyResponse(
730730
*/
731731

732732
/* DMA Buffer translation */
733-
int wh_MessageCrypto_TranslateDmaBuffer(uint16_t magic,
733+
static int wh_MessageCrypto_TranslateDmaBuffer(uint16_t magic,
734734
const whMessageCrypto_DmaBuffer* src,
735735
whMessageCrypto_DmaBuffer* dest)
736736
{
@@ -743,13 +743,17 @@ int wh_MessageCrypto_TranslateDmaBuffer(uint16_t magic,
743743
}
744744

745745
/* DMA Address status translation */
746-
int wh_MessageCrypto_TranslateDmaAddrStatus(
746+
static int wh_MessageCrypto_TranslateDmaAddrStatus(
747747
uint16_t magic, const whMessageCrypto_DmaAddrStatus* src,
748748
whMessageCrypto_DmaAddrStatus* dest)
749749
{
750+
if ((src == NULL) || (dest == NULL)) {
751+
return WH_ERROR_BADARGS;
752+
}
750753
return wh_MessageCrypto_TranslateDmaBuffer(magic, &src->badAddr,
751754
&dest->badAddr);
752755
}
756+
753757
/* SHA224 DMA Request translation */
754758
int wh_MessageCrypto_TranslateSha2DmaRequest(
755759
uint16_t magic, const whMessageCrypto_Sha2DmaRequest* src,
@@ -876,7 +880,7 @@ int wh_MessageCrypto_TranslateMlDsaKeyGenDmaRequest(
876880
WH_T32(magic, dest, src, labelSize);
877881
/* Label is just a byte array, no translation needed */
878882
if (src != dest) {
879-
memcpy(dest->label, src->label, sizeof(src->label));
883+
memcpy(dest->label, src->label, WH_NVM_LABEL_LEN);
880884
}
881885

882886
return 0;

src/wh_message_customcb.c

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -43,24 +43,16 @@ static void _translateCustomData(uint16_t magic, uint32_t translatedType,
4343
/* right now, no further translations required */
4444
} break;
4545
case WH_MESSAGE_CUSTOM_CB_TYPE_DMA32: {
46-
dst->dma32.client_addr =
47-
wh_Translate32(magic, src->dma32.client_addr);
48-
dst->dma32.client_sz =
49-
wh_Translate32(magic, src->dma32.client_sz);
50-
dst->dma32.server_addr =
51-
wh_Translate32(magic, src->dma32.server_addr);
52-
dst->dma32.server_sz =
53-
wh_Translate32(magic, src->dma32.server_sz);
46+
WH_T32(magic, dst, src, dma32.client_addr);
47+
WH_T32(magic, dst, src, dma32.client_sz);
48+
WH_T32(magic, dst, src, dma32.server_addr);
49+
WH_T32(magic, dst, src, dma32.server_sz);
5450
} break;
5551
case WH_MESSAGE_CUSTOM_CB_TYPE_DMA64: {
56-
dst->dma64.client_addr =
57-
wh_Translate64(magic, src->dma64.client_addr);
58-
dst->dma64.client_sz =
59-
wh_Translate64(magic, src->dma64.client_sz);
60-
dst->dma64.server_addr =
61-
wh_Translate64(magic, src->dma64.server_addr);
62-
dst->dma64.server_sz =
63-
wh_Translate64(magic, src->dma64.server_sz);
52+
WH_T64(magic, dst, src, dma64.client_addr);
53+
WH_T64(magic, dst, src, dma64.client_sz);
54+
WH_T64(magic, dst, src, dma64.server_addr);
55+
WH_T64(magic, dst, src, dma64.server_sz);
6456
} break;
6557
default: {
6658
/* reserved message types - no translation for now */
@@ -82,8 +74,8 @@ int wh_MessageCustomCb_TranslateRequest(uint16_t magic,
8274
return WH_ERROR_BADARGS;
8375
}
8476

85-
dst->id = wh_Translate32(magic, src->id);
86-
dst->type = wh_Translate32(magic, src->type);
77+
WH_T32(magic, dst, src, id);
78+
WH_T32(magic, dst, src, type);
8779
_translateCustomData(magic, dst->type, &src->data, &dst->data);
8880

8981
return WH_ERROR_OK;
@@ -97,14 +89,13 @@ int wh_MessageCustomCb_TranslateResponse(uint16_t magic,
9789
if ((src == NULL) || (dst == NULL)) {
9890
return WH_ERROR_BADARGS;
9991
}
100-
101-
dst->rc = wh_Translate32(magic, src->rc);
102-
dst->err = wh_Translate32(magic, src->err);
92+
WH_T32(magic, dst, src, rc);
93+
WH_T32(magic, dst, src, err);
10394

10495
/* TODO: should we continue to translate responses for err != 0?
10596
* Probably still should...*/
106-
dst->id = wh_Translate32(magic, src->id);
107-
dst->type = wh_Translate32(magic, src->type);
97+
WH_T32(magic, dst, src, id);
98+
WH_T32(magic, dst, src, type);
10899
_translateCustomData(magic, dst->type, &src->data, &dst->data);
109100

110101
return WH_ERROR_OK;

wolfhsm/wh_message_crypto.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -676,7 +676,7 @@ typedef struct {
676676
uint32_t loLen;
677677
/* intermediate hash value */
678678
uint8_t hash[64]; /* TODO (HM) WC_SHA512_DIGEST_SIZE */
679-
int hashType;
679+
uint32_t hashType;
680680
} resumeState;
681681
/* Flag indicating to the server that this is the last block and it should
682682
* finalize the hash. If set, inBlock may be only partially full*/
@@ -694,7 +694,7 @@ typedef struct {
694694
uint32_t hiLen;
695695
uint32_t loLen;
696696
uint8_t hash[64]; /* TODO WC_SHA512_DIGEST_SIZE */
697-
int hashType;
697+
uint32_t hashType;
698698
} whMessageCrypto_Sha2Response;
699699

700700
int wh_MessageCrypto_TranslateSha512Request(

0 commit comments

Comments
 (0)