Bug #70660 [Opn]: SIGSEGV due to null pointer dereference

From: Date: Wed, 07 Oct 2015 15:42:08 +0000
Subject: Bug #70660 [Opn]: SIGSEGV due to null pointer dereference
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-196457@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=70660&edit=1 ID: 70660 User updated by: john dot woods at greatplainsmfg dot com Reported by: john dot woods at greatplainsmfg dot com Summary: SIGSEGV due to null pointer dereference Status: Open Type: Bug Package: Apache2 related -Operating System: Solarix x86 11.2.12.5.0 +Operating System: Solaris x86 11.2.12.5.0 PHP Version: 5.4.45 Block user comment: N Private report: N New Comment: (Corrected typo in O/S field.) Previous Comments: ------------------------------------------------------------------------ [2015-10-07 15:13:14] john dot woods at greatplainsmfg dot com Description: ------------ Background: - Compiled using Solaris Studio 12.3 - Compiled with httpd 2.4.16 - Crashes seem random/intermittent, so it's unknown how to reproduce or even test. - Other enabled modules: - GeoIP 1.1.0 - ibm_db2 1.9.6 - oci8 2.0.8 - spl_types 0.4.0 - xcache 3.0.4 PHP Build steps: export CC=cc export CXX=CC export CFLAGS="-m64 -I/usr/include/openldap -I/usr/local/include -I/usr/include" export CPPFLAGS="-m64 -I/usr/include/openldap -I/usr/local/include -I/usr/include" export LIBS="-lldap-2.4 -llber-2.4" export LDFLAGS="-L/opt/mysql/mysql/lib -R/opt/mysql/mysql/lib -L/usr/local/lib -R/usr/local/lib" export LD_PRELOAD_64=/usr/local/lib/preloadable_libiconv.so export LD_LIBRARY_PATH=/usr/local/lib export IBM_DB2="/home/db2inst1/sqllib" (Hacked up the configure script to change "-lldap" to "-lldap-2.4", and "-llber" to "-llber-2.4", to link in the proper OpenLDAP libraries that come with Solaris) ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql --with-mysqli --with-pdo-mysql --with-iconv=/usr/local --with-openssl --with-curl --with-ldap --with-mhash --with-mcrypt --with-gd --with-jpeg-dir --with-png-dir --with-xsl --enable-inline-optimization --enable-ftp --with-zlib-dir --enable-soap --enable-sockets --enable-mbstring --with-gettext --enable-intl --enable-zip --enable-gd-native-ttf --with-freetype-dir=/usr --with-xpm-dir=/usr --with-ibm-db2=$IBM_DB2 --with-pdo-odbc=ibm-db2,/opt/IBM/db2/V10.5 The php.ini options that differ from the out-of-the-box php.ini-production: short_open_tag = On output_buffering = Off highlight.string = #CC0000 highlight.comment = #FF9900 highlight.keyword = #006600 highlight.bg = #FFFFFF highlight.default = #0000CC highlight.html = #000000 expose_php = Off date.timezone = "America/Chicago" max_execution_time = 300 memory_limit = 1024M error_reporting = E_ALL & ~E_NOTICE error_log=/var/httpd/logs/php_errors warn_plus_overloading = Off variables_order = "EGPCS" max_input_vars = 100000 register_argc_argv = On post_max_size = 100M gpc_order = "GPC" include_path enable_dl = On upload_max_filesize = 100M extension=oci8.so extension=xcache.so extension=ibm_db2.so extension=spl_types.so extension=geoip.so ibm_db2.instance_name sendmail_from session.gc_maxlifetime session.use_trans_sid = 1 mcrypt.algorithms_dir mcrypt.modes_dir geoip.custom_directory (various xcache directives) Backtrace: root# adb core.httpd.1444161809.13571 $c core file = core.httpd.1444161648.13571 -- program `` /usr/local/apache2/bin/httpd'' on platform i86pc SIGSEGV: Segmentation Fault libphp5.so`zend_hash_move_forward_ex+0x4e() libphp5.so`apply_config+0x12c() libphp5.so`php_handler+0x28a() ap_run_handler+0x7e() ap_invoke_handler+0x1b1() ap_process_async_request+0x4df() ap_process_http_async_connection+0xbd() ap_process_http_connection+0x39() ap_run_process_connection+0x7e() process_socket+0x450() worker_thread+0x455() libapr-1.so.0.5.2`dummy_worker+0x30() libc.so.1`_thrp_setup+0xa5() libc.so.1`_lwp_start() zend_hash_move_forward_ex ::dis libphp5.so`zend_hash_move_forward_ex: pushq %rbp libphp5.so`zend_hash_move_forward_ex+1: movq %rsp,%rbp libphp5.so`zend_hash_move_forward_ex+4: subq $0x30,%rsp libphp5.so`zend_hash_move_forward_ex+8: movq %rdi,-0x8(%rbp) libphp5.so`zend_hash_move_forward_ex+0xc: movq %rsi,-0x10(%rbp) libphp5.so`zend_hash_move_forward_ex+0x10: movq -0x10(%rbp),%r8 libphp5.so`zend_hash_move_forward_ex+0x14: cmpq $0x0,%r8 libphp5.sozend_hash_move_forward_ex+0x18: je +0xa <libphp5.sozend_hash_move_forward_ex+0x24> libphp5.so`zend_hash_move_forward_ex+0x1a: movq -0x10(%rbp),%r8 libphp5.so`zend_hash_move_forward_ex+0x1e: movq %r8,-0x28(%rbp) libphp5.sozend_hash_move_forward_ex+0x22: jmp +0xc <libphp5.sozend_hash_move_forward_ex+0x30> libphp5.so`zend_hash_move_forward_ex+0x24: movq -0x8(%rbp),%r8 libphp5.so`zend_hash_move_forward_ex+0x28: leaq 0x18(%r8),%r8 libphp5.so`zend_hash_move_forward_ex+0x2c: movq %r8,-0x28(%rbp) libphp5.so`zend_hash_move_forward_ex+0x30: movq -0x28(%rbp),%r8 libphp5.so`zend_hash_move_forward_ex+0x34: movq %r8,-0x20(%rbp) libphp5.so`zend_hash_move_forward_ex+0x38: movq -0x20(%rbp),%r8 libphp5.so`zend_hash_move_forward_ex+0x3c: movq 0x0(%r8),%r8 libphp5.so`zend_hash_move_forward_ex+0x40: cmpq $0x0,%r8 libphp5.sozend_hash_move_forward_ex+0x44: je +0x1e <libphp5.sozend_hash_move_forward_ex+0x64> libphp5.so`zend_hash_move_forward_ex+0x46: movq -0x20(%rbp),%r8 libphp5.so`zend_hash_move_forward_ex+0x4a: movq 0x0(%r8),%r8 libphp5.so`zend_hash_move_forward_ex+0x4e: movq 0x20(%r8),%r9 libphp5.so`zend_hash_move_forward_ex+0x52: movq -0x20(%rbp),%r8 libphp5.so`zend_hash_move_forward_ex+0x56: movq %r9,0x0(%r8) libphp5.so`zend_hash_move_forward_ex+0x5a: movl $0x0,-0x14(%rbp) libphp5.sozend_hash_move_forward_ex+0x61: jmp +0x8 <libphp5.sozend_hash_move_forward_ex+0x6b> libphp5.so`zend_hash_move_forward_ex+0x63: nop libphp5.so`zend_hash_move_forward_ex+0x64: movl $-0x1,-0x14(%rbp) <0xffffffff> libphp5.so`zend_hash_move_forward_ex+0x6b: movl -0x14(%rbp),%eax libphp5.so`zend_hash_move_forward_ex+0x6e: leave libphp5.so`zend_hash_move_forward_ex+0x6f: ret $r %rax = 0x0000000000000000 %r8 = 0x0000000000000000 %rbx = 0xffff80ffbea7aa40 %r9 = 0x00000000061339e0 %rcx = 0x0000000000000001 %r10 = 0xffff80fd756395f0 %rdx = 0x0000000000000001 %r11 = 0x000000000bae78d0 %rsi = 0x0000000000000000 %r12 = 0x0000000000511688 %rdi = 0x0000000000949680 %r13 = 0x0000000000000000 %r14 = 0x0000000000000000 %r15 = 0x0000000000000000 %cs = 0x0053 %fs = 0x0000 %gs = 0x0000 %ds = 0x004b %es = 0x004b %ss = 0x004b %rip = 0xffff80fd75822f9e libphp5.so`zend_hash_move_forward_ex+0x4e %rbp = 0xffff80ff9a4136d0 %rsp = 0xffff80ff9a4136a0 %rflags = 0x00000206 id=0 vip=0 vif=0 ac=0 vm=0 rf=0 nt=0 iopl=0x0 status=<of,df,IF,tf,sf,zf,af,PF,cf> %gsbase = 0x0000000000000000 %fsbase = 0xffff80ffbea7aa40 %trapno = 0xe %err = 0x4 0xffff80ff9a4136a0 ::dump -e -q -w 3 ffff80ff9a4136a0: 50828e00 00000000 98969400 00000000 98969400 00000000 f8679500 00000000 00000000 00000000 80969400 00000000 Initial Analysis: Since register %r8 is 0x0 at the time of the crash, this a null pointer dereference issue. Based on the branching, I believe it is occurring near line 1126 of Zend/zend_hash.c. Further Analysis: The zend_hash_move_forward_ex function is used throughout PHP core, and if the problem were there, I would expect to see diversity of core dumps. However, we have only seen core dumps with the apply_config function in the stack trace. That's why I suspect this may be an apache2 handler/filter issue. Test script: --------------- N/A ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=70660&edit=1

« previous php.bugs (#196457) next »