From 4b589612198a342ab7bd2d3b8607d9ba0a82736c Mon Sep 17 00:00:00 2001 From: David Carlier Date: Mon, 10 Jan 2022 14:15:16 +0000 Subject: [PATCH] zend_mm_map_fixed using MAP_TRYFIXED on NetBSD.DragonFlyBSD. attempts to map on addr but does not replace it if already present. Note on OpenBSD it has no effect, addr is used just as a hint. --- Zend/zend_alloc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c index ace032e5e72d5..a5fa9fa767aed 100644 --- a/Zend/zend_alloc.c +++ b/Zend/zend_alloc.c @@ -425,12 +425,14 @@ static void *zend_mm_mmap_fixed(void *addr, size_t size) int flags = MAP_PRIVATE | MAP_ANON; #if defined(MAP_EXCL) flags |= MAP_FIXED | MAP_EXCL; +#elif defined(MAP_TRYFIXED) + flags |= MAP_TRYFIXED; #endif /* MAP_FIXED leads to discarding of the old mapping, so it can't be used. */ void *ptr = mmap(addr, size, PROT_READ | PROT_WRITE, flags /*| MAP_POPULATE | MAP_HUGETLB*/, ZEND_MM_FD, 0); if (ptr == MAP_FAILED) { -#if ZEND_MM_ERROR && !defined(MAP_EXCL) +#if ZEND_MM_ERROR && !defined(MAP_EXCL) && !defined(MAP_TRYFIXED) fprintf(stderr, "\nmmap() failed: [%d] %s\n", errno, strerror(errno)); #endif return NULL;