linux/drivers/tty/serial
Uwe Kleine-König 3b16600e1f serial: imx: fix a race condition in receive path
commit 101aa46bd2 upstream.

The main irq handler function starts by first masking disabled
interrupts in the status register values to ensure to only handle
enabled interrupts. This is important as when the RX path in the
hardware is disabled reading the RX fifo results in an external abort.

This checking must be done under the port lock, otherwise the following
can happen:

     CPU1                            | CPU2
                                     |
     irq triggers as there are chars |
     in the RX fifo                  |
				     | grab port lock
     imx_uart_int finds RRDY enabled |
     and calls imx_uart_rxint which  |
     has to wait for port lock       |
                                     | disable RX (e.g. because we're
                                     | using RS485 with !RX_DURING_TX)
                                     |
                                     | release port lock
     read from RX fifo with RX       |
     disabled => exception           |

So take the port lock only once in imx_uart_int() instead of in the
functions called from there.

Reported-by: Andre Renaud <arenaud@designa-electronics.com>
Cc: stable@vger.kernel.org
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Link: https://lore.kernel.org/r/20200121071702.20150-1-u.kleine-koenig@pengutronix.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-02-01 09:34:34 +00:00
..
8250 serial: 8250_bcm2835aux: Fix line mismatch on driver unbind 2020-02-01 09:34:34 +00:00
cpm_uart tty: cpm_uart: drop unused iflag macro 2019-05-24 10:09:16 +02:00
jsm tty: add SPDX identifiers to Kconfig and Makefiles 2019-04-04 18:48:43 +02:00
21285.c
Kconfig serial/sifive: select SERIAL_EARLYCON 2019-10-04 15:01:15 +02:00
Makefile TTY/Serial driver changes for 5.4-rc1 2019-09-18 10:50:47 -07:00
altera_jtaguart.c
altera_uart.c
amba-pl010.c
amba-pl011.c serial: pl011: Fix DMA ->flush_buffer() 2019-12-13 08:42:23 +01:00
amba-pl011.h
apbuart.c
apbuart.h
ar933x_uart.c serial: ar933x_uart: Fix build failure with disabled console 2019-03-19 15:37:44 +01:00
arc_uart.c
atmel_serial.c tty/serial: atmel: fix out of range clock divider handling 2019-12-31 16:46:11 +01:00
atmel_serial.h tty/serial: atmel: add ISO7816 support 2018-10-02 13:38:55 -07:00
bcm63xx_uart.c
clps711x.c serial: clps711x: Remove board support 2019-01-08 16:55:18 +01:00
digicolor-usart.c tty/serial: digicolor: Fix digicolor-usart already registered warning 2019-06-10 19:08:31 +02:00
dz.c
dz.h
earlycon-arm-semihost.c
earlycon-riscv-sbi.c tty/serial: use uart_console_write in the RISC-V SBL early console 2019-01-23 15:41:50 -08:00
earlycon.c
efm32-uart.c
fsl_linflexuart.c tty: serial: linflexuart: Fix magic SysRq handling 2019-10-04 15:02:28 +02:00
fsl_lpuart.c tty: serial: fsl_lpuart: use the sg count from dma_map_sg 2019-12-13 08:42:21 +01:00
icom.c tty: serial: Remove call to memset after pci_alloc_consistent 2019-09-04 12:43:44 +02:00
icom.h
ifx6x60.c serial: ifx6x60: add missed pm_runtime_disable 2019-12-13 08:42:25 +01:00
ifx6x60.h
imx.c serial: imx: fix a race condition in receive path 2020-02-01 09:34:34 +00:00
ip22zilog.c
ip22zilog.h
kgdb_nmi.c
kgdboc.c kgdboc: disable the console lock when in kgdb 2019-07-30 17:39:39 +02:00
lantiq.c serial: lantiq: Add support for Lightning Mountain SoC 2019-09-04 12:43:53 +02:00
lpc32xx_hs.c TTY/Serial driver changes for 5.4-rc1 2019-09-18 10:50:47 -07:00
max310x.c serial: max310x: turn off transmitter before activating AutoCTS or auto transmitter flow control 2019-09-05 09:57:44 +02:00
max3100.c
mcf.c
men_z135_uart.c drivers: Remove explicit invocations of mmiowb() 2019-04-08 12:01:02 +01:00
meson_uart.c tty: serial: meson: if no alias specified use an available id 2019-01-18 11:22:22 +01:00
milbeaut_usio.c serial: milbeaut_usio: Fix error handling in probe and remove 2019-04-29 16:20:24 +02:00
mpc52xx_uart.c
mps2-uart.c serial: mps2-uart: Add parentheses around conditional in mps2_uart_shutdown 2019-01-31 19:34:10 +01:00
msm_serial.c tty: serial: msm_serial: Fix lockup for sysrq and oops 2020-01-09 10:20:05 +01:00
mux.c
mvebu-uart.c tty: Remove dev_err() usage after platform_get_irq() 2019-09-04 12:43:49 +02:00
mxs-auart.c serial: mxs-auart: Don't check for mctrl_gpio_to_gpiod() returning error 2019-09-04 12:43:54 +02:00
omap-serial.c
owl-uart.c tty: serial: owl: Fix the link time qualifier of 'owl_uart_exit()' 2019-10-04 15:01:15 +02:00
pch_uart.c tty: serial: pch_uart: correct usage of dma_unmap_sg 2020-01-17 19:48:55 +01:00
pic32_uart.c serial: set suppress_bind_attrs flag only if builtin 2018-11-09 09:07:17 -08:00
pic32_uart.h
pmac_zilog.c tty: Use of_node_name_{eq,prefix} for node name comparisons 2018-12-17 16:12:17 +01:00
pmac_zilog.h
pnx8xxx_uart.c
pxa.c
qcom_geni_serial.c tty: serial: qcom_geni_serial: use devm_platform_ioremap_resource() to simplify code 2019-09-04 12:43:50 +02:00
rda-uart.c tty: serial: rda: Fix the link time qualifier of 'rda_uart_exit()' 2019-10-04 15:01:15 +02:00
rp2.c
sa1100.c serial: sa1100: add note about modem control signals 2019-06-04 12:56:33 +01:00
samsung.c tty: serial: samsung: Enable baud clock during initialisation 2019-02-19 13:42:08 +01:00
samsung.h
sb1250-duart.c
sc16is7xx.c Merge 5.1-rc6 into tty-next 2019-04-21 23:20:08 +02:00
sccnxp.c tty: Remove dev_err() usage after platform_get_irq() 2019-09-04 12:43:49 +02:00
serial-tegra.c serial: tegra: Add PIO mode support 2019-09-05 10:00:05 +02:00
serial_core.c tty: link tty and port before configuring it as console 2020-01-14 20:08:33 +01:00
serial_mctrl_gpio.c serial: mctrl_gpio: Check for NULL pointer 2019-10-07 13:21:54 +02:00
serial_mctrl_gpio.h serial: mctrl_gpio: Avoid probe failures in case of missing gpiolib 2019-09-04 12:43:50 +02:00
serial_txx9.c drivers: Remove explicit invocations of mmiowb() 2019-04-08 12:01:02 +01:00
sh-sci.c serial: sh-sci: Use platform_get_irq_optional() for optional interrupts 2019-10-04 15:02:28 +02:00
sh-sci.h
sifive.c tty: Remove dev_err() usage after platform_get_irq() 2019-09-04 12:43:49 +02:00
sirfsoc_uart.c
sirfsoc_uart.h
sprd_serial.c serial: sprd: Add clearing break interrupt operation 2019-12-31 16:46:11 +01:00
st-asc.c
stm32-usart.c serial: stm32: fix clearing interrupt error flags 2019-12-13 08:42:24 +01:00
stm32-usart.h serial: stm32: add support of RX FIFO threshold 2019-06-21 11:17:36 +02:00
suncore.c tty: Use of_node_name_{eq,prefix} for node name comparisons 2018-12-17 16:12:17 +01:00
sunhv.c sunhv: Fix device naming inconsistency between sunhv_console and sunhv_reg 2019-06-13 14:04:37 -07:00
sunsab.c
sunsab.h
sunsu.c TTY/Serial driver patches for 4.21-rc1 2018-12-28 20:33:54 -08:00
sunzilog.c
sunzilog.h
tegra-tcu.c serial: Add Tegra Combined UART driver 2019-01-30 09:31:31 +01:00
timbuart.c
timbuart.h
uartlite.c serial: uartlite: fix exit path null pointer 2019-10-04 15:02:46 +02:00
ucc_uart.c docs: serial: move it to the driver-api 2019-07-15 11:03:03 -03:00
vr41xx_siu.c
vt8500_serial.c
xilinx_uartps.c serial: uartps: Fix uartps_major handling 2019-10-04 15:14:20 +02:00
zs.c
zs.h