Home | History | Annotate | Download | only in libhfuzz
      1 #ifdef __cplusplus
      2 extern "C" {
      3 #endif
      4 
      5 #include <stdbool.h>
      6 #include <stddef.h>
      7 #include <stdint.h>
      8 
      9 /*
     10  * buf: input fuzzing data
     11  * len: size of the 'buf' data
     12  *
     13  * Return value: should return 0
     14  */
     15 int LLVMFuzzerTestOneInput(const uint8_t* buf, size_t len);
     16 
     17 /*
     18  * argc: ptr to main's argc
     19  * argv: ptr to main's argv
     20  *
     21  * Return value: ignored
     22  */
     23 int LLVMFuzzerInitialize(int* argc, char*** argv);
     24 
     25 /*
     26  * Data: data to mutate
     27  * Size: size of the data to mutate
     28  * MaxSize: maximum size of the destination buffer
     29  *
     30  * Return value: size of the mutated buffer
     31  */
     32 size_t LLVMFuzzerMutate(uint8_t* Data, size_t Size, size_t MaxSize);
     33 
     34 /*
     35  *
     36  * An alternative for LLVMFuzzerTestOneInput()
     37  *
     38  * buf_ptr: will be set to input fuzzing data
     39  * len_ptr: will be set to the size of the input fuzzing data
     40  */
     41 void HF_ITER(const uint8_t** buf_ptr, size_t* len_ptr);
     42 
     43 /*
     44  * Update comparison map:
     45  *
     46  * addr: address of original comparison
     47  * n: new value (only if better than the old/current value)
     48  */
     49 void instrumentUpdateCmpMap(void* addr, unsigned int n);
     50 
     51 /*
     52  * Instrumented comparison functions
     53  */
     54 int hfuzz_strcmp(const char* s1, const char* s2, void* addr);
     55 int hfuzz_strcasecmp(const char* s1, const char* s2, void* addr);
     56 int hfuzz_strncmp(const char* s1, const char* s2, size_t n, void* addr);
     57 int hfuzz_strncasecmp(const char* s1, const char* s2, size_t n, void* addr);
     58 char* hfuzz_strstr(const char* haystack, const char* needle, void* addr);
     59 char* hfuzz_strcasestr(const char* haystack, const char* needle, void* addr);
     60 int hfuzz_memcmp(const void* m1, const void* m2, size_t n, void* addr);
     61 
     62 #if defined(__linux__)
     63 
     64 #include <sched.h>
     65 
     66 /*
     67  * Enter Linux namespaces
     68  *
     69  * cloneFlags: see 'man unshare'
     70  */
     71 bool linuxEnterNs(uintptr_t cloneFlags);
     72 /*
     73  * Bring network interface up
     74  *
     75  * ifacename: name of the interface, typically "lo"
     76  */
     77 bool linuxIfaceUp(const char* ifacename);
     78 /*
     79  * Mount tmpfs over a mount point
     80  *
     81  * dst: mount point for tmfs
     82  */
     83 bool linuxMountTmpfs(const char* dst);
     84 
     85 #endif /* defined(__linux__) */
     86 
     87 #ifdef __cplusplus
     88 } /* extern "C" */
     89 #endif
     90