Skip to content

Commit 33bc5c8

Browse files
authored
fix (wh_message): Add NULL checks and use WH_TXX macros (#236)
- 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 e8e181e commit 33bc5c8

File tree

4 files changed

+37
-42
lines changed

4 files changed

+37
-42
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: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -817,7 +817,7 @@ int wh_MessageCrypto_TranslateMlDsaVerifyResponse(
817817
*/
818818

819819
/* DMA Buffer translation */
820-
int wh_MessageCrypto_TranslateDmaBuffer(uint16_t magic,
820+
static int wh_MessageCrypto_TranslateDmaBuffer(uint16_t magic,
821821
const whMessageCrypto_DmaBuffer* src,
822822
whMessageCrypto_DmaBuffer* dest)
823823
{
@@ -830,13 +830,17 @@ int wh_MessageCrypto_TranslateDmaBuffer(uint16_t magic,
830830
}
831831

832832
/* DMA Address status translation */
833-
int wh_MessageCrypto_TranslateDmaAddrStatus(
833+
static int wh_MessageCrypto_TranslateDmaAddrStatus(
834834
uint16_t magic, const whMessageCrypto_DmaAddrStatus* src,
835835
whMessageCrypto_DmaAddrStatus* dest)
836836
{
837+
if ((src == NULL) || (dest == NULL)) {
838+
return WH_ERROR_BADARGS;
839+
}
837840
return wh_MessageCrypto_TranslateDmaBuffer(magic, &src->badAddr,
838841
&dest->badAddr);
839842
}
843+
840844
/* SHA224 DMA Request translation */
841845
int wh_MessageCrypto_TranslateSha2DmaRequest(
842846
uint16_t magic, const whMessageCrypto_Sha2DmaRequest* src,

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
@@ -764,7 +764,7 @@ typedef struct {
764764
uint32_t loLen;
765765
/* intermediate hash value */
766766
uint8_t hash[64]; /* TODO (HM) WC_SHA512_DIGEST_SIZE */
767-
int hashType;
767+
uint32_t hashType;
768768
} resumeState;
769769
/* Flag indicating to the server that this is the last block and it should
770770
* finalize the hash. If set, inBlock may be only partially full*/
@@ -782,7 +782,7 @@ typedef struct {
782782
uint32_t hiLen;
783783
uint32_t loLen;
784784
uint8_t hash[64]; /* TODO WC_SHA512_DIGEST_SIZE */
785-
int hashType;
785+
uint32_t hashType;
786786
} whMessageCrypto_Sha2Response;
787787

788788
int wh_MessageCrypto_TranslateSha512Request(

0 commit comments

Comments
 (0)