From b32791ade7938655bba5ed26e2edcf69b083297c Mon Sep 17 00:00:00 2001 From: Max Wash Date: Wed, 8 Feb 2023 20:26:18 +0000 Subject: [PATCH] vm: zero sector array; perform overflow checks --- vm/sparse.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/vm/sparse.c b/vm/sparse.c index 9d14342..837816b 100644 --- a/vm/sparse.c +++ b/vm/sparse.c @@ -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; }