diff --git a/NEWS b/NEWS index 26b93c5bcb6..85f1b21a986 100644 --- a/NEWS +++ b/NEWS @@ -5,11 +5,13 @@ PHP NEWS - Core: . Fixed zend_call_stack build with Linux/uclibc-ng without thread support. (Fabrice Fontaine) - -- Core: . Fixed bug GH-13772 (Invalid execute_data->opline pointers in observer fcall handlers when JIT is enabled). (Bob) +- Fibers: + . Fixed bug GH-13903 (ASAN false positive underflow when executing copy()). + (nielsdos) + - FPM: . Fixed bug GH-13563 (Setting bool values via env in FPM config fails). (Jakub Zelenka) diff --git a/Zend/zend_fibers.c b/Zend/zend_fibers.c index e669ab6b533..d6a4e5f3693 100644 --- a/Zend/zend_fibers.c +++ b/Zend/zend_fibers.c @@ -62,6 +62,7 @@ #endif #ifdef __SANITIZE_ADDRESS__ +# include # include #endif @@ -300,6 +301,12 @@ static void zend_fiber_stack_free(zend_fiber_stack *stack) void *pointer = (void *) ((uintptr_t) stack->pointer - ZEND_FIBER_GUARD_PAGES * page_size); +#ifdef __SANITIZE_ADDRESS__ + /* If another mmap happens after unmapping, it may trigger the stale stack red zones + * so we have to unpoison it before unmapping. */ + ASAN_UNPOISON_MEMORY_REGION(pointer, stack->size + ZEND_FIBER_GUARD_PAGES * page_size); +#endif + #ifdef ZEND_WIN32 VirtualFree(pointer, 0, MEM_RELEASE); #else