@@ -575,6 +575,7 @@ static ssize_t devkmsg_read(struct file *file, char __user *buf,
char cont = '-';
size_t len;
ssize_t ret;
+ bool insert_newline;
if (!user)
return -EBADF;
@@ -625,7 +626,10 @@ static ssize_t devkmsg_read(struct file *file, char __user *buf,
((user->prev & LOG_CONT) && !(msg->flags & LOG_PREFIX)))
cont = '+';
- len = sprintf(user->buf, "%u,%llu,%llu,%c;",
+ /* Insert a newline if the previous line was not terminated properly */
+ insert_newline = (user->prev & LOG_CONT) && (msg->flags & LOG_PREFIX);
+ len = sprintf(user->buf, "%s%u,%llu,%llu,%c;",
+ insert_newline ? "\n" : "",
(msg->facility << 3) | msg->level,
user->seq, ts_usec, cont);
user->prev = msg->flags;
@@ -1013,6 +1017,12 @@ static size_t msg_print_text(const struct printk_log *msg, enum log_flags prev,
newline = false;
}
+ if ((prev & LOG_CONT) && (msg->flags & LOG_PREFIX) && len < size) {
+ if (buf)
+ buf[len++] = '\n';
+ else
+ len++;
+ }
do {
const char *next = memchr(text, '\n', text_size);
size_t text_len;