summaryrefslogtreecommitdiff
path: root/drivers/staging
diff options
context:
space:
mode:
authorVipin Mehta <vmehta@atheros.com>2011-02-18 13:13:02 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2011-02-18 13:28:49 -0800
commitda101d563503d399d92412e833b6d5ae49c8ee5d (patch)
tree2d1ef1125c38027b8d84f20dee7f797d6613730b /drivers/staging
parent6642a67c552e6d525913bb5fb4a00b2008213451 (diff)
staging: ath6kl: Fixing a NULL pointer exception
The driver was dereferencing a NULL pointer because of the device instance being registered via the set_wiphy_dev() function. The function ar6000_avail_ev() was passing the argument as NULL instead of using the one returned by the MMC stack through the probe callback. Signed-off-by: Vipin Mehta <vmehta@atheros.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging')
-rw-r--r--drivers/staging/ath6kl/os/linux/ar6000_drv.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/drivers/staging/ath6kl/os/linux/ar6000_drv.c b/drivers/staging/ath6kl/os/linux/ar6000_drv.c
index 26dafc90451..4f6ddf75949 100644
--- a/drivers/staging/ath6kl/os/linux/ar6000_drv.c
+++ b/drivers/staging/ath6kl/os/linux/ar6000_drv.c
@@ -1604,6 +1604,14 @@ ar6000_avail_ev(void *context, void *hif_handle)
struct wireless_dev *wdev;
#endif /* ATH6K_CONFIG_CFG80211 */
int init_status = 0;
+ HIF_DEVICE_OS_DEVICE_INFO osDevInfo;
+
+ memset(&osDevInfo, 0, sizeof(osDevInfo));
+ if (HIFConfigureDevice(hif_handle, HIF_DEVICE_GET_OS_DEVICE,
+ &osDevInfo, sizeof(osDevInfo))) {
+ AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("%s: Failed to get OS device instance\n", __func__));
+ return A_ERROR;
+ }
AR_DEBUG_PRINTF(ATH_DEBUG_INFO,("ar6000_available\n"));
@@ -1623,7 +1631,7 @@ ar6000_avail_ev(void *context, void *hif_handle)
device_index = i;
#ifdef ATH6K_CONFIG_CFG80211
- wdev = ar6k_cfg80211_init(NULL);
+ wdev = ar6k_cfg80211_init(osDevInfo.pOSDevice);
if (IS_ERR(wdev)) {
AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: ar6k_cfg80211_init failed\n", __func__));
return A_ERROR;
@@ -1668,12 +1676,7 @@ ar6000_avail_ev(void *context, void *hif_handle)
#ifdef SET_NETDEV_DEV
if (ar_netif) {
- HIF_DEVICE_OS_DEVICE_INFO osDevInfo;
- A_MEMZERO(&osDevInfo, sizeof(osDevInfo));
- if (!HIFConfigureDevice(hif_handle, HIF_DEVICE_GET_OS_DEVICE,
- &osDevInfo, sizeof(osDevInfo))) {
- SET_NETDEV_DEV(dev, osDevInfo.pOSDevice);
- }
+ SET_NETDEV_DEV(dev, osDevInfo.pOSDevice);
}
#endif