diff options
| author | Roy Marples <roy@marples.name> | 2020-02-05 14:47:08 +0000 |
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2020-02-05 14:47:08 +0000 |
| commit | 690685a2972cf7a90f585954433ce9f0753cd581 (patch) | |
| tree | 2363523d5998320e5c450d7ff32c339e5967518a | |
| parent | 354d22cc67eabcb755f3ce60ab22f429bcf84b7a (diff) | |
| download | dhcpcd-690685a2972cf7a90f585954433ce9f0753cd581.tar.xz | |
BPF: Don't use magic in buffer length assignments
Define frame header lengths and frame size maximums.
Use this to calculate required buffer sizes.
| -rw-r--r-- | src/arp.c | 5 | ||||
| -rw-r--r-- | src/dhcp.c | 2 | ||||
| -rw-r--r-- | src/if.h | 5 |
3 files changed, 9 insertions, 3 deletions
@@ -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 @@ -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); @@ -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 |
