<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux/net/wireless, branch v3.0.87</title>
<subtitle>Linux kernel source tree</subtitle>
<id>https://git.amat.us/linux/atom/net/wireless?h=v3.0.87</id>
<link rel='self' href='https://git.amat.us/linux/atom/net/wireless?h=v3.0.87'/>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/'/>
<updated>2013-05-08T02:57:27Z</updated>
<entry>
<title>wireless: regulatory: fix channel disabling race condition</title>
<updated>2013-05-08T02:57:27Z</updated>
<author>
<name>Johannes Berg</name>
<email>johannes.berg@intel.com</email>
</author>
<published>2013-04-16T12:32:26Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=d2a51f02ccc6fac30f8cdb7e5f2791b2fe43d129'/>
<id>urn:sha1:d2a51f02ccc6fac30f8cdb7e5f2791b2fe43d129</id>
<content type='text'>
commit 990de49f74e772b6db5208457b7aa712a5f4db86 upstream.

When a full scan 2.4 and 5 GHz scan is scheduled, but then the 2.4 GHz
part of the scan disables a 5.2 GHz channel due to, e.g. receiving
country or frequency information, that 5.2 GHz channel might already
be in the list of channels to scan next. Then, when the driver checks
if it should do a passive scan, that will return false and attempt an
active scan. This is not only wrong but can also lead to the iwlwifi
device firmware crashing since it checks regulatory as well.

Fix this by not setting the channel flags to just disabled but rather
OR'ing in the disabled flag. That way, even if the race happens, the
channel will be scanned passively which is still (mostly) correct.

Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>wireless: allow 40 MHz on world roaming channels 12/13</title>
<updated>2012-11-26T19:34:35Z</updated>
<author>
<name>Johannes Berg</name>
<email>johannes.berg@intel.com</email>
</author>
<published>2012-11-12T09:51:34Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=7e2c753a06883b35bf627c13211785b15002de0f'/>
<id>urn:sha1:7e2c753a06883b35bf627c13211785b15002de0f</id>
<content type='text'>
commit 43c771a1963ab461a2f194e3c97fded1d5fe262f upstream.

When in world roaming mode, allow 40 MHz to be used
on channels 12 and 13 so that an AP that is, e.g.,
using HT40+ on channel 9 (in the UK) can be used.

Reported-by: Eddie Chapman &lt;eddie@ehuk.net&gt;
Tested-by: Eddie Chapman &lt;eddie@ehuk.net&gt;
Acked-by: Luis R. Rodriguez &lt;mcgrof@qca.qualcomm.com&gt;
Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>wireless: drop invalid mesh address extension frames</title>
<updated>2012-11-17T21:14:20Z</updated>
<author>
<name>Johannes Berg</name>
<email>johannes.berg@intel.com</email>
</author>
<published>2012-10-25T19:51:59Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=4bdd5ed8d955d712e77bbabb42e9a3c4c50a47df'/>
<id>urn:sha1:4bdd5ed8d955d712e77bbabb42e9a3c4c50a47df</id>
<content type='text'>
commit 7dd111e8ee10cc6816669eabcad3334447673236 upstream.

The mesh header can have address extension by a 4th
or a 5th and 6th address, but never both. Drop such
frames in 802.11 -&gt; 802.3 conversion along with any
frames that have the wrong extension.

Reviewed-by: Javier Cardona &lt;javier@cozybit.com&gt;
Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>cfg80211: fix antenna gain handling</title>
<updated>2012-11-17T21:14:20Z</updated>
<author>
<name>Felix Fietkau</name>
<email>nbd@openwrt.org</email>
</author>
<published>2012-10-17T11:56:19Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=58bca02682d3df9975ccabae2196f6aefcfeda3d'/>
<id>urn:sha1:58bca02682d3df9975ccabae2196f6aefcfeda3d</id>
<content type='text'>
commit c4a9fafc77a5318f5ed26c509bbcddf03e18c201 upstream.

No driver initializes chan-&gt;max_antenna_gain to something sensible, and
the only place where it is being used right now is inside ath9k. This
leads to ath9k potentially using less tx power than it can use, which can
decrease performance/range in some rare cases.

Rather than going through every single driver, this patch initializes
chan-&gt;orig_mag in wiphy_register(), ignoring whatever value the driver
left in there. If a driver for some reason wishes to limit it independent
from regulatory rulesets, it can do so internally.

Signed-off-by: Felix Fietkau &lt;nbd@openwrt.org&gt;
Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>cfg80211: fix possible circular lock on reg_regdb_search()</title>
<updated>2012-10-02T16:47:37Z</updated>
<author>
<name>Luis R. Rodriguez</name>
<email>mcgrof@do-not-panic.com</email>
</author>
<published>2012-09-14T22:36:57Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=2cfb6b1d3632beffef774aad1f7b906fe1934fb2'/>
<id>urn:sha1:2cfb6b1d3632beffef774aad1f7b906fe1934fb2</id>
<content type='text'>
commit a85d0d7f3460b1a123b78e7f7e39bf72c37dfb78 upstream.

When call_crda() is called we kick off a witch hunt search
for the same regulatory domain on our internal regulatory
database and that work gets kicked off on a workqueue, this
is done while the cfg80211_mutex is held. If that workqueue
kicks off it will first lock reg_regdb_search_mutex and
later cfg80211_mutex but to ensure two CPUs will not contend
against cfg80211_mutex the right thing to do is to have the
reg_regdb_search() wait until the cfg80211_mutex is let go.

The lockdep report is pasted below.

cfg80211: Calling CRDA to update world regulatory domain

======================================================
[ INFO: possible circular locking dependency detected ]
3.3.8 #3 Tainted: G           O
-------------------------------------------------------
kworker/0:1/235 is trying to acquire lock:
 (cfg80211_mutex){+.+...}, at: [&lt;816468a4&gt;] set_regdom+0x78c/0x808 [cfg80211]

but task is already holding lock:
 (reg_regdb_search_mutex){+.+...}, at: [&lt;81646828&gt;] set_regdom+0x710/0x808 [cfg80211]

which lock already depends on the new lock.

the existing dependency chain (in reverse order) is:

-&gt; #2 (reg_regdb_search_mutex){+.+...}:
       [&lt;800a8384&gt;] lock_acquire+0x60/0x88
       [&lt;802950a8&gt;] mutex_lock_nested+0x54/0x31c
       [&lt;81645778&gt;] is_world_regdom+0x9f8/0xc74 [cfg80211]

-&gt; #1 (reg_mutex#2){+.+...}:
       [&lt;800a8384&gt;] lock_acquire+0x60/0x88
       [&lt;802950a8&gt;] mutex_lock_nested+0x54/0x31c
       [&lt;8164539c&gt;] is_world_regdom+0x61c/0xc74 [cfg80211]

-&gt; #0 (cfg80211_mutex){+.+...}:
       [&lt;800a77b8&gt;] __lock_acquire+0x10d4/0x17bc
       [&lt;800a8384&gt;] lock_acquire+0x60/0x88
       [&lt;802950a8&gt;] mutex_lock_nested+0x54/0x31c
       [&lt;816468a4&gt;] set_regdom+0x78c/0x808 [cfg80211]

other info that might help us debug this:

Chain exists of:
  cfg80211_mutex --&gt; reg_mutex#2 --&gt; reg_regdb_search_mutex

 Possible unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock(reg_regdb_search_mutex);
                               lock(reg_mutex#2);
                               lock(reg_regdb_search_mutex);
  lock(cfg80211_mutex);

 *** DEADLOCK ***

3 locks held by kworker/0:1/235:
 #0:  (events){.+.+..}, at: [&lt;80089a00&gt;] process_one_work+0x230/0x460
 #1:  (reg_regdb_work){+.+...}, at: [&lt;80089a00&gt;] process_one_work+0x230/0x460
 #2:  (reg_regdb_search_mutex){+.+...}, at: [&lt;81646828&gt;] set_regdom+0x710/0x808 [cfg80211]

stack backtrace:
Call Trace:
[&lt;80290fd4&gt;] dump_stack+0x8/0x34
[&lt;80291bc4&gt;] print_circular_bug+0x2ac/0x2d8
[&lt;800a77b8&gt;] __lock_acquire+0x10d4/0x17bc
[&lt;800a8384&gt;] lock_acquire+0x60/0x88
[&lt;802950a8&gt;] mutex_lock_nested+0x54/0x31c
[&lt;816468a4&gt;] set_regdom+0x78c/0x808 [cfg80211]

Reported-by: Felix Fietkau &lt;nbd@openwrt.org&gt;
Tested-by: Felix Fietkau &lt;nbd@openwrt.org&gt;
Signed-off-by: Luis R. Rodriguez &lt;mcgrof@do-not-panic.com&gt;
Reviewed-by: Johannes Berg &lt;johannes@sipsolutions.net&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>cfg80211: fix interface combinations check for ADHOC(IBSS)</title>
<updated>2012-08-15T19:04:30Z</updated>
<author>
<name>Liang Li</name>
<email>liang.li@windriver.com</email>
</author>
<published>2012-08-02T22:55:41Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=4f5a5866aa4dccf42b2fa1cdecf372025a3e86cc'/>
<id>urn:sha1:4f5a5866aa4dccf42b2fa1cdecf372025a3e86cc</id>
<content type='text'>
partial of commit 8e8b41f9d8c8e63fc92f899ace8da91a490ac573 upstream.

As part of commit 463454b5dbd8 ("cfg80211: fix interface
combinations check"), this extra check was introduced:

       if ((all_iftypes &amp; 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 &amp;&amp; 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.

Signed-off-by: Liang Li &lt;liang.li@windriver.com&gt;
Signed-off-by: Paul Gortmaker &lt;paul.gortmaker@windriver.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>cfg80211: process pending events when unregistering net device</title>
<updated>2012-08-15T19:04:30Z</updated>
<author>
<name>Daniel Drake</name>
<email>dsd@laptop.org</email>
</author>
<published>2012-08-02T17:41:48Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=b27c59d2c23d5f326a74e02a799cc4d00246165a'/>
<id>urn:sha1:b27c59d2c23d5f326a74e02a799cc4d00246165a</id>
<content type='text'>
commit 1f6fc43e621167492ed4b7f3b4269c584c3d6ccc upstream.

libertas currently calls cfg80211_disconnected() when it is being
brought down. This causes an event to be allocated, but since the
wdev is already removed from the rdev by the time that the event
processing work executes, the event is never processed or freed.
http://article.gmane.org/gmane.linux.kernel.wireless.general/95666

Fix this leak, and other possible situations, by processing the event
queue when a device is being unregistered. Thanks to Johannes Berg for
the suggestion.

Signed-off-by: Daniel Drake &lt;dsd@laptop.org&gt;
Reviewed-by: Johannes Berg &lt;johannes@sipsolutions.net&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>cfg80211: check iface combinations only when iface is running</title>
<updated>2012-07-19T15:58:22Z</updated>
<author>
<name>Michal Kazior</name>
<email>michal.kazior@tieto.com</email>
</author>
<published>2012-06-08T08:55:44Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=31b83ef7cfda5a7b74446ca70c1e231b24450cbd'/>
<id>urn:sha1:31b83ef7cfda5a7b74446ca70c1e231b24450cbd</id>
<content type='text'>
commit f8cdddb8d61d16a156229f0910f7ecfc7a82c003 upstream.

Don't validate interface combinations on a stopped
interface. Otherwise we might end up being able to
create a new interface with a certain type, but
won't be able to change an existing interface
into that type.

This also skips some other functions when
interface is stopped and changing interface type.

Signed-off-by: Michal Kazior &lt;michal.kazior@tieto.com&gt;
Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
[Fixes regression introduced by cherry pick of 463454b5dbd8]
Signed-off-by: Paul Gortmaker &lt;paul.gortmaker@windriver.com&gt;

</content>
</entry>
<entry>
<title>cfg80211: fix potential deadlock in regulatory</title>
<updated>2012-07-16T15:47:48Z</updated>
<author>
<name>Eliad Peller</name>
<email>eliad@wizery.com</email>
</author>
<published>2012-06-12T09:53:13Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=c229e2f6bab8ed64bf44110831d36221c648e1bf'/>
<id>urn:sha1:c229e2f6bab8ed64bf44110831d36221c648e1bf</id>
<content type='text'>
commit fe20b39ec32e975f1054c0b7866c873a954adf05 upstream.

reg_timeout_work() calls restore_regulatory_settings() which
takes cfg80211_mutex.

reg_set_request_processed() already holds cfg80211_mutex
before calling cancel_delayed_work_sync(reg_timeout),
so it might deadlock.

Call the async cancel_delayed_work instead, in order
to avoid the potential deadlock.

This is the relevant lockdep warning:

cfg80211: Calling CRDA for country: XX

======================================================
[ INFO: possible circular locking dependency detected ]
3.4.0-rc5-wl+ #26 Not tainted
-------------------------------------------------------
kworker/0:2/1391 is trying to acquire lock:
 (cfg80211_mutex){+.+.+.}, at: [&lt;bf28ae00&gt;] restore_regulatory_settings+0x34/0x418 [cfg80211]

but task is already holding lock:
 ((reg_timeout).work){+.+...}, at: [&lt;c0059e94&gt;] process_one_work+0x1f0/0x480

which lock already depends on the new lock.

the existing dependency chain (in reverse order) is:

-&gt; #2 ((reg_timeout).work){+.+...}:
       [&lt;c008fd44&gt;] validate_chain+0xb94/0x10f0
       [&lt;c0090b68&gt;] __lock_acquire+0x8c8/0x9b0
       [&lt;c0090d40&gt;] lock_acquire+0xf0/0x114
       [&lt;c005b600&gt;] wait_on_work+0x4c/0x154
       [&lt;c005c000&gt;] __cancel_work_timer+0xd4/0x11c
       [&lt;c005c064&gt;] cancel_delayed_work_sync+0x1c/0x20
       [&lt;bf28b274&gt;] reg_set_request_processed+0x50/0x78 [cfg80211]
       [&lt;bf28bd84&gt;] set_regdom+0x550/0x600 [cfg80211]
       [&lt;bf294cd8&gt;] nl80211_set_reg+0x218/0x258 [cfg80211]
       [&lt;c03c7738&gt;] genl_rcv_msg+0x1a8/0x1e8
       [&lt;c03c6a00&gt;] netlink_rcv_skb+0x5c/0xc0
       [&lt;c03c7584&gt;] genl_rcv+0x28/0x34
       [&lt;c03c6720&gt;] netlink_unicast+0x15c/0x228
       [&lt;c03c6c7c&gt;] netlink_sendmsg+0x218/0x298
       [&lt;c03933c8&gt;] sock_sendmsg+0xa4/0xc0
       [&lt;c039406c&gt;] __sys_sendmsg+0x1e4/0x268
       [&lt;c0394228&gt;] sys_sendmsg+0x4c/0x70
       [&lt;c0013840&gt;] ret_fast_syscall+0x0/0x3c

-&gt; #1 (reg_mutex){+.+.+.}:
       [&lt;c008fd44&gt;] validate_chain+0xb94/0x10f0
       [&lt;c0090b68&gt;] __lock_acquire+0x8c8/0x9b0
       [&lt;c0090d40&gt;] lock_acquire+0xf0/0x114
       [&lt;c04734dc&gt;] mutex_lock_nested+0x48/0x320
       [&lt;bf28b2cc&gt;] reg_todo+0x30/0x538 [cfg80211]
       [&lt;c0059f44&gt;] process_one_work+0x2a0/0x480
       [&lt;c005a4b4&gt;] worker_thread+0x1bc/0x2bc
       [&lt;c0061148&gt;] kthread+0x98/0xa4
       [&lt;c0014af4&gt;] kernel_thread_exit+0x0/0x8

-&gt; #0 (cfg80211_mutex){+.+.+.}:
       [&lt;c008ed58&gt;] print_circular_bug+0x68/0x2cc
       [&lt;c008fb28&gt;] validate_chain+0x978/0x10f0
       [&lt;c0090b68&gt;] __lock_acquire+0x8c8/0x9b0
       [&lt;c0090d40&gt;] lock_acquire+0xf0/0x114
       [&lt;c04734dc&gt;] mutex_lock_nested+0x48/0x320
       [&lt;bf28ae00&gt;] restore_regulatory_settings+0x34/0x418 [cfg80211]
       [&lt;bf28b200&gt;] reg_timeout_work+0x1c/0x20 [cfg80211]
       [&lt;c0059f44&gt;] process_one_work+0x2a0/0x480
       [&lt;c005a4b4&gt;] worker_thread+0x1bc/0x2bc
       [&lt;c0061148&gt;] kthread+0x98/0xa4
       [&lt;c0014af4&gt;] kernel_thread_exit+0x0/0x8

other info that might help us debug this:

Chain exists of:
  cfg80211_mutex --&gt; reg_mutex --&gt; (reg_timeout).work

 Possible unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock((reg_timeout).work);
                               lock(reg_mutex);
                               lock((reg_timeout).work);
  lock(cfg80211_mutex);

 *** DEADLOCK ***

2 locks held by kworker/0:2/1391:
 #0:  (events){.+.+.+}, at: [&lt;c0059e94&gt;] process_one_work+0x1f0/0x480
 #1:  ((reg_timeout).work){+.+...}, at: [&lt;c0059e94&gt;] process_one_work+0x1f0/0x480

stack backtrace:
[&lt;c001b928&gt;] (unwind_backtrace+0x0/0x12c) from [&lt;c0471d3c&gt;] (dump_stack+0x20/0x24)
[&lt;c0471d3c&gt;] (dump_stack+0x20/0x24) from [&lt;c008ef70&gt;] (print_circular_bug+0x280/0x2cc)
[&lt;c008ef70&gt;] (print_circular_bug+0x280/0x2cc) from [&lt;c008fb28&gt;] (validate_chain+0x978/0x10f0)
[&lt;c008fb28&gt;] (validate_chain+0x978/0x10f0) from [&lt;c0090b68&gt;] (__lock_acquire+0x8c8/0x9b0)
[&lt;c0090b68&gt;] (__lock_acquire+0x8c8/0x9b0) from [&lt;c0090d40&gt;] (lock_acquire+0xf0/0x114)
[&lt;c0090d40&gt;] (lock_acquire+0xf0/0x114) from [&lt;c04734dc&gt;] (mutex_lock_nested+0x48/0x320)
[&lt;c04734dc&gt;] (mutex_lock_nested+0x48/0x320) from [&lt;bf28ae00&gt;] (restore_regulatory_settings+0x34/0x418 [cfg80211])
[&lt;bf28ae00&gt;] (restore_regulatory_settings+0x34/0x418 [cfg80211]) from [&lt;bf28b200&gt;] (reg_timeout_work+0x1c/0x20 [cfg80211])
[&lt;bf28b200&gt;] (reg_timeout_work+0x1c/0x20 [cfg80211]) from [&lt;c0059f44&gt;] (process_one_work+0x2a0/0x480)
[&lt;c0059f44&gt;] (process_one_work+0x2a0/0x480) from [&lt;c005a4b4&gt;] (worker_thread+0x1bc/0x2bc)
[&lt;c005a4b4&gt;] (worker_thread+0x1bc/0x2bc) from [&lt;c0061148&gt;] (kthread+0x98/0xa4)
[&lt;c0061148&gt;] (kthread+0x98/0xa4) from [&lt;c0014af4&gt;] (kernel_thread_exit+0x0/0x8)
cfg80211: Calling CRDA to update world regulatory domain
cfg80211: World regulatory domain updated:
cfg80211:   (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
cfg80211:   (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
cfg80211:   (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
cfg80211:   (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
cfg80211:   (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
cfg80211:   (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)

Signed-off-by: Eliad Peller &lt;eliad@wizery.com&gt;
Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>cfg80211: fix interface combinations check</title>
<updated>2012-06-17T18:23:10Z</updated>
<author>
<name>Johannes Berg</name>
<email>johannes.berg@intel.com</email>
</author>
<published>2012-06-05T10:16:50Z</published>
<link rel='alternate' type='text/html' href='https://git.amat.us/linux/commit/?id=f90b005ff35ab8e6ed3ddcbf79dee0baa48c429a'/>
<id>urn:sha1:f90b005ff35ab8e6ed3ddcbf79dee0baa48c429a</id>
<content type='text'>
commit 463454b5dbd8dbab6e2fc6c557329e5b811b9c32 upstream.

If a given interface combination doesn't contain
a required interface type then we missed checking
that and erroneously allowed it even though iface
type wasn't there at all. Add a check that makes
sure that all interface types are accounted for.

Reported-by: Mohammed Shafi Shajakhan &lt;mohammed@qca.qualcomm.com&gt;
Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
</feed>
