From 8c4c224435231a1b3afc8c98abeb9488f09ecbaa Mon Sep 17 00:00:00 2001 From: Max Wash Date: Wed, 8 Feb 2023 21:29:45 +0000 Subject: [PATCH] vm: fix get_or_create_page not allocating enough memory for sparse page map --- vm/sparse.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/vm/sparse.c b/vm/sparse.c index 837816b..77daf21 100644 --- a/vm/sparse.c +++ b/vm/sparse.c @@ -60,7 +60,7 @@ static vm_page_t *get_or_create_page(phys_addr_t addr) vm_sector_t *sector = §or_array[sector_number]; if (!sector->s_pages) { - sector->s_pages = kmalloc(vm_page_order_to_pages(sector->s_size) * sizeof(vm_page_t *), 0); + sector->s_pages = kzalloc(vm_page_order_to_pages(sector->s_size) * sizeof(vm_page_t), 0); } sector->s_pages[page_number].p_sector = sector_number; @@ -164,8 +164,7 @@ void vm_sparse_init(void) char sector_size_str[64]; 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 = kzalloc(sizeof(vm_sector_t) * nr_sectors, 0); sector_array_count = nr_sectors; for (unsigned int i = 0; i < nr_sectors; i++) { @@ -184,7 +183,7 @@ void vm_sparse_init(void) for (uintptr_t i = it.it_base; i < it.it_limit; i += VM_PAGE_SIZE) { vm_page_t *pg = get_or_create_page(i); - memset(pg, 0x0, sizeof *pg); + pg->p_flags = 0; } } @@ -204,7 +203,6 @@ void vm_sparse_init(void) continue; } - memset(pg, 0x0, sizeof *pg); pg->p_flags = VM_PAGE_RESERVED; } }