Signed-off-by: Shogo Matsumoto <shogo.matsumoto(a)fujitsu.com>
---
kernel.c | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/kernel.c b/kernel.c
index 461a5f2..57fe355 100644
--- a/kernel.c
+++ b/kernel.c
@@ -11553,6 +11553,8 @@ dump_audit(void)
error(INFO, "kernel audit log is empty\n");
}
+#define PRINTK_SAFE_SEQ_BUF_INDENT 2
+
static void
__dump_printk_safe_seq_buf(char *buf_name, int msg_flags)
{
@@ -11591,27 +11593,44 @@ __dump_printk_safe_seq_buf(char *buf_name, int msg_flags)
if (len > 0) {
int i, n;
char *p;
+ bool start_of_line;
readmem(buffer_addr + per_cpu_offset, KVADDR,
buffer, buffer_size,
"printk_safe_seq_buf buffer", FAULT_ON_ERROR);
+ start_of_line = true;
n = (len <= buffer_size) ? len : buffer_size;
for (i = 0, p = buffer; i < n; i++, p++) {
+ bool sol = start_of_line;
+ start_of_line = false;
if (*p == 0x1) { //SOH
i++; p++;
+
+ if (!sol)
+ fprintf(fp, "\n");
+
+ fprintf(fp, space(PRINTK_SAFE_SEQ_BUF_INDENT));
+
continue;
} else {
+ if (sol)
+ fprintf(fp, "%s", space(PRINTK_SAFE_SEQ_BUF_INDENT));
+
if (isprint(*p) || isspace(*p)) {
fputc(*p, fp);
+ if (*p == '\n')
+ start_of_line = true;
} else {
fputc('.', fp);
}
}
}
+ if (!start_of_line)
+ fputc('\n', fp);
fputc('\n', fp);
} else {
- fprintf(fp, "(empty)\n\n");
+ fprintf(fp, "%s(empty)\n\n", space(PRINTK_SAFE_SEQ_BUF_INDENT));
}
}
FREEBUF(buffer);
--
2.29.2