dryang / rpms / systemd

Forked from rpms/systemd a year ago
Clone
36e8a3
From a4d1779b5ee28b1c27c509a1baebf881943cad1b Mon Sep 17 00:00:00 2001
36e8a3
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
36e8a3
Date: Wed, 5 Dec 2018 22:52:53 +0100
36e8a3
Subject: [PATCH] =?UTF-8?q?journald:=20lower=20the=20maximum=20entry=20siz?=
36e8a3
 =?UTF-8?q?e=20limit=20to=20=C2=BD=20for=20non-sealed=20fds?=
36e8a3
MIME-Version: 1.0
36e8a3
Content-Type: text/plain; charset=UTF-8
36e8a3
Content-Transfer-Encoding: 8bit
36e8a3
36e8a3
We immediately read the whole contents into memory, making thigs much more
36e8a3
expensive. Sealed fds should be used instead since they are more efficient
36e8a3
on our side.
36e8a3
36e8a3
(cherry-picked from commit 6670c9de196c8e2d5e84a8890cbb68f70c4db6e3)
36e8a3
36e8a3
Related: #1664977
36e8a3
---
36e8a3
 src/journal/journald-native.c | 6 ++++--
36e8a3
 1 file changed, 4 insertions(+), 2 deletions(-)
36e8a3
36e8a3
diff --git a/src/journal/journald-native.c b/src/journal/journald-native.c
36e8a3
index 110ab3641..da62448ca 100644
36e8a3
--- a/src/journal/journald-native.c
36e8a3
+++ b/src/journal/journald-native.c
36e8a3
@@ -380,8 +380,10 @@ void server_process_native_file(
36e8a3
         if (st.st_size <= 0)
36e8a3
                 return;
36e8a3
 
36e8a3
-        if (st.st_size > ENTRY_SIZE_MAX) {
36e8a3
-                log_error("File passed too large. Ignoring.");
36e8a3
+        /* When !sealed, set a lower memory limit. We have to read the file,
36e8a3
+         * effectively doubling memory use. */
36e8a3
+        if (st.st_size > ENTRY_SIZE_MAX / (sealed ? 1 : 2)) {
36e8a3
+                log_error("File passed too large (%"PRIu64" bytes). Ignoring.", (uint64_t) st.st_size);
36e8a3
                 return;
36e8a3
         }
36e8a3