mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-05 09:17:44 +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 (cherry picked from commit06afda6b38
) (cherry picked from commit884ab38057
) (cherry picked from commit163be31d38
)
This commit is contained in:
parent
d22dffabb2
commit
a6ae06c41e
@ -1793,13 +1793,17 @@ 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 (switch_root_dir)
|
||||
args[i++] = "--switched-root";
|
||||
|
||||
args[i++] = arg_system ? "--system" : "--user";
|
||||
args[i++] = sfd;
|
||||
|
||||
filter_args(args, &i, argv, argc);
|
||||
|
||||
args[i++] = NULL;
|
||||
|
||||
assert(i <= args_size);
|
||||
|
@ -7,6 +7,11 @@ IMAGE_NAME="basic"
|
||||
RUN_IN_UNPRIVILEGED_CONTAINER=${RUN_IN_UNPRIVILEGED_CONTAINER:-yes}
|
||||
TEST_REQUIRE_INSTALL_TESTS=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