Ben Greear 499218595a mac80211: Fix crash due to un-canceled work-items
Some mlme work structs are not cancelled on disassociation
nor interface deletion, which leads to them running after
the memory has been freed

There is not a clean way to cancel these in the disassociation
logic because they must be canceled outside of the ifmgd->mtx
lock, so just cancel them in mgd_stop logic that tears down
the station.

This fixes the crashes we see in 3.7.9+.  The crash stack
trace itself isn't so helpful, but this warning gives
more useful info:

WARNING: at /home/greearb/git/linux-3.7.dev.y/lib/debugobjects.c:261 debug_print_object+0x7c/0x8d()
ODEBUG: free active (active state 0) object type: work_struct hint: ieee80211_sta_monitor_work+0x0/0x14 [mac80211]
Modules linked in: [...]
Pid: 14743, comm: iw Tainted: G         C O 3.7.9+ #11
Call Trace:
 [<ffffffff81087ef8>] warn_slowpath_common+0x80/0x98
 [<ffffffff81087fa4>] warn_slowpath_fmt+0x41/0x43
 [<ffffffff812a2608>] debug_print_object+0x7c/0x8d
 [<ffffffff812a2bca>] debug_check_no_obj_freed+0x95/0x1c3
 [<ffffffff8114cc69>] slab_free_hook+0x70/0x79
 [<ffffffff8114ea3e>] kfree+0x62/0xb7
 [<ffffffff8149f465>] netdev_release+0x39/0x3e
 [<ffffffff8136ad67>] device_release+0x52/0x8a
 [<ffffffff812937db>] kobject_release+0x121/0x158
 [<ffffffff81293612>] kobject_put+0x4c/0x50
 [<ffffffff8148f0d7>] netdev_run_todo+0x25c/0x27e

Cc: stable@vger.kernel.org
Signed-off-by: Ben Greear <greearb@candelatech.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
2013-02-26 22:49:05 +01:00
..
2011-07-08 11:11:24 -04:00
2011-07-08 11:11:24 -04:00
2011-07-08 11:11:20 -04:00
2013-02-04 18:57:47 +01:00
2013-02-04 18:57:47 +01:00
2013-02-15 09:41:40 +01:00
2013-02-04 18:57:47 +01:00
2012-12-05 09:44:41 +01:00
2013-02-15 15:46:37 +01:00
2013-02-04 18:57:47 +01:00
2013-02-15 15:46:37 +01:00
2013-02-15 15:46:37 +01:00
2013-02-15 15:46:37 +01:00
2013-02-15 15:46:37 +01:00
2011-03-31 11:26:23 -03:00
2013-02-15 15:46:37 +01:00
2013-02-04 18:57:47 +01:00
2012-06-24 11:33:18 +02:00
2013-02-15 09:41:39 +01:00
2013-02-15 09:41:39 +01:00
2012-03-13 14:54:16 -04:00
2013-02-04 18:57:47 +01:00
2012-06-20 17:35:22 +02:00