Skip to content

Commit c9385ee

Browse files
authored
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. Closes GH-7923.
1 parent e85f812 commit c9385ee

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

Zend/zend_alloc.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -425,12 +425,14 @@ static void *zend_mm_mmap_fixed(void *addr, size_t size)
425425
int flags = MAP_PRIVATE | MAP_ANON;
426426
#if defined(MAP_EXCL)
427427
flags |= MAP_FIXED | MAP_EXCL;
428+
#elif defined(MAP_TRYFIXED)
429+
flags |= MAP_TRYFIXED;
428430
#endif
429431
/* MAP_FIXED leads to discarding of the old mapping, so it can't be used. */
430432
void *ptr = mmap(addr, size, PROT_READ | PROT_WRITE, flags /*| MAP_POPULATE | MAP_HUGETLB*/, ZEND_MM_FD, 0);
431433

432434
if (ptr == MAP_FAILED) {
433-
#if ZEND_MM_ERROR && !defined(MAP_EXCL)
435+
#if ZEND_MM_ERROR && !defined(MAP_EXCL) && !defined(MAP_TRYFIXED)
434436
fprintf(stderr, "\nmmap() failed: [%d] %s\n", errno, strerror(errno));
435437
#endif
436438
return NULL;

0 commit comments

Comments
 (0)