1*8b26181fSAndroid Build Coastguard Worker #include <stdio.h>
2*8b26181fSAndroid Build Coastguard Worker #include <stdlib.h>
3*8b26181fSAndroid Build Coastguard Worker #include <fcntl.h>
4*8b26181fSAndroid Build Coastguard Worker #include <errno.h>
5*8b26181fSAndroid Build Coastguard Worker
6*8b26181fSAndroid Build Coastguard Worker #include <pcap/pcap.h>
7*8b26181fSAndroid Build Coastguard Worker
8*8b26181fSAndroid Build Coastguard Worker FILE * outfile = NULL;
9*8b26181fSAndroid Build Coastguard Worker struct pcap_rmtauth auth;
10*8b26181fSAndroid Build Coastguard Worker
fuzz_openFile(const char * name)11*8b26181fSAndroid Build Coastguard Worker void fuzz_openFile(const char * name) {
12*8b26181fSAndroid Build Coastguard Worker if (outfile != NULL) {
13*8b26181fSAndroid Build Coastguard Worker fclose(outfile);
14*8b26181fSAndroid Build Coastguard Worker }
15*8b26181fSAndroid Build Coastguard Worker outfile = fopen(name, "w");
16*8b26181fSAndroid Build Coastguard Worker auth.type = RPCAP_RMTAUTH_PWD;
17*8b26181fSAndroid Build Coastguard Worker auth.username = "user";
18*8b26181fSAndroid Build Coastguard Worker auth.password = "pass";
19*8b26181fSAndroid Build Coastguard Worker }
20*8b26181fSAndroid Build Coastguard Worker
21*8b26181fSAndroid Build Coastguard Worker void sock_initfuzz(const uint8_t *Data, size_t Size);
LLVMFuzzerTestOneInput(const uint8_t * Data,size_t Size)22*8b26181fSAndroid Build Coastguard Worker int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
23*8b26181fSAndroid Build Coastguard Worker pcap_t * pkts;
24*8b26181fSAndroid Build Coastguard Worker char errbuf[PCAP_ERRBUF_SIZE];
25*8b26181fSAndroid Build Coastguard Worker const u_char *pkt;
26*8b26181fSAndroid Build Coastguard Worker struct pcap_pkthdr *header;
27*8b26181fSAndroid Build Coastguard Worker struct pcap_stat stats;
28*8b26181fSAndroid Build Coastguard Worker int r;
29*8b26181fSAndroid Build Coastguard Worker
30*8b26181fSAndroid Build Coastguard Worker //initialization
31*8b26181fSAndroid Build Coastguard Worker if (outfile == NULL) {
32*8b26181fSAndroid Build Coastguard Worker fuzz_openFile("/dev/null");
33*8b26181fSAndroid Build Coastguard Worker }
34*8b26181fSAndroid Build Coastguard Worker
35*8b26181fSAndroid Build Coastguard Worker sock_initfuzz(Data, Size);
36*8b26181fSAndroid Build Coastguard Worker //initialize structure
37*8b26181fSAndroid Build Coastguard Worker pkts = pcap_open("rpcap://127.0.0.1/fuzz.pcap", 0, 0, 1000, &auth, errbuf);
38*8b26181fSAndroid Build Coastguard Worker if (pkts == NULL) {
39*8b26181fSAndroid Build Coastguard Worker fprintf(outfile, "Couldn't open pcap file %s\n", errbuf);
40*8b26181fSAndroid Build Coastguard Worker return 0;
41*8b26181fSAndroid Build Coastguard Worker }
42*8b26181fSAndroid Build Coastguard Worker
43*8b26181fSAndroid Build Coastguard Worker //loop over packets
44*8b26181fSAndroid Build Coastguard Worker r = pcap_next_ex(pkts, &header, &pkt);
45*8b26181fSAndroid Build Coastguard Worker while (r > 0) {
46*8b26181fSAndroid Build Coastguard Worker fprintf(outfile, "packet length=%d/%d\n",header->caplen, header->len);
47*8b26181fSAndroid Build Coastguard Worker r = pcap_next_ex(pkts, &header, &pkt);
48*8b26181fSAndroid Build Coastguard Worker }
49*8b26181fSAndroid Build Coastguard Worker if (pcap_stats(pkts, &stats) == 0) {
50*8b26181fSAndroid Build Coastguard Worker fprintf(outfile, "number of packets=%d\n", stats.ps_recv);
51*8b26181fSAndroid Build Coastguard Worker }
52*8b26181fSAndroid Build Coastguard Worker //close structure
53*8b26181fSAndroid Build Coastguard Worker pcap_close(pkts);
54*8b26181fSAndroid Build Coastguard Worker
55*8b26181fSAndroid Build Coastguard Worker return 0;
56*8b26181fSAndroid Build Coastguard Worker }
57