From nobody@FreeBSD.org  Sun Apr 27 08:41:45 2008
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 2A59F106564A
	for <freebsd-gnats-submit@FreeBSD.org>; Sun, 27 Apr 2008 08:41:45 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21])
	by mx1.freebsd.org (Postfix) with ESMTP id 1895A8FC13
	for <freebsd-gnats-submit@FreeBSD.org>; Sun, 27 Apr 2008 08:41:45 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.14.2/8.14.2) with ESMTP id m3R8fCEr046393
	for <freebsd-gnats-submit@FreeBSD.org>; Sun, 27 Apr 2008 08:41:12 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.14.2/8.14.1/Submit) id m3R8fCP4046392;
	Sun, 27 Apr 2008 08:41:12 GMT
	(envelope-from nobody)
Message-Id: <200804270841.m3R8fCP4046392@www.freebsd.org>
Date: Sun, 27 Apr 2008 08:41:12 GMT
From: Dmitry <hanabana@mail.ru>
To: freebsd-gnats-submit@FreeBSD.org
Subject: bpf incorrectly determines outgoing routed packets as incoming when BIOCSDIRECTION is used
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         123138
>Category:       kern
>Synopsis:       [bpf] [patch] bpf incorrectly determines outgoing routed packets as incoming when BIOCSDIRECTION is used
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    jkim
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sun Apr 27 08:50:00 UTC 2008
>Closed-Date:    Mon Apr 28 19:47:47 UTC 2008
>Last-Modified:  Mon Apr 28 19:50:01 UTC 2008
>Originator:     Dmitry
>Release:        7.0-STABLE
>Organization:
home
>Environment:
FreeBSD gw 7.0-STABLE FreeBSD 7.0-STABLE #0: Sun Apr 27 11:29:26 MSD 2008 root@kb:/var/tmp/obj/usr/src/sys/KG  i386
>Description:
BPF_CHECK_DIRECTION macros considers packet as outgoing when it has no receive interface field (rcvif) set. This correct for single homed server but is not enough for router. Packet came from one interface and going out another has rcvif field set even when it passed natd daemon.
>How-To-Repeat:

>Fix:


Patch attached with submission follows:

--- src/sys/net/bpf.c.orig	2008-04-23 11:41:21.000000000 +0400
+++ src/sys/net/bpf.c	2008-04-27 11:18:20.000000000 +0400
@@ -1330,9 +1330,9 @@
 	}
 }
 
-#define	BPF_CHECK_DIRECTION(d, i)				\
-	    (((d)->bd_direction == BPF_D_IN && (i) == NULL) ||	\
-	    ((d)->bd_direction == BPF_D_OUT && (i) != NULL))
+#define	BPF_CHECK_DIRECTION(d, i, bpi)				\
+	    (((d)->bd_direction == BPF_D_IN && (i) != (bpi)) ||	\
+	    ((d)->bd_direction == BPF_D_OUT && (i) == (bpi)))
 
 /*
  * Incoming linkage from device drivers, when packet is in an mbuf chain.
@@ -1357,7 +1357,7 @@
 
 	BPFIF_LOCK(bp);
 	LIST_FOREACH(d, &bp->bif_dlist, bd_next) {
-		if (BPF_CHECK_DIRECTION(d, m->m_pkthdr.rcvif))
+		if (BPF_CHECK_DIRECTION(d, m->m_pkthdr.rcvif, bp->bif_ifp))
 			continue;
 		BPFD_LOCK(d);
 		++d->bd_rcount;
@@ -1421,7 +1421,7 @@
 
 	BPFIF_LOCK(bp);
 	LIST_FOREACH(d, &bp->bif_dlist, bd_next) {
-		if (BPF_CHECK_DIRECTION(d, m->m_pkthdr.rcvif))
+		if (BPF_CHECK_DIRECTION(d, m->m_pkthdr.rcvif, bp->bif_ifp))
 			continue;
 		BPFD_LOCK(d);
 		++d->bd_rcount;


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->freebsd-net 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Sun Apr 27 18:44:05 UTC 2008 
Responsible-Changed-Why:  
Over to maintainer(s). 

http://www.freebsd.org/cgi/query-pr.cgi?pr=123138 
Responsible-Changed-From-To: freebsd-net->jkim 
Responsible-Changed-By: jkim 
Responsible-Changed-When: Mon Apr 28 19:19:36 UTC 2008 
Responsible-Changed-Why:  
This is my bug.  Grab. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=123138 
State-Changed-From-To: open->closed 
State-Changed-By: jkim 
State-Changed-When: Mon Apr 28 19:46:25 UTC 2008 
State-Changed-Why:  
Committed on HEAD (with a minor change).  Will be MFC'ed in a week.  Thanks! 

http://www.freebsd.org/cgi/query-pr.cgi?pr=123138 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/123138: commit references a PR
Date: Mon, 28 Apr 2008 19:42:20 +0000 (UTC)

 jkim        2008-04-28 19:42:11 UTC
 
   FreeBSD src repository
 
   Modified files:
     sys/net              bpf.c 
   Log:
   Check packet directions more properly instead of just checking received
   interface is null.
   
   PR:             kern/123138
   Submitted by:   Dmitry (hanabana at mail dot ru)
   MFC after:      1 week
   
   Revision  Changes    Path
   1.194     +5 -5      src/sys/net/bpf.c
 _______________________________________________
 cvs-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/cvs-all
 To unsubscribe, send any mail to "cvs-all-unsubscribe@freebsd.org"
 
>Unformatted:
