Commit 642116d4 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'x86-boot-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

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
parents e1d20bea 44060e8a
Loading
Loading
Loading
Loading
+8 −10
Original line number Diff line number Diff line
@@ -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;

+23 −5
Original line number Diff line number Diff line
// 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);