mirror of
https://github.com/systemd/systemd.git
synced 2024-12-22 17:35:35 +03:00
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
This commit is contained in:
parent
88d2bda812
commit
06afda6b38
@ -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);
|
||||
|
@ -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"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user