mac80211: drop 4-addr VLAN frames earlier if not connected
authorJohannes Berg <johannes.berg@intel.com>
Fri, 20 Mar 2015 13:05:02 +0000 (14:05 +0100)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 20 Mar 2015 15:27:35 +0000 (16:27 +0100)
If there's no station on the 4-addr VLAN interface, then frames
cannot be transmitted. Drop such frames earlier, before setting
up all the information for them.

We should keep the old check though since that code might be used
for other internally-generated frames.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/tx.c

index dcf60ee38b93fb4ab9c66c54597d0f8580368d0f..1d6344679bf1d33a56512b1ac5f69fe005c43f3b 100644 (file)
@@ -1842,6 +1842,9 @@ static struct sk_buff *ieee80211_build_hdr(struct ieee80211_sub_if_data *sdata,
                        authorized = test_sta_flag(sta, WLAN_STA_AUTHORIZED);
                        wme_sta = sta->sta.wme;
                        have_station = true;
+               } else if (sdata->wdev.use_4addr) {
+                       ret = -ENOLINK;
+                       goto free;
                }
                ap_sdata = container_of(sdata->bss, struct ieee80211_sub_if_data,
                                        u.ap);