linux/drivers/tty/serial
Peter Hurley 547039ec50 serial: Fix divide-by-zero fault in uart_get_divisor()
uart_get_baud_rate() will return baud == 0 if the max rate is set
to the "magic" 38400 rate and the SPD_* flags are also specified.
On the first iteration, if the current baud rate is higher than the
max, the baud rate is clamped at the max (which in the degenerate
case is 38400). On the second iteration, the now-"magic" 38400 baud
rate selects the possibly higher alternate baud rate indicated by
the SPD_* flag. Since only two loop iterations are performed, the
loop is exited, a kernel WARNING is generated and a baud rate of
0 is returned.

Reproducible with:
 setserial /dev/ttyS0 spd_hi base_baud 38400

Only perform the "magic" 38400 -> SPD_* baud transform on the first
loop iteration, which prevents the degenerate case from recognizing
the clamped baud rate as the "magic" 38400 value.

Reported-by: Robert Święcki <robert@swiecki.net>
Cc: <stable@vger.kernel.org> # all
Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2014-11-05 16:14:09 -08:00
..
8250 Merge branch 'for-linus' of git://git.infradead.org/users/vkoul/slave-dma 2014-10-18 18:11:04 -07:00
cpm_uart serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
jsm jsm: add support for additional Neo cards 2014-09-08 13:15:49 -07:00
21285.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
68328serial.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu 2013-05-10 07:22:35 -07:00
altera_jtaguart.c serial: altera: Make of_device_id arrays const 2014-09-08 15:28:28 -07:00
altera_uart.c serial: altera: Make of_device_id arrays const 2014-09-08 15:28:28 -07:00
amba-pl010.c serial: amba-pl010: Use devres APIs 2014-07-09 17:13:54 -07:00
amba-pl011.c serial: amba-pl011: Use container_of() to get uart_amba_port 2014-09-08 16:26:07 -07:00
apbuart.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
apbuart.h
ar933x_uart.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
arc_uart.c Merge 3.16-rc5 into tty-next. 2014-07-13 15:52:12 -07:00
atmel_serial.c Merge branch 'for-linus' of git://git.infradead.org/users/vkoul/slave-dma 2014-10-18 18:11:04 -07:00
bcm63xx_uart.c serial: Fix IGNBRK handling 2014-06-19 13:04:52 -07:00
bfin_sport_uart.c serial: blackfin: Fix missing gpio.h 2014-09-08 16:22:42 -07:00
bfin_sport_uart.h
bfin_uart.c serial: bfin-uart: Fix auto CTS 2014-09-23 21:19:35 -07:00
clps711x.c serial: clps711x: Use mctrl_gpio helpers for handling modem signals 2014-09-08 15:35:03 -07:00
crisv10.c tty: Remove tty_hung_up_p() tests from tty drivers' open() 2014-07-10 16:06:49 -07:00
crisv10.h crisv10: use counts from tty_port 2013-03-18 16:26:33 -07:00
dz.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
dz.h
earlycon-arm-semihost.c tty/serial: add arm/arm64 semihosting earlycon 2014-04-24 16:32:27 -07:00
earlycon.c tty/serial: fix 8250 early console option passing to regular console 2014-06-19 13:07:26 -07:00
efm32-uart.c serial: efm32: correct namespacing of location property 2014-07-11 17:49:46 -07:00
fsl_lpuart.c tty: serial: fsl_lpuart: add 32-bit register interface support 2014-07-17 18:15:38 -07:00
icom.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
icom.h
ifx6x60.c serial: ifx6x60: Remove casting the return value which is a void pointer 2013-09-26 14:29:58 -07:00
ifx6x60.h
imx.c serial: imx: change the wait even to interruptiable 2014-09-28 21:26:38 -04:00
ioc3_serial.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
ioc4_serial.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
ip22zilog.c serial: Test for no tx data on tx restart 2014-07-10 16:31:34 -07:00
ip22zilog.h
Kconfig tty: serial: msm: Add earlycon support 2014-09-28 21:49:48 -04:00
kgdb_nmi.c serial: kgdb_nmi: No CON_ENABLED by default 2014-09-08 16:26:07 -07:00
kgdboc.c treewide: Convert retrun typos to return 2013-09-04 12:26:36 +02:00
lantiq.c serial: Use UPF_* constants with struct uart_port flags 2014-07-10 16:06:49 -07:00
lpc32xx_hs.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
m32r_sio_reg.h
m32r_sio.c serial: Test for no tx data on tx restart 2014-07-10 16:31:34 -07:00
m32r_sio.h
Makefile ARM: meson: serial: add MesonX SoC on-chip uart driver 2014-09-08 16:12:40 -07:00
max310x.c driver:gpio remove all usage of gpio_remove retval in driver 2014-09-18 11:03:10 -07:00
max3100.c serial: use dev_get_platdata() 2013-07-31 17:56:15 -07:00
mcf.c serial: Use UPF_* constants with struct uart_port flags 2014-07-10 16:06:49 -07:00
men_z135_uart.c tty: serial: men_z135_uart: Wakeup UART after transmitting 2014-07-09 17:35:42 -07:00
meson_uart.c ARM: meson: serial: add MesonX SoC on-chip uart driver 2014-09-08 16:12:40 -07:00
mfd.c serial: Fix IGNBRK handling 2014-06-19 13:04:52 -07:00
mpc52xx_uart.c serial: mpc52xx: Use default serial core x_char handler 2014-09-08 16:22:42 -07:00
mpsc.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
mrst_max3110.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
mrst_max3110.h
msm_serial_hs.c serial: use dev_get_platdata() 2013-07-31 17:56:15 -07:00
msm_serial.c tty: serial: msm: Add earlycon support 2014-09-28 21:49:48 -04:00
msm_serial.h tty: serial: msm: Support big-endian CPUs 2014-07-10 16:10:42 -07:00
msm_smd_tty.c TTY: msm_smd_tty, clean up activate/shutdown 2013-03-18 16:19:44 -07:00
mux.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
mxs-auart.c serial: core: Privatize modem status enable flags 2014-09-23 21:19:35 -07:00
netx-serial.c serial: Fix IGNBRK handling 2014-06-19 13:04:52 -07:00
nwpserial.c serial: Fix build failure caused by missing header file 2014-09-08 16:17:45 -07:00
of_serial.c serial: of-serial: add PM suspend/resume support 2014-09-28 21:49:13 -04:00
omap-serial.c tty: omap-serial: pull out calculation from baud_is_mode16 2014-09-28 21:24:06 -04:00
pch_uart.c pch_uart: don't hardcode PCI slot to get DMA device 2014-08-01 16:04:21 -07:00
pmac_zilog.c The branch contains the following device tree changes the v3.17 merge 2014-08-14 09:53:39 -06:00
pmac_zilog.h
pnx8xxx_uart.c serial: Fix IGNBRK handling 2014-06-19 13:04:52 -07:00
pxa.c serial: pxa: fix build with !SERIAL_PXA_CONSOLE 2014-07-10 15:48:41 -07:00
rp2.c tty: remove DEFINE_PCI_DEVICE_TABLE macro 2013-12-08 17:09:07 -08:00
sa1100.c serial: sa1100: delete .set_wake callback 2013-10-16 13:16:18 -07:00
samsung.c ARM: SoC platform changes for 3.17 2014-08-08 11:14:29 -07:00
samsung.h serial: samsung: Neaten dbg uses 2014-05-28 12:27:22 -07:00
sb1250-duart.c serial: Fix IGNBRK handling 2014-06-19 13:04:52 -07:00
sc16is7xx.c tty: sc16is7xx: remove retval from gpiochip_remove() 2014-09-23 17:51:36 +02:00
sccnxp.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
serial_core.c serial: Fix divide-by-zero fault in uart_get_divisor() 2014-11-05 16:14:09 -08:00
serial_ks8695.c serial: Fix IGNBRK handling 2014-06-19 13:04:52 -07:00
serial_mctrl_gpio.c tty: serial_mctrl_gpio: Fix COMPILE_TEST build for architectures with custom termios.h 2014-09-20 06:56:55 -07:00
serial_mctrl_gpio.h tty/serial: Add GPIOLIB helpers for controlling modem lines 2014-05-28 12:49:14 -07:00
serial_txx9.c serial: txx9: remove duplicate TXX9_SIFCR_TDIL_MASK define 2014-07-10 16:10:42 -07:00
serial-tegra.c serial: tegra: ack the rx dma desc after transfer terminated 2014-07-10 15:53:20 -07:00
sh-sci.c serial: sh-sci: use dmaengine_terminate_all() API 2014-10-15 21:31:00 +05:30
sh-sci.h serial: sh-sci: Move overrun_bit and error_mask fields out of pdata 2013-12-24 11:17:48 +09:00
sirfsoc_uart.c serial: sirf: transfer more bytes once to decrease interrupts 2014-07-09 17:37:00 -07:00
sirfsoc_uart.h serial: sirf: transfer more bytes once to decrease interrupts 2014-07-09 17:37:00 -07:00
sn_console.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
st-asc.c serial: asc: Conditionally use readl_relaxed (COMPILE_TEST) 2014-09-28 21:49:48 -04:00
suncore.c
sunhv.c serial: Fix send_xchar() handlers 2014-09-08 16:22:42 -07:00
sunsab.c serial: sunsab: Don't enable tx if tx stopped 2014-09-08 16:22:42 -07:00
sunsab.h
sunsu.c serial: Fix IGNBRK handling 2014-06-19 13:04:52 -07:00
sunzilog.c serial: Test for no tx data on tx restart 2014-07-10 16:31:34 -07:00
sunzilog.h
tilegx.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
timbuart.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
timbuart.h
uartlite.c tty: serial: uartlite: Remove .owner field for driver 2014-09-08 16:09:13 -07:00
ucc_uart.c serial: treewide: Remove empty implementations of enable_ms() 2014-07-09 17:29:38 -07:00
vr41xx_siu.c serial: vr41xx_siu: delete double assignment 2014-09-08 16:17:45 -07:00
vt8500_serial.c tty: vt8500_serial: explicitly calculate base baud rate 2014-09-08 16:29:36 -07:00
xilinx_uartps.c serial: cadence: Add generic earlycon support 2014-09-28 21:32:37 -04:00
zs.c serial: Fix IGNBRK handling 2014-06-19 13:04:52 -07:00
zs.h