diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-10-01 22:06:29 +0200 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-10-07 16:33:49 -0400 |
commit | fbc44bf7177dfd61381da55405550b693943a432 (patch) | |
tree | 9869e534f828dd3377cffd2917dfdb6cc72023d3 /net/mac80211/tx.c | |
parent | 727c988593271599c9e5943699426afcce1a62d6 (diff) | |
download | op-kernel-dev-fbc44bf7177dfd61381da55405550b693943a432.zip op-kernel-dev-fbc44bf7177dfd61381da55405550b693943a432.tar.gz |
mac80211: fix vlan and optimise RX
When receiving data frames, we can send them only to
the interface they belong to based on transmitting
station (this doesn't work for probe requests). Also,
don't try to handle other frames for AP_VLAN at all
since those interface should only receive data.
Additionally, the transmit side must check that the
station we're sending a frame to is actually on the
interface we're transmitting on, and not transmit
packets to functions that live on other interfaces,
so validate that as well.
Another bug fix is needed in sta_info.c where in the
VLAN case when adding/removing stations we overwrite
the sdata variable we still need.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Cc: stable@kernel.org
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/tx.c')
-rw-r--r-- | net/mac80211/tx.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index fd40282..db4bda6 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c @@ -1704,7 +1704,8 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb, if (!is_multicast_ether_addr(hdr.addr1)) { rcu_read_lock(); sta = sta_info_get(local, hdr.addr1); - if (sta) + /* XXX: in the future, use sdata to look up the sta */ + if (sta && sta->sdata == sdata) sta_flags = get_sta_flags(sta); rcu_read_unlock(); } |