Add fuzzing stuff

This commit is contained in:
Joseph C. Lehner 2016-11-18 16:53:38 +01:00
parent 03ffca3544
commit 8d9ab31b79
3 changed files with 38 additions and 0 deletions

View file

@ -22,6 +22,10 @@ ethsock.o: ethsock.c nmrpd.h
main.o: main.c nmrpd.h
$(CC) $(CFLAGS) -c -o main.o main.c
fuzz: clean
CC=afl-gcc CFLAGS=-DNMRPFLASH_FUZZ make nmrpflash
mv nmrpflash fuzz
clean:
rm -f nmrp.o tftp.o main.o ethsock.o nmrpflash

2
main.c
View file

@ -254,12 +254,14 @@ int main(int argc, char **argv)
return 1;
}
#ifndef NMRPFLASH_FUZZ
if (!list && ((!args.file_local && !args.tftpcmd) || !args.intf /*|| !args.ipaddr*/)) {
usage(stderr);
return 1;
}
require_admin();
#endif
val = !list ? nmrp_do(&args) : ethsock_list_all();
out:

32
nmrp.c
View file

@ -266,6 +266,35 @@ static inline void msg_init(struct nmrp_msg *msg, uint16_t code)
msg->code = code;
}
#ifdef NMRPFLASH_FUZZ
#define ethsock_create(a, b) ethsock_create_fake(a, b)
#define ethsock_get_hwaddr(a) ethsock_get_hwaddr_fake(a)
#define ethsock_recv(a, b, c) ethsock_recv_fake(a, b, c)
#define ethsock_send(a, b, c) (0)
#define ethsock_set_timeout(a, b) (0)
#define ethsock_ip_add(a, b, c, d) (0)
#define ethsock_ip_del(a, b) (0)
#define ethsock_close(a) (0)
#define tftp_put(a) (0)
static struct ethsock* ethsock_create_fake(const char *intf, uint16_t protocol)
{
return (struct ethsock*)1;
}
static uint8_t *ethsock_get_hwaddr_fake(struct ethsock* sock)
{
static uint8_t hwaddr[6];
memset(hwaddr, 0xfa, 6);
return hwaddr;
}
static ssize_t ethsock_recv_fake(struct ethsock *sock, void *buf, size_t len)
{
return read(STDIN_FILENO, buf, len);
}
#endif
static int pkt_send(struct ethsock *sock, struct nmrp_pkt *pkt)
{
size_t len = ntohs(pkt->msg.len) + sizeof(pkt->eh);
@ -532,6 +561,9 @@ int nmrp_do(struct nmrpd_args *args)
printf("\nNo response after 60 seconds. Bailing out.\n");
goto out;
}
#ifdef NMRPFLASH_FUZZ
goto out;
#endif
}
}