printk: avoid and/or handle record truncation
authorJohn Ogness <john.ogness@linutronix.de>
Wed, 30 Sep 2020 09:01:33 +0000 (11:07 +0206)
committerPetr Mladek <pmladek@suse.com>
Wed, 30 Sep 2020 11:30:28 +0000 (13:30 +0200)
commit59f8bcca1ef6a5326f7c127e11b949e745bfa230
tree52d947f428b834079aa907ec10be9967376ab5a8
parentf35efc78add6439a9fbe611f2dd517641e82d067
printk: avoid and/or handle record truncation

If a reader provides a buffer that is smaller than the message text,
the @text_len field of @info will have a value larger than the buffer
size. If readers blindly read @text_len bytes of data without
checking the size, they will read beyond their buffer.

Add this check to record_print_text() to properly recognize when such
truncation has occurred.

Add a maximum size argument to the ringbuffer function to extend
records so that records can not be created that are larger than the
buffer size of readers.

When extending records (LOG_CONT), do not extend records beyond
LOG_LINE_MAX since that is the maximum size available in the buffers
used by consoles and syslog.

Fixes: f5f022e53b87 ("printk: reimplement log_cont using record extension")
Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: John Ogness <john.ogness@linutronix.de>
Reviewed-by: Petr Mladek <pmladek@suse.com>
Signed-off-by: Petr Mladek <pmladek@suse.com>
Link: https://lore.kernel.org/r/20200930090134.8723-2-john.ogness@linutronix.de
kernel/printk/printk.c
kernel/printk/printk_ringbuffer.c
kernel/printk/printk_ringbuffer.h