1 #include <fuzzer/FuzzedDataProvider.h>
2
3 #include "nfa_nv_ci.h"
4 #include "nfa_nv_co.h"
5
6 extern FuzzedDataProvider* g_fuzzed_data;
7
nfa_nv_co_read(uint8_t * pBuffer,uint16_t nbytes,uint8_t block)8 void nfa_nv_co_read(uint8_t* pBuffer, uint16_t nbytes, uint8_t block) {
9 if (g_fuzzed_data->ConsumeBool()) {
10 nfa_nv_ci_read(0, NFA_NV_CO_FAIL, block);
11 return;
12 }
13
14 std::vector<uint8_t> bytes = g_fuzzed_data->ConsumeBytes<uint8_t>(nbytes);
15 memcpy(pBuffer, bytes.data(), bytes.size());
16 nfa_nv_ci_read(bytes.size(), NFA_NV_CO_OK, block);
17 }
18
nfa_nv_co_write(const uint8_t * pBuffer,uint16_t nbytes,uint8_t)19 void nfa_nv_co_write(const uint8_t* pBuffer, uint16_t nbytes,
20 uint8_t /* block */) {
21 // Copy to detect invalid pBuffer/nbytes parameters
22 std::vector<uint8_t> bytes(pBuffer, pBuffer + nbytes);
23
24 if (g_fuzzed_data->ConsumeBool()) {
25 nfa_nv_ci_write(NFA_NV_CO_FAIL);
26 return;
27 }
28
29 nfa_nv_ci_write(NFA_NV_CO_OK);
30 }
31
nfa_mem_co_alloc(uint32_t num_bytes)32 extern void* nfa_mem_co_alloc(uint32_t num_bytes) {
33 // Avoid large allocations that harm fuzzer performance
34 if (num_bytes > 100000) {
35 return nullptr;
36 }
37 return malloc(num_bytes);
38 }
39
nfa_mem_co_free(void * pBuffer)40 extern void nfa_mem_co_free(void* pBuffer) { free(pBuffer); }
41
delete_stack_non_volatile_store(bool)42 void delete_stack_non_volatile_store(bool) {}
43