lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 10 Oct 2006 08:17:47 +0200 From: Adrian Bunk <bunk@...sta.de> To: Rogier Wolff <R.E.Wolff@...Wizard.nl> Cc: Alan Cox <alan@...rguk.ukuu.org.uk>, linux-kernel@...r.kernel.org Subject: [2.6.19 patch] drivers/char/specialix.c: fix the baud conversion On Mon, Oct 09, 2006 at 08:37:45AM +0200, Rogier Wolff wrote: > On Mon, Oct 09, 2006 at 12:18:19AM +0200, Adrian Bunk wrote: > > + if (baud == 38400) { > > if ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI) > > baud ++; > > if ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI) > > baud += 2; > > } > > > > Increasing the index for baud_table[] by 1 or 2 is quite different from > > increasing baud by 1 or 2. > > In that range, > baud <<= 1; > and > baud <<= 2; > > should work. Thanks for the hint. What about the patch below? > Roger. cu Adrian <-- snip --> This patch corrects the following bugs introduced by commit 67cc0161ecc9ebee6eba4af6cbfdba028090b1b9: - remove one remaining and now incorrect baud_table[] usage - "baud +=" must become "baud <<=" The former bug was spotted by the Coverity checker. Signed-off-by: Adrian Bunk <bunk@...sta.de> --- drivers/char/specialix.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) --- linux-2.6/drivers/char/specialix.c.old 2006-10-10 08:04:48.000000000 +0200 +++ linux-2.6/drivers/char/specialix.c 2006-10-10 08:06:25.000000000 +0200 @@ -183,11 +183,6 @@ static struct tty_driver *specialix_driver; -static unsigned long baud_table[] = { - 0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, - 9600, 19200, 38400, 57600, 115200, 0, -}; - static struct specialix_board sx_board[SX_NBOARD] = { { 0, SX_IOBASE1, 9, }, { 0, SX_IOBASE2, 11, }, @@ -1090,9 +1085,9 @@ if (baud == 38400) { if ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI) - baud ++; + baud <<= 1; if ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI) - baud += 2; + baud <<= 2; } if (!baud) { @@ -1150,11 +1145,9 @@ sx_out(bp, CD186x_RBPRL, tmp & 0xff); sx_out(bp, CD186x_TBPRL, tmp & 0xff); spin_unlock_irqrestore(&bp->lock, flags); - if (port->custom_divisor) { + if (port->custom_divisor) baud = (SX_OSCFREQ + port->custom_divisor/2) / port->custom_divisor; - baud = ( baud + 5 ) / 10; - } else - baud = (baud_table[baud] + 5) / 10; /* Estimated CPS */ + baud = (baud + 5) / 10; /* Two timer ticks seems enough to wakeup something like SLIP driver */ tmp = ((baud + HZ/2) / HZ) * 2 - CD186x_NFIFO; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists