diff options
author | Miaoqing Pan <miaoqing@codeaurora.org> | 2016-11-16 04:23:08 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-04-21 03:31:23 -0400 |
commit | de75264ee112b8c7353fc7ba13096690a6d3bcbe (patch) | |
tree | 64a4c3bf2bd45c76060bc8b6ff1685ea939bcb21 | |
parent | a28acecbaf25b0ab71d62b6b64b6bd75f9892bb1 (diff) |
ath9k: fix NULL pointer dereference
commit 40bea976c72b9ee60f8d097852deb53ccbeaffbe upstream.
relay_open() may return NULL, check the return value to avoid the crash.
BUG: unable to handle kernel NULL pointer dereference at 0000000000000040
IP: [<ffffffffa01a95c5>] ath_cmn_process_fft+0xd5/0x700 [ath9k_common]
PGD 41cf28067 PUD 41be92067 PMD 0
Oops: 0000 [#1] SMP
CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.8.6+ #35
Hardware name: Hewlett-Packard h8-1080t/2A86, BIOS 6.15 07/04/2011
task: ffffffff81e0c4c0 task.stack: ffffffff81e00000
RIP: 0010:[<ffffffffa01a95c5>] [<ffffffffa01a95c5>] ath_cmn_process_fft+0xd5/0x700 [ath9k_common]
RSP: 0018:ffff88041f203ca0 EFLAGS: 00010293
RAX: 0000000000000000 RBX: 000000000000059f RCX: 0000000000000000
RDX: 0000000000000000 RSI: 0000000000000040 RDI: ffffffff81f0ca98
RBP: ffff88041f203dc8 R08: ffffffffffffffff R09: 00000000000000ff
R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000
R13: ffffffff81f0ca98 R14: 0000000000000000 R15: 0000000000000000
FS: 0000000000000000(0000) GS:ffff88041f200000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000000040 CR3: 000000041b6ec000 CR4: 00000000000006f0
Stack:
0000000000000363 00000000000003f3 00000000000003f3 00000000000001f9
000000000000049a 0000000001252c04 ffff88041f203e44 ffff880417b4bfd0
0000000000000008 ffff88041785b9c0 0000000000000002 ffff88041613dc60
Call Trace:
<IRQ>
[<ffffffffa01b6441>] ath9k_tasklet+0x1b1/0x220 [ath9k]
[<ffffffff8105d8dd>] tasklet_action+0x4d/0xf0
[<ffffffff8105dde2>] __do_softirq+0x92/0x2a0
Reported-by: Devin Tuchsen <devin.tuchsen@gmail.com>
Tested-by: Devin Tuchsen <devin.tuchsen@gmail.com>
Signed-off-by: Miaoqing Pan <miaoqing@codeaurora.org>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/net/wireless/ath/ath9k/common-spectral.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/net/wireless/ath/ath9k/common-spectral.c b/drivers/net/wireless/ath/ath9k/common-spectral.c index e2512d5bc0e1..eedf86b67cf5 100644 --- a/drivers/net/wireless/ath/ath9k/common-spectral.c +++ b/drivers/net/wireless/ath/ath9k/common-spectral.c | |||
@@ -528,6 +528,9 @@ int ath_cmn_process_fft(struct ath_spec_scan_priv *spec_priv, struct ieee80211_h | |||
528 | if (!(radar_info->pulse_bw_info & SPECTRAL_SCAN_BITMASK)) | 528 | if (!(radar_info->pulse_bw_info & SPECTRAL_SCAN_BITMASK)) |
529 | return 0; | 529 | return 0; |
530 | 530 | ||
531 | if (!spec_priv->rfs_chan_spec_scan) | ||
532 | return 1; | ||
533 | |||
531 | /* Output buffers are full, no need to process anything | 534 | /* Output buffers are full, no need to process anything |
532 | * since there is no space to put the result anyway | 535 | * since there is no space to put the result anyway |
533 | */ | 536 | */ |
@@ -1072,7 +1075,7 @@ static struct rchan_callbacks rfs_spec_scan_cb = { | |||
1072 | 1075 | ||
1073 | void ath9k_cmn_spectral_deinit_debug(struct ath_spec_scan_priv *spec_priv) | 1076 | void ath9k_cmn_spectral_deinit_debug(struct ath_spec_scan_priv *spec_priv) |
1074 | { | 1077 | { |
1075 | if (IS_ENABLED(CONFIG_ATH9K_DEBUGFS)) { | 1078 | if (IS_ENABLED(CONFIG_ATH9K_DEBUGFS) && spec_priv->rfs_chan_spec_scan) { |
1076 | relay_close(spec_priv->rfs_chan_spec_scan); | 1079 | relay_close(spec_priv->rfs_chan_spec_scan); |
1077 | spec_priv->rfs_chan_spec_scan = NULL; | 1080 | spec_priv->rfs_chan_spec_scan = NULL; |
1078 | } | 1081 | } |
@@ -1086,6 +1089,9 @@ void ath9k_cmn_spectral_init_debug(struct ath_spec_scan_priv *spec_priv, | |||
1086 | debugfs_phy, | 1089 | debugfs_phy, |
1087 | 1024, 256, &rfs_spec_scan_cb, | 1090 | 1024, 256, &rfs_spec_scan_cb, |
1088 | NULL); | 1091 | NULL); |
1092 | if (!spec_priv->rfs_chan_spec_scan) | ||
1093 | return; | ||
1094 | |||
1089 | debugfs_create_file("spectral_scan_ctl", | 1095 | debugfs_create_file("spectral_scan_ctl", |
1090 | S_IRUSR | S_IWUSR, | 1096 | S_IRUSR | S_IWUSR, |
1091 | debugfs_phy, spec_priv, | 1097 | debugfs_phy, spec_priv, |