linux/drivers/net/wireless/ath
Vasanthakumar Thiagarajan 2ca8b2a88e ath10k: fix kernel panic due to race in accessing arvif list
commit ebaa4b1620 upstream.

arvifs list is traversed within data_lock spin_lock in tasklet
context to fill channel information from the corresponding vif.
This means any access to arvifs list for add/del operations
should also be protected with the same spin_lock to avoid the
race. Fix this by performing list add/del on arvfis within the
data_lock. This could fix kernel panic something like the below.

 LR is at ath10k_htt_rx_pktlog_completion_handler+0x100/0xb6c [ath10k_core]
 PC is at ath10k_htt_rx_pktlog_completion_handler+0x1c0/0xb6c [ath10k_core]
 Internal error: Oops: 17 [#1] PREEMPT SMP ARM
 [<bf4857f4>] (ath10k_htt_rx_pktlog_completion_handler+0x2f4/0xb6c [ath10k_core])
 [<bf487540>] (ath10k_htt_txrx_compl_task+0x8b4/0x1188 [ath10k_core])
 [<c00312d4>] (tasklet_action+0x8c/0xec)
 [<c00309a8>] (__do_softirq+0xdc/0x208)
 [<c0030d6c>] (irq_exit+0x84/0xe0)
 [<c005db04>] (__handle_domain_irq+0x80/0xa0)
 [<c00085c4>] (gic_handle_irq+0x38/0x5c)
 [<c0009640>] (__irq_svc+0x40/0x74)

(gdb) list *(ath10k_htt_rx_pktlog_completion_handler+0x1c0)
0x136c0 is in ath10k_htt_rx_h_channel (drivers/net/wireless/ath/ath10k/htt_rx.c:769)
764		struct cfg80211_chan_def def;
765
766		lockdep_assert_held(&ar->data_lock);
767
768		list_for_each_entry(arvif, &ar->arvifs, list) {
769			if (arvif->vdev_id == vdev_id &&
770			    ath10k_mac_vif_chan(arvif->vif, &def) == 0)
771				return def.chan;
772		}
773

Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qti.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-12-01 09:46:36 +01:00
..
ar5523 mac80211: convert HW flags to unsigned long bitmap 2015-06-10 16:05:36 +02:00
ath5k ath5k: fix memory leak on buf on failed eeprom read 2018-04-13 19:50:08 +02:00
ath6kl Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2015-11-01 00:15:30 -04:00
ath9k ath9k_hw: check if the chip failed to wake up 2018-04-29 07:50:02 +02:00
ath10k ath10k: fix kernel panic due to race in accessing arvif list 2018-12-01 09:46:36 +01:00
carl9170 mac80211: pass block ack session timeout to to driver 2017-05-20 14:27:03 +02:00
wcn36xx mac80211: allow not sending MIC up from driver for HW crypto 2018-05-16 10:06:46 +02:00
wil6210 wil6210: fix memory access violation in wil_memcpy_from/toio_32 2018-03-22 09:23:27 +01:00
ath.h ath9k: Add a new debug flag for FFT spectral scan 2015-05-09 16:46:08 +03:00
debug.c ath: Make ath_opmode_to_string understand OCB mode 2015-08-10 22:21:15 +03:00
dfs_pattern_detector.c ath: fix DFS timestamp wraparound reset condition 2015-10-09 11:47:31 +03:00
dfs_pattern_detector.h ath: use PRI value given by spec for fixed PRI 2015-09-27 15:50:30 +03:00
dfs_pri_detector.c ath: use PRI value given by spec for fixed PRI 2015-09-27 15:50:30 +03:00
dfs_pri_detector.h ath9k/ath: move dfs pattern detector to ath 2013-10-18 14:03:54 -04:00
hw.c ath: update hardware mac address with bssid mask 2013-04-22 15:20:15 -04:00
Kconfig ath: Add support for tracing 2014-10-02 14:23:14 -04:00
key.c
main.c ath: Fix smatch warning 2014-10-07 14:48:37 -04:00
Makefile ath: Add support for tracing 2014-10-02 14:23:14 -04:00
reg.h ath: update hardware mac address with bssid mask 2013-04-22 15:20:15 -04:00
regd_common.h ath: Add regulatory mapping for Bahamas 2018-08-06 16:24:34 +02:00
regd.c ath: Fix updating radar flags for coutry code India 2018-03-24 10:58:41 +01:00
regd.h ath: Add regulatory mapping for Bahamas 2018-08-06 16:24:34 +02:00
spectral_common.h ath10k: add spectral scan feature 2014-08-04 09:07:54 +03:00
trace.c ath: Add support for tracing 2014-10-02 14:23:14 -04:00
trace.h ath: Add support for tracing 2014-10-02 14:23:14 -04:00