On Thu, 2012-08-02 at 18:55 -0400, Paul Gortmaker wrote: > From: Liang Li <[email protected]> > > partial of commit 8e8b41f9d8c8e63fc92f899ace8da91a490ac573 upstream.
Added to the queue for 3.2, thanks.
Ben.
> As part of commit 463454b5dbd8 ("cfg80211: fix interface
> combinations check"), this extra check was introduced:
>
> if ((all_iftypes & used_iftypes) != used_iftypes)
> goto cont;
>
> However, most wireless NIC drivers did not advertise ADHOC in
> wiphy.iface_combinations[i].limits[] and hence we'll get -EBUSY
> when we bring up a ADHOC wlan with commands similar to:
>
> # iwconfig wlan0 mode ad-hoc && ifconfig wlan0 up
>
> In commit 8e8b41f9d8c8e ("cfg80211: enforce lack of interface
> combinations"), the change below fixes the issue:
>
> if (total == 1)
> return 0;
>
> But it also introduces other dependencies for stable. For example,
> a full cherry pick of 8e8b41f9d8c8e would introduce additional
> regressions unless we also start cherry picking driver specific
> fixes like the following:
>
> 9b4760e ath5k: add possible wiphy interface combinations
> 1ae2fc2 mac80211_hwsim: advertise interface combinations
> 20c8e8d ath9k: add possible wiphy interface combinations
>
> And the purpose of the 'if (total == 1)' is to cover the specific
> use case (IBSS, adhoc) that was mentioned above. So we just pick
> the specific part out from 8e8b41f9d8c8e here.
>
> Doing so gives stable kernels a way to fix the change introduced
> by 463454b5dbd8, without having to make cherry picks specific to
> various NIC drivers.
>
> Cc: [email protected]
> Signed-off-by: Liang Li <[email protected]>
> Signed-off-by: Paul Gortmaker <[email protected]>
> ---
>
> 3.0.35, 3.2.21 and 3.4.3 have CP of 463454b5dbd8 in them.
>
> net/wireless/util.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/net/wireless/util.c b/net/wireless/util.c
> index b5b6890..88bd89e 100644
> --- a/net/wireless/util.c
> +++ b/net/wireless/util.c
> @@ -974,6 +974,9 @@ int cfg80211_can_change_interface(struct
> cfg80211_registered_device *rdev,
> }
> mutex_unlock(&rdev->devlist_mtx);
>
> + if (total == 1)
> + return 0;
> +
> for (i = 0; i < rdev->wiphy.n_iface_combinations; i++) {
> const struct ieee80211_iface_combination *c;
> struct ieee80211_iface_limit *limits;
--
Ben Hutchings
Theory and practice are closer in theory than in practice.
- John Levine, moderator of comp.compilers
signature.asc
Description: This is a digitally signed message part
