diff --git a/SOURCES/bz1977716-revert-explicit-set-LOG_USER-facility.patch b/SOURCES/bz1977716-revert-explicit-set-LOG_USER-facility.patch new file mode 100644 index 0000000..2808dfb --- /dev/null +++ b/SOURCES/bz1977716-revert-explicit-set-LOG_USER-facility.patch @@ -0,0 +1,55 @@ +From ff476e860e91c1a814ac038ee16790a2a5b950af Mon Sep 17 00:00:00 2001 +From: Quentin Armitage +Date: Mon, 18 Jan 2021 14:38:15 +0000 +Subject: [PATCH 1/2] Revert "Explicitly set LOG_USER log facility when + syslogging" + +This reverts commit db3bcf7b891881e8e70954424f0fe88ec7d37ce0. + +This commit was just plain wrong. The facility should default to +LOG_DAEMON (see keepalived(8) man page), but if --log-facility is +specified, that is the facility to which log entries should be logged. +--- + lib/logger.c | 5 +---- + lib/logger.h | 2 +- + 2 files changed, 2 insertions(+), 5 deletions(-) + +diff --git a/lib/logger.c b/lib/logger.c +index a0cc2048..34c83f32 100644 +--- a/lib/logger.c ++++ b/lib/logger.c +@@ -133,7 +133,7 @@ block_signals(sigset_t *cur_set) + #endif + + void +-vlog_message(int facility, const char* format, va_list args) ++vlog_message(const int facility, const char* format, va_list args) + { + #ifndef HAVE_SIGNALFD + sigset_t cur_set; +@@ -213,9 +213,6 @@ vlog_message(int facility, const char* format, va_list args) + restore_signals = true; + #endif + +- if (!(facility & LOG_FACMASK)) +- facility |= LOG_USER; +- + #if HAVE_VSYSLOG + vsyslog(facility, format, args); + #else +diff --git a/lib/logger.h b/lib/logger.h +index 7536536a..20b2a7e4 100644 +--- a/lib/logger.h ++++ b/lib/logger.h +@@ -44,7 +44,7 @@ extern void open_log_file(const char *, const char *, const char *, const char * + extern void flush_log_file(void); + extern void update_log_file_perms(mode_t); + #endif +-extern void vlog_message(int facility, const char* format, va_list args) ++extern void vlog_message(const int facility, const char* format, va_list args) + __attribute__ ((format (printf, 2, 0))); + extern void log_message(int priority, const char* format, ...) + __attribute__ ((format (printf, 2, 3))); +-- +2.31.1 + diff --git a/SOURCES/bz1977716-use-LOG_DAEMON-facility-by-default.patch b/SOURCES/bz1977716-use-LOG_DAEMON-facility-by-default.patch new file mode 100644 index 0000000..80b9e02 --- /dev/null +++ b/SOURCES/bz1977716-use-LOG_DAEMON-facility-by-default.patch @@ -0,0 +1,165 @@ +From 75ea1d31c17f4bb3a73590167658310bc9f67149 Mon Sep 17 00:00:00 2001 +From: Quentin Armitage +Date: Mon, 18 Jan 2021 14:57:30 +0000 +Subject: [PATCH 2/2] all: log to LOG_DAEMON facility by default + +keepalived(8) man page states that the default log facility is LOG_DAEMON. +Commit db3bcf7 - "Explicitly set LOG_USER log facility when syslogging" +incorrectly set the facility to LOG_USER, and that has now been reverted. +However, with that reverted, by default the VRRP process logs to LOG_LOCAL1 +and the checker and BFD processes log to LOG_LOCAL2, contrary to the +documentation. + +Since no-one has commented that logs were not going to LOG_LOCAL1/2 since +commit db3bcf7 (April 28 2020), it is safe to assume that no-one was relying +on that. This commit therefore reverts to the documentation and by default +logs everything to the LOG_DAEMON facility. + +Signed-off-by: Quentin Armitage +--- + keepalived/bfd/bfd_daemon.c | 3 +-- + keepalived/check/check_daemon.c | 3 +-- + keepalived/core/main.c | 7 +++---- + keepalived/include/main.h | 1 - + keepalived/vrrp/vrrp_daemon.c | 3 +-- + lib/logger.c | 2 ++ + lib/logger.h | 10 ++++++++++ + 7 files changed, 18 insertions(+), 11 deletions(-) + +diff --git a/keepalived/bfd/bfd_daemon.c b/keepalived/bfd/bfd_daemon.c +index cf74eee3..47d87892 100644 +--- a/keepalived/bfd/bfd_daemon.c ++++ b/keepalived/bfd/bfd_daemon.c +@@ -396,8 +396,7 @@ start_bfd_child(void) + + /* Opening local BFD syslog channel */ + if (!__test_bit(NO_SYSLOG_BIT, &debug)) +- openlog(syslog_ident, LOG_PID | ((__test_bit(LOG_CONSOLE_BIT, &debug)) ? LOG_CONS : 0) +- , (log_facility==LOG_DAEMON) ? LOG_LOCAL2 : log_facility); ++ open_syslog(syslog_ident); + + #ifdef ENABLE_LOG_TO_FILE + if (log_file_name) +diff --git a/keepalived/check/check_daemon.c b/keepalived/check/check_daemon.c +index 5e03cc4c..63bdf07b 100644 +--- a/keepalived/check/check_daemon.c ++++ b/keepalived/check/check_daemon.c +@@ -689,8 +689,7 @@ start_check_child(void) + + /* Opening local CHECK syslog channel */ + if (!__test_bit(NO_SYSLOG_BIT, &debug)) +- openlog(syslog_ident, LOG_PID | ((__test_bit(LOG_CONSOLE_BIT, &debug)) ? LOG_CONS : 0) +- , (log_facility==LOG_DAEMON) ? LOG_LOCAL2 : log_facility); ++ open_syslog(syslog_ident); + + #ifdef ENABLE_LOG_TO_FILE + if (log_file_name) +diff --git a/keepalived/core/main.c b/keepalived/core/main.c +index be4488ea..756b2f12 100644 +--- a/keepalived/core/main.c ++++ b/keepalived/core/main.c +@@ -149,7 +149,6 @@ static const struct child_term children_term[] = { + /* global var */ + const char *version_string = VERSION_STRING; /* keepalived version */ + const char *conf_file = KEEPALIVED_CONFIG_FILE; /* Configuration file */ +-int log_facility = LOG_DAEMON; /* Optional logging facilities */ + bool reload; /* Set during a reload */ + const char *main_pidfile; /* overrule default pidfile */ + static bool free_main_pidfile; +@@ -2087,7 +2086,7 @@ keepalived_main(int argc, char **argv) + umask(umask_val); + + /* Open log with default settings so we can log initially */ +- openlog(PACKAGE_NAME, LOG_PID, log_facility); ++ open_syslog(PACKAGE_NAME); + + #ifdef _MEM_CHECK_ + mem_log_init(PACKAGE_NAME, "Parent process"); +@@ -2128,7 +2127,7 @@ keepalived_main(int argc, char **argv) + if (parse_cmdline(argc, argv)) { + closelog(); + if (!__test_bit(NO_SYSLOG_BIT, &debug)) +- openlog(PACKAGE_NAME, LOG_PID | ((__test_bit(LOG_CONSOLE_BIT, &debug)) ? LOG_CONS : 0) , log_facility); ++ open_syslog(PACKAGE_NAME); + } + + if (__test_bit(LOG_CONSOLE_BIT, &debug)) +@@ -2212,7 +2211,7 @@ keepalived_main(int argc, char **argv) + if ((syslog_ident = make_syslog_ident(PACKAGE_NAME))) { + log_message(LOG_INFO, "Changing syslog ident to %s", syslog_ident); + closelog(); +- openlog(syslog_ident, LOG_PID | ((__test_bit(LOG_CONSOLE_BIT, &debug)) ? LOG_CONS : 0), log_facility); ++ open_syslog(syslog_ident); + } + else + log_message(LOG_INFO, "Unable to change syslog ident"); +diff --git a/keepalived/include/main.h b/keepalived/include/main.h +index 3e013bb6..6a34797b 100644 +--- a/keepalived/include/main.h ++++ b/keepalived/include/main.h +@@ -51,7 +51,6 @@ enum daemon_bits { + extern const char *version_string; /* keepalived version */ + extern unsigned long daemon_mode; /* Which child processes are run */ + extern const char *conf_file; /* Configuration file */ +-extern int log_facility; /* Optional logging facilities */ + #ifdef _WITH_VRRP_ + extern pid_t vrrp_child; /* VRRP child process ID */ + extern const char *vrrp_pidfile; /* overrule default pidfile */ +diff --git a/keepalived/vrrp/vrrp_daemon.c b/keepalived/vrrp/vrrp_daemon.c +index baa5f5f2..e22f8a81 100644 +--- a/keepalived/vrrp/vrrp_daemon.c ++++ b/keepalived/vrrp/vrrp_daemon.c +@@ -974,8 +974,7 @@ start_vrrp_child(void) + syslog_ident = PROG_VRRP; + + if (!__test_bit(NO_SYSLOG_BIT, &debug)) +- openlog(syslog_ident, LOG_PID | ((__test_bit(LOG_CONSOLE_BIT, &debug)) ? LOG_CONS : 0) +- , (log_facility==LOG_DAEMON) ? LOG_LOCAL1 : log_facility); ++ open_syslog(syslog_ident); + + #ifdef ENABLE_LOG_TO_FILE + if (log_file_name) +diff --git a/lib/logger.c b/lib/logger.c +index 34c83f32..7fad8ac6 100644 +--- a/lib/logger.c ++++ b/lib/logger.c +@@ -40,6 +40,8 @@ + /* Boolean flag - send messages to console as well as syslog */ + static bool log_console = false; + ++int log_facility = LOG_DAEMON; /* Optional logging facilities */ ++ + #ifdef ENABLE_LOG_TO_FILE + /* File to write log messages to */ + const char *log_file_name; +diff --git a/lib/logger.h b/lib/logger.h +index 20b2a7e4..c6f29138 100644 +--- a/lib/logger.h ++++ b/lib/logger.h +@@ -30,8 +30,13 @@ + #include + #endif + ++#include "bitops.h" ++#include "utils.h" ++ + #define MAX_LOG_MSG 255 + ++extern int log_facility; /* Optional logging facilities */ ++ + #ifdef ENABLE_LOG_TO_FILE + extern const char *log_file_name; + #endif +@@ -51,4 +56,9 @@ extern void log_message(int priority, const char* format, ...) + extern void conf_write(FILE *fp, const char *format, ...) + __attribute__ ((format (printf, 2, 3))); + ++static inline void ++open_syslog(const char *ident) ++{ ++ openlog(ident, LOG_PID | ((__test_bit(LOG_CONSOLE_BIT, &debug)) ? LOG_CONS : 0), log_facility); ++} + #endif +-- +2.31.1 + diff --git a/SOURCES/bz2028350-fix-dbus-policy-restrictions.patch b/SOURCES/bz2028350-fix-dbus-policy-restrictions.patch new file mode 100644 index 0000000..7df76e0 --- /dev/null +++ b/SOURCES/bz2028350-fix-dbus-policy-restrictions.patch @@ -0,0 +1,41 @@ +From 763eaa49343acdda5ff359012e8cc49c9ffc8e81 Mon Sep 17 00:00:00 2001 +From: Vincent Bernat +Date: Tue, 23 Nov 2021 06:50:59 +0100 +Subject: [PATCH] dbus: fix policy to not be overly broad + +The DBus policy did not restrict the message destination, allowing any +user to inspect and manipulate any property. + +Signed-off-by: Vincent Bernat +--- + keepalived/dbus/org.keepalived.Vrrp1.conf | 13 ++++++++----- + 1 file changed, 8 insertions(+), 5 deletions(-) + +diff --git a/keepalived/dbus/org.keepalived.Vrrp1.conf b/keepalived/dbus/org.keepalived.Vrrp1.conf +index 2b78a575..b5ced608 100644 +--- a/keepalived/dbus/org.keepalived.Vrrp1.conf ++++ b/keepalived/dbus/org.keepalived.Vrrp1.conf +@@ -3,12 +3,15 @@ + "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> + + +- +- ++ ++ + + +- +- +- ++ ++ ++ + + +-- +2.33.1 + diff --git a/SPECS/keepalived.spec b/SPECS/keepalived.spec index b719d6c..1f2f4e3 100644 --- a/SPECS/keepalived.spec +++ b/SPECS/keepalived.spec @@ -10,7 +10,7 @@ Name: keepalived Summary: High Availability monitor built upon LVS, VRRP and service pollers Version: 2.1.5 -Release: 6%{?dist} +Release: 8%{?dist} License: GPLv2+ URL: http://www.keepalived.org/ Group: System Environment/Daemons @@ -18,6 +18,10 @@ Group: System Environment/Daemons Source0: http://www.keepalived.org/software/keepalived-%{version}.tar.gz Source1: keepalived.service +Patch1: bz1977716-revert-explicit-set-LOG_USER-facility.patch +Patch2: bz1977716-use-LOG_DAEMON-facility-by-default.patch +Patch3: bz2028350-fix-dbus-policy-restrictions.patch + Requires(post): systemd Requires(preun): systemd Requires(postun): systemd @@ -52,6 +56,9 @@ infrastructures. %prep %setup -q +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 %build %configure \ @@ -102,6 +109,12 @@ mkdir -p %{buildroot}%{_libexecdir}/keepalived %{_mandir}/man8/keepalived.8* %changelog +* Tue Jan 18 2022 Ryan O'Hara - 2.1.5-8 +- Fix DBus policy restrictions (#2028350, CVE-2021-44225) + +* Fri Oct 29 2021 Ryan O'Hara - 2.1.5-7 +- Fix log-facility option (#197716) + * Tue Dec 15 2020 Ryan O'Hara - 2.1.5-6 - Fix changelog