Re: [PATCH v2] panic: add an option to replay all the printk message in buffer

From: Andrew Morton
Date: Wed Apr 17 2019 - 00:19:49 EST


On Wed, 10 Apr 2019 23:37:18 +0800 Feng Tang <feng.tang@xxxxxxxxx> wrote:

> Currently on panic, kernel will lower the loglevel and print out
> new printk msg only with console_flush_on_panic().
>
> Add an option for users to configure the "panic_print" to see
> all dmesg in buffer, some of which they may have never seen due
> to the loglevel setting, which will help debugging too.
>
> Thanks to Petr Mladek as somes codes come directly from the sample
> code in his review comments.

CONFIG_PRINTK=n:

kernel/printk/printk.c: In function console_unlock:
kernel/printk/printk.c:2419:11: warning: __builtin_memcpy writing 27 bytes into a region of size 0 overflows the destination [-Wstringop-overflow=]
len += sprintf(text + len,
^~~~~~~~~~~~~~~~~~~
"Replaying the entire log:\n");
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

because LOG_LINE_MAX=0 and PREFIX_MAX=0.


Which is interesting. The pre-existing

len = sprintf(text,
"** %llu printk messages dropped **\n",
log_first_seq - console_seq);

in console_unlock() has the same issue, but the compiler doesn't seem
to want to warn.

(Also, using sprintf() is a bit lame for the new message - could use
strlcpy()).

I'll drop the patch for now - we don't want that warning to come out.
console_unlock() needs some fixing for the CONFIG_PRINTK=n case.