diff --git a/CHANGELOG b/CHANGELOG index 44c07535..7afb3268 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -43,6 +43,11 @@ HISTORY ++ Bugfixes: + 2009-10-16: Simon Goldschmidt + * ip.c: Fixed bug #27390: Source IP check in ip_input() causes it to drop + valid DHCP packets -> allow 0.0.0.0 as source address when LWIP_DHCP is + enabled + 2009-10-15: Simon Goldschmidt (Oleg Tyshev) * tcp_in.c: Fixed bug #27329: dupacks by unidirectional data transmit diff --git a/src/core/ipv4/ip.c b/src/core/ipv4/ip.c index ceada797..55750c4b 100644 --- a/src/core/ipv4/ip.c +++ b/src/core/ipv4/ip.c @@ -321,7 +321,8 @@ ip_input(struct pbuf *p, struct netif *inp) /* broadcast or multicast packet source address? Compliant with RFC 1122: 3.2.1.3 */ #if LWIP_DHCP - if (check_ip_src) + /* DHCP servers need 0.0.0.0 to be allowed as source port (RFC 1.1.2.2: 3.2.1.3/a) */ + if (check_ip_src && (iphdr->src.addr != 0)) #endif /* LWIP_DHCP */ { if ((ip_addr_isbroadcast(&(iphdr->src), inp)) || (ip_addr_ismulticast(&(iphdr->src)))) {