aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/kexec-tools/files/no-getline-no-fscanf.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/kexec-tools/files/no-getline-no-fscanf.patch')
-rw-r--r--recipes/kexec-tools/files/no-getline-no-fscanf.patch69
1 files changed, 69 insertions, 0 deletions
diff --git a/recipes/kexec-tools/files/no-getline-no-fscanf.patch b/recipes/kexec-tools/files/no-getline-no-fscanf.patch
new file mode 100644
index 0000000000..f2a32b4d0d
--- /dev/null
+++ b/recipes/kexec-tools/files/no-getline-no-fscanf.patch
@@ -0,0 +1,69 @@
+Index: kexec-tools-2.0.1/kexec/kexec.c
+===================================================================
+--- kexec-tools-2.0.1.orig/kexec/kexec.c 2008-02-24 14:15:46.950825917 +0100
++++ kexec-tools-2.0.1/kexec/kexec.c 2009-10-07 22:30:58.000000000 +0200
+@@ -933,15 +933,32 @@
+
+ static int kexec_loaded(void)
+ {
+- int ret;
++ long ret = -1;
+ FILE *fp;
++ char *p;
++ char line[3];
+
+ fp = fopen("/sys/kernel/kexec_loaded", "r");
+ if (fp == NULL)
+ return -1;
+- fscanf(fp, "%d", &ret);
++/* fscanf(fp, "%d", &ret); */
++ p = fgets(line, sizeof(line), fp);
+ fclose(fp);
+- return ret;
++
++ if ( NULL == p)
++ return -1;
++
++ ret = strtol(line, &p, 10);
++
++ if (ret > INT_MAX)
++ /* Too long */
++ return -1;
++
++ if (p == line)
++ /* No digits were found */
++ return -1;
++
++ return (int)ret;
+ }
+
+ /*
+@@ -989,18 +1006,23 @@
+ char *get_command_line(void)
+ {
+ FILE *fp;
+- size_t len;
+- char *line = NULL;
++ const int sizeof_line = 1024;
++ char *line = malloc(sizeof_line); /* according to strdup() later */
+
+ fp = fopen("/proc/cmdline", "r");
+ if (!fp)
+- die("Could not read /proc/cmdline.");
+- getline(&line, &len, fp);
++ die("Could not open /proc/cmdline.");
++
++ if ( NULL == fgets(line, sizeof(line), fp) ) {
++ die("Can't read /proc/cmdline.");
++
++/* getline(&line, &len, fp); */
+ fclose(fp);
++ }
+
+ if (line) {
+ /* strip newline */
+- *(line + strlen(line) - 1) = 0;
++ line[strlen(line) - 1] = '\0';
+
+ remove_parameter(line, "BOOT_IMAGE");
+ if (kexec_flags & KEXEC_ON_CRASH)