From 81f4159fa88c8d34b291fe8708595d50ac68464c Mon Sep 17 00:00:00 2001 From: Nicholas Molloy Date: Wed, 2 Jan 2019 21:15:41 +1300 Subject: Correctly set address length in arp frames Kernel commit 99137b7 introduced an additional check of the address length. This exposed a bug in the arp code where the address length was being set incorrectly. Now the length is set from the ETH_ALEN constant declared in linux/if_ether.h This fixes #2314 --- src/firejail/arp.c | 4 ++-- src/fnet/arp.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/firejail/arp.c b/src/firejail/arp.c index 288e5ded3..a8818c960 100644 --- a/src/firejail/arp.c +++ b/src/firejail/arp.c @@ -78,7 +78,7 @@ void arp_announce(const char *dev, Bridge *br) { errExit("if_nametoindex"); addr.sll_family = AF_PACKET; memcpy (addr.sll_addr, ifr.ifr_hwaddr.sa_data, 6); - addr.sll_halen = htons(6); + addr.sll_halen = ETH_ALEN; // build the arp packet header ArpHdr hdr; @@ -150,7 +150,7 @@ int arp_check(const char *dev, uint32_t destaddr) { errExit("if_nametoindex"); addr.sll_family = AF_PACKET; memcpy (addr.sll_addr, ifr.ifr_hwaddr.sa_data, 6); - addr.sll_halen = htons(6); + addr.sll_halen = ETH_ALEN; // build the arp packet header ArpHdr hdr; diff --git a/src/fnet/arp.c b/src/fnet/arp.c index 794f6c8c8..3c2a2361b 100644 --- a/src/fnet/arp.c +++ b/src/fnet/arp.c @@ -124,7 +124,7 @@ void arp_scan(const char *dev, uint32_t ifip, uint32_t ifmask) { errExit("if_nametoindex"); addr.sll_family = AF_PACKET; memcpy (addr.sll_addr, mac, 6); - addr.sll_halen = htons(6); + addr.sll_halen = ETH_ALEN; // build the arp packet header ArpHdr hdr; -- cgit v1.2.3-54-g00ecf