diff --git a/SOURCES/9000-core-reorder-systemd-arguments-on-reexec.patch b/SOURCES/9000-core-reorder-systemd-arguments-on-reexec.patch new file mode 100644 index 0000000..c523d9d --- /dev/null +++ b/SOURCES/9000-core-reorder-systemd-arguments-on-reexec.patch @@ -0,0 +1,56 @@ +From 06afda6b38d5d730fca3c65449096425933272bc Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +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 + diff --git a/SPECS/systemd.spec b/SPECS/systemd.spec index 03e3aab..84f5396 100644 --- a/SPECS/systemd.spec +++ b/SPECS/systemd.spec @@ -823,6 +823,7 @@ Patch0731: 0731-bootspec-fix-null-dereference-read.patch Patch0732: 0732-generator-uninline-generator_open_unit_file-and-gene.patch # Downstream-only patches (9000–9999) +Patch9000: 9000-core-reorder-systemd-arguments-on-reexec.patch %ifarch %{ix86} x86_64 aarch64 %global have_gnu_efi 1 @@ -1700,6 +1701,9 @@ systemd-hwdb update &>/dev/null || : %{_prefix}/lib/dracut/modules.d/70rhel-net-naming-sysattrs/* %changelog +* Thu Oct 17 2024 Andrew Lukoshko - 252-32.7.alma.1 +- core: reorder systemd arguments on reexec + * Thu Jul 18 2024 systemd maintenance team - 252-32.7 - generator: "uninline" generator_open_unit_file and generator_add_symlink (RHEL-49495)