Fixes multiboot parsing bug
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 9 Jan 2014 22:41:35 +0000 (14:41 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 17 Jan 2014 22:35:30 +0000 (14:35 -0800)
sizeof was the end point, instead of the length.

kern/src/pmap.c

index 94ee546..3d5b540 100644 (file)
@@ -33,15 +33,16 @@ uintptr_t boot_freelimit = 0;
 
 static size_t sizeof_mboot_mmentry(struct multiboot_mmap_entry *entry)
 {
 
 static size_t sizeof_mboot_mmentry(struct multiboot_mmap_entry *entry)
 {
-       /* Careful - addr + len is a uint64 (need to cast down for 32 bit) */
-       return (size_t)(entry->addr + entry->len);
+       /* Careful - len is a uint64 (need to cast down for 32 bit) */
+       return (size_t)(entry->len);
 }
 
 static void adjust_max_pmem(struct multiboot_mmap_entry *entry, void *data)
 {
        if (entry->type != MULTIBOOT_MEMORY_AVAILABLE)
                return;
 }
 
 static void adjust_max_pmem(struct multiboot_mmap_entry *entry, void *data)
 {
        if (entry->type != MULTIBOOT_MEMORY_AVAILABLE)
                return;
-       max_pmem = MAX(max_pmem, sizeof_mboot_mmentry(entry));
+       /* Careful - addr + len is a uint64 (need to cast down for 32 bit) */
+       max_pmem = MAX(max_pmem, (size_t)(entry->addr + entry->len));
 }
 
 /**
 }
 
 /**