]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
rtw88: Fix potential probe error handling race with wow firmware loading
authorAndreas Färber <afaerber@suse.de>
Sun, 20 Sep 2020 13:26:21 +0000 (15:26 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 29 Oct 2020 09:11:27 +0000 (10:11 +0100)
[ 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

index 58c760dfd6b80380fa4470967a46e683d31ada0a..d69e4c6fc680a73f047c7967eb8c23b5613f198e 100644 (file)
@@ -1473,6 +1473,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;
                }
        }