Search Linux Wireless

[PATCH] mac80211: add missing locking in ieee80211_reconfig

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



When suspending an associated system, and then resuming,
the station vif is being reconfigured without taking the
sdata->u.mgd.mtx lock, which results in the following warning:

WARNING: at net/mac80211/mlme.c:101 ieee80211_ap_probereq_get+0x58/0xb8 [mac)
Modules linked in: wl12xx_sdio wl12xx firmware_class crc7 mac80211 cfg80211 ]
Backtrace:
[<c005432c>] (dump_backtrace+0x0/0x118) from [<c0376a04>] (dump_stack+0x20/0)
 r7:00000000 r6:bf25f6ec r5:bf286aac r4:00000065
[<c03769e4>] (dump_stack+0x0/0x24) from [<c0079104>] (warn_slowpath_common+0)
[<c00790a8>] (warn_slowpath_common+0x0/0x74) from [<c0079148>] (warn_slowpat)
 r9:000024ff r8:cd160460 r7:00000001 r6:00000000 r5:00000000
r4:cfb9f4a0
[<c007911c>] (warn_slowpath_null+0x0/0x34) from [<bf25f6ec>] (ieee80211_ap_p)
[<bf25f694>] (ieee80211_ap_probereq_get+0x0/0xb8 [mac80211]) from [<bf013d04)
 r4:cd161440
[<bf013cd4>] (wl1271_cmd_build_ap_probe_req+0x0/0xf8 [wl12xx]) from [<bf0105)
 r5:cd161440 r4:000003b4
[<bf010130>] (wl1271_op_bss_info_changed+0x0/0x808 [wl12xx]) from [<bf254168)
[<bf253fc4>] (ieee80211_bss_info_change_notify+0x0/0x1f8 [mac80211]) from [<)
 r8:cfba12a4 r7:cd16071c r6:00000000 r5:cd160460 r4:cfb9f4a0
[<bf2739b0>] (ieee80211_reconfig+0x0/0x668 [mac80211]) from [<bf269dd4>] (ie)
[<bf269d74>] (ieee80211_resume+0x0/0x70 [mac80211]) from [<bf21d930>] (wiphy)
 r5:cd160248 r4:cd160110
[<bf21d8c4>] (wiphy_resume+0x0/0x7c [cfg80211]) from [<c0240fac>] (legacy_re)
 r7:00000000 r6:00000000 r5:cd160248 r4:cd1602fc
[<c0240f74>] (legacy_resume+0x0/0x70) from [<c0241400>] (device_resume+0x168)
 r8:c04ca8d8 r7:cd16027c r6:00000010 r5:cd160248 r4:cd1602fc
[<c0241298>] (device_resume+0x0/0x1a0) from [<c0241588>] (dpm_resume_end+0xf)
 r7:00000000 r6:00000005 r5:cd160248 r4:cd1602fc
[<c0241490>] (dpm_resume_end+0x0/0x3bc) from [<c00b2a24>] (suspend_devices_a)
[<c00b2874>] (suspend_devices_and_enter+0x0/0x204) from [<c00b2b68>] (enter_)
 r7:c037e548 r6:00000003 r5:c043d1d7 r4:00000000
[<c00b2a78>] (enter_state+0x0/0x148) from [<c00b20a4>] (state_store+0xa4/0xc)
 r7:c037e548 r6:00000003 r5:00000003 r4:c043d1d7
[<c00b2000>] (state_store+0x0/0xcc) from [<c01fc90c>] (kobj_attr_store+0x20/)
[<c01fc8ec>] (kobj_attr_store+0x0/0x24) from [<c0157120>] (sysfs_write_file+)
[<c0157004>] (sysfs_write_file+0x0/0x150) from [<c0100f84>] (vfs_write+0xc0/)
[<c0100ec4>] (vfs_write+0x0/0x14c) from [<c01010e4>] (sys_write+0x4c/0x78)
 r8:40228000 r7:00000004 r6:cf0e69c0 r5:00000000 r4:00000000
[<c0101098>] (sys_write+0x0/0x78) from [<c00500c0>] (ret_fast_syscall+0x0/0x)
 r8:c00502c8 r7:00000004 r6:402245e8 r5:40228000 r4:00000004

Signed-off-by: Eliad Peller <eliad@xxxxxxxxxx>
---
 net/mac80211/util.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index cf68700..d036597 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -1210,7 +1210,9 @@ int ieee80211_reconfig(struct ieee80211_local *local)
 		switch (sdata->vif.type) {
 		case NL80211_IFTYPE_STATION:
 			changed |= BSS_CHANGED_ASSOC;
+			mutex_lock(&sdata->u.mgd.mtx);
 			ieee80211_bss_info_change_notify(sdata, changed);
+			mutex_unlock(&sdata->u.mgd.mtx);
 			break;
 		case NL80211_IFTYPE_ADHOC:
 			changed |= BSS_CHANGED_IBSS;
-- 
1.7.0.4

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux