CeDOS - Commit c61ba380

kernel: Memory holes fixed in paging subsystem CeDOS crashed frequently on real hardware, caused by uninitialized memory. With this and the previous commit, it seems to run very stable.
Celina Sophie Kalus
Fri, 08 Dec 2023 21:46:25 +0100
1 files changed, 6 insertions(+), 3 deletions(-)
M kernel/mm/paging.ckernel/mm/paging.c

@@ -71,6 +71,8 @@ if (!is_present(page_dir[dir_index])) {

// acquire new page table PHYS_ADDR new_page_table = get_free_page(); page_dir[dir_index] = MAKE_PAGE_ENTRY(new_page_table, PAGE_TABLE_FLAGS); + inv_all_pages(); + memset(page_table, 0, PAGE_SIZE); } // map page

@@ -95,6 +97,8 @@ if (!is_present(page_dir[dir_index])) {

// acquire new page table void *new_page_table = get_free_page(); page_dir[dir_index] = MAKE_PAGE_ENTRY(new_page_table, PAGE_TABLE_FLAGS); + inv_all_pages(); + memset(page_table, 0, PAGE_SIZE); } // map page

@@ -126,9 +130,8 @@ uint32_t part_length = (offset + length <= PAGE_SIZE) ? length : PAGE_SIZE - offset;

PRINT_DBG("src=%p dest=%p length=%i offset=%i plen=%i\n", src, dest, length, offset, part_length); - for (uint32_t i = 0; i < part_length; i++) { - ((uint8_t*)mount_dest)[offset + i] = ((uint8_t*)src)[i]; - } + memset(mount_dest, 0, PAGE_SIZE); + memcpy((uint8_t*)(mount_dest) + offset, src, part_length); dest += part_length; src += part_length;