linux/drivers/tty
Johan Hovold 647cd4494c serial: qcom-geni: fix receiver enable
commit fa103d2599 upstream.

The receiver is supposed to be enabled in the startup() callback and not
in set_termios() which is called also during console setup.

This specifically avoids accepting input before the port has been opened
(and interrupts enabled), something which can also break the GENI
firmware (cancel fails and after abort, the "stale" counter handling
appears to be broken so that later input is not processed until twelve
chars have been received).

There also does not appear to be any need to keep the receiver disabled
while updating the port settings.

Since commit 6f3c3cafb1 ("serial: qcom-geni: disable interrupts during
console writes") the calls to manipulate the secondary interrupts, which
were done without holding the port lock, can also lead to the receiver
being left disabled when set_termios() races with the console code (e.g.
when init opens the tty during boot). This can manifest itself as a
serial getty not accepting input.

The calls to stop and start rx in set_termios() can similarly race with
DMA completion and, for example, cause the DMA buffer to be unmapped
twice or the mapping to be leaked.

Fix this by only enabling the receiver during startup and while holding
the port lock to avoid racing with the console code.

Fixes: 6f3c3cafb1 ("serial: qcom-geni: disable interrupts during console writes")
Fixes: 2aaa43c707 ("tty: serial: qcom-geni-serial: add support for serial engine DMA")
Fixes: c4f528795d ("tty: serial: msm_geni_serial: Add serial driver support for GENI based QUP")
Cc: stable@vger.kernel.org      # 6.3
Cc: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Link: https://lore.kernel.org/r/20241009145110.16847-6-johan+linaro@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2024-10-22 15:46:35 +02:00
..
hvc hvc/xen: fix event channel handling for secondary consoles 2023-11-28 17:19:57 +00:00
ipwireless tty: make tty_operations::write()'s count size_t 2023-08-11 21:12:46 +02:00
serdev tty: make counts in tty_port_client_operations hooks size_t 2023-08-11 21:12:44 +02:00
serial serial: qcom-geni: fix receiver enable 2024-10-22 15:46:35 +02:00
vt vt: prevent kernel-infoleak in con_font_get() 2024-10-22 15:46:31 +02:00
amiserial.c tty: make tty_operations::write()'s count size_t 2023-08-11 21:12:46 +02:00
ehv_bytechan.c tty: make tty_operations::write()'s count size_t 2023-08-11 21:12:46 +02:00
goldfish.c tty: make tty_operations::write()'s count size_t 2023-08-11 21:12:46 +02:00
Kconfig Merge commit b320441c04 ("Merge tag 'tty-6.5-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty") into tty-next 2023-08-20 14:29:37 +02:00
Makefile tty: add rpmsg driver 2021-10-21 12:35:35 +02:00
mips_ejtag_fdc.c tty: make tty_operations::write()'s count size_t 2023-08-11 21:12:46 +02:00
moxa.c tty: make tty_operations::write()'s count size_t 2023-08-11 21:12:46 +02:00
mxser.c tty: make tty_operations::write()'s count size_t 2023-08-11 21:12:46 +02:00
n_gsm.c tty: n_gsm: Fix use-after-free in gsm_cleanup_mux 2024-10-22 15:46:34 +02:00
n_hdlc.c tty: ldops: unify to u8 2023-08-11 21:12:47 +02:00
n_null.c tty: ldops: unify to u8 2023-08-11 21:12:47 +02:00
n_tty.c tty: n_tty: Fix buffer offsets when lookahead is used 2024-06-21 14:38:24 +02:00
nozomi.c tty: make tty_operations::write()'s count size_t 2023-08-11 21:12:46 +02:00
pty.c tty: make tty_operations::write()'s count size_t 2023-08-11 21:12:46 +02:00
rpmsg_tty.c tty: make tty_operations::write()'s count size_t 2023-08-11 21:12:46 +02:00
synclink_gt.c tty: make tty_operations::write()'s count size_t 2023-08-11 21:12:46 +02:00
sysrq.c tty/sysrq: replace smp_processor_id() with get_cpu() 2023-11-28 17:19:57 +00:00
tty.h tty: audit: unify to u8 2023-08-11 21:12:46 +02:00
tty_audit.c tty: audit: unify to u8 2023-08-11 21:12:46 +02:00
tty_baudrate.c tty: Fix comment style in tty_termios_input_baud_rate() 2022-08-30 14:22:34 +02:00
tty_buffer.c tty: tty_buffer: invert conditions in __tty_buffer_request_room() 2023-08-22 14:58:16 +02:00
tty_io.c usb: cdc-acm: return correct error code on unsupported break 2024-01-25 15:35:53 -08:00
tty_ioctl.c tty: allow TIOCSLCKTRMIOS with CAP_CHECKPOINT_RESTORE 2024-02-05 20:14:32 +00:00
tty_jobctrl.c tty: tty_jobctrl: fix pid memleak in disassociate_ctty() 2023-11-20 11:59:25 +01:00
tty_ldisc.c tty: add the option to have a tty reject a new ldisc 2024-06-27 13:49:05 +02:00
tty_ldsem.c tty/ldsem: Fix syntax errors in comments 2021-12-21 09:15:49 +01:00
tty_mutex.c tty: remove TTY_MAGIC 2022-09-22 16:12:34 +02:00
tty_port.c tty: use u8 for flags 2023-08-11 21:12:45 +02:00
ttynull.c tty: make tty_operations::write()'s count size_t 2023-08-11 21:12:46 +02:00
vcc.c tty: vcc: Add check for kstrdup() in vcc_probe() 2023-11-28 17:19:45 +00:00