Date: Fri, 23 Nov 2001 16:11:14 +0000 From: Dima Dorfman <dima@trit.org> To: net@freebsd.org Subject: Fix icmp_reflect if no addresses are configured Message-ID: <20011123161119.B9BA13F86@bazooka.trit.org>
next in thread | raw e-mail | index | archive | help
Please review the following change, from NetBSD: In icmp_reflect(): If the packet was not addressed to us and was received on an interface without an IP address, try to find a non-loopback AF_INET address to use. If that fails, drop it. Previously, we used the address at the top of the in_ifaddrhead list, which didn't make much sense, and would cause a panic if there were no AF_INET addresses configured on the system. This fixes PRs 29337 and 30524. Thanks. Index: ip_icmp.c =================================================================== RCS file: /ref/cvsf/src/sys/netinet/ip_icmp.c,v retrieving revision 1.62 diff -u -r1.62 ip_icmp.c --- ip_icmp.c 2001/10/25 05:56:30 1.62 +++ ip_icmp.c 2001/11/23 15:55:41 @@ -623,10 +623,25 @@ (struct sockaddr *)&icmpdst, m->m_pkthdr.rcvif); /* * The following happens if the packet was not addressed to us, - * and was received on an interface with no IP address. + * and was received on an interface with no IP address: + * We find the first AF_INET address on the first non-loopback + * interface. */ if (ia == NULL) - ia = TAILQ_FIRST(&in_ifaddrhead); + TAILQ_FOREACH(ia, &in_ifaddrhead, ia_link) { + if (ia->ia_ifp->if_flags & IFF_LOOPBACK) + continue; + break; + } + + /* + * If we still didn't find an address, punt. We could have an + * interface up and (and receiving packets) with no address. + */ + if (ia == NULL) { + m_freem(m); + goto done; + } match: t = IA_SIN(ia)->sin_addr; ip->ip_src = t; To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20011123161119.B9BA13F86>