Commit aaef66b8 authored by David S. Miller's avatar David S. Miller
Browse files

Merge tag 'mac80211-for-davem-2015-01-15' of...

Merge tag 'mac80211-for-davem-2015-01-15' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211



Just two fixes - one for an uninialized variable and
one for a deadlock in regulatory processing.

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents f7d85556 20658702
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1643,7 +1643,7 @@ __ieee80211_sta_handle_tspec_ac_params(struct ieee80211_sub_if_data *sdata)
{
	struct ieee80211_local *local = sdata->local;
	struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
	bool ret;
	bool ret = false;
	int ac;

	if (local->hw.queues < IEEE80211_NUM_ACS)
+34 −22
Original line number Diff line number Diff line
@@ -1530,45 +1530,40 @@ static void reg_call_notifier(struct wiphy *wiphy,

static bool reg_wdev_chan_valid(struct wiphy *wiphy, struct wireless_dev *wdev)
{
	struct ieee80211_channel *ch;
	struct cfg80211_chan_def chandef;
	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
	bool ret = true;
	enum nl80211_iftype iftype;

	wdev_lock(wdev);
	iftype = wdev->iftype;

	/* make sure the interface is active */
	if (!wdev->netdev || !netif_running(wdev->netdev))
		goto out;
		goto wdev_inactive_unlock;

	switch (wdev->iftype) {
	switch (iftype) {
	case NL80211_IFTYPE_AP:
	case NL80211_IFTYPE_P2P_GO:
		if (!wdev->beacon_interval)
			goto out;

		ret = cfg80211_reg_can_beacon(wiphy,
					      &wdev->chandef, wdev->iftype);
			goto wdev_inactive_unlock;
		chandef = wdev->chandef;
		break;
	case NL80211_IFTYPE_ADHOC:
		if (!wdev->ssid_len)
			goto out;

		ret = cfg80211_reg_can_beacon(wiphy,
					      &wdev->chandef, wdev->iftype);
			goto wdev_inactive_unlock;
		chandef = wdev->chandef;
		break;
	case NL80211_IFTYPE_STATION:
	case NL80211_IFTYPE_P2P_CLIENT:
		if (!wdev->current_bss ||
		    !wdev->current_bss->pub.channel)
			goto out;
			goto wdev_inactive_unlock;

		ch = wdev->current_bss->pub.channel;
		if (rdev->ops->get_channel &&
		    !rdev_get_channel(rdev, wdev, &chandef))
			ret = cfg80211_chandef_usable(wiphy, &chandef,
						      IEEE80211_CHAN_DISABLED);
		else
			ret = !(ch->flags & IEEE80211_CHAN_DISABLED);
		if (!rdev->ops->get_channel ||
		    rdev_get_channel(rdev, wdev, &chandef))
			cfg80211_chandef_create(&chandef,
						wdev->current_bss->pub.channel,
						NL80211_CHAN_NO_HT);
		break;
	case NL80211_IFTYPE_MONITOR:
	case NL80211_IFTYPE_AP_VLAN:
@@ -1581,9 +1576,26 @@ static bool reg_wdev_chan_valid(struct wiphy *wiphy, struct wireless_dev *wdev)
		break;
	}

out:
	wdev_unlock(wdev);
	return ret;

	switch (iftype) {
	case NL80211_IFTYPE_AP:
	case NL80211_IFTYPE_P2P_GO:
	case NL80211_IFTYPE_ADHOC:
		return cfg80211_reg_can_beacon(wiphy, &chandef, iftype);
	case NL80211_IFTYPE_STATION:
	case NL80211_IFTYPE_P2P_CLIENT:
		return cfg80211_chandef_usable(wiphy, &chandef,
					       IEEE80211_CHAN_DISABLED);
	default:
		break;
	}

	return true;

wdev_inactive_unlock:
	wdev_unlock(wdev);
	return true;
}

static void reg_leave_invalid_chans(struct wiphy *wiphy)