From owner-freebsd-bugs@FreeBSD.ORG Tue Jun 27 10:50:36 2006 Return-Path: X-Original-To: freebsd-bugs@hub.freebsd.org Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 4928416A400 for ; Tue, 27 Jun 2006 10:50:36 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id C055D43D66 for ; Tue, 27 Jun 2006 10:50:34 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id k5RAoYHf056562 for ; Tue, 27 Jun 2006 10:50:34 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id k5RAoYtK056561; Tue, 27 Jun 2006 10:50:34 GMT (envelope-from gnats) Date: Tue, 27 Jun 2006 10:50:34 GMT Message-Id: <200606271050.k5RAoYtK056561@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Colin Petrie Cc: Subject: Re: kern/99484: enabling net.inet.ip.fastforwarding breaks rfc2644 X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Colin Petrie List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Jun 2006 10:50:36 -0000 The following reply was made to PR kern/99484; it has been noted by GNATS. From: Colin Petrie To: bug-followup@FreeBSD.org, cpetrie@xcalibre.co.uk Cc: Subject: Re: kern/99484: enabling net.inet.ip.fastforwarding breaks rfc2644 Date: Tue, 27 Jun 2006 11:46:17 +0100 Hi, The following patch appears to resolve the problem but I thought a bit of peer review would be nice. Anyone see any problems with this patch? Cheers Colin *** ip_fastfwd.c Tue Jun 27 11:29:01 2006 --- ip_fastfwd.c.new Tue Jun 27 11:30:18 2006 *************** ip_fastforward(struct mbuf *m) *** 162,167 **** --- 162,168 ---- u_short sum, ip_len; int error = 0; int hlen, mtu; + int isbroadcast; #ifdef IPFIREWALL_FORWARD struct m_tag *fwd_tag; #endif *************** ip_fastforward(struct mbuf *m) *** 275,280 **** --- 276,282 ---- goto drop; } + #ifdef ALTQ /* * Is packet dropped by traffic conditioner? *************** passin: *** 421,426 **** --- 423,439 ---- */ if (ro.ro_rt->rt_flags & RTF_BLACKHOLE) goto drop; + + /* + * Is packet a directed network broadcast packet? + */ + isbroadcast = in_broadcast(dst->sin_addr, ifp); + if (isbroadcast) { + printf("ip_fastfwd: dropping directed broadcast - to %s\n", + inet_ntoa(dst->sin_addr)); + ipstat.ips_badaddr++; + goto drop; + } /* * Step 5: outgoing firewall packet processing