All of lore.kernel.org
 help / color / mirror / Atom feed
From: Petr Mladek <pmladek@suse.com>
To: John Ogness <john.ogness@linutronix.de>
Cc: Sergey Senozhatsky <senozhatsky@chromium.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH printk v3 6/6] printk: introduce console_prepend_dropped() for dropped messages
Date: Tue, 3 Jan 2023 14:29:30 +0100	[thread overview]
Message-ID: <Y7QtusGlIX3AU+TN@alley> (raw)
In-Reply-To: <87y1qjdimw.fsf@jogness.linutronix.de>

On Tue 2023-01-03 11:26:23, John Ogness wrote:
> On 2023-01-02, Petr Mladek <pmladek@suse.com> wrote:
> >> +static void console_prepend_dropped(struct console_message *cmsg, unsigned long dropped)
> >> +{
> >> +	struct console_buffers *cbufs = cmsg->cbufs;
> >> +	const size_t scratchbuf_sz = sizeof(cbufs->scratchbuf);
> >> +	const size_t outbuf_sz = sizeof(cbufs->outbuf);
> >> +	char *scratchbuf = &cbufs->scratchbuf[0];
> >> +	char *outbuf = &cbufs->outbuf[0];
> >> +	size_t len;
> >> +
> >> +	len = snprintf(scratchbuf, scratchbuf_sz,
> >> +		       "** %lu printk messages dropped **\n", dropped);
> >> +
> >> +	/*
> >> +	 * Make sure outbuf is sufficiently large before prepending. Space
> >> +	 * for a terminator is also counted in case truncation occurs.
> >> +	 */
> >> +	if (WARN_ON_ONCE(len + 1 >= outbuf_sz))
> >> +		return;
> >
> > Strictly speaking, this should be:
> >
> > 	if (WARN_ON_ONCE(len >= outbuf_sz))
> > 		return;
> >
> > The trailing '\0' will fit into the buffer when len < outbuf_sz.
> 
> You are correct.
> 
> My concern was that if "@len = @outbuf_sz - 1", the entire message will
> be truncated and you will only see the dropped messages text. I wanted
> at least 1 character from the message to survive. ;-)

I see.

> How about the commments:
> 
> 	/*
> 	 * Make sure outbuf is sufficiently large before prepending. Space
> 	 * for a terminator and at least 1 byte of the message is also
> 	 * checked in case truncation is needed.
> 	 */

It is better than the original.

Well, what about making sure that something more useful is always
printed. For example:

	/*
	 * Make sure outbuf is sufficiently large before prepending.
	 * Keep at least the prefix when the message has to be truncated.
	 * It is a rather theoretical problem when someone tries to
	 * use a minimalist buffer.
	 */
	if (WARN_ON_ONCE(len + PREFIX_MAX + 1 >= outbuf_sz))
		return;

If we want to use this way. It would probably make sense to
rename PREFIX_MAX to CONSOLE_PREFIX_MAX.

Best Regards,
Petr

  reply	other threads:[~2023-01-03 13:29 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-21 20:26 [PATCH printk v3 0/6] printk: cleanup buffer handling John Ogness
2022-12-21 20:26 ` [PATCH printk v3 1/6] printk: move size limit macros into internal.h John Ogness
2023-01-02 14:06   ` Petr Mladek
2022-12-21 20:27 ` [PATCH printk v3 2/6] console: Use BIT() macros for @flags values John Ogness
2022-12-21 20:27 ` [PATCH printk v3 3/6] console: Document struct console John Ogness
2022-12-21 20:27 ` [PATCH printk v3 4/6] printk: introduce struct console_buffers John Ogness
2023-01-02 15:15   ` Petr Mladek
2023-01-03 10:04   ` John Ogness
2022-12-21 20:27 ` [PATCH printk v3 5/6] printk: introduce console_get_next_message() and console_message John Ogness
2022-12-22 15:41   ` John Ogness
2023-01-03 14:04     ` Petr Mladek
2023-01-03 14:57       ` John Ogness
2023-01-03 15:55         ` Petr Mladek
2023-01-04 10:26           ` John Ogness
2023-01-04 10:42             ` Petr Mladek
2023-01-02 15:52   ` Petr Mladek
2023-01-03 15:41     ` John Ogness
2023-01-03 10:02   ` John Ogness
2023-01-03 14:05     ` Petr Mladek
2022-12-21 20:27 ` [PATCH printk v3 6/6] printk: introduce console_prepend_dropped() for dropped messages John Ogness
2023-01-02 16:19   ` Petr Mladek
2023-01-03 10:20     ` John Ogness
2023-01-03 13:29       ` Petr Mladek [this message]
2023-01-03 13:44         ` John Ogness
2023-01-03 14:16           ` Petr Mladek
2023-01-03 15:00             ` John Ogness
2023-01-03 16:13               ` Petr Mladek
2023-01-04  9:06                 ` John Ogness
2023-01-04 10:33                   ` Petr Mladek
2023-01-05 13:14   ` kernel test robot
2023-01-05 13:55     ` John Ogness

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=Y7QtusGlIX3AU+TN@alley \
    --to=pmladek@suse.com \
    --cc=john.ogness@linutronix.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=senozhatsky@chromium.org \
    --cc=tglx@linutronix.de \
    /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.