summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/libc/stdlib/malloc.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/lib/libc/stdlib/malloc.c b/src/lib/libc/stdlib/malloc.c
index b5eb212227..17ba5fb127 100644
--- a/src/lib/libc/stdlib/malloc.c
+++ b/src/lib/libc/stdlib/malloc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: malloc.c,v 1.295 2023/12/19 06:59:28 otto Exp $ */ 1/* $OpenBSD: malloc.c,v 1.296 2024/03/30 07:50:39 miod Exp $ */
2/* 2/*
3 * Copyright (c) 2008, 2010, 2011, 2016, 2023 Otto Moerbeek <otto@drijf.net> 3 * Copyright (c) 2008, 2010, 2011, 2016, 2023 Otto Moerbeek <otto@drijf.net>
4 * Copyright (c) 2012 Matthew Dempsky <matthew@openbsd.org> 4 * Copyright (c) 2012 Matthew Dempsky <matthew@openbsd.org>
@@ -1428,7 +1428,7 @@ _malloc_init(int from_rthreads)
1428 } 1428 }
1429 if (!mopts.malloc_canary) { 1429 if (!mopts.malloc_canary) {
1430 char *p; 1430 char *p;
1431 size_t sz, d_avail; 1431 size_t sz, roundup_sz, d_avail;
1432 1432
1433 omalloc_init(); 1433 omalloc_init();
1434 /* 1434 /*
@@ -1436,20 +1436,20 @@ _malloc_init(int from_rthreads)
1436 * randomise offset inside the page at which the dir_infos 1436 * randomise offset inside the page at which the dir_infos
1437 * lay (subject to alignment by 1 << MALLOC_MINSHIFT) 1437 * lay (subject to alignment by 1 << MALLOC_MINSHIFT)
1438 */ 1438 */
1439 sz = mopts.malloc_mutexes * sizeof(*d) + 2 * MALLOC_PAGESIZE; 1439 sz = mopts.malloc_mutexes * sizeof(*d);
1440 if ((p = MMAPNONE(sz, 0)) == MAP_FAILED) 1440 roundup_sz = (sz + MALLOC_PAGEMASK) & ~MALLOC_PAGEMASK;
1441 if ((p = MMAPNONE(roundup_sz + 2 * MALLOC_PAGESIZE, 0)) ==
1442 MAP_FAILED)
1441 wrterror(NULL, "malloc_init mmap1 failed"); 1443 wrterror(NULL, "malloc_init mmap1 failed");
1442 if (mprotect(p + MALLOC_PAGESIZE, mopts.malloc_mutexes * 1444 if (mprotect(p + MALLOC_PAGESIZE, roundup_sz,
1443 sizeof(*d), PROT_READ | PROT_WRITE)) 1445 PROT_READ | PROT_WRITE))
1444 wrterror(NULL, "malloc_init mprotect1 failed"); 1446 wrterror(NULL, "malloc_init mprotect1 failed");
1445 if (mimmutable(p, sz)) 1447 if (mimmutable(p, roundup_sz + 2 * MALLOC_PAGESIZE))
1446 wrterror(NULL, "malloc_init mimmutable1 failed"); 1448 wrterror(NULL, "malloc_init mimmutable1 failed");
1447 d_avail = (((mopts.malloc_mutexes * sizeof(*d) + 1449 d_avail = (roundup_sz - sz) >> MALLOC_MINSHIFT;
1448 MALLOC_PAGEMASK) & ~MALLOC_PAGEMASK) -
1449 (mopts.malloc_mutexes * sizeof(*d))) >> MALLOC_MINSHIFT;
1450 d = (struct dir_info *)(p + MALLOC_PAGESIZE + 1450 d = (struct dir_info *)(p + MALLOC_PAGESIZE +
1451 (arc4random_uniform(d_avail) << MALLOC_MINSHIFT)); 1451 (arc4random_uniform(d_avail) << MALLOC_MINSHIFT));
1452 STATS_ADD(d[1].malloc_used, sz); 1452 STATS_ADD(d[1].malloc_used, roundup_sz + 2 * MALLOC_PAGESIZE);
1453 for (i = 0; i < mopts.malloc_mutexes; i++) 1453 for (i = 0; i < mopts.malloc_mutexes; i++)
1454 mopts.malloc_pool[i] = &d[i]; 1454 mopts.malloc_pool[i] = &d[i];
1455 mopts.internal_funcs = 1; 1455 mopts.internal_funcs = 1;