dryang / rpms / systemd

Forked from rpms/systemd a year ago
Clone
95602a
From ffe4233155085b479c69abe844a34de212b8e5e1 Mon Sep 17 00:00:00 2001
95602a
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
95602a
Date: Thu, 16 Jan 2020 14:45:28 +0100
95602a
Subject: [PATCH] sysctl: downgrade message when we have no permission
95602a
95602a
We need to run sysctl also in containers, because the network
95602a
subtree is namespaces and may legitimately be writable. But logging
95602a
all "errors" at notice level creates unwanted noise.
95602a
95602a
Also downgrade message about missing sysctls to log_info. This might also be
95602a
relatively common when configuration is targeted at different kernel
95602a
versions. With log_debug it'll still end up in the logs, but isn't really worth
95602a
of "notice" most of the time.
95602a
95602a
https://bugzilla.redhat.com/show_bug.cgi?id=1609806
95602a
(cherry picked from commit 32458cc9687c1b60ff0f22c0e71da93ce78b1534)
95602a
95602a
Resolves: #2158160
95602a
---
95602a
 src/sysctl/sysctl.c | 16 +++++++++-------
95602a
 1 file changed, 9 insertions(+), 7 deletions(-)
95602a
95602a
diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c
95602a
index 4c85d6887f..dc14e1aaf1 100644
95602a
--- a/src/sysctl/sysctl.c
95602a
+++ b/src/sysctl/sysctl.c
95602a
@@ -82,13 +82,15 @@ static int apply_all(OrderedHashmap *sysctl_options) {
95602a
                 k = sysctl_write(option->key, option->value);
95602a
                 if (k < 0) {
95602a
                         /* If the sysctl is not available in the kernel or we are running with reduced
95602a
-                         * privileges and cannot write it, then log about the issue at LOG_NOTICE level, and
95602a
-                         * proceed without failing. (EROFS is treated as a permission problem here, since
95602a
-                         * that's how container managers usually protected their sysctls.) In all other cases
95602a
-                         * log an error and make the tool fail. */
95602a
-
95602a
-                        if (IN_SET(k, -EPERM, -EACCES, -EROFS, -ENOENT) || option->ignore_failure)
95602a
-                                log_notice_errno(k, "Couldn't write '%s' to '%s', ignoring: %m", option->value, option->key);
95602a
+                         * privileges and cannot write it, then log about the issue, and proceed without
95602a
+                         * failing. (EROFS is treated as a permission problem here, since that's how
95602a
+                         * container managers usually protected their sysctls.) In all other cases log an
95602a
+                         * error and make the tool fail. */
95602a
+
95602a
+                        if (option->ignore_failure || k == -EROFS || ERRNO_IS_PRIVILEGE(k))
95602a
+                                log_debug_errno(k, "Couldn't write '%s' to '%s', ignoring: %m", option->value, option->key);
95602a
+                        else if (k == -ENOENT)
95602a
+                                log_info_errno(k, "Couldn't write '%s' to '%s', ignoring: %m", option->value, option->key);
95602a
                         else {
95602a
                                 log_error_errno(k, "Couldn't write '%s' to '%s': %m", option->value, option->key);
95602a
                                 if (r == 0)