@@ -668,6 +668,64 @@ static int _clientServerSequentialTestConnectCb(void* context,
668668 connected );
669669}
670670
671+ static int _testOutOfBoundsNvmReads (whClientContext * client ,
672+ whServerContext * server , whNvmId id )
673+ {
674+ uint8_t buffer [WOLFHSM_CFG_COMM_DATA_LEN ];
675+ whNvmMetadata meta ;
676+ whNvmSize off , len ;
677+ int32_t server_rc ;
678+
679+ /* Get object metadata */
680+ WH_TEST_RETURN_ON_FAIL (wh_Client_NvmGetMetadataRequest (client , id ));
681+ WH_TEST_RETURN_ON_FAIL (wh_Server_HandleRequestMessage (server ));
682+ WH_TEST_RETURN_ON_FAIL (wh_Client_NvmGetMetadataResponse (
683+ client , & server_rc , & meta .id , & meta .access , & meta .flags , & meta .len ,
684+ sizeof (meta .label ), meta .label ));
685+ WH_TEST_ASSERT_RETURN (server_rc == WH_ERROR_OK );
686+
687+ /* Try to read len + 1 bytes, should clamp to len */
688+ off = 0 ;
689+ len = meta .len + 1 ;
690+ WH_TEST_RETURN_ON_FAIL (wh_Client_NvmReadRequest (client , id , off , len ));
691+ WH_TEST_RETURN_ON_FAIL (wh_Server_HandleRequestMessage (server ));
692+ WH_TEST_RETURN_ON_FAIL (
693+ wh_Client_NvmReadResponse (client , & server_rc , & len , buffer ));
694+ WH_TEST_ASSERT_RETURN (server_rc == WH_ERROR_OK );
695+ WH_TEST_ASSERT_RETURN (len == meta .len );
696+
697+ /* Try to read len bytes starting at 1 should clamp to len - 1 */
698+ off = 1 ;
699+ len = meta .len ;
700+ WH_TEST_RETURN_ON_FAIL (wh_Client_NvmReadRequest (client , id , off , len ));
701+ WH_TEST_RETURN_ON_FAIL (wh_Server_HandleRequestMessage (server ));
702+ WH_TEST_RETURN_ON_FAIL (
703+ wh_Client_NvmReadResponse (client , & server_rc , & len , buffer ));
704+ WH_TEST_ASSERT_RETURN (server_rc == WH_ERROR_OK );
705+ WH_TEST_ASSERT_RETURN (len == meta .len - 1 );
706+
707+ /* Try to read starting at len - 1 len bytes, should clamp to 1 */
708+ off = meta .len - 1 ;
709+ len = meta .len ;
710+ WH_TEST_RETURN_ON_FAIL (wh_Client_NvmReadRequest (client , id , off , len ));
711+ WH_TEST_RETURN_ON_FAIL (wh_Server_HandleRequestMessage (server ));
712+ WH_TEST_RETURN_ON_FAIL (
713+ wh_Client_NvmReadResponse (client , & server_rc , & len , buffer ));
714+ WH_TEST_ASSERT_RETURN (server_rc == WH_ERROR_OK );
715+ WH_TEST_ASSERT_RETURN (len == 1 );
716+
717+ /* Try to read starting at len, should fail */
718+ off = meta .len ;
719+ len = 0 ;
720+ WH_TEST_RETURN_ON_FAIL (wh_Client_NvmReadRequest (client , id , off , len ));
721+ WH_TEST_RETURN_ON_FAIL (wh_Server_HandleRequestMessage (server ));
722+ WH_TEST_RETURN_ON_FAIL (
723+ wh_Client_NvmReadResponse (client , & server_rc , & len , buffer ));
724+ WH_TEST_ASSERT_RETURN (server_rc == WH_ERROR_BADARGS );
725+
726+ return WH_ERROR_OK ;
727+ }
728+
671729int whTest_ClientServerSequential (void )
672730{
673731 int ret = 0 ;
@@ -1015,6 +1073,9 @@ int whTest_ClientServerSequential(void)
10151073 WH_TEST_ASSERT_RETURN (0 == memcmp (send_buffer , recv_buffer , len ));
10161074 }
10171075
1076+ /* Perform out-of-bounds read tests on first object written */
1077+ WH_TEST_RETURN_ON_FAIL (_testOutOfBoundsNvmReads (client , server , 20 ));
1078+
10181079 whNvmAccess list_access = WH_NVM_ACCESS_ANY ;
10191080 whNvmFlags list_flags = WH_NVM_FLAGS_NONE ;
10201081 whNvmId list_id = 0 ;
0 commit comments