Bug #72040 [Opn->Csd]: AddressSanitizer: heap-use-after-free zend_alloc.c:924 zend_mm_del_segment

From: Date: Thu, 14 Jul 2016 09:32:40 +0000
Subject: Bug #72040 [Opn->Csd]: AddressSanitizer: heap-use-after-free zend_alloc.c:924 zend_mm_del_segment
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-202302@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=72040&edit=1 ID: 72040 Updated by: dmitry@php.net Reported by: fernando at null-life dot com Summary: AddressSanitizer: heap-use-after-free zend_alloc.c:924 zend_mm_del_segment -Status: Open +Status: Closed Type: Bug Package: Reproducible crash Operating System: Linux PHP Version: 5.6.20 -Assigned To: +Assigned To: dmitry Block user comment: N Private report: N New Comment: Graceful execution time-out handling is implemented in PHP-7.1. Previous Comments: ------------------------------------------------------------------------ [2016-04-19 09:46:16] dmitry@php.net PHP doesn't handle execution time-out gracefully. In some cases it may cause crash on request shutdown. exit_on_timeout=1 in php.ini should minimize the risk. The only way to fix this properly - is delaying the actual signal handling until the safe place. E.g like PHP on Windows do, setting EG(timed_out) in signal handler, and checking it from time to time in interpreter. However, this approach won't interrupt long running internal functions. ------------------------------------------------------------------------ [2016-04-19 01:45:00] fernando at null-life dot com I can't ask my fuzzer to make sense :) but please take a look, it keeps appearing on my fuzzing session, seems to happen also if the shutdown occurs during fgetcsv call too. ------------------------------------------------------------------------ [2016-04-18 00:31:26] stas@php.net Does not look like a security issue - specially crafted code that also makes little sense. ------------------------------------------------------------------------ [2016-04-17 06:53:44] fernando at null-life dot com Description: ------------ 1. compile PHP 5.6.20 with ASAN 2. Run attached script on a while loop, sometimes you will get the ASAN crash. while true; do /home/fmunozs/phpgit/php56/sapi/cli/php -n jet.php ; done if php_request_shutdown is called during the fscanf, ASAN reports a heap-use-after-free in some cases. Test script: --------------- <?php set_time_limit(1); $arr = []; for($i=0;$i<165536; ++$i) { $arr[$i]= "aa"; } $var1=fopen("/dev/zero", "r"); $var2="AAA"; try{fscanf($var1, $var2);}catch(Exception $a) {} Expected result: ---------------- No warning Actual result: -------------- Fatal error: Maximum execution time of 1 second exceeded in /ramdisk/wtf/wtf/jet.php on line 7 ================================================================= ==29856==ERROR: AddressSanitizer: heap-use-after-free on address 0xac533804 at pc 0x0930ffba bp 0xbfdf0358 sp 0xbfdf0348 READ of size 4 at 0xac533804 thread T0 #0 0x930ffb9 in zend_mm_del_segment /home/fmunozs/phpgit/php56/Zend/zend_alloc.c:924 #1 0x930ffb9 in _zend_mm_free_int /home/fmunozs/phpgit/php56/Zend/zend_alloc.c:2115 #2 0x930ffb9 in _efree /home/fmunozs/phpgit/php56/Zend/zend_alloc.c:2440 #3 0x94d1d4f in zend_hash_destroy /home/fmunozs/phpgit/php56/Zend/zend_hash.c:553 #4 0x94612d1 in _zval_dtor_func /home/fmunozs/phpgit/php56/Zend/zend_variables.c:45 #5 0x93d83e8 in _zval_dtor /home/fmunozs/phpgit/php56/Zend/zend_variables.h:35 #6 0x93d83e8 in i_zval_ptr_dtor /home/fmunozs/phpgit/php56/Zend/zend_execute.h:79 #7 0x93d83e8 in _zval_ptr_dtor /home/fmunozs/phpgit/php56/Zend/zend_execute_API.c:424 #8 0x94d3f53 in i_zend_hash_bucket_delete /home/fmunozs/phpgit/php56/Zend/zend_hash.c:182 #9 0x94d3f53 in zend_hash_bucket_delete /home/fmunozs/phpgit/php56/Zend/zend_hash.c:192 #10 0x94d3f53 in zend_hash_graceful_reverse_destroy /home/fmunozs/phpgit/php56/Zend/zend_hash.c:613 #11 0x93daf4d in shutdown_executor /home/fmunozs/phpgit/php56/Zend/zend_execute_API.c:244 #12 0x9467c8b in zend_deactivate /home/fmunozs/phpgit/php56/Zend/zend.c:960 #13 0x91a88d0 in php_request_shutdown /home/fmunozs/phpgit/php56/main/main.c:1899 #14 0x9a83ac3 in do_cli /home/fmunozs/phpgit/php56/sapi/cli/php_cli.c:1177 #15 0x808a502 in main /home/fmunozs/phpgit/php56/sapi/cli/php_cli.c:1378 #16 0xb6dcd645 in __libc_start_main (/lib/i386-linux-gnu/libc.so.6+0x18645) #17 0x808aaba (/home/fmunozs/phpgit/php56/sapi/cli/php+0x808aaba) 0xac533804 is located 4 bytes inside of 13369344-byte region [0xac533800,0xad1f3800) freed by thread T0 here: #0 0xb727f06c in __interceptor_realloc (/usr/lib/i386-linux-gnu/libasan.so.2+0x9706c) #1 0x92e89cb in zend_mm_mem_malloc_realloc /home/fmunozs/phpgit/php56/Zend/zend_alloc.c:292 previously allocated by thread T0 here: #0 0xb727f06c in __interceptor_realloc (/usr/lib/i386-linux-gnu/libasan.so.2+0x9706c) #1 0x92e89cb in zend_mm_mem_malloc_realloc /home/fmunozs/phpgit/php56/Zend/zend_alloc.c:292 SUMMARY: AddressSanitizer: heap-use-after-free /home/fmunozs/phpgit/php56/Zend/zend_alloc.c:924 zend_mm_del_segment Shadow bytes around the buggy address: 0x358a66b0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x358a66c0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x358a66d0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x358a66e0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x358a66f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa =>0x358a6700:[fd]fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd 0x358a6710: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd 0x358a6720: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd 0x358a6730: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd 0x358a6740: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd 0x358a6750: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd Shadow byte legend (one shadow byte represents 8 application bytes): Addressable: 00 Partially addressable: 01 02 03 04 05 06 07 Heap left redzone: fa Heap right redzone: fb Freed heap region: fd Stack left redzone: f1 Stack mid redzone: f2 Stack right redzone: f3 Stack partial redzone: f4 Stack after return: f5 Stack use after scope: f8 Global redzone: f9 Global init order: f6 Poisoned by user: f7 Container overflow: fc Array cookie: ac Intra object redzone: bb ASan internal: fe ==29856==ABORTING ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=72040&edit=1

« previous php.bugs (#202302) next »