Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ath9k: dfs_debug fix possible NULL dereference

Fix possible NULL (sc->dfs_detector) pointer dereference.

Detected by Smatch:
drivers/net/wireless/ath/ath9k/dfs_debug.c:67 read_file_dfs()
error: we previously assumed 'sc->dfs_detector' could be null (see line 47)

Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

authored by

Janusz Dziedzic and committed by
John W. Linville
4be6718c 87eb0167

+10 -3
+10 -3
drivers/net/wireless/ath/ath9k/dfs_debug.c
··· 44 44 if (buf == NULL) 45 45 return -ENOMEM; 46 46 47 - if (sc->dfs_detector) 48 - dfs_pool_stats = sc->dfs_detector->get_stats(sc->dfs_detector); 49 - 50 47 len += scnprintf(buf + len, size - len, "DFS support for " 51 48 "macVersion = 0x%x, macRev = 0x%x: %s\n", 52 49 hw_ver->macVersion, hw_ver->macRev, 53 50 (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_DFS) ? 54 51 "enabled" : "disabled"); 52 + 53 + if (!sc->dfs_detector) { 54 + len += scnprintf(buf + len, size - len, 55 + "DFS detector not enabled\n"); 56 + goto exit; 57 + } 58 + 59 + dfs_pool_stats = sc->dfs_detector->get_stats(sc->dfs_detector); 60 + 55 61 len += scnprintf(buf + len, size - len, "Pulse detector statistics:\n"); 56 62 ATH9K_DFS_STAT("pulse events reported ", pulses_total); 57 63 ATH9K_DFS_STAT("invalid pulse events ", pulses_no_dfs); ··· 82 76 ATH9K_DFS_POOL_STAT("Seqs. alloc error ", pseq_alloc_error); 83 77 ATH9K_DFS_POOL_STAT("Seqs. in use ", pseq_used); 84 78 79 + exit: 85 80 if (len > size) 86 81 len = size; 87 82