@@ -1762,7 +1762,8 @@ static zend_always_inline void *zend_mm_realloc_heap(zend_mm_heap *heap, void *p
17621762 /* truncation */
17631763 ret = zend_mm_alloc_small (heap , ZEND_MM_SMALL_SIZE_TO_BIN (size ) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
17641764 copy_size = use_copy_size ? MIN (size , copy_size ) : size ;
1765- ZEND_ASAN_UNPOISON_MEMORY_REGION (ret , copy_size );
1765+ ZEND_ASAN_UNPOISON_MEMORY_REGION (ret , size );
1766+ ZEND_ASAN_UNPOISON_MEMORY_REGION (ptr , copy_size );
17661767 memcpy (ret , ptr , copy_size );
17671768 zend_mm_free_small (heap , ptr , old_bin_num );
17681769 } else {
@@ -1778,7 +1779,8 @@ static zend_always_inline void *zend_mm_realloc_heap(zend_mm_heap *heap, void *p
17781779#endif
17791780 ret = zend_mm_alloc_small (heap , ZEND_MM_SMALL_SIZE_TO_BIN (size ) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
17801781 copy_size = use_copy_size ? MIN (old_size , copy_size ) : old_size ;
1781- ZEND_ASAN_UNPOISON_MEMORY_REGION (ret , copy_size );
1782+ ZEND_ASAN_UNPOISON_MEMORY_REGION (ret , size );
1783+ ZEND_ASAN_UNPOISON_MEMORY_REGION (ptr , copy_size );
17821784 memcpy (ret , ptr , copy_size );
17831785 zend_mm_free_small (heap , ptr , old_bin_num );
17841786#if ZEND_MM_STAT
@@ -2803,8 +2805,8 @@ ZEND_MM_BINS_INFO(_ZEND_BIN_ALLOCATOR, ZEND_MM_MIN_USEABLE_BIN_SIZE, y)
28032805
28042806ZEND_API void * ZEND_FASTCALL _emalloc_large (size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC )
28052807{
2806- ZEND_MM_CUSTOM_ALLOCATOR (size );
28072808 ZEND_ASAN_UNPOISON_MEMORY_REGION (AG (mm_heap ), sizeof (zend_mm_heap ));
2809+ ZEND_MM_CUSTOM_ALLOCATOR (size );
28082810 void * ptr = zend_mm_alloc_large_ex (AG (mm_heap ), size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
28092811 ZEND_ASAN_POISON_MEMORY_REGION (AG (mm_heap ), sizeof (zend_mm_heap ));
28102812 ZEND_ASAN_UNPOISON_MEMORY_REGION (ptr , size );
@@ -2813,8 +2815,8 @@ ZEND_API void* ZEND_FASTCALL _emalloc_large(size_t size ZEND_FILE_LINE_DC ZEND_F
28132815
28142816ZEND_API void * ZEND_FASTCALL _emalloc_huge (size_t size )
28152817{
2816- ZEND_MM_CUSTOM_ALLOCATOR (size );
28172818 ZEND_ASAN_UNPOISON_MEMORY_REGION (AG (mm_heap ), sizeof (zend_mm_heap ));
2819+ ZEND_MM_CUSTOM_ALLOCATOR (size );
28182820 void * ptr = zend_mm_alloc_huge (AG (mm_heap ), size );
28192821 ZEND_ASAN_POISON_MEMORY_REGION (AG (mm_heap ), sizeof (zend_mm_heap ));
28202822 ZEND_ASAN_UNPOISON_MEMORY_REGION (ptr , size );
@@ -2824,9 +2826,11 @@ ZEND_API void* ZEND_FASTCALL _emalloc_huge(size_t size)
28242826#if ZEND_DEBUG
28252827# define _ZEND_BIN_FREE (_num , _size , _elements , _pages , _min_size , y ) \
28262828 ZEND_API void ZEND_FASTCALL _efree_ ## _size(void *ptr) { \
2829+ ZEND_ASAN_UNPOISON_MEMORY_REGION(AG(mm_heap), sizeof(zend_mm_heap)); \
28272830 ZEND_MM_CUSTOM_DEALLOCATOR(ptr); \
28282831 if (_size < _min_size) { \
28292832 _efree_ ## _min_size(ptr); \
2833+ ZEND_ASAN_POISON_MEMORY_REGION(AG(mm_heap), sizeof(zend_mm_heap)); \
28302834 return; \
28312835 } \
28322836 { \
@@ -2838,17 +2842,18 @@ ZEND_API void* ZEND_FASTCALL _emalloc_huge(size_t size)
28382842 ZEND_MM_ASSERT (chunk -> map [page_num ] & ZEND_MM_IS_SRUN ); \
28392843 ZEND_MM_ASSERT (ZEND_MM_SRUN_BIN_NUM (chunk -> map [page_num ]) == _num ); \
28402844 ZEND_ASAN_POISON_CHUNK_HEADER_NOT_HEAP (chunk , AG (mm_heap )); \
2841- ZEND_ASAN_UNPOISON_MEMORY_REGION (AG (mm_heap ), sizeof (zend_mm_heap )); \
28422845 zend_mm_free_small (AG (mm_heap ), ptr , _num ); \
28432846 ZEND_ASAN_POISON_MEMORY_REGION (AG (mm_heap ), sizeof (zend_mm_heap )); \
28442847 } \
28452848 }
28462849#else
28472850# define _ZEND_BIN_FREE (_num , _size , _elements , _pages , _min_size , y ) \
28482851 ZEND_API void ZEND_FASTCALL _efree_ ## _size(void *ptr) { \
2852+ ZEND_ASAN_UNPOISON_MEMORY_REGION(AG(mm_heap), sizeof(zend_mm_heap)); \
28492853 ZEND_MM_CUSTOM_DEALLOCATOR(ptr); \
28502854 if (_size < _min_size) { \
28512855 _efree_ ## _min_size(ptr); \
2856+ ZEND_ASAN_POISON_MEMORY_REGION(AG(mm_heap), sizeof(zend_mm_heap)); \
28522857 return; \
28532858 } \
28542859 { \
@@ -2867,15 +2872,15 @@ ZEND_MM_BINS_INFO(_ZEND_BIN_FREE, ZEND_MM_MIN_USEABLE_BIN_SIZE, y)
28672872
28682873ZEND_API void ZEND_FASTCALL _efree_large (void * ptr , size_t size )
28692874{
2875+ ZEND_ASAN_UNPOISON_MEMORY_REGION (AG (mm_heap ), sizeof (zend_mm_heap ));
2876+
28702877 ZEND_MM_CUSTOM_DEALLOCATOR (ptr );
28712878 {
28722879 size_t page_offset = ZEND_MM_ALIGNED_OFFSET (ptr , ZEND_MM_CHUNK_SIZE );
28732880 zend_mm_chunk * chunk = (zend_mm_chunk * )ZEND_MM_ALIGNED_BASE (ptr , ZEND_MM_CHUNK_SIZE );
28742881 int page_num = page_offset / ZEND_MM_PAGE_SIZE ;
28752882 uint32_t pages_count = ZEND_MM_ALIGNED_SIZE_EX (size , ZEND_MM_PAGE_SIZE ) / ZEND_MM_PAGE_SIZE ;
28762883
2877- ZEND_ASAN_UNPOISON_MEMORY_REGION (AG (mm_heap ), sizeof (zend_mm_heap ));
2878-
28792884 ZEND_ASAN_UNPOISON_MEMORY_REGION (chunk , sizeof (zend_mm_chunk ));
28802885 ZEND_MM_CHECK (chunk -> heap == AG (mm_heap ) && ZEND_MM_ALIGNED_OFFSET (page_offset , ZEND_MM_PAGE_SIZE ) == 0 , "zend_mm_heap corrupted" );
28812886 ZEND_MM_ASSERT (chunk -> map [page_num ] & ZEND_MM_IS_LRUN );
@@ -2892,9 +2897,8 @@ ZEND_API void ZEND_FASTCALL _efree_large(void *ptr, size_t size)
28922897
28932898ZEND_API void ZEND_FASTCALL _efree_huge (void * ptr , size_t size )
28942899{
2895-
2896- ZEND_MM_CUSTOM_DEALLOCATOR (ptr );
28972900 ZEND_ASAN_UNPOISON_MEMORY_REGION (AG (mm_heap ), sizeof (zend_mm_heap ));
2901+ ZEND_MM_CUSTOM_DEALLOCATOR (ptr );
28982902 zend_mm_free_huge (AG (mm_heap ), ptr );
28992903 ZEND_ASAN_POISON_MEMORY_REGION (AG (mm_heap ), sizeof (zend_mm_heap ));
29002904}
@@ -2911,7 +2915,7 @@ ZEND_API void* ZEND_FASTCALL _emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LI
29112915 }
29122916#endif
29132917 void * ptr = zend_mm_alloc_heap (AG (mm_heap ), size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC );
2914- printf ("Alloced %p\n" , ptr );
2918+ printf ("Alloced %p of size %zu \n" , ptr , size );
29152919 ZEND_ASAN_POISON_MEMORY_REGION (AG (mm_heap ), sizeof (zend_mm_heap ));
29162920 return ptr ;
29172921}
0 commit comments