From 1be6e3796110afb4f58ca9717271b6e90e6ae66a Mon Sep 17 00:00:00 2001 From: josh Date: Thu, 14 Jan 2010 15:43:49 +0000 Subject: [PATCH] thanks to bug found by Nick - fixed mmap traversal and size calculation git-svn-id: svn://anubis/hos/trunk@84 5b3e749e-e535-0410-8002-a9bb6afbdfca --- kernel/boot/k_bootstrap.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/kernel/boot/k_bootstrap.cc b/kernel/boot/k_bootstrap.cc index 6d19194..8af4c7f 100644 --- a/kernel/boot/k_bootstrap.cc +++ b/kernel/boot/k_bootstrap.cc @@ -43,11 +43,13 @@ void k_bootstrap(mb_info_t * mb_info, u32_t mb_magic) k_early_panic("No memory map provided by bootloader!"); } - mb_mmap_t * mmap = (mb_mmap_t *) (mb_info->mmap_addr + KERNEL_OFFSET); - for (unsigned int sz = 0; sz < mb_info->mmap_length; sz += mmap->size + 4) + for (mb_mmap_t * mmap = (mb_mmap_t *) (mb_info->mmap_addr + KERNEL_OFFSET), + * end = (mb_mmap_t *) ((u32_t)mmap + mb_info->mmap_length); + mmap < end; + mmap = (mb_mmap_t *) (((u32_t)mmap) + mmap->size + 4)) { + kprintf(" ** size: %d, type: %d ", mmap->size, mmap->type); mm_record_mmap_entry(mmap); - mmap = (mb_mmap_t *) (((u32_t)mmap) + mmap->size + 4); } DEBUG_LETTER(2, 'c');