anolis-cloud-kernel/drivers/spi
wuxu.wu 7deb8737b2 spi: spi-dw: Add lock protect dw_spi rx/tx to prevent concurrent calls
fix #25872428

commit 19b61392c5 upstream

dw_spi_irq() and dw_spi_transfer_one concurrent calls.

I find a panic in dw_writer(): txw = *(u8 *)(dws->tx), when dw->tx==null,
dw->len==4, and dw->tx_end==1.

When tpm driver's message overtime dw_spi_irq() and dw_spi_transfer_one
may concurrent visit dw_spi, so I think dw_spi structure lack of protection.

Otherwise dw_spi_transfer_one set dw rx/tx buffer and then open irq,
store dw rx/tx instructions and other cores handle irq load dw rx/tx
instructions may out of order.

	[ 1025.321302] Call trace:
	...
	[ 1025.321319]  __crash_kexec+0x98/0x148
	[ 1025.321323]  panic+0x17c/0x314
	[ 1025.321329]  die+0x29c/0x2e8
	[ 1025.321334]  die_kernel_fault+0x68/0x78
	[ 1025.321337]  __do_kernel_fault+0x90/0xb0
	[ 1025.321346]  do_page_fault+0x88/0x500
	[ 1025.321347]  do_translation_fault+0xa8/0xb8
	[ 1025.321349]  do_mem_abort+0x68/0x118
	[ 1025.321351]  el1_da+0x20/0x8c
	[ 1025.321362]  dw_writer+0xc8/0xd0
	[ 1025.321364]  interrupt_transfer+0x60/0x110
	[ 1025.321365]  dw_spi_irq+0x48/0x70
	...

Signed-off-by: wuxu.wu <wuxu.wu@huawei.com>
Link: https://lore.kernel.org/r/1577849981-31489-1-git-send-email-wuxu.wu@huawei.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: luanshi <zhangliguang@linux.alibaba.com>
Acked-by: Joseph Qi <joseph.qi@linux.alibaba.com>
Reviewed-by: Caspar Zhang <caspar@linux.alibaba.com>
2020-04-22 23:25:18 +08:00
..
Kconfig spi: add SPI controller driver for UniPhier SoC 2018-08-01 11:22:37 +01:00
Makefile spi: add SPI controller driver for UniPhier SoC 2018-08-01 11:22:37 +01:00
internals.h spi: Add an helper to flush the message queue 2018-04-23 15:48:18 +01:00
spi-altera.c spi: altera: Consolidate TX/RX data register access 2017-08-16 11:53:31 +01:00
spi-armada-3700.c Merge remote-tracking branches 'spi/topic/a3700', 'spi/topic/atmel', 'spi/topic/bcm53xx', 'spi/topic/davinci' and 'spi/topic/dw' into spi-next 2018-01-26 17:57:24 +00:00
spi-ath79.c spi: ath79: Convert to use CS GPIO descriptors 2020-03-18 22:52:56 +08:00
spi-atmel.c spi: atmel: Convert to use CS GPIO descriptors 2020-03-18 22:52:56 +08:00
spi-au1550.c
spi-axi-spi-engine.c spi: spi-axi: fix potential use-after-free after deregistration 2017-10-31 11:15:10 +00:00
spi-bcm-qspi.c spi: bcm-qspi: fix calculation of address length 2018-11-13 11:08:15 -08:00
spi-bcm-qspi.h
spi-bcm63xx-hsspi.c spi/bcm63xx-hsspi: keep pll clk enabled 2019-11-20 18:46:54 +01:00
spi-bcm63xx.c spi/bcm63xx: fix error return code in bcm63xx_spi_probe() 2017-08-08 11:36:35 +01:00
spi-bcm2835.c spi: bcm2835: Fix 3-wire mode if DMA is enabled 2019-08-09 17:52:35 +02:00
spi-bcm2835aux.c spi: bcm2835aux: fix corruptions for longer spi transfers 2019-09-10 10:33:41 +01:00
spi-bitbang-txrx.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
spi-bitbang.c spi: bitbang: Fix NULL pointer dereference in spi_unregister_master 2019-07-10 09:53:32 +02:00
spi-brcmstb-qspi.c
spi-butterfly.c spi: add flags parameter to txrx_word function pointers 2018-08-01 14:50:24 +01:00
spi-cadence.c spi: cadence: Fix default polarity of native chipselect 2020-03-18 22:52:57 +08:00
spi-cavium-octeon.c
spi-cavium-thunderx.c
spi-cavium.c
spi-cavium.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
spi-clps711x.c spi: clps711x: Convert to use CS GPIO descriptors 2020-03-18 22:52:57 +08:00
spi-coldfire-qspi.c
spi-davinci.c spi: davinci: Convert to use CS GPIO descriptors 2020-03-18 22:52:57 +08:00
spi-dln2.c
spi-dw-mid.c spi: dw: Convert to generalized SPI controller API 2018-02-12 12:04:16 +00:00
spi-dw-mmio.c spi: dw: Convert to use CS GPIO descriptors 2020-03-18 22:52:57 +08:00
spi-dw-pci.c
spi-dw.c spi: spi-dw: Add lock protect dw_spi rx/tx to prevent concurrent calls 2020-04-22 23:25:18 +08:00
spi-dw.h spi: spi-dw: Add lock protect dw_spi rx/tx to prevent concurrent calls 2020-04-22 23:25:18 +08:00
spi-efm32.c
spi-ep93xx.c spi: spi-ep93xx: Use dma_data_direction for ep93xx_spi_dma_{finish,prepare} 2018-11-13 11:08:22 -08:00
spi-falcon.c spi: spi-falcon: drop check of boot select 2017-09-01 11:33:22 +01:00
spi-fsl-cpm.c
spi-fsl-cpm.h
spi-fsl-dspi.c spi: spi-fsl-dspi: fix broken DSPI_EOQ_MODE 2018-08-28 20:55:23 +01:00
spi-fsl-espi.c spi: spi-fsl-espi: Log fifo counters on error 2018-07-26 15:43:09 +01:00
spi-fsl-lib.c
spi-fsl-lib.h
spi-fsl-lpspi.c spi: fsl-lpspi: Prevent FIFO under/overrun by default 2019-11-24 08:20:55 +01:00
spi-fsl-spi.c Merge remote-tracking branches 'spi/topic/devprop', 'spi/topic/fsl', 'spi/topic/fsl-dspi', 'spi/topic/imx' and 'spi/topic/lantiq' into spi-next 2017-04-26 15:58:04 +01:00
spi-fsl-spi.h
spi-gpio.c spi: spi-gpio: fix SPI_CS_HIGH capability 2019-09-16 08:22:07 +02:00
spi-img-spfi.c spi: img-spfi: Set device select bits for SPFI port state 2018-07-30 16:31:54 +01:00
spi-imx.c spi: imx: stop buffer overflow in RX FIFO flush 2019-05-31 06:46:34 -07:00
spi-iproc-qspi.c
spi-jcore.c spi: jcore: disable ref_clk after getting its rate 2018-03-18 17:57:42 -07:00
spi-lantiq-ssc.c Merge remote-tracking branches 'spi/topic/devprop', 'spi/topic/fsl', 'spi/topic/fsl-dspi', 'spi/topic/imx' and 'spi/topic/lantiq' into spi-next 2017-04-26 15:58:04 +01:00
spi-lm70llp.c spi: add flags parameter to txrx_word function pointers 2018-08-01 14:50:24 +01:00
spi-loopback-test.c spi: loopback-test: implement testing with no CS 2017-07-26 13:08:56 +01:00
spi-lp8841-rtc.c
spi-mem.c spi: spi-mem: Adjust op len based on message/transfer size limitations 2018-11-13 11:08:15 -08:00
spi-meson-spicc.c spi: meson-spicc: Fix error handling in meson_spicc_probe() 2018-05-02 05:59:21 +09:00
spi-meson-spifc.c
spi-mpc52xx-psc.c
spi-mpc52xx.c spi: mpc52xx: Use gpio_is_valid() 2018-04-27 12:05:39 +01:00
spi-mpc512x-psc.c
spi-mt65xx.c spi: mediatek: use correct mata->xfer_len when in fifo transfer 2019-11-24 08:19:06 +01:00
spi-mxs.c spi: mxs: Switch to SPDX identifier 2018-05-03 10:27:43 +09:00
spi-nuc900.c
spi-oc-tiny.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
spi-omap-100k.c
spi-omap-uwire.c
spi-omap2-mcspi.c spi: omap2-mcspi: Fix DMA and FIFO event trigger size mismatch 2019-12-01 09:17:33 +01:00
spi-orion.c spi: orion: fix CS GPIO handling again 2018-06-19 13:06:51 +01:00
spi-pic32-sqi.c
spi-pic32.c spi: pic32: Use proper enum in dmaengine_prep_slave_rg 2019-11-20 18:47:11 +01:00
spi-pl022.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
spi-ppc4xx.c
spi-pxa2xx-dma.c spi: pxa2xx: Use core message processing loop 2018-04-17 17:11:30 +01:00
spi-pxa2xx-pci.c
spi-pxa2xx.c dmaengine: idma64: Use actual device for DMA transfers 2019-06-15 11:54:10 +02:00
spi-pxa2xx.h spi: pxa2xx: Allow 64-bit DMA 2018-04-24 16:10:12 +01:00
spi-qup.c spi: qup: fix 64-bit build warning 2017-08-10 15:50:23 +01:00
spi-rb4xx.c
spi-rockchip.c include/: refactor headers to allow kthread.h inclusion in psi_types.h 2019-12-27 13:45:09 +08:00
spi-rspi.c spi: rspi: Fix sequencer reset during initialization 2019-05-31 06:46:34 -07:00
spi-s3c24xx-fiq.S
spi-s3c24xx-fiq.h
spi-s3c24xx.c
spi-s3c64xx.c spi: spi-s3c64xx: Fix system resume support 2018-05-17 13:27:08 +09:00
spi-sc18is602.c spi: sc18is602: Add OF device ID table 2017-02-22 10:50:09 -08:00
spi-sh-hspi.c
spi-sh-msiof.c spi: sh-msiof: fix deferred probing 2019-12-01 09:16:20 +01:00
spi-sh-sci.c spi: add flags parameter to txrx_word function pointers 2018-08-01 14:50:24 +01:00
spi-sh.c spi: spi-sh: fix error return code in spi_sh_probe() 2017-08-09 17:18:06 +01:00
spi-sirf.c spi: sirf: account for const type of of_device_id.data 2018-01-03 11:38:46 +00:00
spi-slave-system-control.c spi: slave: Add SPI slave handler controlling system state 2017-05-26 13:12:19 +01:00
spi-slave-time.c spi: slave: Add SPI slave handler reporting uptime at previous message 2017-05-26 13:12:04 +01:00
spi-sprd-adi.c spi: sprd: Change to use devm_hwspin_lock_request_specific() 2018-06-26 13:52:27 -07:00
spi-st-ssc4.c spi: st-ssc4: whitespace cleanup 2017-05-26 12:41:07 +01:00
spi-stm32.c spi: stm32: Fix error handling in stm32_spi_probe() 2018-04-17 11:46:23 +01:00
spi-sun4i.c spi: sun4i: disable clocks in the remove function 2017-12-07 11:59:15 +00:00
spi-sun6i.c spi: sun6i: disable/unprepare clocks on remove 2017-12-07 17:45:17 +00:00
spi-tegra20-sflash.c spi: tegra20-sflash: explicitly request exclusive reset control 2017-07-19 17:06:31 +01:00
spi-tegra20-slink.c spi: tegra20-slink: explicitly enable/disable clock 2018-09-03 12:23:41 +01:00
spi-tegra114.c spi: tegra114: reset controller on probe 2019-05-31 06:46:28 -07:00
spi-test.h spi: loopback-test: add elapsed time check 2017-03-17 21:54:08 +00:00
spi-ti-qspi.c spi: ti-qspi: Fix mmap read when more than one CS in use 2019-03-23 20:09:57 +01:00
spi-tle62x0.c
spi-topcliff-pch.c spi : spi-topcliff-pch: Fix to handle empty DMA buffers 2019-05-31 06:46:33 -07:00
spi-txx9.c
spi-uniphier.c spi: uniphier: remove unnecessary include headers 2018-08-02 11:08:06 +01:00
spi-xcomm.c
spi-xilinx.c spi: xilinx: Add support for xlnx,axi-quad-spi-1.00.a 2017-11-27 16:31:20 +00:00
spi-xlp.c spi: xlp: fix error return code in xlp_spi_probe() 2017-08-08 11:36:07 +01:00
spi-xtensa-xtfpga.c spi: add flags parameter to txrx_word function pointers 2018-08-01 14:50:24 +01:00
spi-zynqmp-gqspi.c spi: simplify getting .drvdata 2018-04-20 17:53:20 +01:00
spi.c spi: Add missing error handling for CS GPIOs 2020-03-18 22:52:57 +08:00
spidev.c spi: spidev: Fix OF tree warning logic 2019-11-24 08:20:56 +01:00