android_kernel_samsung_msm8976/net/mac80211
Johannes Berg 1467bec9a7 mac80211: mesh: fix call_rcu() usage
commit c2e703a55245bfff3db53b1f7cbe59f1ee8a4339 upstream.

When using call_rcu(), the called function may be delayed quite
significantly, and without a matching rcu_barrier() there's no
way to be sure it has finished.
Therefore, global state that could be gone/freed/reused should
never be touched in the callback.

Fix this in mesh by moving the atomic_dec() into the caller;
that's not really a problem since we already unlinked the path
and it will be destroyed anyway.

This fixes a crash Jouni observed when running certain tests in
a certain order, in which the mesh interface was torn down, the
memory reused for a function pointer (work struct) and running
that then crashed since the pointer had been decremented by 1,
resulting in an invalid instruction byte stream.

Fixes: eb2b9311fd ("mac80211: mesh path table implementation")
Reported-by: Jouni Malinen <j@w1.fi>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2016-03-03 15:06:21 -08:00
..
Kconfig
Makefile
aes_ccm.c
aes_ccm.h
aes_cmac.c
aes_cmac.h
agg-rx.c
agg-tx.c
cfg.c mac80211: release the channel in error path in start_ap 2014-02-22 12:41:26 -08:00
cfg.h
chan.c Merge remote-tracking branch 'wireless-next/master' into mac80211-next 2013-04-22 15:31:43 +02:00
debug.h
debugfs.c
debugfs.h
debugfs_key.c
debugfs_key.h
debugfs_netdev.c mac80211: clear subdir_stations when removing debugfs 2015-08-10 12:20:30 -07:00
debugfs_netdev.h
debugfs_sta.c mac80211: add beacon stats to debugfs 2013-04-08 09:16:54 +02:00
debugfs_sta.h
driver-ops.h
event.c
ht.c
ibss.c mac80211: add missing channel context release 2013-09-07 22:09:59 -07:00
ieee80211_i.h mac80211: disable u-APSD queues by default 2015-04-13 14:02:11 +02:00
iface.c net: force a list_del() in unregister_netdevice_many() 2014-06-26 15:12:38 -04:00
key.c mac80211: free management frame keys when removing station 2015-01-08 09:58:16 -08:00
key.h
led.c
led.h
main.c mac80211: prevent possible crypto tx tailroom corruption 2015-08-03 09:29:46 -07:00
mesh.c Merge remote-tracking branch 'wireless-next/master' into mac80211-next 2013-04-22 15:31:43 +02:00
mesh.h mac80211: return new mpath from mesh_path_add() 2013-04-08 09:16:59 +02:00
mesh_hwmp.c mac80211: parse VHT channel switch IEs 2013-04-16 15:29:45 +02:00
mesh_pathtbl.c mac80211: mesh: fix call_rcu() usage 2016-03-03 15:06:21 -08:00
mesh_plink.c mac80211: parse VHT channel switch IEs 2013-04-16 15:29:45 +02:00
mesh_ps.c mac80211: clear sequence/fragment number in QoS-null frames 2014-03-23 21:38:12 -07:00
mesh_sync.c
michael.c
michael.h
mlme.c mac80211: fix driver RSSI event calculations 2015-12-09 13:40:09 -05:00
offchannel.c mac80211: fix on-channel remain-on-channel 2014-06-07 13:25:31 -07:00
pm.c mac80211: fix suspend vs. authentication race 2014-06-07 13:25:31 -07:00
rate.c mac80211: fix typo in starting baserate for rts_cts_rate_idx 2014-11-14 08:48:00 -08:00
rate.h
rc80211_minstrel.c mac80211/minstrel: fix NULL pointer dereference issue 2013-08-11 18:35:22 -07:00
rc80211_minstrel.h mac80211/minstrel: use the new rate control API 2013-04-22 16:16:41 +02:00
rc80211_minstrel_debugfs.c mac80211: cosmetics for minstrel_debugfs 2013-04-17 17:08:23 +02:00
rc80211_minstrel_ht.c mac80211: add a flag to indicate CCK support for HT clients 2013-09-07 22:09:59 -07:00
rc80211_minstrel_ht.h mac80211/minstrel_ht: use the new rate control API 2013-04-22 16:16:41 +02:00
rc80211_minstrel_ht_debugfs.c
rc80211_pid.h
rc80211_pid_algo.c
rc80211_pid_debugfs.c
rx.c mac80211: drop unencrypted frames in mesh fwding 2015-04-13 14:02:11 +02:00
scan.c mac80211: correctly close cancelled scans 2013-11-13 12:05:30 +09:00
spectmgmt.c
sta_info.c mac80211: fix a memory leak on sta rate selection table 2014-07-09 11:14:01 -07:00
sta_info.h mac80211: fix AP powersave TX vs. wakeup race 2014-03-23 21:38:11 -07:00
status.c mac80211: update sta->last_rx on acked tx frames 2013-11-13 12:05:30 +09:00
tkip.c mac80211: use just spin_lock() in ieee80211_get_tkip_p2k() 2013-05-16 22:38:06 +02:00
tkip.h
trace.c
trace.h mac80211: support secondary channel offset in CSA 2013-04-16 15:29:44 +02:00
tx.c mac80211: enable assoc check for mesh interfaces 2015-10-01 12:07:29 +02:00
util.c mac80211: fix crash if bitrate calculation goes wrong 2013-11-13 12:05:30 +09:00
vht.c
wep.c
wep.h
wme.c mac80211: send control port protocol frames to the VO queue 2014-03-23 21:38:11 -07:00
wme.h
wpa.c
wpa.h