Skip to content

Commit

Permalink
Fuzzing-related changes, mostly
Browse files Browse the repository at this point in the history
  • Loading branch information
jclehner committed Nov 22, 2016
1 parent 1d6013f commit 77359d4
Showing 1 changed file with 14 additions and 20 deletions.
34 changes: 14 additions & 20 deletions nmrp.c
Original file line number Diff line number Diff line change
Expand Up @@ -266,32 +266,24 @@ static inline void msg_init(struct nmrp_msg *msg, uint16_t code)
}

#ifdef NMRPFLASH_FUZZ
#define ethsock_create(a, b) ethsock_create_fake(a, b)
#define NMRP_INITIAL_TIMEOUT 0
#define ethsock_create(a, b) ((struct ethsock*)1)
#define ethsock_get_hwaddr(a) ethsock_get_hwaddr_fake(a)
#define ethsock_recv(a, b, c) ethsock_recv_fake(a, b, c)
#define ethsock_recv(sock, buf, len) read(STDIN_FILENO, buf, len)
#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);
static uint8_t hwaddr[6] = { 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa };
return hwaddr;
}

static ssize_t ethsock_recv_fake(struct ethsock *sock, void *buf, size_t len)
{
return read(STDIN_FILENO, buf, len);
}
#else
#define NMRP_INITIAL_TIMEOUT 60
#endif

static int pkt_send(struct ethsock *sock, struct nmrp_pkt *pkt)
Expand Down Expand Up @@ -542,13 +534,12 @@ int nmrp_do(struct nmrpd_args *args)
} else if (status == 1) {
goto out;
} else {
if ((time_monotonic() - beg) >= 60) {
/* because we don't want nmrpflash's exit status to be zero */
status = 1;
if ((time_monotonic() - beg) >= NMRP_INITIAL_TIMEOUT) {
printf("\nNo response after 60 seconds. Bailing out.\n");
goto out;
}
#ifdef NMRPFLASH_FUZZ
goto out;
#endif
}
}

Expand Down Expand Up @@ -666,11 +657,14 @@ int nmrp_do(struct nmrpd_args *args)
printf("Uploading %s ... ", leafname(args->file_local));
}
fflush(stdout);
status = tftp_put(args);
if (!(status = tftp_put(args))) {
printf("OK\n");
}

}

if (!status) {
printf("OK\nWaiting for remote to respond.\n");
printf("Waiting for remote to respond.\n");
upload_ok = 1;
ethsock_set_timeout(sock, args->ul_timeout);
tx.msg.code = NMRP_C_KEEP_ALIVE_REQ;
Expand Down

0 comments on commit 77359d4

Please sign in to comment.