summary refs log tree commit diff
diff options
context:
space:
mode:
authorTuomas Tynkkynen <ttynkkynen@nvidia.com>2014-06-17 17:17:40 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-07-09 16:25:22 -0700
commit6a70b621227d1fd3efd150fce63ea4d51d4acaa9 (patch)
tree8c5f0e0c2e03917735f5334dd6c0a62bb9ab61ab
parent6e693739e9b603b3ca9ce0d4f4178f0633458465 (diff)
downloadlinux-6a70b621227d1fd3efd150fce63ea4d51d4acaa9.tar.gz
USB: EHCI: tegra: Fix use-after-free in .remove()
The tegra_ehci_hcd structure is located in the private space allocated
by the core USB code so it must not be accessed after the HCD is
freed.

Signed-off-by: Tuomas Tynkkynen <ttynkkynen@nvidia.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/usb/host/ehci-tegra.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c
index c303371f67bc..693f792aa7f5 100644
--- a/drivers/usb/host/ehci-tegra.c
+++ b/drivers/usb/host/ehci-tegra.c
@@ -479,10 +479,11 @@ static int tegra_ehci_remove(struct platform_device *pdev)
 
 	usb_phy_shutdown(hcd->phy);
 	usb_remove_hcd(hcd);
-	usb_put_hcd(hcd);
 
 	clk_disable_unprepare(tegra->clk);
 
+	usb_put_hcd(hcd);
+
 	return 0;
 }