aboutsummaryrefslogtreecommitdiff
path: root/libexec
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2021-10-11 16:13:31 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2021-10-12 23:37:09 +0000
commit19e008e7f79ce55182d227be8513b3fa520471d8 (patch)
tree31b3de2d3dd74af95d99666c60e639e55047ecb6 /libexec
parent0b72d2965d68113bce16f6cccea77257283ef0a7 (diff)
Diffstat (limited to 'libexec')
-rw-r--r--libexec/rtld-elf/rtld_malloc.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/libexec/rtld-elf/rtld_malloc.c b/libexec/rtld-elf/rtld_malloc.c
index f22c3c727c73..64218b5bb786 100644
--- a/libexec/rtld-elf/rtld_malloc.c
+++ b/libexec/rtld-elf/rtld_malloc.c
@@ -184,7 +184,9 @@ morecore(int bucket)
nblks = 1;
}
if (amt > pagepool_end - pagepool_start)
- if (morepages(amt/pagesz + NPOOLPAGES) == 0)
+ if (morepages(amt / pagesz + NPOOLPAGES) == 0 &&
+ /* Retry with min required size */
+ morepages(amt / pagesz) == 0)
return;
op = (union overhead *)pagepool_start;
pagepool_start += amt;
@@ -269,6 +271,8 @@ morepages(int n)
}
}
+ if (pagepool_start == MAP_FAILED)
+ pagepool_start = 0;
offset = (uintptr_t)pagepool_start - rounddown2(
(uintptr_t)pagepool_start, pagesz);