]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
BPF: Don't use magic in buffer length assignments
authorRoy Marples <roy@marples.name>
Wed, 5 Feb 2020 14:47:08 +0000 (14:47 +0000)
committerRoy Marples <roy@marples.name>
Wed, 5 Feb 2020 14:47:08 +0000 (14:47 +0000)
Define frame header lengths and frame size maximums.
Use this to calculate required buffer sizes.

src/arp.c
src/dhcp.c
src/if.h

index 2460a1a32078b891c41eec2963543c1ad5eb69e0..6e3d634a08cb62ebc82d80e4e0dcca8041e76aaa 100644 (file)
--- 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
index 2b1e44f1995bc9753f02142b1ec8d00bd4b1502f..d5cb7305efd371faf7ccf048965b7640989f325b 100644 (file)
@@ -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);
index cc62cc948fa5caa82235f25fcb05fc41566cd91d..cd24726b71d70f8e2f1015dbf5e70c2554ca11e9 100644 (file)
--- a/src/if.h
+++ b/src/if.h
 #  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