Skip to content

Commit 0bb8e66

Browse files
committed
test: nvm: test object bounds check in nvm reads
1 parent 0c92258 commit 0bb8e66

1 file changed

Lines changed: 60 additions & 0 deletions

File tree

test/wh_test_clientserver.c

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -668,6 +668,63 @@ static int _clientServerSequentialTestConnectCb(void* context,
668668
connected);
669669
}
670670

671+
static int _testOutOfBoundsNvmReads(whClientContext* client, whServerContext* server, whNvmId id)
672+
{
673+
uint8_t buffer[WOLFHSM_CFG_COMM_DATA_LEN];
674+
whNvmMetadata meta;
675+
whNvmSize off, len;
676+
int32_t server_rc;
677+
678+
/* Get object metadata */
679+
WH_TEST_RETURN_ON_FAIL(wh_Client_NvmGetMetadataRequest(client, id));
680+
WH_TEST_RETURN_ON_FAIL(wh_Server_HandleRequestMessage(server));
681+
WH_TEST_RETURN_ON_FAIL(wh_Client_NvmGetMetadataResponse(
682+
client, &server_rc, &meta.id, &meta.access, &meta.flags,
683+
&meta.len, sizeof(meta.label), meta.label));
684+
WH_TEST_ASSERT_RETURN(server_rc == WH_ERROR_OK);
685+
686+
/* Try to read len + 1 bytes, should clamp to len */
687+
off = 0;
688+
len = meta.len + 1;
689+
WH_TEST_RETURN_ON_FAIL(wh_Client_NvmReadRequest(client, id, off, len));
690+
WH_TEST_RETURN_ON_FAIL(wh_Server_HandleRequestMessage(server));
691+
WH_TEST_RETURN_ON_FAIL(
692+
wh_Client_NvmReadResponse(client, &server_rc, &len, buffer));
693+
WH_TEST_ASSERT_RETURN(server_rc == WH_ERROR_OK);
694+
WH_TEST_ASSERT_RETURN(len == meta.len);
695+
696+
/* Try to read len bytes starting at 1 should clamp to len - 1 */
697+
off = 1;
698+
len = meta.len;
699+
WH_TEST_RETURN_ON_FAIL(wh_Client_NvmReadRequest(client, id, off, len));
700+
WH_TEST_RETURN_ON_FAIL(wh_Server_HandleRequestMessage(server));
701+
WH_TEST_RETURN_ON_FAIL(
702+
wh_Client_NvmReadResponse(client, &server_rc, &len, buffer));
703+
WH_TEST_ASSERT_RETURN(server_rc == WH_ERROR_OK);
704+
WH_TEST_ASSERT_RETURN(len == meta.len - 1);
705+
706+
/* Try to read starting at len - 1 len bytes, should clamp to 1 */
707+
off = meta.len - 1;
708+
len = meta.len;
709+
WH_TEST_RETURN_ON_FAIL(wh_Client_NvmReadRequest(client, id, off, len));
710+
WH_TEST_RETURN_ON_FAIL(wh_Server_HandleRequestMessage(server));
711+
WH_TEST_RETURN_ON_FAIL(
712+
wh_Client_NvmReadResponse(client, &server_rc, &len, buffer));
713+
WH_TEST_ASSERT_RETURN(server_rc == WH_ERROR_OK);
714+
WH_TEST_ASSERT_RETURN(len == 1);
715+
716+
/* Try to read starting at len, should fail */
717+
off = meta.len;
718+
len = 0;
719+
WH_TEST_RETURN_ON_FAIL(wh_Client_NvmReadRequest(client, id, off, len));
720+
WH_TEST_RETURN_ON_FAIL(wh_Server_HandleRequestMessage(server));
721+
WH_TEST_RETURN_ON_FAIL(
722+
wh_Client_NvmReadResponse(client, &server_rc, &len, buffer));
723+
WH_TEST_ASSERT_RETURN(server_rc == WH_ERROR_BADARGS);
724+
725+
return WH_ERROR_OK;
726+
}
727+
671728
int whTest_ClientServerSequential(void)
672729
{
673730
int ret = 0;
@@ -1015,6 +1072,9 @@ int whTest_ClientServerSequential(void)
10151072
WH_TEST_ASSERT_RETURN(0 == memcmp(send_buffer, recv_buffer, len));
10161073
}
10171074

1075+
/* Perform out-of-bounds read tests on first object written */
1076+
WH_TEST_RETURN_ON_FAIL(_testOutOfBoundsNvmReads(client, server, 20));
1077+
10181078
whNvmAccess list_access = WH_NVM_ACCESS_ANY;
10191079
whNvmFlags list_flags = WH_NVM_FLAGS_NONE;
10201080
whNvmId list_id = 0;

0 commit comments

Comments
 (0)