From 473156220d87f97a37beb1a9641a173629a8a51e Mon Sep 17 00:00:00 2001 From: Max Laier Date: Mon, 21 Feb 2005 17:30:10 +0000 Subject: [PATCH] Only send packet to bpf if we are committed to send it. Previously it was possible that the same packet would show up multiple times. This poses some constraints on the TBD locking for snc(4) (see comment). Obtained from: DragonFlyBSD Submitted by: Joerg Sonnenberger Reviewed by: rwatson --- sys/dev/snc/dp83932.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/sys/dev/snc/dp83932.c b/sys/dev/snc/dp83932.c index 1ffd4f15cd9c..90806990ac8a 100644 --- a/sys/dev/snc/dp83932.c +++ b/sys/dev/snc/dp83932.c @@ -345,12 +345,6 @@ sncstart(ifp) /* We need the header for m_pkthdr.len. */ M_ASSERTPKTHDR(m); - /* - * If bpf is listening on this interface, let it - * see the packet before we commit it to the wire. - */ - BPF_MTAP(ifp, m); - /* * If there is nothing in the o/p queue, and there is room in * the Tx ring, then send the packet directly. Otherwise append @@ -361,6 +355,16 @@ sncstart(ifp) return; } + /* + * If bpf is listening on this interface, let it see the packet + * before we commit it to the wire, but only if we are really + * committed to send it. + * + * XXX: Locking must protect m against premature m_freem() in + * sonictxint(). + */ + BPF_MTAP(ifp, m); + sc->mtd_prev = sc->mtd_free; sc->mtd_free = mtd_next;