diff options
-rw-r--r-- | arch/x86/kernel/e820_64.c | 8 |
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); | |||
710 | void __init finish_e820_parsing(void) | 712 | void __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 | } |