From aca961c774924f76be707be42003e67184d79225 Mon Sep 17 00:00:00 2001 From: Ben Gamari Date: Mon, 19 Apr 2021 14:07:21 -0400 Subject: rts/m32: Fix bounds check Previously we would check only that the *start* of the mapping was in the bottom 32-bits of address space. However, we need the *entire* mapping to be in low memory. Fix this. Noticed by @Phyx. --- rts/linker/M32Alloc.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/rts/linker/M32Alloc.c b/rts/linker/M32Alloc.c index e7c697bf60..cd8751b3b0 100644 --- a/rts/linker/M32Alloc.c +++ b/rts/linker/M32Alloc.c @@ -244,8 +244,9 @@ m32_alloc_page(void) * pages. */ const size_t pgsz = getPageSize(); - uint8_t *chunk = mmapAnonForLinker(pgsz * M32_MAP_PAGES); - if (chunk > (uint8_t *) 0xffffffff) { + const size_t map_sz = pgsz * M32_MAP_PAGES; + uint8_t *chunk = mmapAnonForLinker(map_sz); + if (chunk + map_sz > (uint8_t *) 0xffffffff) { barf("m32_alloc_page: failed to get allocation in lower 32-bits"); } -- cgit v1.2.1