From: Roy Marples Date: Wed, 5 Feb 2020 14:47:08 +0000 (+0000) Subject: BPF: Don't use magic in buffer length assignments X-Git-Tag: v8.1.7~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=690685a2972cf7a90f585954433ce9f0753cd581;p=thirdparty%2Fdhcpcd.git BPF: Don't use magic in buffer length assignments Define frame header lengths and frame size maximums. Use this to calculate required buffer sizes. --- diff --git a/src/arp.c b/src/arp.c index 2460a1a3..6e3d634a 100644 --- a/src/arp.c +++ b/src/arp.c @@ -55,8 +55,9 @@ #include "logerr.h" #if defined(ARP) -#define ARP_LEN \ - (sizeof(struct arphdr) + (2 * sizeof(uint32_t)) + (2 * HWADDR_LEN)) +#define ARP_LEN \ + (FRAMEHDRLEN_MAX + \ + sizeof(struct arphdr) + (2 * sizeof(uint32_t)) + (2 * HWADDR_LEN)) /* ARP debugging can be quite noisy. Enable this for more noise! */ //#define ARP_DEBUG diff --git a/src/dhcp.c b/src/dhcp.c index 2b1e44f1..d5cb7305 100644 --- a/src/dhcp.c +++ b/src/dhcp.c @@ -3432,7 +3432,7 @@ static void dhcp_readbpf(void *arg) { struct interface *ifp = arg; - uint8_t buf[10240]; /* Max jumbo frame and some extra */ + uint8_t buf[FRAMELEN_MAX]; ssize_t bytes; struct dhcp_state *state = D_STATE(ifp); ssize_t fl = (ssize_t)bpf_frame_header_len(ifp); diff --git a/src/if.h b/src/if.h index cc62cc94..cd24726b 100644 --- a/src/if.h +++ b/src/if.h @@ -81,6 +81,11 @@ # define ARPHRD_INFINIBAND 32 #endif +/* Maximum frame length. + * Support jumbo frames and some extra. */ +#define FRAMEHDRLEN_MAX 14 /* only ethernet support */ +#define FRAMELEN_MAX (FRAMEHDRLEN_MAX + 9216) + /* Work out if we have a private address or not * 10/8 * 172.16/12