Commit d340d890 authored by Daniel Drake's avatar Daniel Drake Committed by Linus Torvalds

[PATCH] generic_serial: fix decoding of baud rate

Commit d720bc4b partially removed a
private implementation of baud speed decoding.  However it doesn't seem
to be complete: after the speed is decoded, it is still being used as an
index to a local speed table (array overrun, no doubt).

This was found by Graham Murray who noticed it caused a 2.6.19 regression
with the SX driver: https://bugs.gentoo.org/170554Signed-off-by: default avatarDaniel Drake <dsd@gentoo.org>
Acked-by: default avatarAlan Cox <alan@lxorguk.ukuu.org.uk>
Cc: Russell King <rmk@arm.linux.org.uk>
Cc: <stable@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 5e55e2f5
...@@ -710,12 +710,6 @@ void gs_close(struct tty_struct * tty, struct file * filp) ...@@ -710,12 +710,6 @@ void gs_close(struct tty_struct * tty, struct file * filp)
} }
static unsigned int gs_baudrates[] = {
0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600
};
void gs_set_termios (struct tty_struct * tty, void gs_set_termios (struct tty_struct * tty,
struct ktermios * old_termios) struct ktermios * old_termios)
{ {
...@@ -771,7 +765,6 @@ void gs_set_termios (struct tty_struct * tty, ...@@ -771,7 +765,6 @@ void gs_set_termios (struct tty_struct * tty,
baudrate = tty_get_baud_rate(tty); baudrate = tty_get_baud_rate(tty);
baudrate = gs_baudrates[baudrate];
if ((tiosp->c_cflag & CBAUD) == B38400) { if ((tiosp->c_cflag & CBAUD) == B38400) {
if ( (port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI) if ( (port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
baudrate = 57600; baudrate = 57600;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment