media: au0828: fix null dereference in error path
authorSean Young <sean@mess.org>
Sun, 19 May 2019 19:28:22 +0000 (15:28 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 4 Aug 2019 07:33:44 +0000 (09:33 +0200)
commit 6d0d1ff9ff21fbb06b867c13a1d41ce8ddcd8230 upstream.

au0828_usb_disconnect() gets the au0828_dev struct via usb_get_intfdata,
so it needs to set up for the error paths.

Reported-by: syzbot+357d86bcb4cca1a2f572@syzkaller.appspotmail.com
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/media/usb/au0828/au0828-core.c

index bf53553..38e73ee 100644 (file)
@@ -630,6 +630,12 @@ static int au0828_usb_probe(struct usb_interface *interface,
        /* Setup */
        au0828_card_setup(dev);
 
+       /*
+        * Store the pointer to the au0828_dev so it can be accessed in
+        * au0828_usb_disconnect
+        */
+       usb_set_intfdata(interface, dev);
+
        /* Analog TV */
        retval = au0828_analog_register(dev, interface);
        if (retval) {
@@ -647,12 +653,6 @@ static int au0828_usb_probe(struct usb_interface *interface,
        /* Remote controller */
        au0828_rc_register(dev);
 
-       /*
-        * Store the pointer to the au0828_dev so it can be accessed in
-        * au0828_usb_disconnect
-        */
-       usb_set_intfdata(interface, dev);
-
        pr_info("Registered device AU0828 [%s]\n",
                dev->board.name == NULL ? "Unset" : dev->board.name);