linux/drivers/tty
George Kennedy e3ad503876 serial: core: check uartclk for zero to avoid divide by zero
commit 6eabce6608 upstream.

Calling ioctl TIOCSSERIAL with an invalid baud_base can
result in uartclk being zero, which will result in a
divide by zero error in uart_get_divisor(). The check for
uartclk being zero in uart_set_info() needs to be done
before other settings are made as subsequent calls to
ioctl TIOCSSERIAL for the same port would be impacted if
the uartclk check was done where uartclk gets set.

Oops: divide error: 0000  PREEMPT SMP KASAN PTI
RIP: 0010:uart_get_divisor (drivers/tty/serial/serial_core.c:580)
Call Trace:
 <TASK>
serial8250_get_divisor (drivers/tty/serial/8250/8250_port.c:2576
    drivers/tty/serial/8250/8250_port.c:2589)
serial8250_do_set_termios (drivers/tty/serial/8250/8250_port.c:502
    drivers/tty/serial/8250/8250_port.c:2741)
serial8250_set_termios (drivers/tty/serial/8250/8250_port.c:2862)
uart_change_line_settings (./include/linux/spinlock.h:376
    ./include/linux/serial_core.h:608 drivers/tty/serial/serial_core.c:222)
uart_port_startup (drivers/tty/serial/serial_core.c:342)
uart_startup (drivers/tty/serial/serial_core.c:368)
uart_set_info (drivers/tty/serial/serial_core.c:1034)
uart_set_info_user (drivers/tty/serial/serial_core.c:1059)
tty_set_serial (drivers/tty/tty_io.c:2637)
tty_ioctl (drivers/tty/tty_io.c:2647 drivers/tty/tty_io.c:2791)
__x64_sys_ioctl (fs/ioctl.c:52 fs/ioctl.c:907
    fs/ioctl.c:893 fs/ioctl.c:893)
do_syscall_64 (arch/x86/entry/common.c:52
    (discriminator 1) arch/x86/entry/common.c:83 (discriminator 1))
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)

Reported-by: syzkaller <syzkaller@googlegroups.com>
Cc: stable@vger.kernel.org
Signed-off-by: George Kennedy <george.kennedy@oracle.com>
Rule: add
Link: https://lore.kernel.org/stable/1721148848-9784-1-git-send-email-george.kennedy%40oracle.com
Link: https://lore.kernel.org/r/1721219078-3209-1-git-send-email-george.kennedy@oracle.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-08-14 13:58:57 +02:00
..
hvc hvc/xen: fix event channel handling for secondary consoles 2023-11-28 17:19:57 +00:00
ipwireless
serdev
serial serial: core: check uartclk for zero to avoid divide by zero 2024-08-14 13:58:57 +02:00
vt tty: add the option to have a tty reject a new ldisc 2024-06-27 13:49:05 +02:00
amiserial.c
ehv_bytechan.c
goldfish.c
Kconfig
Makefile
mips_ejtag_fdc.c
moxa.c
mxser.c
n_gsm.c tty: n_gsm: fix missing receive state reset after mode switch 2024-06-12 11:11:18 +02:00
n_hdlc.c
n_null.c
n_tty.c tty: n_tty: Fix buffer offsets when lookahead is used 2024-06-21 14:38:24 +02:00
nozomi.c
pty.c
rpmsg_tty.c
synclink_gt.c
sysrq.c tty/sysrq: replace smp_processor_id() with get_cpu() 2023-11-28 17:19:57 +00:00
tty_audit.c
tty_baudrate.c
tty_buffer.c
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_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_mutex.c
tty_port.c
tty.h
ttynull.c
vcc.c