Skip to content

Commit 2297e8c

Browse files
committedOct 9, 2023
Fixed possible use-after-free
1 parent 24e5e4e commit 2297e8c

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed
 

‎ext/opcache/jit/zend_jit_trace.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -2713,15 +2713,15 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
27132713
ZEND_ASSERT(ssa->var_info != NULL);
27142714

27152715
start = do_alloca(sizeof(int) * ssa->vars_count * 2 +
2716-
ZEND_MM_ALIGNED_SIZE(sizeof(uint8_t) * ssa->vars_count) +
2717-
ZEND_MM_ALIGNED_SIZE(sizeof(zend_op_array*) * ssa->vars_count),
2716+
ZEND_MM_ALIGNED_SIZE(sizeof(uint8_t) * ssa->vars_count),
27182717
use_heap);
27192718
if (!start) {
27202719
return NULL;
27212720
}
27222721
end = start + ssa->vars_count;
27232722
flags = (uint8_t*)(end + ssa->vars_count);
2724-
vars_op_array = (const zend_op_array**)(flags + ZEND_MM_ALIGNED_SIZE(sizeof(uint8_t) * ssa->vars_count));
2723+
checkpoint = zend_arena_checkpoint(CG(arena));
2724+
vars_op_array = zend_arena_calloc(&CG(arena), ssa->vars_count, sizeof(zend_op_array*));
27252725

27262726
memset(start, -1, sizeof(int) * ssa->vars_count * 2);
27272727
memset(flags, 0, sizeof(uint8_t) * ssa->vars_count);
@@ -3116,10 +3116,10 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
31163116

31173117
if (!count) {
31183118
free_alloca(start, use_heap);
3119+
zend_arena_release(&CG(arena), checkpoint);
31193120
return NULL;
31203121
}
31213122

3122-
checkpoint = zend_arena_checkpoint(CG(arena));
31233123
intervals = zend_arena_calloc(&CG(arena), ssa->vars_count, sizeof(zend_lifetime_interval));
31243124
memset(intervals, 0, sizeof(zend_lifetime_interval*) * ssa->vars_count);
31253125
list = zend_arena_alloc(&CG(arena), sizeof(zend_lifetime_interval) * count);

0 commit comments

Comments
 (0)