From: Marek Szyprowski Date: Wed, 25 Apr 2018 09:50:49 +0000 (+0200) Subject: Revert "kmsg: allow binary characters" X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1a05d276a899fd5c2616a3d4a9332b59a5f8d209;p=platform%2Fkernel%2Flinux-exynos.git Revert "kmsg: allow binary characters" This reverts commit bae6b52d8704da7e487c26c8f0e40491fe7792da. --- diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 20ebf827e858..d6b96136deb4 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -989,19 +989,15 @@ static ssize_t kmsg_read(struct log_buffer *log_b, struct file *file, user->seq, ts_usec, cont); user->prev = msg->flags; + /* escape non-printable characters */ for (i = 0; i < msg->text_len; i++) { unsigned char c = log_text(msg)[i]; - append_char(&p, e, c); + if (c < ' ' || c >= 127 || c == '\\') + p += scnprintf(p, e - p, "\\x%02x", c); + else + append_char(&p, e, c); } - - /* - * The \0 is delimits the text part, while the newline is for formatting - * when catting the device directly. We cannot use \n for delimiting due - * to security: else one could forge dictionary tags through the message - * such as "text\n _PID=123" - */ - append_char(&p, e, '\0'); append_char(&p, e, '\n'); if (msg->dict_len) { @@ -1021,6 +1017,11 @@ static ssize_t kmsg_read(struct log_buffer *log_b, struct file *file, continue; } + if (c < ' ' || c >= 127 || c == '\\') { + p += scnprintf(p, e - p, "\\x%02x", c); + continue; + } + append_char(&p, e, c); } append_char(&p, e, '\n');