All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alejandro Colomar <alx+linux-hardening@kernel.org>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Kees Cook <kees@kernel.org>,
	 Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Bill Wendling <morbo@google.com>, Petr Mladek <pmladek@suse.com>,
	 Randy Dunlap <rdunlap@infradead.org>,
	Shuvam Pandey <shuvampandey1@gmail.com>,
	 linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org
Subject: Re: [PATCH] seq_buf: Mark a seq_buf overflowed when terminating it loses a byte
Date: Fri, 30 Oct 2026 21:07:06 +0100	[thread overview]
Message-ID: <auT3Lt4y9s-8g_FK@devuan> (raw)
In-Reply-To: <20261029101838.7c34a2f2@gandalf.local.home>

[-- Attachment #1: Type: text/plain, Size: 1762 bytes --]

Hi Steve,

> Date: 2026-10-29 10:18:38-0400
> From: Steven Rostedt <rostedt@goodmis.org>
>
[...]
> > > > > @@ -137,10 +137,16 @@ static inline size_t __seq_buf_terminate(struct seq_buf *s)
> > > > >  {
> > > > >  	size_t end;
> > > > >    
> > > 
> > > Hmm, I was thinking that this should first check if the string is already
> > > terminated with a nul byte. Why add another one if it is?
> > >   
> > > > > -	if (seq_buf_buffer_left(s))
> > > > > +	if (seq_buf_buffer_left(s)) {  
> > > 
> > > 		if (s->len && !s->buffer[s->len - 1])
> > > 			return;
> > >   
> > > > >  		end = s->len;
> > > > > -	else
> > > > > +	} else {
> > > > >  		end = s->size - 1;  
> > > 
> > > 		if (!s->buffer[end])
> > > 			return;
> > > 
> > > Otherwise this overflows the buffer even when it is already terminated.  
> > 
> > If it is already terminated, s->buffer+s->len points to the NUL, right?
> 
> Not necessarially, a seq_buf_putmem() could have added the NUL terminator.
> Then calling seq_buf_str() or seq_buf_terminate() should not overflow it.

Ugh!  This is another can of worms.  Do we need to accept users calling
_putmem() including a NUL terminator?  Perhaps we could ask users to not
include that NUL with _putmem() (and if they do so, then the buffer
might have two NULs, which isn't terrible).  Or perhaps _putmem() could
do .len-- if the last byte is a NUL.

Anyway, I'm disliking this API too much, and will probably work on my
own stpecpy()/seprintf() pointer-based pair of APIs to replace
strscpy(9)/snprintf(3), which are much simpler to use correctly, and
require much less churn than moving from strscpy(9)/snprintf(3) to
seq_buf.


Have a lovely night!
Alex

-- 
<https://www.alejandro-colomar.es>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2026-10-30 20:07 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-29  5:32 [PATCH] seq_buf: Mark a seq_buf overflowed when terminating it loses a byte Kees Cook
2026-10-29 11:47 ` Alejandro Colomar
2026-10-29 13:18   ` Steven Rostedt
2026-10-29 13:52     ` Alejandro Colomar
2026-10-29 14:18       ` Steven Rostedt
2026-10-30 20:07         ` Alejandro Colomar [this message]
2026-10-30 19:06     ` Kees Cook
2026-10-29 14:15   ` Andy Shevchenko

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=auT3Lt4y9s-8g_FK@devuan \
    --to=alx+linux-hardening@kernel.org \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=kees@kernel.org \
    --cc=linux-hardening@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=morbo@google.com \
    --cc=pmladek@suse.com \
    --cc=rdunlap@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=shuvampandey1@gmail.com \
    /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.