summaryrefslogtreecommitdiff
path: root/vm
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2013-07-20 11:09:10 +0200
committerRichard Braun <rbraun@sceen.net>2013-07-20 11:09:10 +0200
commit0cae1081e94c3831b8275f1aba17f5ffbae78446 (patch)
tree6e096ea25e8a0f4a75554d51109f01cbf7d3fb90 /vm
parenta4ba28a2d3cddb3768215e70a2d5a31fe841320a (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.c5
-rw-r--r--vm/vm_page.h3
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,