mm: Never return page struct at 0x0, check for invalid number of pages
This commit is contained in:
		@@ -51,6 +51,10 @@ void mm_add_free_region(void *start, void *end) {
 | 
				
			|||||||
	struct page *p;
 | 
						struct page *p;
 | 
				
			||||||
	void *page;
 | 
						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
 | 
						//make sure both start and end address are aligned to the size of a page
 | 
				
			||||||
	if ((unsigned int)start % MM_PAGE_SIZE != 0)
 | 
						if ((unsigned int)start % MM_PAGE_SIZE != 0)
 | 
				
			||||||
		start = (char*)start + (MM_PAGE_SIZE - ((unsigned int)start % MM_PAGE_SIZE));
 | 
							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;
 | 
							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) {
 | 
						for_each_list(it, &mm_free_page_list, struct page, list) {
 | 
				
			||||||
		unsigned int curr_pages = 1;
 | 
							unsigned int curr_pages = 1;
 | 
				
			||||||
		struct page *it2;
 | 
							struct page *it2;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user