tty: fix termios input-speed encoding when using BOTHER
authorJohan Hovold <johan@kernel.org>
Sun, 15 Jul 2018 13:39:34 +0000 (15:39 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 16 Jul 2018 09:58:15 +0000 (11:58 +0200)
commit1cee38f0363a88db374e50b232ca17b9a4c12fa0
tree28db78aff833dd8d36ee6f1725d1ffb8029e611c
parentfada18c48d774b9e837928ecdce6a5d5fdd11ee7
tty: fix termios input-speed encoding when using BOTHER

When the termios CIBAUD bits are left unset (i.e. B0), we use the same
output and input speed and should leave CIBAUD unchanged.

When the user requests a rate using BOTHER and c_ospeed which the driver
cannot set exactly, the driver can report back the actual baud rate
using tty_termios_encode_baud_rate(). If this rate is close enough to a
standard rate however, we could end up setting CIBAUD to a Bfoo value
despite the user having left it unset.

This in turn could lead to an unexpected input rate being set on
subsequent termios updates.

Fix this by using a zero tolerance value also for the input rate when
CIBAUD is clear so that the matching logic works as expected.

Fixes: 78137e3b34e1 ("[PATCH] tty: improve encode_baud_rate logic")
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/tty_baudrate.c