aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorGrazvydas Ignotas <notasas@gmail.com>2010-03-11 10:45:26 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2010-04-01 19:01:44 -0400
commit1f80a7ae997a7e3dbe4bf8f56c2b9bc163c7e6f9 (patch)
treeae2655fd95a05a8ec0e842dbf6f692d559144d5a /drivers/net
parent0701191b8c49642be06c5c2911f9c2bf22f2c05b (diff)
wl1251: fix potential crash
commit 3f60ebc9d6291863652d564bacc430629271e6a9 upstream. In case debugfs does not init for some reason (or is disabled on older kernels) driver does not allocate stats.fw_stats structure, but tries to clear it later and trips on a NULL pointer: Unable to handle kernel NULL pointer dereference at virtual address 00000000 PC is at __memzero+0x24/0x80 Backtrace: [<bf0ddb88>] (wl1251_debugfs_reset+0x0/0x30 [wl1251]) [<bf0d6a2c>] (wl1251_op_stop+0x0/0x12c [wl1251]) [<bf0bc228>] (ieee80211_stop_device+0x0/0x74 [mac80211]) [<bf0b0d10>] (ieee80211_stop+0x0/0x4ac [mac80211]) [<c02deeac>] (dev_close+0x0/0xb4) [<c02deac0>] (dev_change_flags+0x0/0x184) [<c031f478>] (devinet_ioctl+0x0/0x704) [<c0320720>] (inet_ioctl+0x0/0x100) Add a NULL pointer check to fix this. Signed-off-by: Grazvydas Ignotas <notasas@gmail.com> Acked-by: Kalle Valo <kalle.valo@iki.fi> Signed-off-by: John W. Linville <linville@tuxdriver.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/wl12xx/wl1251_debugfs.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/net/wireless/wl12xx/wl1251_debugfs.c b/drivers/net/wireless/wl12xx/wl1251_debugfs.c
index a00723059f83..1685c09c8589 100644
--- a/drivers/net/wireless/wl12xx/wl1251_debugfs.c
+++ b/drivers/net/wireless/wl12xx/wl1251_debugfs.c
@@ -443,7 +443,8 @@ out:
443 443
444void wl1251_debugfs_reset(struct wl1251 *wl) 444void wl1251_debugfs_reset(struct wl1251 *wl)
445{ 445{
446 memset(wl->stats.fw_stats, 0, sizeof(*wl->stats.fw_stats)); 446 if (wl->stats.fw_stats != NULL)
447 memset(wl->stats.fw_stats, 0, sizeof(*wl->stats.fw_stats));
447 wl->stats.retry_count = 0; 448 wl->stats.retry_count = 0;
448 wl->stats.excessive_retries = 0; 449 wl->stats.excessive_retries = 0;
449} 450}