svn commit: r225724 - user/adrian/if_ath_tx/sys/dev/ath

Adrian Chadd adrian at FreeBSD.org
Thu Sep 22 07:29:46 UTC 2011


Author: adrian
Date: Thu Sep 22 07:29:45 2011
New Revision: 225724
URL: http://svn.freebsd.org/changeset/base/225724

Log:
  Free the mbuf before recycling the current rx ath_buf when doing a radiotap.
  
  ath_rxbuf_init() doesn't free/realloc existing mbufs (if they do exist),
  it just passes the buffer pointer/length to the HAL rx descriptor setup
  code.
  
  When doing radiotap however, the mbuf length is overridden before passing
  it off to radiotap/bpf. This means that the buffer will stay bein
  potentially shorter until it's next used for a valid frame.
  
  I was seeing short frames show up in packet traces, along with
  seemingly invalid frame contents, probe requests and other random
  stuff that didn't make sense. These only show up when doing a
  background radiotap/tcpdump. This patch fixes this behaviour.
  
  This is a merge candidate to HEAD.

Modified:
  user/adrian/if_ath_tx/sys/dev/ath/if_ath.c

Modified: user/adrian/if_ath_tx/sys/dev/ath/if_ath.c
==============================================================================
--- user/adrian/if_ath_tx/sys/dev/ath/if_ath.c	Thu Sep 22 03:03:40 2011	(r225723)
+++ user/adrian/if_ath_tx/sys/dev/ath/if_ath.c	Thu Sep 22 07:29:45 2011	(r225724)
@@ -3824,11 +3824,13 @@ rx_error:
 				/* NB: bpf needs the mbuf length setup */
 				len = rs->rs_datalen;
 				m->m_pkthdr.len = m->m_len = len;
+				bf->bf_m = NULL;
 
 				ath_rx_dump_wtf(sc, rs, bf, m, status);
 
 				ath_rx_tap(ifp, m, rs, tsf, nf);
 				ieee80211_radiotap_rx_all(ic, m);
+				m_freem(m);
 			}
 			/* XXX pass MIC errors up for s/w reclaculation */
 			goto rx_next;


More information about the svn-src-user mailing list