@@ -1662,8 +1662,6 @@ int wh_Server_HandleKeyRequest(whServerContext* server, uint16_t magic,
16621662 const void * req_packet , uint16_t * out_resp_size ,
16631663 void * resp_packet )
16641664{
1665- (void )req_size ;
1666-
16671665 int ret = WH_ERROR_OK ;
16681666 uint8_t * in ;
16691667 uint8_t * out ;
@@ -1680,10 +1678,21 @@ int wh_Server_HandleKeyRequest(whServerContext* server, uint16_t magic,
16801678 whMessageKeystore_CacheRequest req ;
16811679 whMessageKeystore_CacheResponse resp ;
16821680
1681+ /* Validate req_size can hold the fixed request struct */
1682+ if (req_size < sizeof (req )) {
1683+ return WH_ERROR_BADARGS ;
1684+ }
1685+
16831686 /* translate request */
16841687 (void )wh_MessageKeystore_TranslateCacheRequest (
16851688 magic , (whMessageKeystore_CacheRequest * )req_packet , & req );
16861689
1690+ /* Validate that the variable-length key data fits within the
1691+ * received packet */
1692+ if (req .sz > req_size - sizeof (req )) {
1693+ return WH_ERROR_BADARGS ;
1694+ }
1695+
16871696 /* in is after fixed size fields */
16881697 in = (uint8_t * )req_packet + sizeof (req );
16891698
@@ -1731,6 +1740,10 @@ int wh_Server_HandleKeyRequest(whServerContext* server, uint16_t magic,
17311740 whMessageKeystore_CacheDmaRequest req ;
17321741 whMessageKeystore_CacheDmaResponse resp ;
17331742
1743+ if (req_size < sizeof (req )) {
1744+ return WH_ERROR_BADARGS ;
1745+ }
1746+
17341747 /* translate request */
17351748 (void )wh_MessageKeystore_TranslateCacheDmaRequest (
17361749 magic , (whMessageKeystore_CacheDmaRequest * )req_packet , & req );
@@ -1785,6 +1798,10 @@ int wh_Server_HandleKeyRequest(whServerContext* server, uint16_t magic,
17851798 whMessageKeystore_ExportDmaRequest req ;
17861799 whMessageKeystore_ExportDmaResponse resp ;
17871800
1801+ if (req_size < sizeof (req )) {
1802+ return WH_ERROR_BADARGS ;
1803+ }
1804+
17881805 /* translate request */
17891806 (void )wh_MessageKeystore_TranslateExportDmaRequest (
17901807 magic , (whMessageKeystore_ExportDmaRequest * )req_packet , & req );
@@ -1824,6 +1841,10 @@ int wh_Server_HandleKeyRequest(whServerContext* server, uint16_t magic,
18241841 whMessageKeystore_EvictRequest req ;
18251842 whMessageKeystore_EvictResponse resp = {0 };
18261843
1844+ if (req_size < sizeof (req )) {
1845+ return WH_ERROR_BADARGS ;
1846+ }
1847+
18271848 (void )wh_MessageKeystore_TranslateEvictRequest (
18281849 magic , (whMessageKeystore_EvictRequest * )req_packet , & req );
18291850
@@ -1849,6 +1870,10 @@ int wh_Server_HandleKeyRequest(whServerContext* server, uint16_t magic,
18491870 whMessageKeystore_ExportResponse resp ;
18501871 uint32_t keySz ;
18511872
1873+ if (req_size < sizeof (req )) {
1874+ return WH_ERROR_BADARGS ;
1875+ }
1876+
18521877 /* translate request */
18531878 (void )wh_MessageKeystore_TranslateExportRequest (
18541879 magic , (whMessageKeystore_ExportRequest * )req_packet , & req );
@@ -1887,6 +1912,10 @@ int wh_Server_HandleKeyRequest(whServerContext* server, uint16_t magic,
18871912 whMessageKeystore_CommitRequest req ;
18881913 whMessageKeystore_CommitResponse resp ;
18891914
1915+ if (req_size < sizeof (req )) {
1916+ return WH_ERROR_BADARGS ;
1917+ }
1918+
18901919 /* translate request */
18911920 (void )wh_MessageKeystore_TranslateCommitRequest (
18921921 magic , (whMessageKeystore_CommitRequest * )req_packet , & req );
@@ -1913,6 +1942,10 @@ int wh_Server_HandleKeyRequest(whServerContext* server, uint16_t magic,
19131942 whMessageKeystore_EraseRequest req ;
19141943 whMessageKeystore_EraseResponse resp ;
19151944
1945+ if (req_size < sizeof (req )) {
1946+ return WH_ERROR_BADARGS ;
1947+ }
1948+
19161949 /* translate request */
19171950 (void )wh_MessageKeystore_TranslateEraseRequest (
19181951 magic , (whMessageKeystore_EraseRequest * )req_packet , & req );
@@ -1939,6 +1972,10 @@ int wh_Server_HandleKeyRequest(whServerContext* server, uint16_t magic,
19391972 whMessageKeystore_RevokeRequest req ;
19401973 whMessageKeystore_RevokeResponse resp ;
19411974
1975+ if (req_size < sizeof (req )) {
1976+ return WH_ERROR_BADARGS ;
1977+ }
1978+
19421979 (void )wh_MessageKeystore_TranslateRevokeRequest (
19431980 magic , (whMessageKeystore_RevokeRequest * )req_packet , & req );
19441981
@@ -1965,14 +2002,17 @@ int wh_Server_HandleKeyRequest(whServerContext* server, uint16_t magic,
19652002 whMessageKeystore_KeyWrapResponse wrapResp = {0 };
19662003 uint8_t * reqData ;
19672004 uint8_t * respData ;
1968- uint32_t reqDataSz = WOLFHSM_CFG_COMM_DATA_LEN - sizeof (wrapReq );
19692005 uint32_t respDataSz = WOLFHSM_CFG_COMM_DATA_LEN - sizeof (wrapResp );
2006+ uint32_t reqDataSz ;
19702007
1971- /* Validate the bounds of the request data */
1972- if (reqDataSz < req_size ) {
1973- return WH_ERROR_BUFFER_SIZE ;
2008+ /* Validate req_size can hold the fixed request struct */
2009+ if (req_size < sizeof ( wrapReq ) ) {
2010+ return WH_ERROR_BADARGS ;
19742011 }
19752012
2013+ /* Compute actual variable data size from the received packet */
2014+ reqDataSz = req_size - sizeof (wrapReq );
2015+
19762016 /* Translate request */
19772017 (void )wh_MessageKeystore_TranslateKeyWrapRequest (magic , req_packet ,
19782018 & wrapReq );
@@ -2011,15 +2051,18 @@ int wh_Server_HandleKeyRequest(whServerContext* server, uint16_t magic,
20112051 whMessageKeystore_KeyUnwrapAndExportResponse unwrapResp = {0 };
20122052 uint8_t * reqData ;
20132053 uint8_t * respData ;
2014- uint32_t reqDataSz = WOLFHSM_CFG_COMM_DATA_LEN - sizeof (unwrapReq );
20152054 uint32_t respDataSz =
20162055 WOLFHSM_CFG_COMM_DATA_LEN - sizeof (unwrapResp );
2056+ uint32_t reqDataSz ;
20172057
2018- /* Validate the bounds of the request data */
2019- if (reqDataSz < req_size ) {
2020- return WH_ERROR_BUFFER_SIZE ;
2058+ /* Validate req_size can hold the fixed request struct */
2059+ if (req_size < sizeof ( unwrapReq ) ) {
2060+ return WH_ERROR_BADARGS ;
20212061 }
20222062
2063+ /* Compute actual variable data size from the received packet */
2064+ reqDataSz = req_size - sizeof (unwrapReq );
2065+
20232066 /* Translate request */
20242067 (void )wh_MessageKeystore_TranslateKeyUnwrapAndExportRequest (
20252068 magic , req_packet , & unwrapReq );
@@ -2059,14 +2102,17 @@ int wh_Server_HandleKeyRequest(whServerContext* server, uint16_t magic,
20592102 whMessageKeystore_KeyUnwrapAndCacheResponse cacheResp = {0 };
20602103 uint8_t * reqData ;
20612104 uint8_t * respData ;
2062- uint32_t reqDataSz = WOLFHSM_CFG_COMM_DATA_LEN - sizeof (cacheReq );
20632105 uint32_t respDataSz = WOLFHSM_CFG_COMM_DATA_LEN - sizeof (cacheResp );
2106+ uint32_t reqDataSz ;
20642107
2065- /* Validate the bounds of the request data */
2066- if (reqDataSz < req_size ) {
2067- return WH_ERROR_BUFFER_SIZE ;
2108+ /* Validate req_size can hold the fixed request struct */
2109+ if (req_size < sizeof ( cacheReq ) ) {
2110+ return WH_ERROR_BADARGS ;
20682111 }
20692112
2113+ /* Compute actual variable data size from the received packet */
2114+ reqDataSz = req_size - sizeof (cacheReq );
2115+
20702116 /* Translate request */
20712117 (void )wh_MessageKeystore_TranslateKeyUnwrapAndCacheRequest (
20722118 magic , req_packet , & cacheReq );
@@ -2101,14 +2147,17 @@ int wh_Server_HandleKeyRequest(whServerContext* server, uint16_t magic,
21012147 whMessageKeystore_DataWrapResponse wrapResp = {0 };
21022148 uint8_t * reqData ;
21032149 uint8_t * respData ;
2104- uint32_t reqDataSz = WOLFHSM_CFG_COMM_DATA_LEN - sizeof (wrapReq );
21052150 uint32_t respDataSz = WOLFHSM_CFG_COMM_DATA_LEN - sizeof (wrapResp );
2151+ uint32_t reqDataSz ;
21062152
2107- /* Validate the bounds of the request data */
2108- if (reqDataSz < req_size ) {
2109- return WH_ERROR_BUFFER_SIZE ;
2153+ /* Validate req_size can hold the fixed request struct */
2154+ if (req_size < sizeof ( wrapReq ) ) {
2155+ return WH_ERROR_BADARGS ;
21102156 }
21112157
2158+ /* Compute actual variable data size from the received packet */
2159+ reqDataSz = req_size - sizeof (wrapReq );
2160+
21122161 /* Translate request */
21132162 (void )wh_MessageKeystore_TranslateDataWrapRequest (magic , req_packet ,
21142163 & wrapReq );
@@ -2147,15 +2196,18 @@ int wh_Server_HandleKeyRequest(whServerContext* server, uint16_t magic,
21472196 whMessageKeystore_DataUnwrapResponse unwrapResp = {0 };
21482197 uint8_t * reqData ;
21492198 uint8_t * respData ;
2150- uint32_t reqDataSz = WOLFHSM_CFG_COMM_DATA_LEN - sizeof (unwrapReq );
21512199 uint32_t respDataSz =
21522200 WOLFHSM_CFG_COMM_DATA_LEN - sizeof (unwrapResp );
2201+ uint32_t reqDataSz ;
21532202
2154- /* Validate the bounds of the request data */
2155- if (reqDataSz < req_size ) {
2156- return WH_ERROR_BUFFER_SIZE ;
2203+ /* Validate req_size can hold the fixed request struct */
2204+ if (req_size < sizeof ( unwrapReq ) ) {
2205+ return WH_ERROR_BADARGS ;
21572206 }
21582207
2208+ /* Compute actual variable data size from the received packet */
2209+ reqDataSz = req_size - sizeof (unwrapReq );
2210+
21592211 /* Translate request */
21602212 (void )wh_MessageKeystore_TranslateDataUnwrapRequest (
21612213 magic , req_packet , & unwrapReq );
0 commit comments