Mercurial > hg > dhcpcd
changeset 5030:28bb50e31931 draft
BPF: Don't use magic in buffer length assignments
Define frame header lengths and frame size maximums.
Use this to calculate required buffer sizes.
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Wed, 05 Feb 2020 14:47:08 +0000 |
| parents | da6a13a37ca0 |
| children | f65873a0ad5b |
| files | src/arp.c src/dhcp.c src/if.h |
| diffstat | 3 files changed, 9 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/arp.c Wed Feb 05 13:55:47 2020 +0000 +++ b/src/arp.c Wed Feb 05 14:47:08 2020 +0000 @@ -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
--- a/src/dhcp.c Wed Feb 05 13:55:47 2020 +0000 +++ b/src/dhcp.c Wed Feb 05 14:47:08 2020 +0000 @@ -3432,7 +3432,7 @@ 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);
--- a/src/if.h Wed Feb 05 13:55:47 2020 +0000 +++ b/src/if.h Wed Feb 05 14:47:08 2020 +0000 @@ -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
