From 1ac74b6d66001dc7ad2ceef066093002dad4076e Mon Sep 17 00:00:00 2001 From: Philipp Rudo Date: Mon, 28 Mar 2022 16:14:44 +0200 Subject: [PATCH] use slurp_proc_file() in get_command_line() Resolves: bz2060824 Upstream: git.kernel.org/pub/scm/utils/kernel/kexec/kexec-tools.git Conflicts: None commit d6516ba4c88f217fe14455db92c60cd0e9af18f8 Author: Sven Schnelle Date: Thu Dec 16 12:43:55 2021 +0100 use slurp_proc_file() in get_command_line() This way the size of the command line that get_command_line() can handle is no longer fixed. Signed-off-by: Sven Schnelle Signed-off-by: Simon Horman Signed-off-by: Philipp Rudo --- ...slurp_proc_file_in_get_command_line_.patch | 52 +++++++++++++++++++ kexec-tools.spec | 2 + 2 files changed, 54 insertions(+) create mode 100644 kexec-tools-2.0.23-04-use_slurp_proc_file_in_get_command_line_.patch diff --git a/kexec-tools-2.0.23-04-use_slurp_proc_file_in_get_command_line_.patch b/kexec-tools-2.0.23-04-use_slurp_proc_file_in_get_command_line_.patch new file mode 100644 index 0000000..d4351c3 --- /dev/null +++ b/kexec-tools-2.0.23-04-use_slurp_proc_file_in_get_command_line_.patch @@ -0,0 +1,52 @@ + commit d6516ba4c88f217fe14455db92c60cd0e9af18f8 + Author: Sven Schnelle + Date: Thu Dec 16 12:43:55 2021 +0100 + + use slurp_proc_file() in get_command_line() + + This way the size of the command line that get_command_line() can handle + is no longer fixed. + + Signed-off-by: Sven Schnelle + Signed-off-by: Simon Horman + + diff --git a/kexec/kexec.c b/kexec/kexec.c + index f3adac517161d448552a16fd79488c1df100d356..7e4787bc821107b7af66ebdbcfc31f4e7e1d48cd 100644 + --- a/kexec/kexec.c + +++ b/kexec/kexec.c + @@ -1172,25 +1172,19 @@ static char *slurp_proc_file(const char *filename, size_t *len) + */ + char *get_command_line(void) + { + - FILE *fp; + - char *line; + - const int sizeof_line = 2048; + - + - line = malloc(sizeof_line); + - if (line == NULL) + - die("Could not allocate memory to read /proc/cmdline."); + - + - fp = fopen("/proc/cmdline", "r"); + - if (!fp) + - die("Could not open /proc/cmdline."); + - + - if (fgets(line, sizeof_line, fp) == NULL) + - die("Can't read /proc/cmdline."); + + char *p, *line; + + size_t size; + + - fclose(fp); + + line = slurp_proc_file("/proc/cmdline", &size); + + if (!line || !size) + + die("Failed to read /proc/cmdline\n"); + + /* strip newline */ + - line[strlen(line) - 1] = '\0'; + + line[size-1] = '\0'; + + + + p = strpbrk(line, "\r\n"); + + if (p) + + *p = '\0'; + + remove_parameter(line, "BOOT_IMAGE"); + if (kexec_flags & KEXEC_ON_CRASH) diff --git a/kexec-tools.spec b/kexec-tools.spec index db4abdf..5e9ff1c 100644 --- a/kexec-tools.spec +++ b/kexec-tools.spec @@ -107,6 +107,7 @@ Requires: systemd-udev%{?_isa} Patch401: ./kexec-tools-2.0.23-01-s390_add_variable_command_line_size.patch Patch402: ./kexec-tools-2.0.23-02-s390_use_KEXEC_ALL_OPTIONS.patch Patch403: ./kexec-tools-2.0.23-03-add_slurp_proc_file_.patch +Patch404: ./kexec-tools-2.0.23-04-use_slurp_proc_file_in_get_command_line_.patch # # Patches 501 through 600 are meant for ARM kexec-tools enablement @@ -140,6 +141,7 @@ tar -z -x -v -f %{SOURCE19} %patch401 -p1 %patch402 -p1 %patch403 -p1 +%patch404 -p1 %patch601 -p1 %patch602 -p1 %patch603 -p1