#include #include #include #include #include #include #include #include "gptcl.h" #include #include static int fuzz_gpt(char* partition_file) { BasicMBRData mbrData; GPTData gptData; GPTPart partData; int numParts = 0; stringstream res; gptData.JustLooking(); gptData.LoadPartitions((string) partition_file); gptData.LoadMainTable(); gptData.GetDiskGUID(); numParts = gptData.GetNumParts(); //Extracted from the android_dump function in sgdisk.cc, hits more code for (int i = 0; i < numParts; i++) { partData = gptData[i]; if (partData.GetFirstLBA() > 0) { partData.GetType(); partData.GetUniqueGUID(); partData.GetDescription();; } } return 0; } #ifdef GPTFDISK_FUZZER_DEVICE #define TMPFILE_TEMPLATE "/data/local/tmp/gptfuzzXXXXXXXX\x00" #else #define TMPFILE_TEMPLATE "/dev/shm/gptfuzzXXXXXXXX\x00" #endif size_t TMPFILE_LEN = sizeof(TMPFILE_TEMPLATE); extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { char partition_tmp_file[TMPFILE_LEN]; int tmpfd; memcpy(partition_tmp_file, TMPFILE_TEMPLATE, TMPFILE_LEN); tmpfd = mkstemp(partition_tmp_file); if(tmpfd < 0) return -1; write(tmpfd, data, size); close(tmpfd); fuzz_gpt(partition_tmp_file); remove(partition_tmp_file); return 0; }