From: Rupesh Sugathan <Rupesh.Sugathan@gmail.com> There seems to be a synchronization issue with the n_tty.c driver when working in canonical mode. The n_tty rightly discards data received following a buffer overflow and hence the tty->read_cnt is not updated. However, the newline characters received following a buffer overflow seems to increment the tty-This loss of sync might be irrecoverable even when the data is later received at a slower rate. ---- I am not very sure if there is any deliberate rationale to process the newlines even when the buffer has overflown. Please comment and review the patch diff -pu a/drivers/char/n_tty.c b/drivers/char/n_tty.c --- a/drivers/char/n_tty.c 2008-03-10 17:11:54.000000000 -0700 +++ b/drivers/char/n_tty.c 2008-03-10 16:49:23.000000000 -0700 @@ -838,15 +838,17 @@ send_signal: put_tty_queue(c, tty); handle_newline: - spin_lock_irqsave(&tty->read_lock, flags); - set_bit(tty->read_head, tty->read_flags); - put_tty_queue_nolock(c, tty); - tty->canon_head = tty->read_head; - tty->canon_data++; - spin_unlock_irqrestore(&tty->read_lock, flags); - kill_fasync(&tty->fasync, SIGIO, POLL_IN); - if (waitqueue_active(&tty->read_wait)) - wake_up_interruptible(&tty->read_wait); + if (tty->read_cnt < N_TTY_BUF_SIZE) { + spin_lock_irqsave(&tty->read_lock, flags); + set_bit(tty->read_head, tty->read_flags); + put_tty_queue_nolock(c, tty); + tty->canon_head = tty->read_head; + tty->canon_data++; + spin_unlock_irqrestore(&tty->read_lock, flags); + kill_fasync(&tty->fasync, SIGIO, POLL_IN); + if (waitqueue_active(&tty->read_wait)) + wake_up_interruptible(&tty->read_wait); + } return; } } Signed-off-by: Rupesh Sugathan <Rupesh.Sugathan@gmail.com> --
| Eric Paris | [RFC 0/5] [TALPA] Intro to a linux interface for on access scanning |
| Bart Van Assche | Integration of SCST in the mainstream Linux kernel |
| Greg KH | [GIT PATCH] driver core patches against 2.6.24 |
| Chris Mason | Btrfs v0.16 released |
git: | |
| Michael Hendricks | removing content from git history |
| Jakub Narebski | Re: VCS comparison table |
| Ken Pratt | pack operation is thrashing my server |
| Aubrey Li | git proxy issue |
| Kevin Neff | Patching a SSH 'Weakness' |
| GVG GVG | ssh_exchange_identification: Connection closed by remote host |
| Theo de Raadt | Re: dmesg IBM x3650 OpenBSD 4.3 |
| F. Caulier | [Perl/locales] Warning about locales |
| KOSAKI Motohiro | [bug?] tg3: Failed to load firmware "tigon/tg3_tso.bin" |
| Jens Axboe | Re: [BUG] New Kernel Bugs |
| Rémi | [PATCH 0/6] [RFC] Phonet pipes protocol (v2) |
| Oliver Hartkopp | Re: [RFC] Patch to option HSO driver to the kernel |
| Treason Uncloaked | 2 hours ago | Linux kernel |
| Shared swap partition | 13 hours ago | Linux general |
| high memory | 2 days ago | Linux kernel |
| semaphore access speed | 2 days ago | Applications and Utilities |
| the kernel how to power off the machine | 2 days ago | Linux kernel |
| Easter Eggs in windows XP | 2 days ago | Windows |
| Root password | 2 days ago | Linux general |
| Where/when DNOTIFY is used? | 2 days ago | Linux kernel |
| How to convert Linux Kernel built-in module into a loadable module | 2 days ago | Linux kernel |
| Linux 2.6.24 and I/O schedulers | 2 days ago | Linux kernel |
