aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Walleij <[email protected]>2018-09-18 16:25:06 -0700
committerGreg Kroah-Hartman <[email protected]>2018-09-20 13:16:14 +0200
commit46216506ceacc36eea7535c4a72b77b38fe4b664 (patch)
tree04a401b9e6f0b2b4bfbae1c16c8a8768ad58587a
parent3df0e240caba641e0d70640e3baf34d34c105176 (diff)
usb: host: fotg2: Fix potential NULL dereference
There is code in the .remove() hook to handle the drvdata being NULL, for good reasons: it is never set, so it will always be NULL. As I moved code around, static checkers start complaining. Instead of this, make sure to always set it on successful probe so we can always dereference it on the remove path. Use the platform_device_[set|get]_drvdata() since this is a platform device. Fixes: ffa8a31b5b3b ("usb: host: fotg2: add silicon clock handling") Reported-by: Dan Carpenter <[email protected]> Cc: Dan Carpenter <[email protected]> Signed-off-by: Linus Walleij <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
-rw-r--r--drivers/usb/host/fotg210-hcd.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/drivers/usb/host/fotg210-hcd.c b/drivers/usb/host/fotg210-hcd.c
index 058ff82ea789..bbcc68179bfc 100644
--- a/drivers/usb/host/fotg210-hcd.c
+++ b/drivers/usb/host/fotg210-hcd.c
@@ -5636,6 +5636,7 @@ static int fotg210_hcd_probe(struct platform_device *pdev)
goto failed_dis_clk;
}
device_wakeup_enable(hcd->self.controller);
+ platform_set_drvdata(pdev, hcd);
return retval;
@@ -5656,16 +5657,12 @@ fail_create_hcd:
*/
static int fotg210_hcd_remove(struct platform_device *pdev)
{
- struct device *dev = &pdev->dev;
- struct usb_hcd *hcd = dev_get_drvdata(dev);
+ struct usb_hcd *hcd = platform_get_drvdata(pdev);
struct fotg210_hcd *fotg210 = hcd_to_fotg210(hcd);
if (!IS_ERR(fotg210->pclk))
clk_disable_unprepare(fotg210->pclk);
- if (!hcd)
- return 0;
-
usb_remove_hcd(hcd);
usb_put_hcd(hcd);