wlcore: remove support for injected Tx
Require each incoming packet to have a valid vif. The injected Tx code path was buggy (and unused), so disallow it altogether. Cleanup a few places and add a warning so we can better discover anomalies (corrupted skbs?) masquerading as injected Tx. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
This commit is contained in:
parent
530abe195d
commit
f4d02007cd
@ -1179,9 +1179,13 @@ static void wl1271_op_tx(struct ieee80211_hw *hw,
|
||||
int q, mapping;
|
||||
u8 hlid;
|
||||
|
||||
if (vif)
|
||||
wlvif = wl12xx_vif_to_data(vif);
|
||||
if (!vif) {
|
||||
wl1271_debug(DEBUG_TX, "DROP skb with no vif");
|
||||
ieee80211_free_txskb(hw, skb);
|
||||
return;
|
||||
}
|
||||
|
||||
wlvif = wl12xx_vif_to_data(vif);
|
||||
mapping = skb_get_queue_mapping(skb);
|
||||
q = wl1271_tx_get_queue(mapping);
|
||||
|
||||
@ -1195,7 +1199,7 @@ static void wl1271_op_tx(struct ieee80211_hw *hw,
|
||||
* allow these packets through.
|
||||
*/
|
||||
if (hlid == WL12XX_INVALID_LINK_ID ||
|
||||
(wlvif && !test_bit(hlid, wlvif->links_map)) ||
|
||||
(!test_bit(hlid, wlvif->links_map)) ||
|
||||
(wlcore_is_queue_stopped(wl, q) &&
|
||||
!wlcore_is_queue_stopped_by_reason(wl, q,
|
||||
WLCORE_QUEUE_STOP_REASON_WATERMARK))) {
|
||||
@ -1209,7 +1213,6 @@ static void wl1271_op_tx(struct ieee80211_hw *hw,
|
||||
skb_queue_tail(&wl->links[hlid].tx_queue[q], skb);
|
||||
|
||||
wl->tx_queue_count[q]++;
|
||||
if (wlvif)
|
||||
wlvif->tx_queue_count[q]++;
|
||||
|
||||
/*
|
||||
|
@ -157,9 +157,6 @@ u8 wl12xx_tx_get_hlid(struct wl1271 *wl, struct wl12xx_vif *wlvif,
|
||||
{
|
||||
struct ieee80211_tx_info *control;
|
||||
|
||||
if (!wlvif || wl12xx_is_dummy_packet(wl, skb))
|
||||
return wl->system_hlid;
|
||||
|
||||
if (wlvif->bss_type == BSS_TYPE_AP_BSS)
|
||||
return wl12xx_tx_get_hlid_ap(wl, wlvif, skb, sta);
|
||||
|
||||
@ -764,7 +761,7 @@ int wlcore_tx_work_locked(struct wl1271 *wl)
|
||||
bool has_data = false;
|
||||
|
||||
wlvif = NULL;
|
||||
if (!wl12xx_is_dummy_packet(wl, skb) && info->control.vif)
|
||||
if (!wl12xx_is_dummy_packet(wl, skb))
|
||||
wlvif = wl12xx_vif_to_data(info->control.vif);
|
||||
else
|
||||
hlid = wl->system_hlid;
|
||||
|
@ -451,6 +451,7 @@ struct wl12xx_vif {
|
||||
|
||||
static inline struct wl12xx_vif *wl12xx_vif_to_data(struct ieee80211_vif *vif)
|
||||
{
|
||||
WARN_ON(!vif);
|
||||
return (struct wl12xx_vif *)vif->drv_priv;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user