summaryrefslogtreecommitdiffstats
path: root/sys/net/bpf.c
diff options
context:
space:
mode:
authorjkim <jkim@FreeBSD.org>2008-04-28 19:42:11 +0000
committerjkim <jkim@FreeBSD.org>2008-04-28 19:42:11 +0000
commit2723f83a5a450a3124fab55051d0bae64dce7f3e (patch)
tree121e8874601b023d18ca862f81b07ee8ed0af7ef /sys/net/bpf.c
parent4f05acb924306f847fe9c9324442b0b947bba033 (diff)
downloadFreeBSD-src-2723f83a5a450a3124fab55051d0bae64dce7f3e.zip
FreeBSD-src-2723f83a5a450a3124fab55051d0bae64dce7f3e.tar.gz
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
Diffstat (limited to 'sys/net/bpf.c')
-rw-r--r--sys/net/bpf.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/sys/net/bpf.c b/sys/net/bpf.c
index f61fcfa..a8c8f33 100644
--- a/sys/net/bpf.c
+++ b/sys/net/bpf.c
@@ -1571,9 +1571,9 @@ bpf_tap(struct bpf_if *bp, u_char *pkt, u_int pktlen)
BPFIF_UNLOCK(bp);
}
-#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, r, i) \
+ (((d)->bd_direction == BPF_D_IN && (r) != (i)) || \
+ ((d)->bd_direction == BPF_D_OUT && (r) == (i)))
/*
* Incoming linkage from device drivers, when packet is in an mbuf chain.
@@ -1598,7 +1598,7 @@ bpf_mtap(struct bpf_if *bp, struct mbuf *m)
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;
@@ -1662,7 +1662,7 @@ bpf_mtap2(struct bpf_if *bp, void *data, u_int dlen, struct mbuf *m)
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;
OpenPOWER on IntegriCloud