From bcc3c7c1fb3bad6303512c87cf1a2ddff9c63e44 Mon Sep 17 00:00:00 2001 From: "Edward K. McGuire" Date: Thu, 16 Jun 2022 15:52:04 -0500 Subject: [PATCH] Prevent logfile corruption by control codes Do not corrupt logfiles when kernel messages contain control codes, notably \n. Instead, preserve the kernel's protective C-style hex encoding. For example, \n embedded in a message by a kernel-level facility is received as "\x0a". Kernel-level facilities cannot be trusted to use only syslog-safe codes in kernel messages. See: --- ChangeLog.md | 7 ++++++- src/syslogd.c | 12 +----------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index a18d5d4..f9652f1 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -4,7 +4,7 @@ Change Log All relevant changes to the project are documented in this file. -[v2.4.0][] - 2022-05-29 +[v2.4.0][] - 2022-06-16 ----------------------- ### Changes @@ -31,6 +31,11 @@ All relevant changes to the project are documented in this file. data to be logged -- this is a temporary fix until we have support for parsing the Unicode BOM, as defined in RFC5424 - Issue #50: fix issue with wall message, by Edward K. McGuire +- Do not corrupt logfiles when kernel messages contain control codes, + notably `\n`. Instead, preserve the kernel's protective C-style hex + encoding. For example, `\n` embedded in a message by a kernel-level + facility is received as `\x0a`. See: + [v2.3.0][] - 2021-11-27 diff --git a/src/syslogd.c b/src/syslogd.c index b38994e..8fb8ecd 100644 --- a/src/syslogd.c +++ b/src/syslogd.c @@ -1428,18 +1428,8 @@ void printsys(char *msg) } q = lp; - while (*p != '\0' && (c = *p++) != '\n' && q < &line[MAXLINE]) { - /* Linux /dev/kmsg C-style hex encoding. */ - if (c == '\\' && *p == 'x') { - char code[5] = "0x\0\0\0"; - - p++; - code[2] = *p++; - code[3] = *p++; - c = (int)strtol(code, NULL, 16); - } + while (*p != '\0' && (c = *p++) != '\n' && q < &line[MAXLINE]) *q++ = c; - } *q = '\0'; logmsg(&buffer);