diff options
author | Richard Braun <rbraun@sceen.net> | 2013-07-20 11:09:10 +0200 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2013-07-20 11:09:10 +0200 |
commit | 0cae1081e94c3831b8275f1aba17f5ffbae78446 (patch) | |
tree | 6e096ea25e8a0f4a75554d51109f01cbf7d3fb90 /vm | |
parent | a4ba28a2d3cddb3768215e70a2d5a31fe841320a (diff) |
vm/vm_page: increase page address checks on load
Make sure all addresses are page-aligned. Prevent page 0 from being loaded.
This makes sure there is no valid struct vm_page for this physical address.
Diffstat (limited to 'vm')
-rw-r--r-- | vm/vm_page.c | 5 | ||||
-rw-r--r-- | vm/vm_page.h | 3 |
2 files changed, 8 insertions, 0 deletions
diff --git a/vm/vm_page.c b/vm/vm_page.c index fdc1fed..9b529bc 100644 --- a/vm/vm_page.c +++ b/vm/vm_page.c @@ -478,6 +478,11 @@ vm_page_load(const char *name, phys_addr_t start, phys_addr_t end, unsigned int i; assert(name != NULL); + assert(vm_page_aligned(start)); + assert(vm_page_aligned(end)); + assert(vm_page_aligned(avail_start)); + assert(vm_page_aligned(avail_end)); + assert(start >= PAGE_SIZE); assert(start < end); assert(seg_index < ARRAY_SIZE(vm_page_segs)); assert(seglist_prio < ARRAY_SIZE(vm_page_seg_lists)); diff --git a/vm/vm_page.h b/vm/vm_page.h index e4a9f2f..4f6e8ab 100644 --- a/vm/vm_page.h +++ b/vm/vm_page.h @@ -86,6 +86,9 @@ vm_page_to_pa(const struct vm_page *page) * * The avail_start and avail_end parameters are used to maintain a simple * heap for bootstrap allocations. + * + * All addresses must be page-aligned, and the start address must be + * strictly greater than 0. */ void vm_page_load(const char *name, phys_addr_t start, phys_addr_t end, phys_addr_t avail_start, phys_addr_t avail_end, |