diff options
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r-- | arch/x86/kernel/e820.c | 9 | ||||
-rw-r--r-- | arch/x86/kernel/e820_64.c | 6 |
2 files changed, 9 insertions, 6 deletions
diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c index 2cb686f60d0d..2396b9da8027 100644 --- a/arch/x86/kernel/e820.c +++ b/arch/x86/kernel/e820.c | |||
@@ -95,7 +95,7 @@ void __init add_memory_region(u64 start, u64 size, int type) | |||
95 | { | 95 | { |
96 | int x = e820.nr_map; | 96 | int x = e820.nr_map; |
97 | 97 | ||
98 | if (x == E820MAX) { | 98 | if (x == ARRAY_SIZE(e820.map)) { |
99 | printk(KERN_ERR "Ooops! Too many entries in the memory map!\n"); | 99 | printk(KERN_ERR "Ooops! Too many entries in the memory map!\n"); |
100 | return; | 100 | return; |
101 | } | 101 | } |
@@ -142,7 +142,8 @@ void __init e820_print_map(char *who) | |||
142 | * replaces the original e820 map with a new one, removing overlaps. | 142 | * replaces the original e820 map with a new one, removing overlaps. |
143 | * | 143 | * |
144 | */ | 144 | */ |
145 | int __init sanitize_e820_map(struct e820entry *biosmap, char *pnr_map) | 145 | int __init sanitize_e820_map(struct e820entry *biosmap, int max_nr_map, |
146 | char *pnr_map) | ||
146 | { | 147 | { |
147 | struct change_member { | 148 | struct change_member { |
148 | struct e820entry *pbios; /* pointer to original bios entry */ | 149 | struct e820entry *pbios; /* pointer to original bios entry */ |
@@ -314,7 +315,7 @@ int __init sanitize_e820_map(struct e820entry *biosmap, char *pnr_map) | |||
314 | * no more space left for new | 315 | * no more space left for new |
315 | * bios entries ? | 316 | * bios entries ? |
316 | */ | 317 | */ |
317 | if (++new_bios_entry >= E820MAX) | 318 | if (++new_bios_entry >= max_nr_map) |
318 | break; | 319 | break; |
319 | } | 320 | } |
320 | if (current_type != 0) { | 321 | if (current_type != 0) { |
@@ -403,7 +404,7 @@ void __init update_e820(void) | |||
403 | u8 nr_map; | 404 | u8 nr_map; |
404 | 405 | ||
405 | nr_map = e820.nr_map; | 406 | nr_map = e820.nr_map; |
406 | if (sanitize_e820_map(e820.map, &nr_map)) | 407 | if (sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &nr_map)) |
407 | return; | 408 | return; |
408 | e820.nr_map = nr_map; | 409 | e820.nr_map = nr_map; |
409 | printk(KERN_INFO "modified physical RAM map:\n"); | 410 | printk(KERN_INFO "modified physical RAM map:\n"); |
diff --git a/arch/x86/kernel/e820_64.c b/arch/x86/kernel/e820_64.c index c10b4aece5e4..58dc6eee4d4f 100644 --- a/arch/x86/kernel/e820_64.c +++ b/arch/x86/kernel/e820_64.c | |||
@@ -413,7 +413,9 @@ char *__init machine_specific_memory_setup(void) | |||
413 | * Otherwise fake a memory map; one section from 0k->640k, | 413 | * Otherwise fake a memory map; one section from 0k->640k, |
414 | * the next section from 1mb->appropriate_mem_k | 414 | * the next section from 1mb->appropriate_mem_k |
415 | */ | 415 | */ |
416 | sanitize_e820_map(boot_params.e820_map, &boot_params.e820_entries); | 416 | sanitize_e820_map(boot_params.e820_map, |
417 | ARRAY_SIZE(boot_params.e820_map), | ||
418 | &boot_params.e820_entries); | ||
417 | if (copy_e820_map(boot_params.e820_map, boot_params.e820_entries) < 0) | 419 | if (copy_e820_map(boot_params.e820_map, boot_params.e820_entries) < 0) |
418 | early_panic("Cannot find a valid memory map"); | 420 | early_panic("Cannot find a valid memory map"); |
419 | printk(KERN_INFO "BIOS-provided physical RAM map:\n"); | 421 | printk(KERN_INFO "BIOS-provided physical RAM map:\n"); |
@@ -484,7 +486,7 @@ void __init finish_e820_parsing(void) | |||
484 | if (userdef) { | 486 | if (userdef) { |
485 | char nr = e820.nr_map; | 487 | char nr = e820.nr_map; |
486 | 488 | ||
487 | if (sanitize_e820_map(e820.map, &nr) < 0) | 489 | if (sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &nr) < 0) |
488 | early_panic("Invalid user supplied memory map"); | 490 | early_panic("Invalid user supplied memory map"); |
489 | e820.nr_map = nr; | 491 | e820.nr_map = nr; |
490 | 492 | ||