Commit f3691e00 authored by Jia-Ju Bai's avatar Jia-Ju Bai Committed by Greg Kroah-Hartman

rtl8188eu: Fix a possible sleep-in-atomic bug in _rtw_pwr_wakeup

The driver may sleep under a spinlock, and the function call path is:
rtw_set_802_11_disassociate(acquire the spinlock)
  _rtw_pwr_wakeup
    usleep_range --> may sleep

To fix it, usleep_range is replaced with udelay.
This bug is found by my static analysis tool and my code review.
Signed-off-by: default avatarJia-Ju Bai <baijiaju1990@163.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 2bf9806d
...@@ -570,7 +570,7 @@ int _rtw_pwr_wakeup(struct adapter *padapter, u32 ips_deffer_ms, const char *cal ...@@ -570,7 +570,7 @@ int _rtw_pwr_wakeup(struct adapter *padapter, u32 ips_deffer_ms, const char *cal
DBG_88E("%s wait ps_processing...\n", __func__); DBG_88E("%s wait ps_processing...\n", __func__);
while (pwrpriv->ps_processing && while (pwrpriv->ps_processing &&
jiffies_to_msecs(jiffies - start) <= 3000) jiffies_to_msecs(jiffies - start) <= 3000)
usleep_range(1000, 3000); udelay(1500);
if (pwrpriv->ps_processing) if (pwrpriv->ps_processing)
DBG_88E("%s wait ps_processing timeout\n", __func__); DBG_88E("%s wait ps_processing timeout\n", __func__);
else else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment