From 2116682cac0f429d7c9eded4445299e377796763 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Sun, 13 Oct 2024 21:16:44 -0400 Subject: [PATCH] bootloader: Round up heap region allocation sizes to B_PAGE_SIZE. In testing, the allocation sizes I was seeing were all multiples of the page size anyway, but of course there's no requirement that they are, so we need to round here. Pointed out by mmlr. --- src/system/boot/arch/m68k/mmu.cpp | 1 + src/system/boot/platform/amiga_m68k/mmu.cpp | 1 + src/system/boot/platform/atari_m68k/mmu.cpp | 1 + src/system/boot/platform/bios_ia32/mmu.cpp | 1 + 4 files changed, 4 insertions(+) diff --git a/src/system/boot/arch/m68k/mmu.cpp b/src/system/boot/arch/m68k/mmu.cpp index cb48df052b..741296b940 100644 --- a/src/system/boot/arch/m68k/mmu.cpp +++ b/src/system/boot/arch/m68k/mmu.cpp @@ -668,6 +668,7 @@ platform_free_region(void *address, size_t size) ssize_t platform_allocate_heap_region(size_t size, void **_base) { + size = ROUNDUP(size, B_PAGE_SIZE); addr_t base = get_next_physical_address(size); if (base == 0) return B_NO_MEMORY; diff --git a/src/system/boot/platform/amiga_m68k/mmu.cpp b/src/system/boot/platform/amiga_m68k/mmu.cpp index 0f12363fbe..d03a7210cf 100644 --- a/src/system/boot/platform/amiga_m68k/mmu.cpp +++ b/src/system/boot/platform/amiga_m68k/mmu.cpp @@ -666,6 +666,7 @@ platform_free_region(void *address, size_t size) ssize_t platform_allocate_heap_region(size_t size, void **_base) { + size = ROUNDUP(size, B_PAGE_SIZE); addr_t base = get_next_physical_address(size); if (base == 0) return B_NO_MEMORY; diff --git a/src/system/boot/platform/atari_m68k/mmu.cpp b/src/system/boot/platform/atari_m68k/mmu.cpp index 438c9cdb94..92fedd80f1 100644 --- a/src/system/boot/platform/atari_m68k/mmu.cpp +++ b/src/system/boot/platform/atari_m68k/mmu.cpp @@ -671,6 +671,7 @@ platform_free_region(void *address, size_t size) ssize_t platform_allocate_heap_region(size_t size, void **_base) { + size = ROUNDUP(size, B_PAGE_SIZE); addr_t base = get_next_physical_address(size); if (base == 0) return B_NO_MEMORY; diff --git a/src/system/boot/platform/bios_ia32/mmu.cpp b/src/system/boot/platform/bios_ia32/mmu.cpp index b070665e97..d61d15a0d6 100644 --- a/src/system/boot/platform/bios_ia32/mmu.cpp +++ b/src/system/boot/platform/bios_ia32/mmu.cpp @@ -826,6 +826,7 @@ platform_free_region(void *address, size_t size) ssize_t platform_allocate_heap_region(size_t size, void **_base) { + size = ROUNDUP(size, B_PAGE_SIZE); addr_t base = allocate_physical(size, false); if (base == 0) return B_NO_MEMORY;