xref: /aosp_15_r20/system/nfc/src/fuzzers/inc/fuzz_cmn.h (revision 7eba2f3b06c51ae21384f6a4f14577b668a869b3)
1*7eba2f3bSAndroid Build Coastguard Worker #ifndef __FUZZ_CMN_H__
2*7eba2f3bSAndroid Build Coastguard Worker #define __FUZZ_CMN_H__
3*7eba2f3bSAndroid Build Coastguard Worker 
4*7eba2f3bSAndroid Build Coastguard Worker #include <android-base/logging.h>
5*7eba2f3bSAndroid Build Coastguard Worker #include <android-base/stringprintf.h>
6*7eba2f3bSAndroid Build Coastguard Worker #include <errno.h>
7*7eba2f3bSAndroid Build Coastguard Worker #include <nfc_api.h>
8*7eba2f3bSAndroid Build Coastguard Worker #include <nfc_int.h>
9*7eba2f3bSAndroid Build Coastguard Worker #include <semaphore.h>
10*7eba2f3bSAndroid Build Coastguard Worker 
11*7eba2f3bSAndroid Build Coastguard Worker #include <map>
12*7eba2f3bSAndroid Build Coastguard Worker #include <vector>
13*7eba2f3bSAndroid Build Coastguard Worker using android::base::StringAppendF;
14*7eba2f3bSAndroid Build Coastguard Worker using android::base::StringPrintf;
15*7eba2f3bSAndroid Build Coastguard Worker 
16*7eba2f3bSAndroid Build Coastguard Worker #define FUZZLOG(...) LOG(VERBOSE) << __func__ << ":" << StringPrintf(__VA_ARGS__);
17*7eba2f3bSAndroid Build Coastguard Worker 
18*7eba2f3bSAndroid Build Coastguard Worker typedef std::vector<uint8_t> bytes_t;
19*7eba2f3bSAndroid Build Coastguard Worker 
20*7eba2f3bSAndroid Build Coastguard Worker std::string BytesToHex(const uint8_t* data, size_t size);
21*7eba2f3bSAndroid Build Coastguard Worker std::string BytesToHex(const bytes_t& data);
22*7eba2f3bSAndroid Build Coastguard Worker bytes_t FuzzSeqGen(size_t minLen, size_t maxLen);
23*7eba2f3bSAndroid Build Coastguard Worker 
24*7eba2f3bSAndroid Build Coastguard Worker extern void GKI_shutdown();
25*7eba2f3bSAndroid Build Coastguard Worker 
26*7eba2f3bSAndroid Build Coastguard Worker extern "C" int LLVMFuzzerInitialize(int*, char***);
27*7eba2f3bSAndroid Build Coastguard Worker extern "C" int LLVMFuzzerTestOneInput(const uint8_t* Data, size_t Size);
28*7eba2f3bSAndroid Build Coastguard Worker extern "C" size_t LLVMFuzzerMutate(uint8_t* Data, size_t Size, size_t MaxSize);
29*7eba2f3bSAndroid Build Coastguard Worker 
30*7eba2f3bSAndroid Build Coastguard Worker extern "C" void __gcov_flush(void) __attribute__((weak));
31*7eba2f3bSAndroid Build Coastguard Worker 
32*7eba2f3bSAndroid Build Coastguard Worker class Fuzz_Context {
33*7eba2f3bSAndroid Build Coastguard Worker   std::vector<std::unique_ptr<uint8_t[]>> _ScratchPtrs;
34*7eba2f3bSAndroid Build Coastguard Worker 
35*7eba2f3bSAndroid Build Coastguard Worker  public:
36*7eba2f3bSAndroid Build Coastguard Worker   uint8_t SubType;
37*7eba2f3bSAndroid Build Coastguard Worker   const std::vector<bytes_t> Data;
38*7eba2f3bSAndroid Build Coastguard Worker 
39*7eba2f3bSAndroid Build Coastguard Worker  public:
Fuzz_Context(uint8_t FuzzSubType,const std::vector<bytes_t> & Packets)40*7eba2f3bSAndroid Build Coastguard Worker   Fuzz_Context(uint8_t FuzzSubType, const std::vector<bytes_t>& Packets)
41*7eba2f3bSAndroid Build Coastguard Worker       : SubType(FuzzSubType), Data(Packets) {}
42*7eba2f3bSAndroid Build Coastguard Worker 
43*7eba2f3bSAndroid Build Coastguard Worker   uint8_t* GetBuffer(size_t size, const void* init_data = nullptr) {
44*7eba2f3bSAndroid Build Coastguard Worker     auto ptr = std::make_unique<uint8_t[]>(size);
45*7eba2f3bSAndroid Build Coastguard Worker     uint8_t* p = (uint8_t*)ptr.get();
46*7eba2f3bSAndroid Build Coastguard Worker     if (init_data) {
47*7eba2f3bSAndroid Build Coastguard Worker       memcpy(p, init_data, size);
48*7eba2f3bSAndroid Build Coastguard Worker     } else {
49*7eba2f3bSAndroid Build Coastguard Worker       memset(p, 0, size);
50*7eba2f3bSAndroid Build Coastguard Worker     }
51*7eba2f3bSAndroid Build Coastguard Worker 
52*7eba2f3bSAndroid Build Coastguard Worker     _ScratchPtrs.push_back(std::move(ptr));
53*7eba2f3bSAndroid Build Coastguard Worker     return p;
54*7eba2f3bSAndroid Build Coastguard Worker   }
55*7eba2f3bSAndroid Build Coastguard Worker 
~Fuzz_Context()56*7eba2f3bSAndroid Build Coastguard Worker   ~Fuzz_Context() {}
57*7eba2f3bSAndroid Build Coastguard Worker };
58*7eba2f3bSAndroid Build Coastguard Worker 
59*7eba2f3bSAndroid Build Coastguard Worker extern const char fuzzer_name[];
60*7eba2f3bSAndroid Build Coastguard Worker extern void Fuzz_FixPackets(std::vector<bytes_t>& Packets, uint Seed);
61*7eba2f3bSAndroid Build Coastguard Worker extern void Fuzz_RunPackets(const std::vector<bytes_t>& Packets);
62*7eba2f3bSAndroid Build Coastguard Worker 
63*7eba2f3bSAndroid Build Coastguard Worker #endif
64