net: Do not respond to ICMP_ECHO_REQUEST if we do not have an IP address
authorDavid Rivshin <DRivshin@allworx.com>
Sun, 15 Nov 2020 03:12:47 +0000 (22:12 -0500)
committerTom Rini <trini@konsulko.com>
Tue, 19 Jan 2021 14:15:02 +0000 (09:15 -0500)
commit51723c5581241a3886a5adaa780c09138163d0b2
tree3b24d184c98c7667ce40e60b57989a0b7fd598e6
parent3f8905ade23bcfc6d8d852178993d321da2d02db
net: Do not respond to ICMP_ECHO_REQUEST if we do not have an IP address

While doing DHCP the interface IP is set to 0.0.0.0. This causes the
check in net.c on dst_ip to be effectively skipped, and all IP datagrams
are accepted up the IP stack. In the case of an ICMP_ECHO_REQUEST for the
matching MAC address (regardless of destination IP), the result is that
an ICMP_ECHO_REPLY is sent. The source address of the ICMP_ECHO_REPLY is
0.0.0.0, which is an illegal source address.

This can happen in common practice with the following sequence:
DHCP (U-Boot or OS) acquires IP address 10.0.0.1
System reboots
U-Boot starts DHCP and send DHCP DISCOVER
DHCP server decides to OFFER 10.0.0.1 again
  (perhaps because of existing lease or manual configuration)
DHCP server tries to PING 10.0.0.1 to see if anyone is squatting on it
DHCP server still has our MAC address in its ARP table for 10.0.0.1
U-Boot receives PING, and responds with an illegal source address
This may further result in a the DHCP server seeing the response as
  confirmation that someone is squatting on 10.0.0.1, and picking a
  new IP address from the pool to try again

Signed-off-by: David Rivshin <drivshin@allworx.com>
net/ping.c