Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit af330b3

Browse files
Use a single knob
1 parent 01735b1 commit af330b3

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 and 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)

AltStyle によって変換されたページ (->オリジナル) /