summaryrefslogtreecommitdiffstats
path: root/sys/dev/iwn
diff options
context:
space:
mode:
authorsam <sam@FreeBSD.org>2009-05-29 23:41:31 +0000
committersam <sam@FreeBSD.org>2009-05-29 23:41:31 +0000
commit36bf6c9b02de093f113d81dc2ba7c54d7ba93926 (patch)
tree9787d1f6e3cc4539910d1507c1a24f4aee473ecf /sys/dev/iwn
parenta025c3b40e2c37699d82b576a11975bb3c4c06c3 (diff)
downloadFreeBSD-src-36bf6c9b02de093f113d81dc2ba7c54d7ba93926.zip
FreeBSD-src-36bf6c9b02de093f113d81dc2ba7c54d7ba93926.tar.gz
validate tx rate(s) in the raw xmit path
Tested by: "Paul B. Mahol" <onemda@gmail.com> (rum, bwi)
Diffstat (limited to 'sys/dev/iwn')
-rw-r--r--sys/dev/iwn/if_iwn.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/sys/dev/iwn/if_iwn.c b/sys/dev/iwn/if_iwn.c
index cc12828..b520d8d 100644
--- a/sys/dev/iwn/if_iwn.c
+++ b/sys/dev/iwn/if_iwn.c
@@ -2227,6 +2227,7 @@ iwn_tx_data_raw(struct iwn_softc *sc, struct mbuf *m0,
const struct ieee80211_bpf_params *params)
{
struct ieee80211vap *vap = ni->ni_vap;
+ struct ieee80211com *ic = ni->ni_ic;
struct iwn_tx_cmd *cmd;
struct iwn_cmd_data *tx;
struct ieee80211_frame *wh;
@@ -2263,6 +2264,11 @@ iwn_tx_data_raw(struct iwn_softc *sc, struct mbuf *m0,
/* pick a tx rate */
rate = params->ibp_rate0;
+ if (!ieee80211_isratevalid(ic->ic_rt, rate)) {
+ /* XXX fall back to mcast/mgmt rate? */
+ m_freem(m0);
+ return EINVAL;
+ }
if (ieee80211_radiotap_active_vap(vap)) {
struct iwn_tx_radiotap_header *tap = &sc->sc_txtap;
OpenPOWER on IntegriCloud