diff options
author | Nicholas Molloy <nick.a.molloy@gmail.com> | 2019-01-02 21:15:41 +1300 |
---|---|---|
committer | Nicholas Molloy <nick.a.molloy@gmail.com> | 2019-01-02 21:23:40 +1300 |
commit | 81f4159fa88c8d34b291fe8708595d50ac68464c (patch) | |
tree | f59bba5e16bf1fb1a66a3619437bf12555558046 /src | |
parent | Add a profile for ghostwriter (#2319) (diff) | |
download | firejail-81f4159fa88c8d34b291fe8708595d50ac68464c.tar.gz firejail-81f4159fa88c8d34b291fe8708595d50ac68464c.tar.zst firejail-81f4159fa88c8d34b291fe8708595d50ac68464c.zip |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/firejail/arp.c | 4 | ||||
-rw-r--r-- | 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) { | |||
78 | errExit("if_nametoindex"); | 78 | errExit("if_nametoindex"); |
79 | addr.sll_family = AF_PACKET; | 79 | addr.sll_family = AF_PACKET; |
80 | memcpy (addr.sll_addr, ifr.ifr_hwaddr.sa_data, 6); | 80 | memcpy (addr.sll_addr, ifr.ifr_hwaddr.sa_data, 6); |
81 | addr.sll_halen = htons(6); | 81 | addr.sll_halen = ETH_ALEN; |
82 | 82 | ||
83 | // build the arp packet header | 83 | // build the arp packet header |
84 | ArpHdr hdr; | 84 | ArpHdr hdr; |
@@ -150,7 +150,7 @@ int arp_check(const char *dev, uint32_t destaddr) { | |||
150 | errExit("if_nametoindex"); | 150 | errExit("if_nametoindex"); |
151 | addr.sll_family = AF_PACKET; | 151 | addr.sll_family = AF_PACKET; |
152 | memcpy (addr.sll_addr, ifr.ifr_hwaddr.sa_data, 6); | 152 | memcpy (addr.sll_addr, ifr.ifr_hwaddr.sa_data, 6); |
153 | addr.sll_halen = htons(6); | 153 | addr.sll_halen = ETH_ALEN; |
154 | 154 | ||
155 | // build the arp packet header | 155 | // build the arp packet header |
156 | ArpHdr hdr; | 156 | 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) { | |||
124 | errExit("if_nametoindex"); | 124 | errExit("if_nametoindex"); |
125 | addr.sll_family = AF_PACKET; | 125 | addr.sll_family = AF_PACKET; |
126 | memcpy (addr.sll_addr, mac, 6); | 126 | memcpy (addr.sll_addr, mac, 6); |
127 | addr.sll_halen = htons(6); | 127 | addr.sll_halen = ETH_ALEN; |
128 | 128 | ||
129 | // build the arp packet header | 129 | // build the arp packet header |
130 | ArpHdr hdr; | 130 | ArpHdr hdr; |