blob: a5f19561880a5724f8c69a494bc2faeb6a8a62d8 [file] [log] [blame]
#ifdef __cplusplus
extern "C" {
#endif
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
/*
* buf: input fuzzing data
* len: size of the 'buf' data
*
* Return value: should return 0
*/
int LLVMFuzzerTestOneInput(const uint8_t* buf, size_t len);
/*
* argc: ptr to main's argc
* argv: ptr to main's argv
*
* Return value: ignored
*/
int LLVMFuzzerInitialize(int* argc, char*** argv);
/*
* Data: data to mutate
* Size: size of the data to mutate
* MaxSize: maximum size of the destination buffer
*
* Return value: size of the mutated buffer
*/
size_t LLVMFuzzerMutate(uint8_t* Data, size_t Size, size_t MaxSize);
/*
*
* An alternative for LLVMFuzzerTestOneInput()
*
* buf_ptr: will be set to input fuzzing data
* len_ptr: will be set to the size of the input fuzzing data
*/
void HF_ITER(const uint8_t** buf_ptr, size_t* len_ptr);
/*
* Update comparison map:
*
* addr: address of original comparison
* n: new value (only if better than the old/current value)
*/
void instrumentUpdateCmpMap(void* addr, unsigned int n);
/*
* Instrumented comparison functions
*/
int hfuzz_strcmp(const char* s1, const char* s2, void* addr);
int hfuzz_strcasecmp(const char* s1, const char* s2, void* addr);
int hfuzz_strncmp(const char* s1, const char* s2, size_t n, void* addr);
int hfuzz_strncasecmp(const char* s1, const char* s2, size_t n, void* addr);
char* hfuzz_strstr(const char* haystack, const char* needle, void* addr);
char* hfuzz_strcasestr(const char* haystack, const char* needle, void* addr);
int hfuzz_memcmp(const void* m1, const void* m2, size_t n, void* addr);
#if defined(__linux__)
#include <sched.h>
/*
* Enter Linux namespaces
*
* cloneFlags: see 'man unshare'
*/
bool linuxEnterNs(uintptr_t cloneFlags);
/*
* Bring network interface up
*
* ifacename: name of the interface, typically "lo"
*/
bool linuxIfaceUp(const char* ifacename);
/*
* Mount tmpfs over a mount point
*
* dst: mount point for tmfs
*/
bool linuxMountTmpfs(const char* dst);
#endif /* defined(__linux__) */
#ifdef __cplusplus
} /* extern "C" */
#endif