summaryrefslogtreecommitdiff
path: root/drivers/staging/rtl8712/hal_init.c
diff options
context:
space:
mode:
authorRustam Kovhaev <rkovhaev@gmail.com>2020-07-16 18:13:26 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-07-17 13:08:44 +0300
commitb4383c971bc5263efe2b0915ba67ebf2bf3f1ee5 (patch)
tree888caaba0e4c41e3be3b84e01e789e0e12e1e67f /drivers/staging/rtl8712/hal_init.c
parentc4283950a9a4d3bf4a3f362e406c80ab14f10714 (diff)
downloadlinux-b4383c971bc5263efe2b0915ba67ebf2bf3f1ee5.tar.xz
staging: rtl8712: handle firmware load failure
when firmware fails to load we should not call unregister_netdev() this patch fixes a race condition between rtl871x_load_fw_cb() and r871xu_dev_remove() and fixes the bug reported by syzbot Reported-by: syzbot+80899a8a8efe8968cde7@syzkaller.appspotmail.com Link: https://syzkaller.appspot.com/bug?extid=80899a8a8efe8968cde7 Signed-off-by: Rustam Kovhaev <rkovhaev@gmail.com> Cc: stable <stable@vger.kernel.org> Link: https://lore.kernel.org/r/20200716151324.1036204-1-rkovhaev@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/rtl8712/hal_init.c')
-rw-r--r--drivers/staging/rtl8712/hal_init.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/staging/rtl8712/hal_init.c b/drivers/staging/rtl8712/hal_init.c
index ed51023b85a0..715f1fe8b472 100644
--- a/drivers/staging/rtl8712/hal_init.c
+++ b/drivers/staging/rtl8712/hal_init.c
@@ -33,7 +33,6 @@ static void rtl871x_load_fw_cb(const struct firmware *firmware, void *context)
{
struct _adapter *adapter = context;
- complete(&adapter->rtl8712_fw_ready);
if (!firmware) {
struct usb_device *udev = adapter->dvobjpriv.pusbdev;
struct usb_interface *usb_intf = adapter->pusb_intf;
@@ -41,11 +40,13 @@ static void rtl871x_load_fw_cb(const struct firmware *firmware, void *context)
dev_err(&udev->dev, "r8712u: Firmware request failed\n");
usb_put_dev(udev);
usb_set_intfdata(usb_intf, NULL);
+ complete(&adapter->rtl8712_fw_ready);
return;
}
adapter->fw = firmware;
/* firmware available - start netdev */
register_netdev(adapter->pnetdev);
+ complete(&adapter->rtl8712_fw_ready);
}
static const char firmware_file[] = "rtlwifi/rtl8712u.bin";