+++ /dev/null
-From 180a940333c84495015bd5b24d41c1dbfff509f2 Mon Sep 17 00:00:00 2001
-From: James Hilliard <james.hilliard1@gmail.com>
-Date: Thu, 27 Dec 2018 09:16:20 +0800
-Subject: [PATCH] meson: use cross compilation compatible c++ check
-
-[james.hilliard1@gmail.com: backport from upstream commit
-46e63a2a3ed46ce97430ce38e4cc0798c57900eb]
-Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
----
- meson.build | 4 +---
- src/systemd/meson.build | 3 +--
- src/test/meson.build | 2 +-
- 3 files changed, 3 insertions(+), 6 deletions(-)
-
-diff --git a/meson.build b/meson.build
-index b338886..1964b1a 100644
---- a/meson.build
-+++ b/meson.build
-@@ -287,10 +287,8 @@ want_tests = get_option('tests')
- slow_tests = want_tests != 'false' and get_option('slow-tests')
- install_tests = get_option('install-tests')
-
--cxx = find_program('c++', required : fuzzer_build)
--if cxx.found()
-+if add_languages('cpp', required : fuzzer_build)
- # Used only for tests
-- add_languages('cpp')
- cxx_cmd = ' '.join(meson.get_compiler('cpp').cmd_array())
- else
- cxx_cmd = ''
-diff --git a/src/systemd/meson.build b/src/systemd/meson.build
-index e0c967e..75c48b0 100644
---- a/src/systemd/meson.build
-+++ b/src/systemd/meson.build
-@@ -52,8 +52,7 @@ if cc.has_argument('-std=iso9899:2017')
- opts += [['c', '-std=iso9899:2017']]
- endif
-
--cxx = find_program('c++', required : false)
--if cxx.found()
-+if add_languages('cpp', required : false)
- opts += [['c++'],
- ['c++', '-std=c++98'],
- ['c++', '-std=c++11']]
-diff --git a/src/test/meson.build b/src/test/meson.build
-index ea049a6..d9d87e0 100644
---- a/src/test/meson.build
-+++ b/src/test/meson.build
-@@ -957,7 +957,7 @@ tests += [
-
- ]
-
--if cxx.found()
-+if cxx_cmd != ''
- tests += [
- [['src/libsystemd/sd-bus/test-bus-vtable-cc.cc'],
- [],
---
-2.7.4
-
+++ /dev/null
-From 822809d0afd0f984750a61b2391059411afa4333 Mon Sep 17 00:00:00 2001
-From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-Date: Fri, 11 Jan 2019 16:07:00 +0100
-Subject: [PATCH] capability: fix build without PR_CAP_AMBIENT
-
-systemd fails to build on kernel without PR_CAP_AMBIENT (< 4.3) since
-https://github.com/systemd/systemd/commit/2a03bb3e65327c73008f1db485ffc75c432dc6b2
-
-To fix this error, include missing_prctl.h in all files using
-PR_CAP_AMBIENT
-
-Fixes:
- - http://autobuild.buildroot.org/results/699c078aa078240c6741da4dbd0871450ceeca92
-
-Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-[Upstream status: https://github.com/systemd/systemd/pull/11400]
----
- src/basic/capability-util.c | 1 +
- src/test/test-capability.c | 1 +
- src/test/test-execute.c | 1 +
- 3 files changed, 3 insertions(+)
-
-diff --git a/src/basic/capability-util.c b/src/basic/capability-util.c
-index a3f3ca9f5..b944ee6ea 100644
---- a/src/basic/capability-util.c
-+++ b/src/basic/capability-util.c
-@@ -13,6 +13,7 @@
- #include "fileio.h"
- #include "log.h"
- #include "macro.h"
-+#include "missing_prctl.h"
- #include "parse-util.h"
- #include "user-util.h"
- #include "util.h"
-diff --git a/src/test/test-capability.c b/src/test/test-capability.c
-index dae85f2f9..3db05878a 100644
---- a/src/test/test-capability.c
-+++ b/src/test/test-capability.c
-@@ -13,6 +13,7 @@
- #include "fd-util.h"
- #include "fileio.h"
- #include "macro.h"
-+#include "missing_prctl.h"
- #include "parse-util.h"
- #include "tests.h"
- #include "util.h"
-diff --git a/src/test/test-execute.c b/src/test/test-execute.c
-index 2115061ad..cea68b8cf 100644
---- a/src/test/test-execute.c
-+++ b/src/test/test-execute.c
-@@ -13,6 +13,7 @@
- #include "fs-util.h"
- #include "macro.h"
- #include "manager.h"
-+#include "missing_prctl.h"
- #include "mkdir.h"
- #include "path-util.h"
- #include "rm-rf.h"
---
-2.14.1
-
+++ /dev/null
-From b1ca50178b97b3b827b0420ec7bdf9cb1d6fec56 Mon Sep 17 00:00:00 2001
-From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-Date: Fri, 11 Jan 2019 16:36:06 +0100
-Subject: [PATCH] basic/tmpfile-util.c: fix build without O_TMPFILE
-
-systemd fails to build on kernel without O_TMPFILE (< 3.11) since
-https://github.com/systemd/systemd/commit/dea72eda9cdbfeedd24cbe8c734ad0639bf96cde
-
-To fix this error, include missing_fcntl.h
-
-Fixes:
- - http://autobuild.buildroot.org/results/699c078aa078240c6741da4dbd0871450ceeca92
-
-Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-[Upstream status: https://github.com/systemd/systemd/pull/11400]
----
- src/basic/tmpfile-util.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/basic/tmpfile-util.c b/src/basic/tmpfile-util.c
-index 669eb2666..bc92d6a6d 100644
---- a/src/basic/tmpfile-util.c
-+++ b/src/basic/tmpfile-util.c
-@@ -8,6 +8,7 @@
- #include "hexdecoct.h"
- #include "macro.h"
- #include "memfd-util.h"
-+#include "missing_fcntl.h"
- #include "missing_syscall.h"
- #include "path-util.h"
- #include "process-util.h"
---
-2.14.1
-
+++ /dev/null
-From 9ab48a9b3bfadca4fbe055ddb4f6fc677ee4ae85 Mon Sep 17 00:00:00 2001
-From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-Date: Fri, 11 Jan 2019 17:08:48 +0100
-Subject: [PATCH] missing_if_link.h: add IFLA_BOND_MODE
-
-systemd fails to build on kernel without IFLA_BOND_MODE (< 3.13) since
-https://github.com/systemd/systemd/commit/9714c020fc4cda1823c2a77e3fd08aefa7d78b25
-
-So put back IFLA_BOND_MODE definition
-
-Fixes:
- - http://autobuild.buildroot.org/results/699c078aa078240c6741da4dbd0871450ceeca92
-
-Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-[Upstream status: https://github.com/systemd/systemd/pull/11400]
----
- meson.build | 1 +
- src/basic/missing_if_link.h | 3 +++
- 2 files changed, 4 insertions(+)
-
-diff --git a/meson.build b/meson.build
-index 623c1ad6b..011e44980 100644
---- a/meson.build
-+++ b/meson.build
-@@ -476,6 +476,7 @@ foreach decl : [['ETHTOOL_LINK_MODE_10baseT_Half_BIT', 'linux/ethtool.h'],
- ['IFLA_TARGET_NETNSID', 'linux/if_link.h'],
- ['IFLA_NEW_IFINDEX', 'linux/if_link.h'],
- ['IFLA_MAX_MTU', 'linux/if_link.h'],
-+ ['IFLA_BOND_MODE', 'linux/if_link.h'],
- ['IFLA_BOND_ACTIVE_SLAVE', 'linux/if_link.h'],
- ['IFLA_BOND_AD_INFO', 'linux/if_link.h'],
- ['IFLA_BOND_AD_ACTOR_SYSTEM', 'linux/if_link.h'],
-diff --git a/src/basic/missing_if_link.h b/src/basic/missing_if_link.h
-index 07675426b..761797f56 100644
---- a/src/basic/missing_if_link.h
-+++ b/src/basic/missing_if_link.h
-@@ -110,6 +110,9 @@ enum ipvlan_mode {
- #define IFLA_MAX 51
- #endif
-
-+#if !HAVE_IFLA_BOND_MODE /* linux@90af231106c0b8d223c27d35464af95cb3d9cacf (3.13) */
-+#define IFLA_BOND_MODE 1
-+#endif
- #if !HAVE_IFLA_BOND_ACTIVE_SLAVE /* linux@ec76aa49855f6d6fea5e01de179fb57dd47c619d (3.13) */
- #define IFLA_BOND_ACTIVE_SLAVE 2
- #endif
---
-2.14.1
-
+++ /dev/null
-From 985d15d636b4d2c7086dbd305369c02756cdbe19 Mon Sep 17 00:00:00 2001
-From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-Date: Fri, 11 Jan 2019 17:24:21 +0100
-Subject: [PATCH] missing_syscall.h: include errno.h
-
-This include is needed for errno and ENOSYS
-
-Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-[Upstream status: https://github.com/systemd/systemd/pull/11400]
----
- src/basic/missing_syscall.h | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/basic/missing_syscall.h b/src/basic/missing_syscall.h
-index d5d4b26ac..d1aa32218 100644
---- a/src/basic/missing_syscall.h
-+++ b/src/basic/missing_syscall.h
-@@ -3,6 +3,7 @@
-
- /* Missing glibc definitions to access certain kernel APIs */
-
-+#include <errno.h>
- #include <fcntl.h>
- #include <sys/syscall.h>
- #include <sys/types.h>
---
-2.14.1
-
+++ /dev/null
-From badb5dafa9efc89384d9d2bea5648f7b017204d7 Mon Sep 17 00:00:00 2001
-From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-Date: Fri, 11 Jan 2019 17:30:32 +0100
-Subject: [PATCH] lockfile-util.c: fix build without F_OFD_SETLK
-
-systemd fails to build on kernel without F_OFD_SETLK since
-https://github.com/systemd/systemd/commit/9714c020fc4cda1823c2a77e3fd08aefa7d78b25
-
-So put include missing_fcntl.h
-
-Fixes:
- - http://autobuild.buildroot.org/results/699c078aa078240c6741da4dbd0871450ceeca92
-
-Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-[Upstream status: https://github.com/systemd/systemd/pull/11400]
----
- src/shared/lockfile-util.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/shared/lockfile-util.c b/src/shared/lockfile-util.c
-index 4bae23b24..260c2088d 100644
---- a/src/shared/lockfile-util.c
-+++ b/src/shared/lockfile-util.c
-@@ -12,6 +12,7 @@
- #include "fs-util.h"
- #include "lockfile-util.h"
- #include "macro.h"
-+#include "missing_fcntl.h"
- #include "path-util.h"
-
- int make_lock_file(const char *p, int operation, LockFile *ret) {
---
-2.14.1
-
+++ /dev/null
-From 084eeb865ca63887098e0945fb4e93c852b91b0f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Wed, 5 Dec 2018 18:38:39 +0100
-Subject: [PATCH] journald: do not store the iovec entry for process
- commandline on stack
-
-This fixes a crash where we would read the commandline, whose length is under
-control of the sending program, and then crash when trying to create a stack
-allocation for it.
-
-CVE-2018-16864
-https://bugzilla.redhat.com/show_bug.cgi?id=1653855
-
-The message actually doesn't get written to disk, because
-journal_file_append_entry() returns -E2BIG.
-
-[james.hilliard1@gmail.com: backport from upstream commit
-084eeb865ca63887098e0945fb4e93c852b91b0f]
-Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
----
- src/basic/io-util.c | 10 ++++++++++
- src/basic/io-util.h | 2 ++
- src/coredump/coredump.c | 31 +++++++++++--------------------
- src/journal/journald-server.c | 25 +++++++++++++++----------
- 4 files changed, 38 insertions(+), 30 deletions(-)
-
-diff --git a/src/basic/io-util.c b/src/basic/io-util.c
-index 1f64cc9..575398f 100644
---- a/src/basic/io-util.c
-+++ b/src/basic/io-util.c
-@@ -8,6 +8,7 @@
- #include <unistd.h>
-
- #include "io-util.h"
-+#include "string-util.h"
- #include "time-util.h"
-
- int flush_fd(int fd) {
-@@ -252,3 +253,12 @@ ssize_t sparse_write(int fd, const void *p, size_t sz, size_t run_length) {
-
- return q - (const uint8_t*) p;
- }
-+
-+char* set_iovec_string_field(struct iovec *iovec, size_t *n_iovec, const char *field, const char *value) {
-+ char *x;
-+
-+ x = strappend(field, value);
-+ if (x)
-+ iovec[(*n_iovec)++] = IOVEC_MAKE_STRING(x);
-+ return x;
-+}
-diff --git a/src/basic/io-util.h b/src/basic/io-util.h
-index ed189b5..792a64a 100644
---- a/src/basic/io-util.h
-+++ b/src/basic/io-util.h
-@@ -71,3 +71,5 @@ static inline bool FILE_SIZE_VALID_OR_INFINITY(uint64_t l) {
- #define IOVEC_MAKE(base, len) (struct iovec) IOVEC_INIT(base, len)
- #define IOVEC_INIT_STRING(string) IOVEC_INIT((char*) string, strlen(string))
- #define IOVEC_MAKE_STRING(string) (struct iovec) IOVEC_INIT_STRING(string)
-+
-+char* set_iovec_string_field(struct iovec *iovec, size_t *n_iovec, const char *field, const char *value);
-diff --git a/src/coredump/coredump.c b/src/coredump/coredump.c
-index 20c1fb0..db2cf64 100644
---- a/src/coredump/coredump.c
-+++ b/src/coredump/coredump.c
-@@ -1063,19 +1063,10 @@ static int send_iovec(const struct iovec iovec[], size_t n_iovec, int input_fd)
- return 0;
- }
-
--static char* set_iovec_field(struct iovec *iovec, size_t *n_iovec, const char *field, const char *value) {
-- char *x;
--
-- x = strappend(field, value);
-- if (x)
-- iovec[(*n_iovec)++] = IOVEC_MAKE_STRING(x);
-- return x;
--}
--
- static char* set_iovec_field_free(struct iovec *iovec, size_t *n_iovec, const char *field, char *value) {
- char *x;
-
-- x = set_iovec_field(iovec, n_iovec, field, value);
-+ x = set_iovec_string_field(iovec, n_iovec, field, value);
- free(value);
- return x;
- }
-@@ -1125,36 +1116,36 @@ static int gather_pid_metadata(
- disable_coredumps();
- }
-
-- set_iovec_field(iovec, n_iovec, "COREDUMP_UNIT=", context[CONTEXT_UNIT]);
-+ set_iovec_string_field(iovec, n_iovec, "COREDUMP_UNIT=", context[CONTEXT_UNIT]);
- }
-
- if (cg_pid_get_user_unit(pid, &t) >= 0)
- set_iovec_field_free(iovec, n_iovec, "COREDUMP_USER_UNIT=", t);
-
- /* The next few are mandatory */
-- if (!set_iovec_field(iovec, n_iovec, "COREDUMP_PID=", context[CONTEXT_PID]))
-+ if (!set_iovec_string_field(iovec, n_iovec, "COREDUMP_PID=", context[CONTEXT_PID]))
- return log_oom();
-
-- if (!set_iovec_field(iovec, n_iovec, "COREDUMP_UID=", context[CONTEXT_UID]))
-+ if (!set_iovec_string_field(iovec, n_iovec, "COREDUMP_UID=", context[CONTEXT_UID]))
- return log_oom();
-
-- if (!set_iovec_field(iovec, n_iovec, "COREDUMP_GID=", context[CONTEXT_GID]))
-+ if (!set_iovec_string_field(iovec, n_iovec, "COREDUMP_GID=", context[CONTEXT_GID]))
- return log_oom();
-
-- if (!set_iovec_field(iovec, n_iovec, "COREDUMP_SIGNAL=", context[CONTEXT_SIGNAL]))
-+ if (!set_iovec_string_field(iovec, n_iovec, "COREDUMP_SIGNAL=", context[CONTEXT_SIGNAL]))
- return log_oom();
-
-- if (!set_iovec_field(iovec, n_iovec, "COREDUMP_RLIMIT=", context[CONTEXT_RLIMIT]))
-+ if (!set_iovec_string_field(iovec, n_iovec, "COREDUMP_RLIMIT=", context[CONTEXT_RLIMIT]))
- return log_oom();
-
-- if (!set_iovec_field(iovec, n_iovec, "COREDUMP_HOSTNAME=", context[CONTEXT_HOSTNAME]))
-+ if (!set_iovec_string_field(iovec, n_iovec, "COREDUMP_HOSTNAME=", context[CONTEXT_HOSTNAME]))
- return log_oom();
-
-- if (!set_iovec_field(iovec, n_iovec, "COREDUMP_COMM=", context[CONTEXT_COMM]))
-+ if (!set_iovec_string_field(iovec, n_iovec, "COREDUMP_COMM=", context[CONTEXT_COMM]))
- return log_oom();
-
- if (context[CONTEXT_EXE] &&
-- !set_iovec_field(iovec, n_iovec, "COREDUMP_EXE=", context[CONTEXT_EXE]))
-+ !set_iovec_string_field(iovec, n_iovec, "COREDUMP_EXE=", context[CONTEXT_EXE]))
- return log_oom();
-
- if (sd_pid_get_session(pid, &t) >= 0)
-@@ -1222,7 +1213,7 @@ static int gather_pid_metadata(
- iovec[(*n_iovec)++] = IOVEC_MAKE_STRING(t);
-
- if (safe_atoi(context[CONTEXT_SIGNAL], &signo) >= 0 && SIGNAL_VALID(signo))
-- set_iovec_field(iovec, n_iovec, "COREDUMP_SIGNAL_NAME=SIG", signal_to_string(signo));
-+ set_iovec_string_field(iovec, n_iovec, "COREDUMP_SIGNAL_NAME=SIG", signal_to_string(signo));
-
- return 0; /* we successfully acquired all metadata */
- }
-diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
-index f096725..2a960eb 100644
---- a/src/journal/journald-server.c
-+++ b/src/journal/journald-server.c
-@@ -905,6 +905,7 @@ static void dispatch_message_real(
- pid_t object_pid) {
-
- char source_time[sizeof("_SOURCE_REALTIME_TIMESTAMP=") + DECIMAL_STR_MAX(usec_t)];
-+ _cleanup_free_ char *cmdline1 = NULL, *cmdline2 = NULL;
- uid_t journal_uid;
- ClientContext *o;
-
-@@ -921,20 +922,23 @@ static void dispatch_message_real(
- IOVEC_ADD_NUMERIC_FIELD(iovec, n, c->uid, uid_t, uid_is_valid, UID_FMT, "_UID");
- IOVEC_ADD_NUMERIC_FIELD(iovec, n, c->gid, gid_t, gid_is_valid, GID_FMT, "_GID");
-
-- IOVEC_ADD_STRING_FIELD(iovec, n, c->comm, "_COMM");
-- IOVEC_ADD_STRING_FIELD(iovec, n, c->exe, "_EXE");
-- IOVEC_ADD_STRING_FIELD(iovec, n, c->cmdline, "_CMDLINE");
-- IOVEC_ADD_STRING_FIELD(iovec, n, c->capeff, "_CAP_EFFECTIVE");
-+ IOVEC_ADD_STRING_FIELD(iovec, n, c->comm, "_COMM"); /* At most TASK_COMM_LENGTH (16 bytes) */
-+ IOVEC_ADD_STRING_FIELD(iovec, n, c->exe, "_EXE"); /* A path, so at most PATH_MAX (4096 bytes) */
-
-- IOVEC_ADD_SIZED_FIELD(iovec, n, c->label, c->label_size, "_SELINUX_CONTEXT");
-+ if (c->cmdline)
-+ /* At most _SC_ARG_MAX (2MB usually), which is too much to put on stack.
-+ * Let's use a heap allocation for this one. */
-+ cmdline1 = set_iovec_string_field(iovec, &n, "_CMDLINE=", c->cmdline);
-
-+ IOVEC_ADD_STRING_FIELD(iovec, n, c->capeff, "_CAP_EFFECTIVE"); /* Read from /proc/.../status */
-+ IOVEC_ADD_SIZED_FIELD(iovec, n, c->label, c->label_size, "_SELINUX_CONTEXT");
- IOVEC_ADD_NUMERIC_FIELD(iovec, n, c->auditid, uint32_t, audit_session_is_valid, "%" PRIu32, "_AUDIT_SESSION");
- IOVEC_ADD_NUMERIC_FIELD(iovec, n, c->loginuid, uid_t, uid_is_valid, UID_FMT, "_AUDIT_LOGINUID");
-
-- IOVEC_ADD_STRING_FIELD(iovec, n, c->cgroup, "_SYSTEMD_CGROUP");
-+ IOVEC_ADD_STRING_FIELD(iovec, n, c->cgroup, "_SYSTEMD_CGROUP"); /* A path */
- IOVEC_ADD_STRING_FIELD(iovec, n, c->session, "_SYSTEMD_SESSION");
- IOVEC_ADD_NUMERIC_FIELD(iovec, n, c->owner_uid, uid_t, uid_is_valid, UID_FMT, "_SYSTEMD_OWNER_UID");
-- IOVEC_ADD_STRING_FIELD(iovec, n, c->unit, "_SYSTEMD_UNIT");
-+ IOVEC_ADD_STRING_FIELD(iovec, n, c->unit, "_SYSTEMD_UNIT"); /* Unit names are bounded by UNIT_NAME_MAX */
- IOVEC_ADD_STRING_FIELD(iovec, n, c->user_unit, "_SYSTEMD_USER_UNIT");
- IOVEC_ADD_STRING_FIELD(iovec, n, c->slice, "_SYSTEMD_SLICE");
- IOVEC_ADD_STRING_FIELD(iovec, n, c->user_slice, "_SYSTEMD_USER_SLICE");
-@@ -955,13 +959,14 @@ static void dispatch_message_real(
- IOVEC_ADD_NUMERIC_FIELD(iovec, n, o->uid, uid_t, uid_is_valid, UID_FMT, "OBJECT_UID");
- IOVEC_ADD_NUMERIC_FIELD(iovec, n, o->gid, gid_t, gid_is_valid, GID_FMT, "OBJECT_GID");
-
-+ /* See above for size limits, only ->cmdline may be large, so use a heap allocation for it. */
- IOVEC_ADD_STRING_FIELD(iovec, n, o->comm, "OBJECT_COMM");
- IOVEC_ADD_STRING_FIELD(iovec, n, o->exe, "OBJECT_EXE");
-- IOVEC_ADD_STRING_FIELD(iovec, n, o->cmdline, "OBJECT_CMDLINE");
-- IOVEC_ADD_STRING_FIELD(iovec, n, o->capeff, "OBJECT_CAP_EFFECTIVE");
-+ if (o->cmdline)
-+ cmdline2 = set_iovec_string_field(iovec, &n, "OBJECT_CMDLINE=", o->cmdline);
-
-+ IOVEC_ADD_STRING_FIELD(iovec, n, o->capeff, "OBJECT_CAP_EFFECTIVE");
- IOVEC_ADD_SIZED_FIELD(iovec, n, o->label, o->label_size, "OBJECT_SELINUX_CONTEXT");
--
- IOVEC_ADD_NUMERIC_FIELD(iovec, n, o->auditid, uint32_t, audit_session_is_valid, "%" PRIu32, "OBJECT_AUDIT_SESSION");
- IOVEC_ADD_NUMERIC_FIELD(iovec, n, o->loginuid, uid_t, uid_is_valid, UID_FMT, "OBJECT_AUDIT_LOGINUID");
-
---
-2.7.4
-
+++ /dev/null
-From 052c57f132f04a3cf4148f87561618da1a6908b4 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Wed, 5 Dec 2018 22:45:02 +0100
-Subject: [PATCH] journald: set a limit on the number of fields (1k)
-
-We allocate a iovec entry for each field, so with many short entries,
-our memory usage and processing time can be large, even with a relatively
-small message size. Let's refuse overly long entries.
-
-CVE-2018-16865
-https://bugzilla.redhat.com/show_bug.cgi?id=1653861
-
-What from I can see, the problem is not from an alloca, despite what the CVE
-description says, but from the attack multiplication that comes from creating
-many very small iovecs: (void* + size_t) for each three bytes of input message.
-
-[james.hilliard1@gmail.com: backport from upstream commit
-052c57f132f04a3cf4148f87561618da1a6908b4]
-Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
----
- src/journal/journald-native.c | 5 +++++
- src/shared/journal-importer.h | 3 +++
- 2 files changed, 8 insertions(+)
-
-diff --git a/src/journal/journald-native.c b/src/journal/journald-native.c
-index e86178e..d0fee2a 100644
---- a/src/journal/journald-native.c
-+++ b/src/journal/journald-native.c
-@@ -141,6 +141,11 @@ static int server_process_entry(
- }
-
- /* A property follows */
-+ if (n > ENTRY_FIELD_COUNT_MAX) {
-+ log_debug("Received an entry that has more than " STRINGIFY(ENTRY_FIELD_COUNT_MAX) " fields, ignoring entry.");
-+ r = 1;
-+ goto finish;
-+ }
-
- /* n existing properties, 1 new, +1 for _TRANSPORT */
- if (!GREEDY_REALLOC(iovec, m,
-diff --git a/src/shared/journal-importer.h b/src/shared/journal-importer.h
-index 53354b7..7914c0c 100644
---- a/src/shared/journal-importer.h
-+++ b/src/shared/journal-importer.h
-@@ -21,6 +21,9 @@
- #endif
- #define LINE_CHUNK 8*1024u
-
-+/* The maximum number of fields in an entry */
-+#define ENTRY_FIELD_COUNT_MAX 1024
-+
- struct iovec_wrapper {
- struct iovec *iovec;
- size_t size_bytes;
---
-2.7.4
-
+++ /dev/null
-From 7fdb237f5473cb8fc2129e57e8a0039526dcb4fd Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Fri, 7 Dec 2018 12:47:14 +0100
-Subject: [PATCH] journal-remote: verify entry length from header
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Calling mhd_respond(), which ulimately calls MHD_queue_response() is
-ineffective at point, becuase MHD_queue_response() immediately returns
-MHD_NO signifying an error, because the connection is in state
-MHD_CONNECTION_CONTINUE_SENT.
-
-As Christian Grothoff kindly explained:
-> You are likely calling MHD_queue_repsonse() too late: once you are
-> receiving upload_data, HTTP forces you to process it all. At this time,
-> MHD has already sent "100 continue" and cannot take it back (hence you
-> get MHD_NO!).
->
-> In your request handler, the first time when you are called for a
-> connection (and when hence *upload_data_size == 0 and upload_data ==
-> NULL) you must check the content-length header and react (with
-> MHD_queue_response) based on this (to prevent MHD from automatically
-> generating 100 continue).
-
-If we ever encounter this kind of error, print a warning and immediately
-abort the connection. (The alternative would be to keep reading the data,
-but ignore it, and return an error after we get to the end of data.
-That is possible, but of course puts additional load on both the
-sender and reciever, and doesn't seem important enough just to return
-a good error message.)
-
-Note that sending of the error does not work (the connection is always aborted
-when MHD_queue_response is used with MHD_RESPMEM_MUST_FREE, as in this case)
-with libµhttpd 0.59, but works with 0.61:
-https://src.fedoraproject.org/rpms/libmicrohttpd/pull-request/1
-
-[james.hilliard1@gmail.com: backport from upstream commit
-7fdb237f5473cb8fc2129e57e8a0039526dcb4fd]
-Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
----
- src/journal-remote/journal-remote-main.c | 34 ++++++++++++++++++++++----------
- 1 file changed, 24 insertions(+), 10 deletions(-)
-
-diff --git a/src/journal-remote/journal-remote-main.c b/src/journal-remote/journal-remote-main.c
-index e1748cb..8543dba 100644
---- a/src/journal-remote/journal-remote-main.c
-+++ b/src/journal-remote/journal-remote-main.c
-@@ -221,16 +221,14 @@ static int process_http_upload(
- journal_remote_server_global->seal);
- if (r == -EAGAIN)
- break;
-- else if (r < 0) {
-- log_warning("Failed to process data for connection %p", connection);
-+ if (r < 0) {
- if (r == -E2BIG)
-- return mhd_respondf(connection,
-- r, MHD_HTTP_PAYLOAD_TOO_LARGE,
-- "Entry is too large, maximum is " STRINGIFY(DATA_SIZE_MAX) " bytes.");
-+ log_warning_errno(r, "Entry is too above maximum of %u, aborting connection %p.",
-+ DATA_SIZE_MAX, connection);
- else
-- return mhd_respondf(connection,
-- r, MHD_HTTP_UNPROCESSABLE_ENTITY,
-- "Processing failed: %m.");
-+ log_warning_errno(r, "Failed to process data, aborting connection %p: %m",
-+ connection);
-+ return MHD_NO;
- }
- }
-
-@@ -264,6 +262,7 @@ static int request_handler(
- const char *header;
- int r, code, fd;
- _cleanup_free_ char *hostname = NULL;
-+ size_t len;
-
- assert(connection);
- assert(connection_cls);
-@@ -283,12 +282,27 @@ static int request_handler(
- if (!streq(url, "/upload"))
- return mhd_respond(connection, MHD_HTTP_NOT_FOUND, "Not found.");
-
-- header = MHD_lookup_connection_value(connection,
-- MHD_HEADER_KIND, "Content-Type");
-+ header = MHD_lookup_connection_value(connection, MHD_HEADER_KIND, "Content-Type");
- if (!header || !streq(header, "application/vnd.fdo.journal"))
- return mhd_respond(connection, MHD_HTTP_UNSUPPORTED_MEDIA_TYPE,
- "Content-Type: application/vnd.fdo.journal is required.");
-
-+ header = MHD_lookup_connection_value(connection, MHD_HEADER_KIND, "Content-Length");
-+ if (!header)
-+ return mhd_respond(connection, MHD_HTTP_LENGTH_REQUIRED,
-+ "Content-Length header is required.");
-+ r = safe_atozu(header, &len);
-+ if (r < 0)
-+ return mhd_respondf(connection, r, MHD_HTTP_LENGTH_REQUIRED,
-+ "Content-Length: %s cannot be parsed: %m", header);
-+
-+ if (len > ENTRY_SIZE_MAX)
-+ /* When serialized, an entry of maximum size might be slightly larger,
-+ * so this does not correspond exactly to the limit in journald. Oh well.
-+ */
-+ return mhd_respondf(connection, 0, MHD_HTTP_PAYLOAD_TOO_LARGE,
-+ "Payload larger than maximum size of %u bytes", ENTRY_SIZE_MAX);
-+
- {
- const union MHD_ConnectionInfo *ci;
-
---
-2.7.4
-
+++ /dev/null
-From ef4d6abe7c7fab6cbff975b32e76b09feee56074 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Fri, 7 Dec 2018 10:48:10 +0100
-Subject: [PATCH] journal-remote: set a limit on the number of fields in a
- message
-
-Existing use of E2BIG is replaced with ENOBUFS (entry too long), and E2BIG is
-reused for the new error condition (too many fields).
-
-This matches the change done for systemd-journald, hence forming the second
-part of the fix for CVE-2018-16865
-(https://bugzilla.redhat.com/show_bug.cgi?id=1653861).
-
-[james.hilliard1@gmail.com: backport from upstream commit
-ef4d6abe7c7fab6cbff975b32e76b09feee56074]
-Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
----
- src/journal-remote/journal-remote-main.c | 7 +++++--
- src/journal-remote/journal-remote.c | 3 +++
- src/shared/journal-importer.c | 5 ++++-
- 3 files changed, 12 insertions(+), 3 deletions(-)
-
-diff --git a/src/journal-remote/journal-remote-main.c b/src/journal-remote/journal-remote-main.c
-index 8543dba..802c3ea 100644
---- a/src/journal-remote/journal-remote-main.c
-+++ b/src/journal-remote/journal-remote-main.c
-@@ -222,9 +222,12 @@ static int process_http_upload(
- if (r == -EAGAIN)
- break;
- if (r < 0) {
-- if (r == -E2BIG)
-- log_warning_errno(r, "Entry is too above maximum of %u, aborting connection %p.",
-+ if (r == -ENOBUFS)
-+ log_warning_errno(r, "Entry is above the maximum of %u, aborting connection %p.",
- DATA_SIZE_MAX, connection);
-+ else if (r == -E2BIG)
-+ log_warning_errno(r, "Entry with more fields than the maximum of %u, aborting connection %p.",
-+ ENTRY_FIELD_COUNT_MAX, connection);
- else
- log_warning_errno(r, "Failed to process data, aborting connection %p: %m",
- connection);
-diff --git a/src/journal-remote/journal-remote.c b/src/journal-remote/journal-remote.c
-index 3c0916c..1da32c5 100644
---- a/src/journal-remote/journal-remote.c
-+++ b/src/journal-remote/journal-remote.c
-@@ -407,6 +407,9 @@ int journal_remote_handle_raw_source(
- log_debug("%zu active sources remaining", s->active);
- return 0;
- } else if (r == -E2BIG) {
-+ log_notice("Entry with too many fields, skipped");
-+ return 1;
-+ } else if (r == -ENOBUFS) {
- log_notice("Entry too big, skipped");
- return 1;
- } else if (r == -EAGAIN) {
-diff --git a/src/shared/journal-importer.c b/src/shared/journal-importer.c
-index b0e6192..8638cd3 100644
---- a/src/shared/journal-importer.c
-+++ b/src/shared/journal-importer.c
-@@ -23,6 +23,9 @@ enum {
- };
-
- static int iovw_put(struct iovec_wrapper *iovw, void* data, size_t len) {
-+ if (iovw->count >= ENTRY_FIELD_COUNT_MAX)
-+ return -E2BIG;
-+
- if (!GREEDY_REALLOC(iovw->iovec, iovw->size_bytes, iovw->count + 1))
- return log_oom();
-
-@@ -97,7 +100,7 @@ static int get_line(JournalImporter *imp, char **line, size_t *size) {
-
- imp->scanned = imp->filled;
- if (imp->scanned >= DATA_SIZE_MAX)
-- return log_error_errno(SYNTHETIC_ERRNO(E2BIG),
-+ return log_error_errno(SYNTHETIC_ERRNO(ENOBUFS),
- "Entry is bigger than %u bytes.",
- DATA_SIZE_MAX);
-
---
-2.7.4
-
+++ /dev/null
-From f5855697aa19fb92637e72ab02e4623abe77f288 Mon Sep 17 00:00:00 2001
-From: YunQiang Su <syq@debian.org>
-Date: Tue, 25 Dec 2018 19:01:17 +0800
-Subject: [PATCH] Pass separate dev_t var to device_path_parse_major_minor
-
-MIPS/O32's st_rdev member of struct stat is unsigned long, which
-is 32bit, while dev_t is defined as 64bit, which make some problems
-in device_path_parse_major_minor.
-
-Don't pass st.st_rdev, st_mode to device_path_parse_major_minor,
-while pass 2 seperate variables. The result of stat is alos copied
-out into these 2 variables. Fixes: #11247
-
-[Retrieved from:
-https://github.com/systemd/systemd/commit/f5855697aa19fb92637e72ab02e4623abe77f288]
-Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
----
- src/core/cgroup.c | 35 ++++++++++++++++++++++-------------
- 1 file changed, 22 insertions(+), 13 deletions(-)
-
-diff --git a/src/core/cgroup.c b/src/core/cgroup.c
-index 7b817dc225e..ed2f331b33e 100644
---- a/src/core/cgroup.c
-+++ b/src/core/cgroup.c
-@@ -396,26 +396,31 @@ static void cgroup_xattr_apply(Unit *u) {
- }
-
- static int lookup_block_device(const char *p, dev_t *ret) {
-- struct stat st = {};
-+ dev_t rdev, dev = 0;
-+ mode_t mode;
- int r;
-
- assert(p);
- assert(ret);
-
-- r = device_path_parse_major_minor(p, &st.st_mode, &st.st_rdev);
-+ r = device_path_parse_major_minor(p, &mode, &rdev);
- if (r == -ENODEV) { /* not a parsable device node, need to go to disk */
-+ struct stat st;
- if (stat(p, &st) < 0)
- return log_warning_errno(errno, "Couldn't stat device '%s': %m", p);
-+ rdev = (dev_t)st.st_rdev;
-+ dev = (dev_t)st.st_dev;
-+ mode = st.st_mode;
- } else if (r < 0)
- return log_warning_errno(r, "Failed to parse major/minor from path '%s': %m", p);
-
-- if (S_ISCHR(st.st_mode)) {
-+ if (S_ISCHR(mode)) {
- log_warning("Device node '%s' is a character device, but block device needed.", p);
- return -ENOTBLK;
-- } else if (S_ISBLK(st.st_mode))
-- *ret = st.st_rdev;
-- else if (major(st.st_dev) != 0)
-- *ret = st.st_dev; /* If this is not a device node then use the block device this file is stored on */
-+ } else if (S_ISBLK(mode))
-+ *ret = rdev;
-+ else if (major(dev) != 0)
-+ *ret = dev; /* If this is not a device node then use the block device this file is stored on */
- else {
- /* If this is btrfs, getting the backing block device is a bit harder */
- r = btrfs_get_block_device(p, ret);
-@@ -436,7 +441,8 @@ static int lookup_block_device(const char *p, dev_t *ret) {
- }
-
- static int whitelist_device(BPFProgram *prog, const char *path, const char *node, const char *acc) {
-- struct stat st = {};
-+ dev_t rdev;
-+ mode_t mode;
- int r;
-
- assert(path);
-@@ -445,11 +451,12 @@ static int whitelist_device(BPFProgram *prog, const char *path, const char *node
- /* Some special handling for /dev/block/%u:%u, /dev/char/%u:%u, /run/systemd/inaccessible/chr and
- * /run/systemd/inaccessible/blk paths. Instead of stat()ing these we parse out the major/minor directly. This
- * means clients can use these path without the device node actually around */
-- r = device_path_parse_major_minor(node, &st.st_mode, &st.st_rdev);
-+ r = device_path_parse_major_minor(node, &mode, &rdev);
- if (r < 0) {
- if (r != -ENODEV)
- return log_warning_errno(r, "Couldn't parse major/minor from device path '%s': %m", node);
-
-+ struct stat st;
- if (stat(node, &st) < 0)
- return log_warning_errno(errno, "Couldn't stat device %s: %m", node);
-
-@@ -457,22 +464,24 @@ static int whitelist_device(BPFProgram *prog, const char *path, const char *node
- log_warning("%s is not a device.", node);
- return -ENODEV;
- }
-+ rdev = (dev_t) st.st_rdev;
-+ mode = st.st_mode;
- }
-
- if (cg_all_unified() > 0) {
- if (!prog)
- return 0;
-
-- return cgroup_bpf_whitelist_device(prog, S_ISCHR(st.st_mode) ? BPF_DEVCG_DEV_CHAR : BPF_DEVCG_DEV_BLOCK,
-- major(st.st_rdev), minor(st.st_rdev), acc);
-+ return cgroup_bpf_whitelist_device(prog, S_ISCHR(mode) ? BPF_DEVCG_DEV_CHAR : BPF_DEVCG_DEV_BLOCK,
-+ major(rdev), minor(rdev), acc);
-
- } else {
- char buf[2+DECIMAL_STR_MAX(dev_t)*2+2+4];
-
- sprintf(buf,
- "%c %u:%u %s",
-- S_ISCHR(st.st_mode) ? 'c' : 'b',
-- major(st.st_rdev), minor(st.st_rdev),
-+ S_ISCHR(mode) ? 'c' : 'b',
-+ major(rdev), minor(rdev),
- acc);
-
- /* Changing the devices list of a populated cgroup might result in EINVAL, hence ignore EINVAL here. */
+++ /dev/null
-From 7bd188b1e628d11011cc6c98456e2e4ed72c645b Mon Sep 17 00:00:00 2001
-From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-Date: Sun, 3 Feb 2019 17:32:46 +0100
-Subject: [PATCH] networkd-brvlan.c: fix build without
- BRIDGE_VLAN_INFO_RANGE_END
-
-systemd fails to build on kernel without BRIDGE_VLAN_INFO_RANGE_END
-since 9714c02
-
-So put include missing_if_bridge.h
-
-Fixes:
- - http://autobuild.buildroot.org/results/970b09e1d49b53dff12a07ca4ad424ef9dd29a69
-
-Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
----
- src/network/networkd-brvlan.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/network/networkd-brvlan.c b/src/network/networkd-brvlan.c
-index 8f9103f14..8377623da 100644
---- a/src/network/networkd-brvlan.c
-+++ b/src/network/networkd-brvlan.c
-@@ -9,6 +9,7 @@
-
- #include "alloc-util.h"
- #include "conf-parser.h"
-+#include "missing_if_bridge.h"
- #include "netlink-util.h"
- #include "networkd-brvlan.h"
- #include "networkd-link.h"
---
-2.14.1
-
+++ /dev/null
-From d909e4af6ac61f6777d429a0c84ab5b3d1907c6d Mon Sep 17 00:00:00 2001
-From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-Date: Sun, 3 Feb 2019 18:28:16 +0100
-Subject: [PATCH] networkd-ndisc.c: fix build without IFA_F_NOPREFIXROUTE
-
-systemd fails to build on kernel without IFA_F_NOPREFIXROUTE
-since 9714c02
-
-So put include missing_network.h
-
-Fixes:
- - http://autobuild.buildroot.org/results/970b09e1d49b53dff12a07ca4ad424ef9dd29a69
-
-Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
----
- src/network/networkd-ndisc.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c
-index 80bfd2cba..e5b8d1155 100644
---- a/src/network/networkd-ndisc.c
-+++ b/src/network/networkd-ndisc.c
-@@ -8,6 +8,7 @@
-
- #include "sd-ndisc.h"
-
-+#include "missing_network.h"
- #include "networkd-ndisc.h"
- #include "networkd-route.h"
- #include "strv.h"
---
-2.14.1
-
+++ /dev/null
-From 081aea25022a987d349394ada2d6a959bf3ce4cd Mon Sep 17 00:00:00 2001
-From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-Date: Sun, 3 Feb 2019 18:33:39 +0100
-Subject: [PATCH] networkd-address.c: fix build without IFA_F_NOPREFIXROUTE
-
-systemd fails to build on kernel without IFA_F_NOPREFIXROUTE
-since 9714c02
-
-So put include missing_network.h
-
-Fixes:
- - http://autobuild.buildroot.org/results/970b09e1d49b53dff12a07ca4ad424ef9dd29a69
-
-Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
----
- src/network/networkd-address.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c
-index fa7f9b8d7..3cdbd9e37 100644
---- a/src/network/networkd-address.c
-+++ b/src/network/networkd-address.c
-@@ -5,6 +5,7 @@
- #include "alloc-util.h"
- #include "conf-parser.h"
- #include "firewall-util.h"
-+#include "missing_network.h"
- #include "netlink-util.h"
- #include "networkd-address.h"
- #include "networkd-manager.h"
---
-2.14.1
-
+++ /dev/null
-From aeed8332afa88728ed914b2917ce758d9c2218a4 Mon Sep 17 00:00:00 2001
-From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-Date: Sun, 3 Feb 2019 18:38:10 +0100
-Subject: [PATCH] networkd-dhcp6.c: fix build without IFA_F_NOPREFIXROUTE
-
-systemd fails to build on kernel without IFA_F_NOPREFIXROUTE
-since 9714c02
-
-So put include missing_network.h
-
-Fixes:
- - http://autobuild.buildroot.org/results/970b09e1d49b53dff12a07ca4ad424ef9dd29a69
-
-Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
----
- src/network/networkd-dhcp6.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c
-index f9df26d75..c1fba03f9 100644
---- a/src/network/networkd-dhcp6.c
-+++ b/src/network/networkd-dhcp6.c
-@@ -11,6 +11,7 @@
-
- #include "hashmap.h"
- #include "hostname-util.h"
-+#include "missing_network.h"
- #include "network-internal.h"
- #include "networkd-link.h"
- #include "networkd-manager.h"
---
-2.14.1
-
# sha256 locally computed
-sha256 8f15aec1ac926e13a21a04d0ca3fe371f7004951448142a6f8952075c5b5f0b5 systemd-240.tar.gz
+sha256 b2561a8e1d10a2c248253f0dda31a85dd6d69f2b54177de55e02cd1d2778316e systemd-241.tar.gz
sha256 ab15fd526bd8dd18a9e77ebc139656bf4d33e97fc7238cd11bf60e2b9b8666c6 LICENSE.GPL2
sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 LICENSE.LGPL2.1
-sha256 a693f8f654fdf016e2aefe6b30aa6e1211728b8269ab325408a152c6c9b6ebe8 README
+sha256 d9356b277440f21730426592c27170d034a39954ab5154dfba1cc3cbf7b22935 README
#
################################################################################
-SYSTEMD_VERSION = 240
+SYSTEMD_VERSION = 241
SYSTEMD_SITE = $(call github,systemd,systemd,v$(SYSTEMD_VERSION))
SYSTEMD_LICENSE = LGPL-2.1+, GPL-2.0+ (udev), Public Domain (few source files, see README)
SYSTEMD_LICENSE_FILES = LICENSE.GPL2 LICENSE.LGPL2.1 README