Bug #76047 [NEW]: Reproducible crash in zend_string_alloc

From: Date: Sun, 04 Mar 2018 09:50:27 +0000
Subject: Bug #76047 [NEW]: Reproducible crash in zend_string_alloc
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-214193@lists.php.net to get a copy of this message
From: kenashkov at gmail dot com Operating system: CentOS Linux release 7.0.1406 (C PHP version: 7.2.3 Package: Reproducible crash Bug Type: Bug Bug description:Reproducible crash in zend_string_alloc Description: ------------ Reproducible crash on every execution. The script is too big and I cant yet isolate a small reproducible example but I did narrow down a little change in the code that prevents the crash. Just assigning the value of a string variable to something (not even using this new var at all) goes around the problem: ------- $object->overloaded_property = $some_string;//produces a crash ------- $something = $some_string;//no longer crashes $object->overloaded_property = $some_string; ------- //and again a crash if $something is unset $something = $some_string; unset($something);//this triggers the crash again $object->overloaded_property = $some_string; ------ Maybe it has to do with the refcount. Other modifications of the code resulted in crashes in different places. I have given below the original bt (crash in PDOStatement->fetchAll()) but after modifications I got a crash in the file() function. PHP is compiled with: './configure' '--prefix=/web/php7.2' '--with-apxs2=/web/apache2.4-php7.2/bin/apxs' '--enable-bcmath' '--enable-calendar' '--enable-dbase' '--enable-exif' '--enable-ftp' '--enable-libxml' '--enable-mbstring' '--enable-pdo' '--enable-soap' '--enable-sockets' '--enable-zip' '--with-bz2' '--with-curl' '--with-gd' '--with-mcrypt' '--with-mhash' '--with-mime-magic' '--with-mysql=mysqlnd' '--with-openssl' '--with-pdo-sqlite=shared' '--with-pgsql' '--with-sqlite=shared' '--with-tidy' '--with-xsl' '--with-zlib' '--with-zlib-dir' '--with-pdo-mysql=mysqlnd' '--with-pdo-pgsql' '--with-jpeg-dir' '--with-png-dir' '--with-xpm-dir' '--with-ttf' '--with-freetype-dir' '--with-t1lib' '--enable-gd-native-ttf' '--with-mysqli=mysqlnd' '--with-imap-ssl' '--with-kerberos' '--with-gettext' '--enable-sysvsem' '--enable-sysvshm' '--enable-sysvmsg' '--enable-pcntl' '--enable-opcache' '--enable-debug' No opcache or xdebug enabled. Redis is the only PECL extension used by the code but I modified it to remove the need for it and the crashes are reproducible. Test script: --------------- I dont have a short one yet. I post this in the hope that someone may give me a hint what else to test, look for or trace. Actual result: -------------- First segfault without any code modifications: Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x7fffd47e8700 (LWP 5004)] 0x00007ffff2b796da in zend_mm_alloc_small (heap=0x7fffd3200040, size=232, bin_num=15, __zend_filename=0x7ffff341fa18 "/web/php-7.2.3/Zend/zend_string.h", __zend_lineno=134, __zend_orig_filename=0x0, __zend_orig_lineno=0) at /web/php-7.2.3/Zend/zend_alloc.c:1273 1273 heap->free_slot[bin_num] = p->next_free_slot; Missing separate debuginfos, use: debuginfo-install libtidy-0.99.0-31.20091203.el7.x86_64 (gdb) bt #0 0x00007ffff2b796da in zend_mm_alloc_small (heap=0x7fffd3200040, size=232, bin_num=15, __zend_filename=0x7ffff341fa18 "/web/php-7.2.3/Zend/zend_string.h", __zend_lineno=134, __zend_orig_filename=0x0, __zend_orig_lineno=0) at /web/php-7.2.3/Zend/zend_alloc.c:1273 #1 0x00007ffff2b7996d in zend_mm_alloc_heap (heap=0x7fffd3200040, size=232, __zend_filename=0x7ffff341fa18 "/web/php-7.2.3/Zend/zend_string.h", __zend_lineno=134, __zend_orig_filename=0x0, __zend_orig_lineno=0) at /web/php-7.2.3/Zend/zend_alloc.c:1344 #2 0x00007ffff2b7c44d in _emalloc (size=200, __zend_filename=0x7ffff341fa18 "/web/php-7.2.3/Zend/zend_string.h", __zend_lineno=134, __zend_orig_filename=0x0, __zend_orig_lineno=0) at /web/php-7.2.3/Zend/zend_alloc.c:2433 #3 0x00007ffff2af218a in zend_string_alloc (len=172, persistent=0) at /web/php-7.2.3/Zend/zend_string.h:134 #4 0x00007ffff2af21f3 in zend_string_init ( str=0x7fffd18de779 "KcGAXUg7vPDIT5DN7eu1wkT7eBz79ilDqpZfFhjgGruEl0hMPb+HhqJ70JxckyokN1ntznk98g6ZIP1fYB+b3lhh3E7w25mmwVhcM947/jFz4U437B95yPw/5Wv7wbsl6iCRLKmIOxH1agonv+pHrSa0nahmHuMt5p/kzvOv71E=\025XXXXXXXXXXXXXXXXXXXXX", len=172, persistent=0) at /web/php-7.2.3/Zend/zend_string.h:170 #5 0x00007ffff2af5193 in ps_fetch_string (zv=0x7fffd264f7a8, field=0x7fffa1dd0488, pack_len=0, row=0x7fffd47e5c20) at /web/php-7.2.3/ext/mysqlnd/mysqlnd_ps_codec.c:347 #6 0x00007ffff2a7fa13 in php_mysqlnd_rowp_read_binary_protocol (row_buffer=0x7fffd212cb08, fields=0x7fffd264f728, field_count=82, fields_metadata=0x7fffa1dd0008, as_int_or_float=0 '\000', stats=0x7fffd317de10) at /web/php-7.2.3/ext/mysqlnd/mysqlnd_wireprotocol.c:1581 #7 0x00007ffff2adeb5b in mysqlnd_stmt_fetch_row_buffered (result=0x7fffa1d15e88, param=0x7fffa1d749a8, flags=0, fetched_anything=0x7fffd47e5f2f "") at /web/php-7.2.3/ext/mysqlnd/mysqlnd_ps.c:784 #8 0x00007ffff2ab5b85 in mysqlnd_mysqlnd_res_fetch_row_pub (result=0x7fffa1d15e88, param=0x7fffa1d749a8, flags=0, fetched_anything=0x7fffd47e5f2f "") at /web/php-7.2.3/ext/mysqlnd/mysqlnd_result.c:1275 #9 0x00007ffff2ae40c1 in mysqlnd_mysqlnd_stmt_fetch_pub (s=0x7fffa1d749a8, fetched_anything=0x7fffd47e5f2f "") at /web/php-7.2.3/ext/mysqlnd/mysqlnd_ps.c:1234 #10 0x00007ffff2803abe in pdo_mysql_stmt_fetch (stmt=0x7fffa1db2700, ori=PDO_FETCH_ORI_NEXT, offset=0) at /web/php-7.2.3/ext/pdo_mysql/mysql_statement.c:623 #11 0x00007ffff27f1ec6 in do_fetch_common (stmt=0x7fffa1db2700, ori=PDO_FETCH_ORI_NEXT, offset=0, do_bind=1) at /web/php-7.2.3/ext/pdo/pdo_stmt.c:671 #12 0x00007ffff27f254e in do_fetch (stmt=0x7fffa1db2700, do_bind=1, return_value=0x7fffd47e62a0, how=PDO_FETCH_ASSOC, ori=PDO_FETCH_ORI_NEXT, offset=0, return_all=0x0) at /web/php-7.2.3/ext/pdo/pdo_stmt.c:828 #13 0x00007ffff27f55d2 in zim_PDOStatement_fetchAll (execute_data=0x7fffd322c010, return_value=0x7fffd322be50) at /web/php-7.2.3/ext/pdo/pdo_stmt.c:1505 #14 0x00007ffff2c2b799 in ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER () at /web/php-7.2.3/Zend/zend_vm_execute.h:1032 #15 0x00007ffff2cb245c in execute_ex (ex=0x7fffd32249b0) at /web/php-7.2.3/Zend/zend_vm_execute.h:59752 #16 0x00007ffff2ba3a74 in zend_call_function (fci=0x7fffd47e65c0, fci_cache=0x7fffd47e6590) at /web/php-7.2.3/Zend/zend_execute_API.c:819 #17 0x00007ffff29604aa in zif_call_user_func_array (execute_data=0x7fffd3224940, return_value=0x7fffd47e6690) at /web/php-7.2.3/ext/standard/basic_functions.c:4905 #18 0x00007ffff2c2a4b3 in ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER () at /web/php-7.2.3/Zend/zend_vm_execute.h:738 #19 0x00007ffff2cb2435 in execute_ex (ex=0x7fffd3221030) at /web/php-7.2.3/Zend/zend_vm_execute.h:59743 #20 0x00007ffff2cb78fe in zend_execute (op_array=0x7fffd3278100, return_value=0x0) at /web/php-7.2.3/Zend/zend_vm_execute.h:63760 #21 0x00007ffff2bc0254 in zend_execute_scripts (type=8, retval=0x0, file_count=3) at /web/php-7.2.3/Zend/zend.c:1496 #22 0x00007ffff2b00eae in php_execute_script (primary_file=0x7fffd47e7a90) at /web/php-7.2.3/main/main.c:2590 #23 0x00007ffff2cba763 in php_handler (r=0x7fffcc014c50) at /web/php-7.2.3/sapi/apache2handler/sapi_apache2.c:701 #24 0x0000000000452680 in ap_run_handler (r=r@entry=0x7fffcc014c50) at config.c:170 #25 0x0000000000452bc9 in ap_invoke_handler (r=r@entry=0x7fffcc014c50) at config.c:434 #26 0x0000000000466d6c in ap_internal_redirect (new_uri=<optimized out>, r=<optimized out>) at http_request.c:765 #27 0x00007ffff385ce5c in handler_redirect (r=0x7fffcc002970) at mod_rewrite.c:5254 #28 0x0000000000452680 in ap_run_handler (r=r@entry=0x7fffcc002970) at config.c:170 #29 0x0000000000452bc9 in ap_invoke_handler (r=r@entry=0x7fffcc002970) at config.c:434 #30 0x00000000004679ba in ap_process_async_request (r=r@entry=0x7fffcc002970) at http_request.c:436 #31 0x0000000000463fb1 in ap_process_http_async_connection (c=0x7fffe0039600) at http_core.c:154 #32 ap_process_http_connection (c=0x7fffe0039600) at http_core.c:248 #33 0x000000000045c090 in ap_run_process_connection (c=c@entry=0x7fffe0039600) at connection.c:42 #34 0x000000000046fcdc in process_socket (thd=thd@entry=0x6d3e38, p=<optimized out>, sock=<optimized out>, cs=<optimized out>, my_child_num=my_child_num@entry=0, my_thread_num=my_thread_num@entry=24) at event.c:1021 #35 0x0000000000470709 in worker_thread (thd=0x6d3e38, dummy=<optimized out>) at event.c:2014 #36 0x00007ffff6c97dc5 in start_thread (arg=0x7fffd47e8700) at pthread_create.c:308 #37 0x00007ffff67c0ced in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113 At frame 4 I just replaced with XXX some sensitive data in the string. Here is also the valgrind output: https://pastebin.com/DW32bATf The code runs correctly without any modifications when running with valgrind and: USE_ZEND_ALLOC=0 ZEND_DONT_UNLOAD_MODULES=1 So I presume is an issue with the zend memory manager. And here is another BT of a crash (in the file() function, the provided path is a valid and readable one) I got after some modifications: https://pastebin.com/0Q7dA1MV A bug that could be related to this one is: https://bugs.php.net/bug.php?id=69326 -- Edit bug report at https://bugs.php.net/bug.php?id=76047&edit=1 -- Try a snapshot (PHP 5.4): https://bugs.php.net/fix.php?id=76047&r=trysnapshot54 Try a snapshot (PHP 5.5): https://bugs.php.net/fix.php?id=76047&r=trysnapshot55 Try a snapshot (trunk): https://bugs.php.net/fix.php?id=76047&r=trysnapshottrunk Fixed in SVN: https://bugs.php.net/fix.php?id=76047&r=fixed Fixed in release: https://bugs.php.net/fix.php?id=76047&r=alreadyfixed Need backtrace: https://bugs.php.net/fix.php?id=76047&r=needtrace Need Reproduce Script: https://bugs.php.net/fix.php?id=76047&r=needscript Try newer version: https://bugs.php.net/fix.php?id=76047&r=oldversion Not developer issue: https://bugs.php.net/fix.php?id=76047&r=support Expected behavior: https://bugs.php.net/fix.php?id=76047&r=notwrong Not enough info: https://bugs.php.net/fix.php?id=76047&r=notenoughinfo Submitted twice: https://bugs.php.net/fix.php?id=76047&r=submittedtwice register_globals: https://bugs.php.net/fix.php?id=76047&r=globals PHP 4 support discontinued: https://bugs.php.net/fix.php?id=76047&r=php4 Daylight Savings: https://bugs.php.net/fix.php?id=76047&r=dst IIS Stability: https://bugs.php.net/fix.php?id=76047&r=isapi Install GNU Sed: https://bugs.php.net/fix.php?id=76047&r=gnused Floating point limitations: https://bugs.php.net/fix.php?id=76047&r=float No Zend Extensions: https://bugs.php.net/fix.php?id=76047&r=nozend MySQL Configuration Error: https://bugs.php.net/fix.php?id=76047&r=mysqlcfg

« previous php.bugs (#214193) next »