diff options
| author | Ben Gamari <ben@smart-cactus.org> | 2021-04-19 14:07:21 -0400 | 
|---|---|---|
| committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2021-04-26 23:58:16 -0400 | 
| commit | 72c1812feecd2aff2a96b629063ba90a2f4cdb7b (patch) | |
| tree | b49c991e10a9cfe34ea57657807795c46d09e108 | |
| parent | b9e2491dee6bdc1edc35a023aa25d46f82622f23 (diff) | |
| download | haskell-72c1812feecd2aff2a96b629063ba90a2f4cdb7b.tar.gz | |
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.
| -rw-r--r-- | rts/linker/M32Alloc.c | 5 | 
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");      }  | 
