summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2021-04-19 14:07:21 -0400
committerBen Gamari <ben@smart-cactus.org>2021-04-19 14:07:21 -0400
commitaca961c774924f76be707be42003e67184d79225 (patch)
tree3b8759f98c72fb4cfaef9cf655fe9fda86f53c5a
parent40d2843686ecb08f9fce8691b833ba6517cfc6ec (diff)
downloadhaskell-wip/fix-m32.tar.gz
rts/m32: Fix bounds checkwip/fix-m32
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.
-rw-r--r--rts/linker/M32Alloc.c5
1 files 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");
}