From 787a46f2ca72ae0909390a3f0d2af398aa7f51c3 Mon Sep 17 00:00:00 2001 From: Aaron Lindsay Date: Sat, 29 Sep 2012 23:26:43 -0400 Subject: [PATCH] mm: Never return page struct at 0x0, check for invalid number of pages --- kernel/mm.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/kernel/mm.c b/kernel/mm.c index 848afe4..0a5f629 100644 --- a/kernel/mm.c +++ b/kernel/mm.c @@ -51,6 +51,10 @@ void mm_add_free_region(void *start, void *end) { struct page *p; void *page; + //If region starts at 0x0, make it start at next page to not screw up null pointer detection, etc. + if (start == 0) + start = (char *)start + MM_PAGE_SIZE; + //make sure both start and end address are aligned to the size of a page if ((unsigned int)start % MM_PAGE_SIZE != 0) start = (char*)start + (MM_PAGE_SIZE - ((unsigned int)start % MM_PAGE_SIZE)); @@ -89,6 +93,11 @@ struct page* mm_get_free_pages(unsigned int power) { return (struct page*)0; } + if (!num_pages) { + print("Error: mm_get_free_pages must be called with power from 0 to 31, inclusive (power=%d)\n", power); + return (struct page*)0; + } + for_each_list(it, &mm_free_page_list, struct page, list) { unsigned int curr_pages = 1; struct page *it2;