From 3ef5a262ad0061d6147da7e3ee03aead7c160d91 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 20 Aug 2009 06:14:22 -0700 Subject: [PATCH] Staging: rtl8192e: fix for stack bug This should be a fix for the lockup bug when attaching to an access point. Patch came from a diff from RealTek. Hopefully it resolves the issue. Signed-off-by: Greg Kroah-Hartman --- .../staging/rtl8192e/ieee80211/ieee80211_softmac_wx.c | 16 +++------------- drivers/staging/rtl8192e/ieee80211/ieee80211_wx.c | 2 +- drivers/staging/rtl8192e/r8192_pm.c | 9 +++++++-- 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac_wx.c b/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac_wx.c index 7fcda9ba7964..7c21aaab9063 100644 --- a/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac_wx.c +++ b/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac_wx.c @@ -530,22 +530,12 @@ int ieee80211_wx_get_name(struct ieee80211_device *ieee, union iwreq_data *wrqu, char *extra) { strcpy(wrqu->name, "802.11"); - if(ieee->modulation & IEEE80211_CCK_MODULATION){ + if(ieee->modulation & IEEE80211_CCK_MODULATION) strcat(wrqu->name, "b"); - if(ieee->modulation & IEEE80211_OFDM_MODULATION) - strcat(wrqu->name, "/g"); - }else if(ieee->modulation & IEEE80211_OFDM_MODULATION) + if(ieee->modulation & IEEE80211_OFDM_MODULATION) strcat(wrqu->name, "g"); if (ieee->mode & (IEEE_N_24G | IEEE_N_5G)) - strcat(wrqu->name, "/n"); - - if((ieee->state == IEEE80211_LINKED) || - (ieee->state == IEEE80211_LINKED_SCANNING)) - strcat(wrqu->name," linked"); - else if(ieee->state != IEEE80211_NOLINK) - strcat(wrqu->name," link.."); - - + strcat(wrqu->name, "n"); return 0; } diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211_wx.c b/drivers/staging/rtl8192e/ieee80211/ieee80211_wx.c index 7162f61edfaf..223483126b0e 100644 --- a/drivers/staging/rtl8192e/ieee80211/ieee80211_wx.c +++ b/drivers/staging/rtl8192e/ieee80211/ieee80211_wx.c @@ -843,7 +843,7 @@ int ieee80211_wx_get_encode_ext(struct ieee80211_device *ieee, } else idx = ieee->tx_keyidx; - if (!ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY && + if (!(ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) && ext->alg != IW_ENCODE_ALG_WEP) if (idx != 0 || ieee->iw_mode != IW_MODE_INFRA) return -EINVAL; diff --git a/drivers/staging/rtl8192e/r8192_pm.c b/drivers/staging/rtl8192e/r8192_pm.c index f898a19fe3fd..feef29b0a893 100644 --- a/drivers/staging/rtl8192e/r8192_pm.c +++ b/drivers/staging/rtl8192e/r8192_pm.c @@ -34,7 +34,9 @@ int rtl8192E_suspend (struct pci_dev *pdev, pm_message_t state) if (!netif_running(dev)) goto out_pci_suspend; - dev->stop(dev); + if (dev->netdev_ops->ndo_stop) + dev->netdev_ops->ndo_stop(dev); +// dev->stop(dev); #if 0 netif_carrier_off(dev); @@ -150,7 +152,10 @@ int rtl8192E_resume (struct pci_dev *pdev) netif_device_attach(dev); - dev->open(dev); + if (dev->netdev_ops->ndo_open) + dev->netdev_ops->ndo_open(dev); + +// dev->open(dev); out: RT_TRACE(COMP_POWER, "<================r8192E resume call.\n"); return 0; -- 2.11.0