aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kernel/e820_64.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/x86/kernel/e820_64.c b/arch/x86/kernel/e820_64.c
index 151236896243..8e7321101a0a 100644
--- a/arch/x86/kernel/e820_64.c
+++ b/arch/x86/kernel/e820_64.c
@@ -691,6 +691,8 @@ static int __init parse_memmap_opt(char *p)
691 mem_size = memparse(p, &p); 691 mem_size = memparse(p, &p);
692 if (p == oldp) 692 if (p == oldp)
693 return -EINVAL; 693 return -EINVAL;
694
695 userdef = 1;
694 if (*p == '@') { 696 if (*p == '@') {
695 start_at = memparse(p+1, &p); 697 start_at = memparse(p+1, &p);
696 add_memory_region(start_at, mem_size, E820_RAM); 698 add_memory_region(start_at, mem_size, E820_RAM);
@@ -710,6 +712,12 @@ early_param("memmap", parse_memmap_opt);
710void __init finish_e820_parsing(void) 712void __init finish_e820_parsing(void)
711{ 713{
712 if (userdef) { 714 if (userdef) {
715 char nr = e820.nr_map;
716
717 if (sanitize_e820_map(e820.map, &nr) < 0)
718 early_panic("Invalid user supplied memory map");
719 e820.nr_map = nr;
720
713 printk(KERN_INFO "user-defined physical RAM map:\n"); 721 printk(KERN_INFO "user-defined physical RAM map:\n");
714 e820_print_map("user"); 722 e820_print_map("user");
715 } 723 }