linux/drivers/usb/host
Quentin Perret 29231826f3 ehci-hcd: Move include to keep CRC stable
The CRC calculation done by genksyms is triggered when the parser hits
EXPORT_SYMBOL*() macros. At this point, genksyms recursively expands the
types of the function parameters, and uses that as the input for the CRC
calculation. In the case of forward-declared structs, the type expands
to 'UNKNOWN'. Following this, it appears that the result of the
expansion of each type is cached somewhere, and seems to be re-used
when/if the same type is seen again for another exported symbol in the
same C file.

Unfortunately, this can cause CRC 'stability' issues when a struct
definition becomes visible in the middle of a C file. For example, let's
assume code with the following pattern:

    struct foo;

    int bar(struct foo *arg)
    {
	/* Do work ... */
    }
    EXPORT_SYMBOL_GPL(bar);

    /* This contains struct foo's definition */
    #include "foo.h"

    int baz(struct foo *arg)
    {
	/* Do more work ... */
    }
    EXPORT_SYMBOL_GPL(baz);

Here, baz's CRC will be computed using the expansion of struct foo that
was cached after bar's CRC calculation ('UNKOWN' here). But if
EXPORT_SYMBOL_GPL(bar) is removed from the file (because of e.g. symbol
trimming using CONFIG_TRIM_UNUSED_KSYMS), struct foo will be expanded
late, during baz's CRC calculation, which now has visibility over the
full struct definition, hence resulting in a different CRC for baz.

The proper fix for this certainly is in genksyms, but that will take me
some time to get right. In the meantime, we have seen one occurrence of
this in the ehci-hcd code which hits this problem because of the way it
includes C files halfway through the code together with an unlucky mix
of symbol trimming.

In order to workaround this, move the include done in ehci-hub.c early
in ehci-hcd.c, hence making sure the struct definitions are visible to
the entire file. This improves CRC stability of the ehci-hcd exports
even when symbol trimming is enabled.

Acked-by: Alan Stern <stern@rowland.harvard.edu>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Quentin Perret <qperret@google.com>
Link: https://lore.kernel.org/r/20200916171825.3228122-1-qperret@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-09-17 08:39:50 +02:00
..
bcma-hcd.c usb: host: bcma-hcd: Demote obvious misuse of kerneldoc to standard comment blocks 2020-07-09 17:19:58 +02:00
ehci-atmel.c
ehci-brcm.c usb: ehci: Add new EHCI driver for Broadcom STB SoC's 2020-05-13 14:28:01 +02:00
ehci-dbg.c usb: host: Use fallthrough pseudo-keyword 2020-07-10 08:55:18 +02:00
ehci-exynos.c usb: host: ehci-exynos: Fix error check in exynos_ehci_probe() 2020-06-18 10:40:57 +02:00
ehci-fsl.c usb: host: Use fallthrough pseudo-keyword 2020-07-10 08:55:18 +02:00
ehci-fsl.h USB: host: Use the correct style for SPDX License Identifier 2020-04-16 14:32:46 +02:00
ehci-grlib.c
ehci-hcd.c ehci-hcd: Move include to keep CRC stable 2020-09-17 08:39:50 +02:00
ehci-hub.c ehci-hcd: Move include to keep CRC stable 2020-09-17 08:39:50 +02:00
ehci-mem.c
ehci-mv.c USB: EHCI: ehci-mv: fix less than zero comparison of an unsigned int 2020-05-19 15:11:43 +02:00
ehci-mxc.c USB: host: ehci-mxc: Add error handling in ehci_mxc_drv_probe() 2020-05-19 15:12:21 +02:00
ehci-npcm7xx.c
ehci-omap.c usb: ehci-omap: Drop surplus include 2020-07-09 16:29:34 +02:00
ehci-orion.c
ehci-pci.c USB: Remove pci-dma-compat wrapper APIs. 2020-07-15 16:48:10 +02:00
ehci-platform.c usb: host: ehci-platform: Do not define 'struct acpi_device_id' when !CONFIG_ACPI 2020-07-09 17:19:59 +02:00
ehci-pmcmsp.c remove ioremap_nocache and devm_ioremap_nocache 2020-01-06 09:45:59 +01:00
ehci-ppc-of.c
ehci-ps3.c
ehci-q.c usb: host: Use fallthrough pseudo-keyword 2020-07-10 08:55:18 +02:00
ehci-sched.c usb: host: Use fallthrough pseudo-keyword 2020-07-10 08:55:18 +02:00
ehci-sh.c usb: host: ehci-sh: Remove unused platform data support 2019-12-10 11:34:27 +01:00
ehci-spear.c
ehci-st.c
ehci-sysfs.c
ehci-tegra.c usb: host: ehci-tegra: Remove superfluous dev_err() message 2020-04-16 14:32:45 +02:00
ehci-timer.c
ehci-xilinx-of.c
ehci.h USB: host: Use the correct style for SPDX License Identifier 2020-04-16 14:32:46 +02:00
fhci-dbg.c
fhci-hcd.c usb: host: fhci-hcd: annotate PIPE_CONTROL switch case with fallthrough 2020-02-19 11:08:52 +01:00
fhci-hub.c
fhci-mem.c
fhci-q.c
fhci-sched.c USB/Thunderbolt patches for 5.9-rc1 2020-08-05 12:13:10 -07:00
fhci-tds.c usb: host: fhci-tds: Remove unused variables 'buf' and 'extra_data' 2020-07-09 17:19:59 +02:00
fhci.h USB: host: Use the correct style for SPDX License Identifier 2020-04-16 14:32:46 +02:00
fotg210-hcd.c usb: Use fallthrough pseudo-keyword 2020-07-10 08:55:17 +02:00
fotg210.h USB: Replace zero-length array with flexible-array member 2020-02-23 19:24:51 +01:00
fsl-mph-dr-of.c
imx21-dbg.c
imx21-hcd.c usb: host: imx21-hcd: Demote function header which is clearly not kerneldoc 2020-07-09 17:19:57 +02:00
imx21-hcd.h USB: host: Use the correct style for SPDX License Identifier 2020-04-16 14:32:46 +02:00
isp116x-hcd.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
isp116x.h
isp1362-hcd.c usb: Use fallthrough pseudo-keyword 2020-07-10 08:55:17 +02:00
isp1362.h usb: host: isp1362: Mark the many unused ISP1362_REG entries as __maybe_unused 2020-07-03 10:18:40 +02:00
Kconfig usb: xhci: fix spelling mistake in Kconfig "firwmare" -> "firmware" 2020-06-18 16:03:46 +02:00
Makefile usb: renesas-xhci: Add the renesas xhci driver 2020-05-15 15:44:35 +02:00
max3421-hcd.c USB: Replace HTTP links with HTTPS ones 2020-07-21 13:41:57 +02:00
ohci-at91.c usb: host: ohci-at91: Demote kerneldoc headers down to basic comment blocks 2020-07-03 10:18:40 +02:00
ohci-da8xx.c usb: ohci-da8xx: ensure error return on variable error is set 2020-01-08 17:34:18 +01:00
ohci-dbg.c
ohci-exynos.c usb: host: ohci-exynos: Fix error handling in exynos_ohci_probe() 2020-08-27 09:25:58 +02:00
ohci-hcd.c USB: ohci: Replace HTTP links with HTTPS ones 2020-07-15 16:33:50 +02:00
ohci-hub.c USB: OHCI: Use fallthrough pseudo-keyword 2020-07-10 08:55:18 +02:00
ohci-mem.c
ohci-nxp.c
ohci-omap.c usb: ohci-omap: Convert to use GPIO descriptors 2020-07-21 13:42:37 +02:00
ohci-pci.c USB: OHCI: remove obsolete FIXME comment 2020-06-19 08:58:44 +02:00
ohci-platform.c usb/ohci-platform: Fix a warning when hibernating 2020-05-18 18:15:39 +02:00
ohci-ppc-of.c
ohci-ps3.c
ohci-pxa27x.c
ohci-q.c USB: OHCI: Use fallthrough pseudo-keyword 2020-07-10 08:55:18 +02:00
ohci-s3c2410.c usb: host: ohci-s3c2410: Demote obvious misuse of kerneldoc to standard comment block 2020-07-09 16:46:57 +02:00
ohci-sa1111.c
ohci-sm501.c USB: ohci-sm501: Add missed iounmap() in remove 2020-06-18 10:42:53 +02:00
ohci-spear.c
ohci-st.c
ohci-tmio.c USB: OHCI: Use fallthrough pseudo-keyword 2020-07-10 08:55:18 +02:00
ohci.h usb: host: ohci: Mark cc_to_error as __maybe_unused 2020-07-03 10:18:40 +02:00
oxu210hp-hcd.c usb: Use fallthrough pseudo-keyword 2020-07-10 08:55:17 +02:00
pci-quirks.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
pci-quirks.h
r8a66597-hcd.c usb: host: r8a66597-hcd: Remove set, then over-written, but never used variable 'tmp' 2020-07-09 17:19:57 +02:00
r8a66597.h USB: host: Use the correct style for SPDX License Identifier 2020-04-16 14:32:46 +02:00
sl811_cs.c
sl811-hcd.c usb: host: sl811-hcd: remove useless cast for driver.name 2020-02-19 11:10:27 +01:00
sl811.h
ssb-hcd.c
u132-hcd.c usb: host: u132-hcd: Remove u132_static_list and list head u132_list 2020-04-16 14:32:46 +02:00
uhci-debug.c
uhci-grlib.c
uhci-hcd.c
uhci-hcd.h
uhci-hub.c
uhci-pci.c usb: hci: add hc_driver as argument for usb_hcd_pci_probe 2020-05-15 15:44:34 +02:00
uhci-platform.c
uhci-q.c
xhci-dbg.c
xhci-dbgcap.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
xhci-dbgcap.h xhci: dbc: remove tty specific port structure from struct xhci_dbc 2020-07-23 17:05:29 +02:00
xhci-dbgtty.c xhci: dbgtty: Make some functions static 2020-07-28 13:15:01 +02:00
xhci-debugfs.c usb: host: xhci: fix ep context print mismatch in debugfs 2020-08-23 17:12:13 +02:00
xhci-debugfs.h USB: host: Use the correct style for SPDX License Identifier 2020-04-16 14:32:46 +02:00
xhci-ext-caps.c
xhci-ext-caps.h USB: host: Use the correct style for SPDX License Identifier 2020-04-16 14:32:46 +02:00
xhci-histb.c usb: host: hisilicon: convert to devm_platform_get_and_ioremap_resource 2020-03-24 12:09:39 +01:00
xhci-hub.c USB fixes for 5.9-rc3 - take 2 2020-08-30 10:51:03 -07:00
xhci-mem.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
xhci-mtk-sch.c usb: xhci-mtk: fix the failure of bandwidth allocation 2020-07-21 14:05:49 +02:00
xhci-mtk.c usb: host: xhci-mtk: avoid runtime suspend when removing hcd 2020-06-24 16:03:41 +02:00
xhci-mtk.h USB: host: Use the correct style for SPDX License Identifier 2020-04-16 14:32:46 +02:00
xhci-mvebu.c
xhci-mvebu.h USB: host: Use the correct style for SPDX License Identifier 2020-04-16 14:32:46 +02:00
xhci-pci-renesas.c usb: renesas-xhci: remove version check 2020-08-18 11:55:23 +02:00
xhci-pci.c usb: xhci: Fix ASMedia ASM1142 DMA addressing 2020-07-29 16:51:34 +02:00
xhci-pci.h usb: xhci: make symbols static 2020-05-19 14:11:55 +02:00
xhci-plat.c usb: host: xhci-plat: Replace HTTP links with HTTPS ones 2020-07-15 16:33:50 +02:00
xhci-plat.h USB: host: Use the correct style for SPDX License Identifier 2020-04-16 14:32:46 +02:00
xhci-rcar.c
xhci-rcar.h USB: host: Use the correct style for SPDX License Identifier 2020-04-16 14:32:46 +02:00
xhci-ring.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
xhci-tegra.c usb: host: xhci-tegra: fix tegra_xusb_get_phy() 2020-08-18 13:06:30 +02:00
xhci-trace.c
xhci-trace.h USB: host: Use the correct style for SPDX License Identifier 2020-04-16 14:32:46 +02:00
xhci.c USB fixes for 5.9-rc3 - take 2 2020-08-30 10:51:03 -07:00
xhci.h xhci: dbc: don't use generic xhci ring allocation functions for dbc. 2020-07-23 17:05:28 +02:00