1
0
Fork 0
alistair23-linux/drivers/tty/serial
Lukas Wunner 0806b49bba serial: pl011: Fix oops on -EPROBE_DEFER
commit 27afac93e3 upstream.

If probing of a pl011 gets deferred until after free_initmem(), an oops
ensues because pl011_console_match() is called which has been freed.

Fix by removing the __init attribute from the function and those it
calls.

Commit 10879ae5f1 ("serial: pl011: add console matching function")
introduced pl011_console_match() not just for early consoles but
regular preferred consoles, such as those added by acpi_parse_spcr().
Regular consoles may be registered after free_initmem() for various
reasons, one being deferred probing, another being dynamic enablement
of serial ports using a DeviceTree overlay.

Thus, pl011_console_match() must not be declared __init and the
functions it calls mustn't either.

Stack trace for posterity:

Unable to handle kernel paging request at virtual address 80c38b58
Internal error: Oops: 8000000d [#1] PREEMPT SMP ARM
PC is at pl011_console_match+0x0/0xfc
LR is at register_console+0x150/0x468
[<80187004>] (register_console)
[<805a8184>] (uart_add_one_port)
[<805b2b68>] (pl011_register_port)
[<805b3ce4>] (pl011_probe)
[<80569214>] (amba_probe)
[<805ca088>] (really_probe)
[<805ca2ec>] (driver_probe_device)
[<805ca5b0>] (__device_attach_driver)
[<805c8060>] (bus_for_each_drv)
[<805c9dfc>] (__device_attach)
[<805ca630>] (device_initial_probe)
[<805c90a8>] (bus_probe_device)
[<805c95a8>] (deferred_probe_work_func)

Fixes: 10879ae5f1 ("serial: pl011: add console matching function")
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Cc: stable@vger.kernel.org # v4.10+
Cc: Aleksey Makarov <amakarov@marvell.com>
Cc: Peter Hurley <peter@hurleysoftware.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Christopher Covington <cov@codeaurora.org>
Link: https://lore.kernel.org/r/f827ff09da55b8c57d316a1b008a137677b58921.1597315557.git.lukas@wunner.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-09-03 11:27:03 +02:00
..
8250 serial: 8250_mtk: Fix high-speed baud rates clamping 2020-07-29 10:18:43 +02: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 oops on -EPROBE_DEFER 2020-09-03 11:27:03 +02:00
amba-pl011.h
apbuart.c
apbuart.h
ar933x_uart.c serial: ar933x_uart: set UART_CS_{RX,TX}_READY_ORIDE 2020-03-12 13:00:10 +01:00
arc_uart.c
atmel_serial.c tty/serial: atmel: manage shutdown in case of RS485 or ISO7816 mode 2020-02-28 17:22:19 +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: free IDs allocated by IDA 2020-03-12 13:00:20 +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 tty: serial: imx: setup the correct sg entry for tx dma 2020-02-28 17:22:19 +01:00
ip22zilog.c
ip22zilog.h
kgdb_nmi.c
kgdboc.c kgdboc: Use a platform device to handle tty drivers showing up late 2020-06-22 09:31:06 +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:serial:mvebu-uart:fix a wrong return 2020-03-12 13:00:20 +01:00
mxs-auart.c serial: mxs-auart: add missed iounmap() in probe failure and remove 2020-07-22 09:33:11 +02:00
omap-serial.c
owl-uart.c tty: serial: owl: add "much needed" clk_prepare_enable() 2020-04-29 16:33:14 +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: Fix RX cancel command failure 2020-02-28 17:22:19 +01: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 serial: samsung: Removes the IRQ not found warning 2020-09-03 11:27:03 +02: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: fix CREAD handling for PIO 2020-07-29 10:18:42 +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: Make sure status register SCxSR is read in correct sequence 2020-04-29 16:33:24 +02:00
sh-sci.h
sifive.c tty: serial: add missing spin_lock_init for SiFive serial console 2020-05-27 17:46:46 +02:00
sirfsoc_uart.c
sirfsoc_uart.h
sprd_serial.c serial: sprd: Fix a dereference warning 2020-04-02 15:10:59 +02: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 tty: xilinx_uartps: Really fix id assignment 2020-07-29 10:18:41 +02:00
zs.c
zs.h