Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b3ca74a2bfc66262d21443b160815eb26d6699e6
Commit:     b3ca74a2bfc66262d21443b160815eb26d6699e6
Parent:     efd1ca52d04d2f6df337a3332cee56cd60e6d4c4
Author:     Vladimir Berezniker <[EMAIL PROTECTED]>
AuthorDate: Wed Jan 30 13:30:46 2008 +0100
Committer:  Ingo Molnar <[EMAIL PROTECTED]>
CommitDate: Wed Jan 30 13:30:46 2008 +0100

    x86: sanitize user specified e820 memmap values
    
    Sanitize user specified e820 memory ranges, using the same logic that is
    applied to the values returned by the BIOS.  This ensures consistent
    handling regardless of the source of the memory mappings.
    
    Allows overriding portions of the memory map without specifying one in
    it's entirety (memmap=exactmap).
    
    E.g. marking a range of bad RAM as reserved with memmap=48M$528M
    
    BIOS supplied range
    
    BIOS-e820: 0000000000100000 - 000000007fe80000 (usable)
    
    becomes
    
    user: 0000000000100000 - 0000000021000000 (usable)
    user: 0000000021000000 - 0000000024000000 (reserved)
    user: 0000000024000000 - 000000007fe80000 (usable)
    
    Previously this did not work, as the original BIOS range was left
    untouched while the user defined range was appended to the end of the
    memory map.
    
    [ tglx: arch/x86 adaptation ]
    
    Signed-off-by: Vladimir Berezniker <[EMAIL PROTECTED]>
    Signed-off-by: Andi Kleen <[EMAIL PROTECTED]>
    Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]>
    Signed-off-by: Thomas Gleixner <[EMAIL PROTECTED]>
---
 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 1512368..8e73211 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)
        mem_size = memparse(p, &p);
        if (p == oldp)
                return -EINVAL;
+
+       userdef = 1;
        if (*p == '@') {
                start_at = memparse(p+1, &p);
                add_memory_region(start_at, mem_size, E820_RAM);
@@ -710,6 +712,12 @@ early_param("memmap", parse_memmap_opt);
 void __init finish_e820_parsing(void)
 {
        if (userdef) {
+               char nr = e820.nr_map;
+
+               if (sanitize_e820_map(e820.map, &nr) < 0)
+                       early_panic("Invalid user supplied memory map");
+               e820.nr_map = nr;
+
                printk(KERN_INFO "user-defined physical RAM map:\n");
                e820_print_map("user");
        }
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to