Skip to content

Commit fc16526

Browse files
committed
test: nvm: test object bounds check in nvm reads
1 parent 3d87518 commit fc16526

1 file changed

Lines changed: 61 additions & 0 deletions

File tree

test/wh_test_clientserver.c

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
671729
int 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

Comments
 (0)