vm: zero sector array; perform overflow checks

This commit is contained in:
2023-02-08 20:26:18 +00:00
parent a595b3040a
commit b32791ade7

View File

@@ -165,6 +165,7 @@ void vm_sparse_init(void)
data_size_to_string(sector_bytes, sector_size_str, sizeof sector_size_str); data_size_to_string(sector_bytes, sector_size_str, sizeof sector_size_str);
sector_array = memblock_alloc(sizeof(vm_sector_t) * nr_sectors, 8); 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; sector_array_count = nr_sectors;
for (unsigned int i = 0; i < nr_sectors; i++) { 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; size_t sector_number, page_number;
phys_addr_to_sector_and_index(addr, &sector_number, &page_number); phys_addr_to_sector_and_index(addr, &sector_number, &page_number);
if (sector_number >= sector_array_count) {
return NULL;
}
vm_sector_t *sector = &sector_array[sector_number]; vm_sector_t *sector = &sector_array[sector_number];
if (!sector->s_pages) { if (!sector->s_pages || page_number >= vm_page_order_to_pages(sector->s_size)) {
return NULL; return NULL;
} }