Skip to content

Commit 18d14ea

Browse files
committed
Use a single knob
1 parent 01735b1 commit 18d14ea

File tree

1 file changed

+21
-22
lines changed

1 file changed

+21
-22
lines changed

Zend/zend_alloc.c

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -146,12 +146,11 @@ static size_t _real_page_size = ZEND_MM_PAGE_SIZE;
146146
# define ZEND_MM_ERROR 1 /* report system errors */
147147
#endif
148148
#ifndef ZEND_MM_HEAP_PROTECTION
149-
# define ZEND_MM_HEAP_PROTECTION 1 /* protect heap against corruptions */
150-
#endif
151-
#ifndef ZEND_MM_HEAP_SPRAYING_PROTECTION
152-
# define ZEND_MM_HEAP_SPRAYING_PROTECTION 1 /* protect against remote heap
153-
spraying or heap feng chui via
154-
environment / user input */
149+
/* Protect heap against:
150+
* - Freelist pointer corruption
151+
* - Heap spraying (heap feng shui) via environment / user input
152+
*/
153+
# define ZEND_MM_HEAP_PROTECTION 1
155154
#endif
156155

157156
#if ZEND_MM_HEAP_PROTECTION
@@ -226,7 +225,7 @@ typedef zend_mm_bitset zend_mm_page_map[ZEND_MM_PAGE_MAP_LEN]; /* 64B */
226225
#define ZEND_MM_FREE_SLOT_LEN (ZEND_MM_ZONE_LEN * ZEND_MM_ZONES)
227226
#define ZEND_MM_ZONE_DEFAULT 0
228227

229-
#if ZEND_MM_HEAP_SPRAYING_PROTECTION
228+
#if ZEND_MM_HEAP_PROTECTION
230229

231230
# define ZEND_MM_ZONES 2
232231

@@ -247,7 +246,7 @@ typedef zend_mm_bitset zend_mm_page_map[ZEND_MM_PAGE_MAP_LEN]; /* 64B */
247246
# define ZEND_MM_FREE_SLOT_EX(heap, chunk, bin_num) ((chunk)->zone_free_slot[(bin_num)])
248247
# define ZEND_MM_CHUNK_ZONE(heap, chunk) ((chunk)->zone)
249248

250-
#else /* ZEND_MM_HEAP_SPRAYING_PROTECTION */
249+
#else /* ZEND_MM_HEAP_PROTECTION */
251250

252251
# define ZEND_MM_ZONES 1
253252

@@ -262,7 +261,7 @@ typedef zend_mm_bitset zend_mm_page_map[ZEND_MM_PAGE_MAP_LEN]; /* 64B */
262261
# define ZEND_MM_FREE_SLOT_EX(heap, chunk, bin_num) ZEND_MM_FREE_SLOT(heap, bin_num)
263262
# define ZEND_MM_CHUNK_ZONE(heap, chunk) (&(heap)->zones[0])
264263

265-
#endif /* ZEND_MM_HEAP_SPRAYING_PROTECTION */
264+
#endif /* ZEND_MM_HEAP_PROTECTION */
266265

267266
#if UINTPTR_MAX == UINT64_MAX
268267
# define BSWAPPTR(u) ZEND_BYTES_SWAP64(u)
@@ -327,7 +326,7 @@ struct _zend_mm_heap {
327326
size_t peak; /* peak memory usage */
328327
#endif
329328
uintptr_t shadow_key; /* free slot shadow ptr xor key */
330-
#if ZEND_MM_HEAP_SPRAYING_PROTECTION
329+
#if ZEND_MM_HEAP_PROTECTION
331330
zend_mm_free_slot **zone_free_slot;
332331
#endif
333332
zend_mm_free_slot *free_slot[ZEND_MM_FREE_SLOT_LEN]; /* free lists for small sizes */
@@ -369,7 +368,7 @@ struct _zend_mm_heap {
369368

370369
struct _zend_mm_chunk {
371370
zend_mm_heap *heap;
372-
#if ZEND_MM_HEAP_SPRAYING_PROTECTION
371+
#if ZEND_MM_HEAP_PROTECTION
373372
zend_mm_free_slot **zone_free_slot;
374373
#endif
375374
zend_mm_chunk *next;
@@ -379,7 +378,7 @@ struct _zend_mm_chunk {
379378
uint32_t num;
380379
char reserve[64 - (sizeof(void*) * 3 + sizeof(uint32_t) * 3)];
381380
zend_mm_heap heap_slot; /* used only in main chunk */
382-
#if ZEND_MM_HEAP_SPRAYING_PROTECTION
381+
#if ZEND_MM_HEAP_PROTECTION
383382
zend_mm_zone *zone;
384383
#endif
385384
zend_mm_page_map free_map; /* 512 bits or 64 bytes */
@@ -950,7 +949,7 @@ static zend_always_inline void zend_mm_chunk_init(zend_mm_heap *heap, zend_mm_zo
950949
chunk->prev->next = chunk;
951950
chunk->next->prev = chunk;
952951
}
953-
#if ZEND_MM_HEAP_SPRAYING_PROTECTION
952+
#if ZEND_MM_HEAP_PROTECTION
954953
chunk->zone_free_slot = ZEND_MM_ZONE_FREE_SLOT(heap, (uintptr_t)(zone - &heap->zones[0]));
955954
chunk->zone = zone;
956955
#endif
@@ -2116,7 +2115,7 @@ static zend_mm_heap *zend_mm_init(void)
21162115
}
21172116
heap = &chunk->heap_slot;
21182117
chunk->heap = heap;
2119-
#if ZEND_MM_HEAP_SPRAYING_PROTECTION
2118+
#if ZEND_MM_HEAP_PROTECTION
21202119
chunk->zone_free_slot = ZEND_MM_ZONE_FREE_SLOT(heap, ZEND_MM_ZONE_DEFAULT);
21212120
chunk->zone = &heap->zones[0];
21222121
#endif
@@ -2129,11 +2128,11 @@ static zend_mm_heap *zend_mm_init(void)
21292128
chunk->map[0] = ZEND_MM_LRUN(ZEND_MM_FIRST_PAGE);
21302129
heap->main_chunk = chunk;
21312130
heap->cached_chunks = NULL;
2132-
#if ZEND_MM_HEAP_SPRAYING_PROTECTION
2131+
#if ZEND_MM_HEAP_PROTECTION
21332132
heap->zone_free_slot = ZEND_MM_ZONE_FREE_SLOT(heap, ZEND_MM_ZONE_DEFAULT);
21342133
#endif
21352134
heap->zones[0].chunks = chunk;
2136-
#if ZEND_MM_HEAP_SPRAYING_PROTECTION
2135+
#if ZEND_MM_HEAP_PROTECTION
21372136
heap->zones[1].chunks = NULL;
21382137
#endif
21392138
heap->chunks_count = 1;
@@ -2628,11 +2627,11 @@ ZEND_API void zend_mm_shutdown(zend_mm_heap *heap, bool full, bool silent)
26282627
heap->last_chunks_delete_boundary = 0;
26292628
heap->last_chunks_delete_count = 0;
26302629

2631-
#if ZEND_MM_HEAP_SPRAYING_PROTECTION
2630+
#if ZEND_MM_HEAP_PROTECTION
26322631
heap->zone_free_slot = ZEND_MM_ZONE_FREE_SLOT(heap, ZEND_MM_ZONE_DEFAULT);
26332632
#endif
26342633
heap->zones[0].chunks = p;
2635-
#if ZEND_MM_HEAP_SPRAYING_PROTECTION
2634+
#if ZEND_MM_HEAP_PROTECTION
26362635
heap->zones[1].chunks = NULL;
26372636
ZEND_MM_CHECK(p->zone == &heap->zones[0], "zend_mm_heap corrupted");
26382637
ZEND_MM_CHECK(p->zone_free_slot == ZEND_MM_ZONE_FREE_SLOT(heap, ZEND_MM_ZONE_DEFAULT), "zend_mm_heap corrupted");
@@ -2711,7 +2710,7 @@ static size_t alloc_globals_offset;
27112710
static zend_alloc_globals alloc_globals;
27122711
#endif
27132712

2714-
#if ZEND_MM_HEAP_SPRAYING_PROTECTION
2713+
#if ZEND_MM_HEAP_PROTECTION
27152714
# define ZEND_MM_ZONE_INPUT 1
27162715
#endif
27172716

@@ -2765,15 +2764,15 @@ ZEND_API bool is_zend_ptr(const void *ptr)
27652764

27662765
ZEND_API void zend_mm_input_begin(void)
27672766
{
2768-
#if ZEND_MM_HEAP_SPRAYING_PROTECTION
2767+
#if ZEND_MM_HEAP_PROTECTION
27692768
AG(use_input_zone)++;
27702769
AG(mm_heap)->zone_free_slot = ZEND_MM_ZONE_FREE_SLOT(AG(mm_heap), ZEND_MM_ZONE_INPUT);
27712770
#endif
27722771
}
27732772

27742773
ZEND_API void zend_mm_input_end(void)
27752774
{
2776-
#if ZEND_MM_HEAP_SPRAYING_PROTECTION
2775+
#if ZEND_MM_HEAP_PROTECTION
27772776
AG(use_input_zone)--;
27782777
if (!AG(use_input_zone)) {
27792778
AG(mm_heap)->zone_free_slot = ZEND_MM_ZONE_FREE_SLOT(AG(mm_heap), ZEND_MM_ZONE_DEFAULT);
@@ -2783,7 +2782,7 @@ ZEND_API void zend_mm_input_end(void)
27832782

27842783
ZEND_API bool zend_mm_check_in_input(void)
27852784
{
2786-
#if ZEND_MM_HEAP_SPRAYING_PROTECTION
2785+
#if ZEND_MM_HEAP_PROTECTION
27872786
return AG(use_input_zone);
27882787
#else
27892788
return true;

0 commit comments

Comments
 (0)