Skip to content

Commit 0904399

Browse files
committed
Fixes
1 parent e81cfc6 commit 0904399

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

Zend/zend_alloc.c

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

28042806
ZEND_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

28142816
ZEND_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

28682873
ZEND_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

28932898
ZEND_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

Comments
 (0)