core: reorder systemd arguments on reexec

This commit is contained in:
Andrew Lukoshko 2024-10-17 09:55:50 +00:00
parent 7ca90a9df1
commit 9dc63aca66
2 changed files with 60 additions and 0 deletions

View File

@ -0,0 +1,56 @@
From 06afda6b38d5d730fca3c65449096425933272bc Mon Sep 17 00:00:00 2001
From: Frantisek Sumsal <frantisek@sumsal.cz>
Date: Thu, 29 Jun 2023 13:31:19 +0200
Subject: [PATCH] core: reorder systemd arguments on reexec
When reexecuting system let's put our arguments carrying deserialization
info first followed by any existing arguments to make sure they get
parsed in case we get weird stuff from the kernel cmdline (like --).
See: https://github.com/systemd/systemd/issues/28184
---
src/core/main.c | 6 +++++-
test/TEST-01-BASIC/test.sh | 5 +++++
2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/src/core/main.c b/src/core/main.c
index 208d22f4f3..3f78f035d0 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -1860,12 +1860,16 @@ static int do_reexecute(
xsprintf(sfd, "--deserialize=%i", fileno(arg_serialization));
i = 1; /* Leave args[0] empty for now. */
- filter_args(args, &i, argv, argc);
+ /* Put our stuff first to make sure it always gets parsed in case
+ * we get weird stuff from the kernel cmdline (like --) */
if (IN_SET(objective, MANAGER_SWITCH_ROOT, MANAGER_SOFT_REBOOT))
args[i++] = "--switched-root";
args[i++] = runtime_scope_cmdline_option_to_string(arg_runtime_scope);
args[i++] = sfd;
+
+ filter_args(args, &i, argv, argc);
+
args[i++] = NULL;
assert(i <= args_size);
diff --git a/test/TEST-01-BASIC/test.sh b/test/TEST-01-BASIC/test.sh
index cc6d0651c1..d0e714ac30 100755
--- a/test/TEST-01-BASIC/test.sh
+++ b/test/TEST-01-BASIC/test.sh
@@ -8,6 +8,11 @@ RUN_IN_UNPRIVILEGED_CONTAINER=${RUN_IN_UNPRIVILEGED_CONTAINER:-yes}
TEST_REQUIRE_INSTALL_TESTS=0
TEST_SUPPORTING_SERVICES_SHOULD_BE_MASKED=0
+# Check if we can correctly deserialize if the kernel cmdline contains "weird" stuff
+# like an invalid argument, "end of arguments" separator, or a sysvinit argument (-z)
+# See: https://github.com/systemd/systemd/issues/28184
+KERNEL_APPEND="foo -- -z bar --- baz $KERNEL_APPEND"
+
# shellcheck source=test/test-functions
. "${TEST_BASE_DIR:?}/test-functions"
--
2.43.5

View File

@ -823,6 +823,7 @@ Patch0731: 0731-bootspec-fix-null-dereference-read.patch
Patch0732: 0732-generator-uninline-generator_open_unit_file-and-gene.patch Patch0732: 0732-generator-uninline-generator_open_unit_file-and-gene.patch
# Downstream-only patches (90009999) # Downstream-only patches (90009999)
Patch9000: 9000-core-reorder-systemd-arguments-on-reexec.patch
%ifarch %{ix86} x86_64 aarch64 %ifarch %{ix86} x86_64 aarch64
%global have_gnu_efi 1 %global have_gnu_efi 1
@ -1700,6 +1701,9 @@ systemd-hwdb update &>/dev/null || :
%{_prefix}/lib/dracut/modules.d/70rhel-net-naming-sysattrs/* %{_prefix}/lib/dracut/modules.d/70rhel-net-naming-sysattrs/*
%changelog %changelog
* Thu Oct 17 2024 Andrew Lukoshko <alukoshko@almalinux.org> - 252-32.7.alma.1
- core: reorder systemd arguments on reexec
* Thu Jul 18 2024 systemd maintenance team <systemd-maint@redhat.com> - 252-32.7 * Thu Jul 18 2024 systemd maintenance team <systemd-maint@redhat.com> - 252-32.7
- generator: "uninline" generator_open_unit_file and generator_add_symlink (RHEL-49495) - generator: "uninline" generator_open_unit_file and generator_add_symlink (RHEL-49495)