From: Alan Jenkins Date: Thu, 8 Feb 2018 08:14:32 +0000 (+0000) Subject: journal: avoid code that relies on LOG_KERN == 0 (#8110) X-Git-Tag: v238~130 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b36003461a11d79d22bb48b7efe2c836fd762fc1;p=platform%2Fupstream%2Fsystemd.git journal: avoid code that relies on LOG_KERN == 0 (#8110) LOG_FAC() is the general way to extract the logging facility (when it has been combined with the logging priority). LOG_FACMASK can be used to mask off the priority so you only have the logging facility bits... but to get the logging facility e.g. LOG_USER, you also have to bitshift it as well. (The priority is in the low bits, and so only requires masking). ((priority & LOG_FACMASK) == LOG_KERN) happens to work only because LOG_KERN is 0, and hence has the same value with or without the bitshift. Code that relies on weird assumptions like this could make it harder to realize how the logging values are treated. --- diff --git a/src/journal/journald-kmsg.c b/src/journal/journald-kmsg.c index 27bb7a9..5895e48 100644 --- a/src/journal/journald-kmsg.c +++ b/src/journal/journald-kmsg.c @@ -138,7 +138,7 @@ static void dev_kmsg_record(Server *s, const char *p, size_t l) { if (r < 0 || priority < 0 || priority > 999) return; - if (s->forward_to_kmsg && (priority & LOG_FACMASK) != LOG_KERN) + if (s->forward_to_kmsg && LOG_FAC(priority) != LOG_KERN) return; l -= (e - p) + 1; @@ -287,7 +287,7 @@ static void dev_kmsg_record(Server *s, const char *p, size_t l) { if (asprintf(&syslog_facility, "SYSLOG_FACILITY=%i", LOG_FAC(priority)) >= 0) iovec[n++] = IOVEC_MAKE_STRING(syslog_facility); - if ((priority & LOG_FACMASK) == LOG_KERN) + if (LOG_FAC(priority) == LOG_KERN) iovec[n++] = IOVEC_MAKE_STRING("SYSLOG_IDENTIFIER=kernel"); else { pl -= syslog_parse_identifier((const char**) &p, &identifier, &pid);