WSL2-Linux-Kernel/drivers/spi
Lukas Wunner ddf75be47c
spi: Prevent adding devices below an unregistering controller
CONFIG_OF_DYNAMIC and CONFIG_ACPI allow adding SPI devices at runtime
using a DeviceTree overlay or DSDT patch.  CONFIG_SPI_SLAVE allows the
same via sysfs.

But there are no precautions to prevent adding a device below a
controller that's being removed.  Such a device is unusable and may not
even be able to unbind cleanly as it becomes inaccessible once the
controller has been torn down.  E.g. it is then impossible to quiesce
the device's interrupt.

of_spi_notify() and acpi_spi_notify() do hold a ref on the controller,
but otherwise run lockless against spi_unregister_controller().

Fix by holding the spi_add_lock in spi_unregister_controller() and
bailing out of spi_add_device() if the controller has been unregistered
concurrently.

Fixes: ce79d54ae4 ("spi/of: Add OF notifier handler")
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Cc: stable@vger.kernel.org # v3.19+
Cc: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: Octavian Purdila <octavian.purdila@intel.com>
Cc: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
Link: https://lore.kernel.org/r/a8c3205088a969dc8410eec1eba9aface60f36af.1596451035.git.lukas@wunner.de
Signed-off-by: Mark Brown <broonie@kernel.org>
2020-08-03 16:50:43 +01:00
..
Kconfig spi: Prevent adding devices below an unregistering controller 2020-08-03 16:50:43 +01:00
Makefile Merge series "mtd: spi-nor: Move cadence-qaudspi to spi-mem framework" from Vignesh Raghavendra <vigneshr@ti.com>: 2020-06-19 14:26:55 +01:00
atmel-quadspi.c spi: atmel-quadspi: Use optimezed memcpy_fromio()/memcpy_toio() 2020-07-17 00:55:24 +01:00
internals.h
spi-altera.c spi: altera: fix module autoload 2020-06-24 16:37:47 +01:00
spi-amd.c spi: spi-amd: Do not define 'struct acpi_device_id' when !CONFIG_ACPI 2020-07-17 16:38:56 +01:00
spi-ar934x.c
spi-armada-3700.c spi: a3700: make a3700_spi_init() return void 2020-05-06 15:55:13 +01:00
spi-at91-usart.c spi: spi-at91-usart: Remove unused OF table 'struct of_device_id' 2020-07-17 16:38:54 +01:00
spi-ath79.c
spi-atmel.c spi: atmel: remove redundant label out_free 2020-07-09 22:41:11 +01:00
spi-au1550.c
spi-axi-spi-engine.c spi: spi-axi-spi-engine: Access register after clock initialization 2020-04-09 18:46:53 +01:00
spi-bcm-qspi.c Merge branch 'for-5.7' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi into spi-5.8 2020-05-05 11:48:25 +01:00
spi-bcm-qspi.h
spi-bcm63xx-hsspi.c spi: bcm63xx-hsspi: add reset support 2020-06-17 14:29:58 +01:00
spi-bcm63xx.c spi: bcm63xx-spi: add reset support 2020-06-17 14:29:58 +01:00
spi-bcm2835.c spi: bcm2835: support effective_speed_hz 2020-07-17 00:30:44 +01:00
spi-bcm2835aux.c spi: bcm2835aux: support effective_speed_hz 2020-07-17 00:30:45 +01:00
spi-bitbang-txrx.h
spi-bitbang.c spi: spi-bitbang: Demote obvious misuse of kerneldoc to standard comment blocks 2020-07-17 16:38:45 +01:00
spi-brcmstb-qspi.c
spi-butterfly.c
spi-cadence-quadspi.c spi: Move cadence-quadspi driver to drivers/spi/ 2020-06-19 14:26:54 +01:00
spi-cadence.c spi: spi-cadence: add support for chip select high 2020-07-22 01:55:51 +01:00
spi-cavium-octeon.c
spi-cavium-thunderx.c spi: spi-cavium-thunderx: flag controller as half duplex 2020-06-16 00:38:39 +01:00
spi-cavium.c
spi-cavium.h
spi-clps711x.c
spi-coldfire-qspi.c spi: coldfire-qspi: Use clk_prepare_enable and clk_disable_unprepare 2020-07-17 00:55:26 +01:00
spi-davinci.c spi: spi-davinci: Fix a few kerneldoc misspellings and API slippages 2020-07-17 16:38:46 +01:00
spi-dln2.c
spi-dw-core.c Merge remote-tracking branch 'spi/for-5.8' into spi-next 2020-05-30 00:03:53 +01:00
spi-dw-dma.c spi: dw: Refactor mid_spi_dma_setup() to separate DMA and IRQ config 2020-05-29 20:04:04 +01:00
spi-dw-mmio.c Merge series "spi: dw: Add generic DW DMA controller support" from Serge Semin <Sergey.Semin@baikalelectronics.ru>: 2020-05-29 17:49:56 +01:00
spi-dw-pci.c spi: dw: Cleanup generic DW DMA code namings 2020-05-29 15:55:52 +01:00
spi-dw.h spi: dw: Use regset32 DebugFS method to create regdump file 2020-05-29 15:55:54 +01:00
spi-efm32.c
spi-ep93xx.c spi: spi-ep93xx: Fix API slippage 2020-07-17 16:38:47 +01:00
spi-falcon.c
spi-fsi.c
spi-fsl-cpm.c
spi-fsl-cpm.h
spi-fsl-dspi.c spi: spi-fsl-dspi: Initialize completion before possible interrupt 2020-06-22 13:50:29 +01:00
spi-fsl-espi.c
spi-fsl-lib.c
spi-fsl-lib.h
spi-fsl-lpspi.c spi: lpspi: fix using CS discontinuously on i.MX8DXLEVK 2020-07-29 14:40:54 +01:00
spi-fsl-qspi.c spi: Fix SPI NOR and SPI NAND acronyms 2020-07-17 00:55:25 +01:00
spi-fsl-spi.c spi: fsl: add missing __iomem annotation 2020-07-01 23:21:26 +01:00
spi-fsl-spi.h
spi-geni-qcom.c spi: spi-geni-qcom: Set an autosuspend delay of 250 ms 2020-07-07 14:11:01 +01:00
spi-gpio.c
spi-hisi-sfc-v3xx.c spi: hisi-sfc-v3xx: add error check after per operation 2020-04-17 14:21:00 +01:00
spi-img-spfi.c spi: img-spfi: Convert to use GPIO descriptors 2020-07-01 23:21:29 +01:00
spi-imx.c spi: imx: enable runtime pm support 2020-07-27 14:55:20 +01:00
spi-iproc-qspi.c
spi-jcore.c
spi-lantiq-ssc.c spi: lantiq: Add support to Lightning Mountain SoC 2020-07-22 01:55:59 +01:00
spi-lm70llp.c
spi-loopback-test.c spi: spi-loopback-test: Fix formatting issues in function header blocks 2020-07-17 16:38:44 +01:00
spi-lp8841-rtc.c
spi-mem.c spi: spi-mem: allow specifying a command's extension 2020-07-14 17:29:38 +01:00
spi-meson-spicc.c spi: spi-meson-spicc: Remove set but never used variable 'data' from meson_spicc_reset_fifo() 2020-07-17 16:38:48 +01:00
spi-meson-spifc.c spi: spi-meson-spifc: Fix misdocumenting of 'dev' in 'struct meson_spifc' 2020-07-17 16:38:48 +01:00
spi-mpc52xx-psc.c
spi-mpc52xx.c
spi-mpc512x-psc.c
spi-mt65xx.c spi: mediatek: add spi support for mt8192 IC 2020-07-22 01:56:00 +01:00
spi-mt7621.c
spi-mtk-nor.c spi: spi-mtk-nor: reject DTR ops 2020-07-14 17:29:40 +01:00
spi-mux.c spi: mux: repair mux usage 2020-05-25 13:25:34 +01:00
spi-mxic.c spi: spi-mem: allow specifying a command's extension 2020-07-14 17:29:38 +01:00
spi-mxs.c
spi-npcm-fiu.c spi: npcm-fiu: Reuse BITS_PER_BYTE definition 2020-06-19 13:43:08 +01:00
spi-npcm-pspi.c spi: npcm-pspi: Convert to use GPIO descriptors 2020-07-01 23:21:28 +01:00
spi-nxp-fspi.c
spi-oc-tiny.c SPI SUBSYSTEM: Replace HTTP links with HTTPS ones 2020-07-09 22:41:11 +01:00
spi-omap-100k.c spi: omap-100k: Drop include 2020-07-14 17:38:46 +01:00
spi-omap-uwire.c spi: omap-uwire: Use clk_prepare_enable and clk_disable_unprepare 2020-07-15 15:58:33 +01:00
spi-omap2-mcspi.c spi: omap2-mcspi: Convert to use GPIO descriptors 2020-06-29 19:14:07 +01:00
spi-orion.c spi: Fix SPI NOR and SPI NAND acronyms 2020-07-17 00:55:25 +01:00
spi-pic32-sqi.c
spi-pic32.c
spi-pl022.c spi: spi-pl022: Provide missing struct attribute/function param docs 2020-07-17 16:38:50 +01:00
spi-ppc4xx.c spi: ppc4xx: Convert to use GPIO descriptors 2020-07-22 01:55:52 +01:00
spi-pxa2xx-dma.c
spi-pxa2xx-pci.c
spi-pxa2xx.c spi: spi-pxa2xx: Do not define 'struct acpi_device_id' when !CONFIG_ACPI 2020-07-17 16:38:55 +01:00
spi-pxa2xx.h
spi-qcom-qspi.c
spi-qup.c
spi-rb4xx.c spi: rb4xx: update driver to be device tree aware 2020-05-22 14:13:17 +01:00
spi-rockchip.c spi: rockchip: Fix error in SPI slave pio read 2020-07-28 17:29:31 +01:00
spi-rpc-if.c spi: add Renesas RPC-IF driver 2020-06-16 00:38:38 +01:00
spi-rspi.c spi: rspi: Use requested instead of maximum bit rate 2020-06-09 12:26:33 +01:00
spi-s3c24xx-fiq.S
spi-s3c24xx-fiq.h
spi-s3c24xx.c
spi-s3c64xx.c spi: spi-s3c64xx: Add missing entries for structs 's3c64xx_spi_dma_data' and 's3c64xx_spi_dma_data' 2020-07-17 16:38:49 +01:00
spi-sc18is602.c spi: sc18is602: Fix a typo in MODULE_DESCRIPTION 2020-04-14 12:39:37 +01:00
spi-sh-hspi.c
spi-sh-msiof.c spi: spi-sh-msiof: Fix checkpatch error Complex macros should use () 2020-04-14 18:36:34 +01:00
spi-sh-sci.c
spi-sh.c
spi-sifive.c
spi-sirf.c
spi-slave-mt27xx.c
spi-slave-system-control.c
spi-slave-time.c
spi-sprd-adi.c spi: sprd: switch the sequence of setting WDG_LOAD_LOW and _HIGH 2020-06-02 11:45:11 +01:00
spi-sprd.c
spi-st-ssc4.c
spi-stm32-qspi.c spi: stm32-qspi: Fix error path in case of -EPROBE_DEFER 2020-06-17 13:26:41 +01:00
spi-stm32.c spi: stm32: Add 'SPI_SIMPLEX_RX', 'SPI_3WIRE_RX' support for stm32f4 2020-05-25 15:56:16 +01:00
spi-sun4i.c spi: sun4i: update max transfer size reported 2020-07-27 14:55:21 +01:00
spi-sun6i.c spi: spi-sun6i: sun6i_spi_transfer_one(): enable RF_RDY interrupt only if needed 2020-07-07 10:41:41 +01:00
spi-synquacer.c
spi-tegra20-sflash.c spi: tegra20-sflash: Fix runtime PM imbalance on error 2020-05-28 14:01:16 +01:00
spi-tegra20-slink.c spi: tegra20-slink: Fix runtime PM imbalance on error 2020-05-28 14:01:15 +01:00
spi-tegra114.c spi: tegra114: Fix runtime PM imbalance on error 2020-05-28 14:01:14 +01:00
spi-test.h
spi-ti-qspi.c SPI SUBSYSTEM: Replace HTTP links with HTTPS ones 2020-07-09 22:41:11 +01:00
spi-tle62x0.c
spi-topcliff-pch.c spi: spi-topcliff-pch: drop call to wakeup-disable 2020-07-28 17:29:29 +01:00
spi-txx9.c
spi-uniphier.c spi: uniphier: Use devm_platform_get_and_ioremap_resource() to simplify code 2020-05-11 18:17:52 +01:00
spi-xcomm.c
spi-xilinx.c
spi-xlp.c
spi-xtensa-xtfpga.c
spi-zynq-qspi.c spi: spi-zynq-qspi: Add description for 2 missing attributes/parameters 2020-07-17 16:38:51 +01:00
spi-zynqmp-gqspi.c spi: spi-zynqmp-gqspi: Correct a couple of misspellings in kerneldoc 2020-07-17 16:38:52 +01:00
spi.c spi: Prevent adding devices below an unregistering controller 2020-08-03 16:50:43 +01:00
spidev.c spi: spidev: Align buffers for DMA 2020-07-28 17:29:28 +01:00