linux/net/wireless
Ujjal Roy 4c4d684a55 cfg80211: fix WARN_ON for re-association to the expired BSS
cfg80211 allows re-association in managed mode and if a user
wants to re-associate to the same AP network after the time
period of IEEE80211_SCAN_RESULT_EXPIRE, cfg80211 warns with
the following message on receiving the connect result event.

------------[ cut here ]------------
WARNING: CPU: 0 PID: 13984 at net/wireless/sme.c:658
         __cfg80211_connect_result+0x3a6/0x3e0 [cfg80211]()
Call Trace:
 [<ffffffff81747a41>] dump_stack+0x46/0x58
 [<ffffffff81045847>] warn_slowpath_common+0x87/0xb0
 [<ffffffff81045885>] warn_slowpath_null+0x15/0x20
 [<ffffffffa05345f6>] __cfg80211_connect_result+0x3a6/0x3e0 [cfg80211]
 [<ffffffff8107168b>] ? update_rq_clock+0x2b/0x50
 [<ffffffff81078c01>] ? update_curr+0x1/0x160
 [<ffffffffa05133d2>] cfg80211_process_wdev_events+0xb2/0x1c0 [cfg80211]
 [<ffffffff81079303>] ? pick_next_task_fair+0x63/0x170
 [<ffffffffa0513518>] cfg80211_process_rdev_events+0x38/0x90 [cfg80211]
 [<ffffffffa050f03d>] cfg80211_event_work+0x1d/0x30 [cfg80211]
 [<ffffffff8105f21f>] process_one_work+0x17f/0x420
 [<ffffffff8105f90a>] worker_thread+0x11a/0x370
 [<ffffffff8105f7f0>] ? rescuer_thread+0x2f0/0x2f0
 [<ffffffff8106638b>] kthread+0xbb/0xc0
 [<ffffffff810662d0>] ? kthread_create_on_node+0x120/0x120
 [<ffffffff817574bc>] ret_from_fork+0x7c/0xb0
 [<ffffffff810662d0>] ? kthread_create_on_node+0x120/0x120
---[ end trace 61f3bddc9c4981f7 ]---

The reason is that, in connect result event cfg80211 unholds
the BSS to which the device is associated (and was held so
far). So, for the event with status successful, when cfg80211
wants to get that BSS from the device's BSS list it gets a
NULL BSS because the BSS has been expired and unheld already.

Fix it by reshuffling the code.

Signed-off-by: Ujjal Roy <royujjal@gmail.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
2013-12-05 15:00:29 +01:00
..
.gitignore
ap.c cfg80211: move exported event functions into nl80211 2013-03-06 16:35:46 +01:00
chan.c nl80211/cfg80211: enable DFS for IBSS mode 2013-10-28 15:05:21 +01:00
core.c cfg80211: disable CSA for all drivers 2013-12-02 11:53:44 +01:00
core.h Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless 2013-11-04 14:45:14 -05:00
db.txt
debugfs.c mac80211: fix some snprintf misuses 2013-10-01 12:16:51 +02:00
debugfs.h
ethtool.c ethtool: fix drvinfo strings set in drivers 2013-01-06 21:06:31 -08:00
ethtool.h
genregdb.awk cfg80211: parse dfs region for internal regdb option 2013-10-01 12:18:36 +02:00
ibss.c cfg80211: fix ibss wext chandef creation 2013-11-25 16:50:02 +01:00
Kconfig lib80211: hide Kconfig symbol 2012-11-16 14:29:09 -05:00
lib80211_crypt_ccmp.c hostap: Don't use create_proc_read_entry() 2013-04-29 15:41:56 -04:00
lib80211_crypt_tkip.c hostap: Don't use create_proc_read_entry() 2013-04-29 15:41:56 -04:00
lib80211_crypt_wep.c hostap: Don't use create_proc_read_entry() 2013-04-29 15:41:56 -04:00
lib80211.c
Makefile cfg80211: add tracing to rdev-ops 2012-10-18 10:53:37 +02:00
mesh.c cfg80211/mac80211: get mandatory rates based on scan width 2013-07-16 09:58:07 +03:00
mlme.c cfg80211: update dfs_state_entered upon dfs_state change 2013-10-21 14:50:27 +02:00
nl80211.c cfg80211: ignore supported rates for nonexistant bands on scan 2013-11-25 16:54:26 +01:00
nl80211.h cfg80211: add flags to cfg80211_rx_mgmt() 2013-08-23 16:06:03 +02:00
radiotap.c wireless: radiotap: fix parsing buffer overrun 2013-10-14 09:47:00 +02:00
rdev-ops.h cfg80211: add wdev to testmode cmd 2013-08-12 14:11:37 +02:00
reg.c cfg80211: export reg_initiator_name() 2013-10-28 15:05:27 +01:00
reg.h cfg80211: rename regulatory_hint_11d() to regulatory_hint_country_ie() 2013-10-09 09:37:57 +02:00
regdb.h
scan.c cfg80211: fix scheduled scan pointer access 2013-10-21 11:59:15 +02:00
sme.c cfg80211: fix WARN_ON for re-association to the expired BSS 2013-12-05 15:00:29 +01:00
sysfs.c net: wireless: convert class code to use dev_groups 2013-07-25 16:34:40 -07:00
sysfs.h net: misc: Remove extern from function prototypes 2013-10-19 19:12:11 -04:00
trace.c cfg80211: add tracing to rdev-ops 2012-10-18 10:53:37 +02:00
trace.h cfg80211: add wdev to testmode cmd 2013-08-12 14:11:37 +02:00
util.c nl80211/cfg80211: enable DFS for IBSS mode 2013-10-28 15:05:21 +01:00
wext-compat.c cfg80211: vastly simplify locking 2013-05-25 00:02:15 +02:00
wext-compat.h
wext-core.c
wext-priv.c
wext-proc.c net: proc: change proc_net_remove to remove_proc_entry 2013-02-18 14:53:08 -05:00
wext-sme.c cfg80211: separate internal SME implementation 2013-06-04 13:03:11 +02:00
wext-spy.c