2323extern int fuzzing_netdev (gnrc_netif_t * );
2424extern void fuzzing_netdev_wait (void );
2525
26+ /* buffer sizes for reading from an fd */
27+ #define FUZZING_BSIZE 1024
28+ #define FUZZING_BSTEP 128
29+
2630/* used by gnrc_pktbuf_malloc to exit on free */
2731gnrc_pktsnip_t * gnrc_pktbuf_fuzzptr = NULL ;
2832
@@ -48,40 +52,22 @@ fuzzing_init(ipv6_addr_t *addr, unsigned pfx_len)
4852int
4953fuzzing_read_packet (int fd , gnrc_pktsnip_t * pkt )
5054{
51- ssize_t r ;
52- size_t csiz , rsiz ;
55+ size_t rsiz ;
5356
5457 /* can only be called once currently */
5558 assert (gnrc_pktbuf_fuzzptr == NULL );
5659
57- csiz = 0 ;
58- rsiz = FUZZING_BSIZE ;
59- if (gnrc_pktbuf_realloc_data (pkt , rsiz )) {
60- return - ENOMEM ;
61- }
62-
63- while ((r = read (fd , & ((char * )pkt -> data )[csiz ], rsiz )) > 0 ) {
64- assert ((size_t )r <= rsiz );
65-
66- csiz += r ;
67- rsiz -= r ;
68-
69- if (rsiz == 0 ) {
70- if (gnrc_pktbuf_realloc_data (pkt , csiz + FUZZING_BSTEP )) {
71- return - ENOMEM ;
72- }
73- rsiz += FUZZING_BSTEP ;
74- }
75- }
76- if (r == -1 ) {
60+ uint8_t * input = fuzzing_read_bytes (fd , & rsiz );
61+ if (input == NULL ) {
7762 return - errno ;
7863 }
7964
80- /* shrink packet to actual size */
81- if (gnrc_pktbuf_realloc_data (pkt , csiz )) {
65+ if (gnrc_pktbuf_realloc_data (pkt , rsiz )) {
8266 return - ENOMEM ;
8367 }
8468
69+ memcpy (pkt -> data , input , rsiz );
70+
8571 gnrc_pktbuf_fuzzptr = pkt ;
8672 return 0 ;
8773}
@@ -116,7 +102,7 @@ fuzzing_read_bytes(int fd, size_t *size)
116102 return NULL ;
117103 }
118104
119- /* shrink packet to actual size */
105+ /* shrink buffer to actual size */
120106 if ((buffer = realloc (buffer , csiz )) == NULL ) {
121107 return NULL ;
122108 }
0 commit comments