Merge branch 'x86-boot-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 23 Oct 2018 14:54:42 +0000 (15:54 +0100)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 23 Oct 2018 14:54:42 +0000 (15:54 +0100)
Pull x86 boot updates from Ingo Molnar:
 "Two cleanups and a bugfix for a rare boot option combination"

* 'x86-boot-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/boot/KASLR: Remove return value from handle_mem_options()
  x86/corruption-check: Use pr_*() instead of printk()
  x86/corruption-check: Fix panic in memory_corruption_check() when boot option without value is provided

arch/x86/boot/compressed/kaslr.c
arch/x86/kernel/check.c

index d1e19f3..9ed9709 100644 (file)
@@ -241,7 +241,7 @@ static void parse_gb_huge_pages(char *param, char *val)
 }
 
 
-static int handle_mem_options(void)
+static void handle_mem_options(void)
 {
        char *args = (char *)get_cmd_line_ptr();
        size_t len = strlen((char *)args);
@@ -251,7 +251,7 @@ static int handle_mem_options(void)
 
        if (!strstr(args, "memmap=") && !strstr(args, "mem=") &&
                !strstr(args, "hugepages"))
-               return 0;
+               return;
 
        tmp_cmdline = malloc(len + 1);
        if (!tmp_cmdline)
@@ -269,8 +269,7 @@ static int handle_mem_options(void)
                /* Stop at -- */
                if (!val && strcmp(param, "--") == 0) {
                        warn("Only '--' specified in cmdline");
-                       free(tmp_cmdline);
-                       return -1;
+                       goto out;
                }
 
                if (!strcmp(param, "memmap")) {
@@ -283,16 +282,16 @@ static int handle_mem_options(void)
                        if (!strcmp(p, "nopentium"))
                                continue;
                        mem_size = memparse(p, &p);
-                       if (mem_size == 0) {
-                               free(tmp_cmdline);
-                               return -EINVAL;
-                       }
+                       if (mem_size == 0)
+                               goto out;
+
                        mem_limit = mem_size;
                }
        }
 
+out:
        free(tmp_cmdline);
-       return 0;
+       return;
 }
 
 /*
@@ -578,7 +577,6 @@ static void process_mem_region(struct mem_vector *entry,
                               unsigned long image_size)
 {
        struct mem_vector region, overlap;
-       struct slot_area slot_area;
        unsigned long start_orig, end;
        struct mem_vector cur_entry;
 
index 3339942..1979a76 100644 (file)
@@ -1,4 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
 #include <linux/init.h>
 #include <linux/sched.h>
 #include <linux/kthread.h>
@@ -31,11 +34,17 @@ static __init int set_corruption_check(char *arg)
        ssize_t ret;
        unsigned long val;
 
+       if (!arg) {
+               pr_err("memory_corruption_check config string not provided\n");
+               return -EINVAL;
+       }
+
        ret = kstrtoul(arg, 10, &val);
        if (ret)
                return ret;
 
        memory_corruption_check = val;
+
        return 0;
 }
 early_param("memory_corruption_check", set_corruption_check);
@@ -45,6 +54,11 @@ static __init int set_corruption_check_period(char *arg)
        ssize_t ret;
        unsigned long val;
 
+       if (!arg) {
+               pr_err("memory_corruption_check_period config string not provided\n");
+               return -EINVAL;
+       }
+
        ret = kstrtoul(arg, 10, &val);
        if (ret)
                return ret;
@@ -59,6 +73,11 @@ static __init int set_corruption_check_size(char *arg)
        char *end;
        unsigned size;
 
+       if (!arg) {
+               pr_err("memory_corruption_check_size config string not provided\n");
+               return -EINVAL;
+       }
+
        size = memparse(arg, &end);
 
        if (*end == '\0')
@@ -113,7 +132,7 @@ void __init setup_bios_corruption_check(void)
        }
 
        if (num_scan_areas)
-               printk(KERN_INFO "Scanning %d areas for low memory corruption\n", num_scan_areas);
+               pr_info("Scanning %d areas for low memory corruption\n", num_scan_areas);
 }
 
 
@@ -132,8 +151,7 @@ void check_for_bios_corruption(void)
                for (; size; addr++, size -= sizeof(unsigned long)) {
                        if (!*addr)
                                continue;
-                       printk(KERN_ERR "Corrupted low memory at %p (%lx phys) = %08lx\n",
-                              addr, __pa(addr), *addr);
+                       pr_err("Corrupted low memory at %p (%lx phys) = %08lx\n", addr, __pa(addr), *addr);
                        corruption = 1;
                        *addr = 0;
                }
@@ -157,11 +175,11 @@ static int start_periodic_check_for_corruption(void)
        if (!num_scan_areas || !memory_corruption_check || corruption_check_period == 0)
                return 0;
 
-       printk(KERN_INFO "Scanning for low memory corruption every %d seconds\n",
-              corruption_check_period);
+       pr_info("Scanning for low memory corruption every %d seconds\n", corruption_check_period);
 
        /* First time we run the checks right away */
        schedule_delayed_work(&bios_check_work, 0);
+
        return 0;
 }
 device_initcall(start_periodic_check_for_corruption);