All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Hurley <peter@hurleysoftware.com>
To: Stas Sergeev <stsp@list.ru>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Margarita Manterola <margamanterola@gmail.com>,
	Maximiliano Curia <maxy@gnuservers.com.ar>,
	Stas Sergeev <stsp@users.sourceforge.net>,
	Pavel Machek <pavel@ucw.cz>,
	Arkadiusz Miskiewicz <a.miskiewicz@gmail.com>,
	One Thousand Gnomes <gnomes@lxorguk.ukuu.org.uk>,
	linux-kernel@vger.kernel.org, Caylan Van Larson <i@caylan.net>
Subject: Re: [PATCH v3] n_tty: Fix buffer overruns with larger-than-4k pastes
Date: Mon, 09 Dec 2013 12:10:02 -0500	[thread overview]
Message-ID: <52A5F96A.6030900@hurleysoftware.com> (raw)
In-Reply-To: <52A5EF3F.2070805@list.ru>

On 12/09/2013 11:26 AM, Stas Sergeev wrote:
> 09.12.2013 18:50, Peter Hurley пишет:
>>   	if (found && read_buf(ldata, eol) == __DISABLED_CHAR) {
>>   		n--;
>>   		eof_push = !n && ldata->read_tail != ldata->line_start;
>> +		ldata->push = 0;
>>   	}
> Will this work if the last (and only) char written in raw
> mode appear to be \0 (__DISABLED_CHAR)?

That would have triggered an EOF in older kernels so not a
regression.

>
>> -		ldata->line_start = ldata->read_tail;
>> +		if (!ldata->push)
>> +			ldata->line_start = ldata->read_tail;
>> +		else
>> +			ldata->push = 0;
> Will this work if more that one "fake" EOF is accumulated
> in bitmap because of multiple icanon switches?

Not possible. The read_flags and push indicator are reset
with icanon -> !icanon switches.

> Also, I am a bit surprised with the presence of the code
> like this:
> ---
>
> |	if  (n>  4096)
> 		n+=  4096;
> |
>
> ---
> Am I the only one thinking it is unclear what it does?
> Doesn't it deserve the comment at least?
>
> Or this:
> ---
>
> |eof_push= !n&&  ldata->read_tail!=  ldata->line_start;|
>
> ---
> If eof_push means that the EOL mark was found not at the
> line start, then it is completely confusing why !n is here
> (one have to read a lot of context to find out why).|||
> When I created the patch, the code was much more easy
> to follow than now.

The previous kernels did byte-by-byte copy with lock/unlock
for every byte, into the input buffer and back out of the input
buffer. Simple, but inefficient.

This version has roughly 4n-2 fewer bus locks. The necessary
unsigned arithmetic and additional condition checks make the
code somewhat more complex.

But please feel free to submit patches that fix or clarify
anything you find.

Regards,
Peter Hurley

  parent reply	other threads:[~2013-12-09 17:10 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-25 11:29 Large pastes into readline enabled programs causes breakage from v2.6.31 onwards Margarita Manterola
2013-07-25 23:09 ` Peter Hurley
2013-07-30 12:41   ` Maximiliano Curia
     [not found]   ` <20130730124117.41DC55E4006@freak.gnuservers.com.ar>
2013-07-30 16:08     ` Peter Hurley
2013-08-08 17:58       ` Maximiliano Curia
2013-08-17 15:28         ` Pavel Machek
2013-08-17 22:57           ` Margarita Manterola
2013-08-18  8:08             ` Geert Uytterhoeven
2013-09-03  5:17             ` Arkadiusz Miskiewicz
2013-10-24 16:00               ` Arkadiusz Miskiewicz
2013-10-29 13:50                 ` Maximiliano Curia
2013-10-30 11:21                   ` Peter Hurley
2013-11-17 18:29                     ` Pavel Machek
2013-11-17 21:38                       ` Margarita Manterola
2013-11-21  5:04                       ` Peter Hurley
2013-11-22 12:57                         ` Peter Hurley
2013-11-24  0:29                           ` One Thousand Gnomes
2013-11-24 11:55                             ` Peter Hurley
2013-11-26  1:16                               ` Peter Hurley
2013-12-03  0:18                                 ` Peter Hurley
2013-12-03  9:01                                   ` Stas Sergeev
2013-12-03 17:00                                     ` Peter Hurley
2013-12-03 19:18                                       ` Stas Sergeev
2013-12-03 23:53                                         ` Peter Hurley
2013-12-04 18:57                                           ` Stas Sergeev
2013-12-09 14:50                                             ` [PATCH v3] n_tty: Fix buffer overruns with larger-than-4k pastes Peter Hurley
     [not found]                                               ` <52A5EF3F.2070805@list.ru>
2013-12-09 17:10                                                 ` Peter Hurley [this message]
2013-12-10  6:15                                                   ` Stas Sergeev
2013-12-10 22:05                                                     ` Peter Hurley
2013-12-10 22:12                                                       ` [PATCH v4] " Peter Hurley
2013-12-17  0:57                                                         ` Greg Kroah-Hartman
2013-12-17  1:24                                                           ` Peter Hurley
2013-12-18 11:48                                                             ` Henrique de Moraes Holschuh
2013-12-18 13:41                                                               ` Peter Hurley
2014-01-28 12:03                                             ` Large pastes into readline enabled programs causes breakage from v2.6.31 onwards Pavel Machek
2014-01-28 12:17                                               ` Stas Sergeev
2014-01-28 13:31                                                 ` Peter Hurley
2013-08-19 12:25         ` Peter Hurley
2013-09-03 21:12           ` Maximiliano Curia
2013-09-12  1:36             ` Peter Hurley

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=52A5F96A.6030900@hurleysoftware.com \
    --to=peter@hurleysoftware.com \
    --cc=a.miskiewicz@gmail.com \
    --cc=gnomes@lxorguk.ukuu.org.uk \
    --cc=gregkh@linuxfoundation.org \
    --cc=i@caylan.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=margamanterola@gmail.com \
    --cc=maxy@gnuservers.com.ar \
    --cc=pavel@ucw.cz \
    --cc=stsp@list.ru \
    --cc=stsp@users.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.