linux/drivers/usb/dwc3
Stephen Warren 3b9561e9d9 USB: set device dma_mask without reference to global data
Many USB host drivers contain code such as:

if (!pdev->dev.dma_mask)
        pdev->dev.dma_mask = &tegra_ehci_dma_mask;

... where tegra_ehci_dma_mask is a global. I suspect this code originated
in commit 4a53f4e "USB: ehci-tegra: add probing through device tree" and
was simply copied everywhere else.

This works fine when the code is built-in, but can cause a crash when the
code is in a module. The first module load sets up the dma_mask pointer,
but if the module is removed and re-inserted, the value is now non-NULL,
and hence is not updated to point at the new location, and hence points
at a stale location within the previous module load address, which in
turn causes a crash if the pointer is de-referenced.

The simplest way of solving this seems to be to copy the code from
ehci-platform.c, which uses the coherent_dma_mask as the target for the
dma_mask pointer.

Suggested-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Stephen Warren <swarren@nvidia.com>
Acked-by: Tony Prisk <linux@prisktech.co.nz>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-05-16 17:30:52 -07:00
..
Kconfig usb: dwc3: Fix compilation break when building with USB_DWC3_DUAL_ROLE=y 2013-05-15 17:26:00 +03:00
Makefile usb: dwc3: remove dwc3 dependency on host AND gadget. 2013-01-18 14:55:55 +02:00
core.c usb: dwc3: add CONFIG_PM_SLEEP to suspend/resume functions 2013-04-02 11:42:51 +03:00
core.h usb: dwc3: core: fix wrong OTG event regitser offset 2013-03-18 11:18:13 +02:00
debug.h usb: dwc: remove "All rights reserved" statement. 2011-10-04 10:25:52 -07:00
debugfs.c usb: dwc3: core: fix wrong OTG event regitser offset 2013-03-18 11:18:13 +02:00
dwc3-exynos.c USB: set device dma_mask without reference to global data 2013-05-16 17:30:52 -07:00
dwc3-omap.c usb: dwc3: add CONFIG_PM_SLEEP to suspend/resume functions 2013-04-02 11:42:51 +03:00
dwc3-pci.c usb: dwc3: pci: add basic suspend/resume support 2013-03-18 11:17:03 +02:00
ep0.c usb: dwc3: remove our homebrew state mechanism 2013-03-18 11:17:13 +02:00
gadget.c usb: dwc3: gadget: use num_(in|out)_eps from HW params 2013-03-18 11:18:02 +02:00
gadget.h usb: dwc3: correct set_halt implementation for ep0 2012-07-02 10:02:07 +03:00
host.c usb: dwc3: host: Change platform device ID for xhci-hcd to AUTO 2013-01-25 13:19:52 +02:00
io.h usb: dwc3: core: split host address space 2012-04-24 15:37:04 +03:00