| From a62b3a4e2fc1b2439d2fb6faa938de42af3318bd Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sun, 20 Sep 2020 15:26:21 +0200 |
| Subject: rtw88: Fix potential probe error handling race with wow firmware |
| loading |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Andreas Färber <afaerber@suse.de> |
| |
| [ Upstream commit ac4bac99161e8f7a7a9faef70d8ca8f69d5493a9 ] |
| |
| If rtw_core_init() fails to load the wow firmware, rtw_core_deinit() |
| will not get called to clean up the regular firmware. |
| |
| Ensure that an error loading the wow firmware does not produce an oops |
| for the regular firmware by waiting on its completion to be signalled |
| before returning. Also release the loaded firmware. |
| |
| Fixes: c8e5695eae99 ("rtw88: load wowlan firmware if wowlan is supported") |
| Cc: Chin-Yen Lee <timlee@realtek.com> |
| Cc: Yan-Hsuan Chuang <yhchuang@realtek.com> |
| Signed-off-by: Andreas Färber <afaerber@suse.de> |
| Signed-off-by: Kalle Valo <kvalo@codeaurora.org> |
| Link: https://lore.kernel.org/r/20200920132621.26468-3-afaerber@suse.de |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/wireless/realtek/rtw88/main.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c |
| index 80b880b671eaa..6a881d0be9bf0 100644 |
| --- a/drivers/net/wireless/realtek/rtw88/main.c |
| +++ b/drivers/net/wireless/realtek/rtw88/main.c |
| @@ -1465,6 +1465,9 @@ int rtw_core_init(struct rtw_dev *rtwdev) |
| ret = rtw_load_firmware(rtwdev, RTW_WOWLAN_FW); |
| if (ret) { |
| rtw_warn(rtwdev, "no wow firmware loaded\n"); |
| + wait_for_completion(&rtwdev->fw.completion); |
| + if (rtwdev->fw.firmware) |
| + release_firmware(rtwdev->fw.firmware); |
| return ret; |
| } |
| } |
| -- |
| 2.25.1 |
| |