mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-11-14 02:53:34 +00:00
44 lines
1.3 KiB
Diff
44 lines
1.3 KiB
Diff
From: John Ogness <john.ogness@linutronix.de>
|
|
Date: Mon, 7 Oct 2019 16:20:39 +0200
|
|
Subject: [PATCH] printk: handle iterating while buffer changing
|
|
|
|
The syslog and kmsg_dump readers are provided buffers to fill.
|
|
Both try to maximize the provided buffer usage by calculating the
|
|
maximum number of messages that can fit. However, if after the
|
|
calculation, messages are dropped and new messages added, the
|
|
calculation will no longer match.
|
|
|
|
For syslog, add a check to make sure the provided buffer is not
|
|
overfilled.
|
|
|
|
For kmsg_dump, start over by recalculating the messages
|
|
available.
|
|
|
|
Signed-off-by: John Ogness <john.ogness@linutronix.de>
|
|
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
|
---
|
|
kernel/printk/printk.c | 5 ++++-
|
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
|
|
--- a/kernel/printk/printk.c
|
|
+++ b/kernel/printk/printk.c
|
|
@@ -1446,6 +1446,9 @@ static int syslog_print_all(char __user
|
|
break;
|
|
}
|
|
|
|
+ if (len + textlen > size)
|
|
+ break;
|
|
+
|
|
if (copy_to_user(buf + len, text, textlen))
|
|
len = -EFAULT;
|
|
else
|
|
@@ -3085,7 +3088,7 @@ bool kmsg_dump_get_buffer(struct kmsg_du
|
|
ret = prb_iter_next(&iter, msgbuf, PRINTK_RECORD_MAX, &seq);
|
|
if (ret == 0) {
|
|
break;
|
|
- } else if (ret < 0) {
|
|
+ } else if (ret < 0 || seq >= end_seq) {
|
|
prb_iter_init(&iter, &printk_rb, &seq);
|
|
goto retry;
|
|
}
|