1
0
mirror of https://github.com/php/php-src.git synced 2026-04-28 18:53:33 +02:00

Fixed bug #70977, #70973 (Segmentation fault with opcache.huge_code_pages=1)

This commit is contained in:
Xinchen Hui
2015-11-27 07:30:37 -08:00
parent a347b0be48
commit e9a8d7ff1d
2 changed files with 26 additions and 3 deletions
+4
View File
@@ -29,6 +29,10 @@ PHP NEWS
. Fixed LOB implementation size_t/zend_long mismatch reported
by gcov. (Senthil)
- Opcache:
. Fixed bug #70977 (Segmentation fault with opcache.huge_code_pages=1).
(Laruence)
- Phpdbg:
. Fixed stderr being written to stdout. (Bob)
+22 -3
View File
@@ -2515,6 +2515,9 @@ static int accel_remap_huge_pages(void *start, size_t size, const char *name, si
MAP_PRIVATE | MAP_ANONYMOUS,
-1, 0);
if (mem == MAP_FAILED) {
zend_error(E_WARNING,
ACCELERATOR_PRODUCT_NAME " huge_code_pages: mmap failed: %s (%d)",
strerror(errno), errno);
return -1;
}
memcpy(mem, start, size);
@@ -2525,20 +2528,36 @@ static int accel_remap_huge_pages(void *start, size_t size, const char *name, si
MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED | MAP_HUGETLB,
-1, 0);
# endif
# ifdef MADV_HUGEPAGE
if (ret == MAP_FAILED) {
ret = mmap(start, size,
PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED,
-1, 0);
/* this should never happen? */
ZEND_ASSERT(ret != MAP_FAILED);
# ifdef MADV_HUGEPAGE
if (-1 == madvise(start, size, MADV_HUGEPAGE)) {
memcpy(start, mem, size);
mprotect(start, size, PROT_READ | PROT_EXEC);
munmap(mem, size);
zend_error(E_WARNING,
ACCELERATOR_PRODUCT_NAME " huge_code_pages: madvise(HUGEPAGE) failed: %s (%d)",
strerror(errno), errno);
return -1;
}
}
# else
memcpy(start, mem, size);
mprotect(start, size, PROT_READ | PROT_EXEC);
munmap(mem, size);
zend_error(E_WARNING,
ACCELERATOR_PRODUCT_NAME "huge_code_pages: mmap(HUGETLB) failed: %s (%d)",
strerror(errno), errno);
return -1;
# endif
}
if (ret == start) {
memcpy(start, mem, size);
memcpy(start, mem, size);
mprotect(start, size, PROT_READ | PROT_EXEC);
}
munmap(mem, size);