proc-cmdline: parse the whole /proc/cmdline

The kernel command line may contain newlines which kernel happily
accepts, but we'd ignore everything past the first newline. Let's fix
that by replacing read_one_line_file() with read_full_file().
This commit is contained in:
Frantisek Sumsal 2023-06-12 21:05:30 +02:00 committed by Lennart Poettering
parent 0f85a0d38f
commit d5a937a62a
3 changed files with 11 additions and 2 deletions

View file

@ -98,7 +98,7 @@ int proc_cmdline(char **ret) {
if (detect_container() > 0)
return get_process_cmdline(1, SIZE_MAX, 0, ret);
else
return read_one_line_file("/proc/cmdline", ret);
return read_full_file("/proc/cmdline", ret, NULL);
}
static int proc_cmdline_strv_internal(char ***ret, bool filter_pid1_args) {
@ -128,7 +128,7 @@ static int proc_cmdline_strv_internal(char ***ret, bool filter_pid1_args) {
} else {
_cleanup_free_ char *s = NULL;
r = read_one_line_file("/proc/cmdline", &s);
r = read_full_file("/proc/cmdline", &s, NULL);
if (r < 0)
return r;

View file

@ -14,6 +14,9 @@ KERNEL_APPEND="
frobnicate!
systemd.setenv=TEST_CMDLINE_NEWLINE=foo
systemd.setenv=TEST_CMDLINE_NEWLINE=bar
$KERNEL_APPEND
"

View file

@ -3,6 +3,12 @@
set -eux
set -o pipefail
if ! systemd-detect-virt -qc && [[ "${TEST_CMDLINE_NEWLINE:-}" != bar ]]; then
cat /proc/cmdline
echo >&2 "Expected TEST_CMDLINE_NEWLINE=bar from the kernel command line"
exit 1
fi
NPROC=$(nproc)
MAX_QUEUE_SIZE=${NPROC:-2}
TESTS_GLOB=${TESTS_GLOB:-test-*}