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