vm: zero sector array; perform overflow checks
This commit is contained in:
@@ -165,6 +165,7 @@ void vm_sparse_init(void)
|
||||
data_size_to_string(sector_bytes, sector_size_str, sizeof sector_size_str);
|
||||
|
||||
sector_array = memblock_alloc(sizeof(vm_sector_t) * nr_sectors, 8);
|
||||
memset(sector_array, 0x00, sizeof(vm_sector_t) * nr_sectors);
|
||||
sector_array_count = nr_sectors;
|
||||
|
||||
for (unsigned int i = 0; i < nr_sectors; i++) {
|
||||
@@ -215,10 +216,13 @@ vm_page_t *vm_page_get_sparse(phys_addr_t addr)
|
||||
{
|
||||
size_t sector_number, page_number;
|
||||
phys_addr_to_sector_and_index(addr, §or_number, &page_number);
|
||||
if (sector_number >= sector_array_count) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
vm_sector_t *sector = §or_array[sector_number];
|
||||
|
||||
if (!sector->s_pages) {
|
||||
if (!sector->s_pages || page_number >= vm_page_order_to_pages(sector->s_size)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user