arp: filter NOARP neighbours for SIOCGARP
authorEric Dumazet <edumazet@google.com>
Mon, 27 Jul 2015 09:33:50 +0000 (11:33 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 29 Jul 2015 06:41:24 +0000 (23:41 -0700)
commit11c91ef98f37cd743098de26160fffd7f9bd40e1
treefbac25bfba3cd3487b659d37cf31d5d9d5c7070a
parent865b804244f228e80fb62abe464296399253cce8
arp: filter NOARP neighbours for SIOCGARP

When arp is off on a device, and ioctl(SIOCGARP) is queried,
a buggy answer is given with MAC address of the device, instead
of the mac address of the destination/gateway.

We filter out NUD_NOARP neighbours for /proc/net/arp,
we must do the same for SIOCGARP ioctl.

Tested:

lpaa23:~# ./arp 10.246.7.190
MAC=00:01:e8:22:cb:1d      // correct answer

lpaa23:~# ip link set dev eth0 arp off
lpaa23:~# cat /proc/net/arp   # check arp table is now 'empty'
IP address       HW type     Flags       HW address    Mask     Device
lpaa23:~# ./arp 10.246.7.190
MAC=00:1a:11:c3:0d:7f   // buggy answer before patch (this is eth0 mac)

After patch :

lpaa23:~# ip link set dev eth0 arp off
lpaa23:~# ./arp 10.246.7.190
ioctl(SIOCGARP) failed: No such device or address

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: Vytautas Valancius <valas@google.com>
Cc: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/arp.c