[php-src] Issue #9337: Use HTTP 2.4.54 to load PHP-8.1.9, and frequently call a certain PHP interface to cause a core dump. The core dump error log is
AH00051: child pid 6663 exit signal Segmentation fault(11)

From: Date: Mon, 15 Aug 2022 08:44:38 +0000
Subject: [php-src] Issue #9337: Use HTTP 2.4.54 to load PHP-8.1.9, and frequently call a certain PHP interface to cause a core dump. The core dump error log is
AH00051: child pid 6663 exit signal Segmentation fault(11)
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-242222@lists.php.net to get a copy of this message
Issue: https://github.com/php/php-src/issues/9337 Author: zqtop ### Description Recurrence condition: I have an httpd server, its version number is 2.4.54, the working mode is event, in order to prevent the httpd memory from occupying for a long time and not being released, I enabled the httpd-mpm.conf configuration file, and I modified the value of MaxConnectionsPerChild to a specific value, when its value is set to a small value, such as 10, the specific configuration is as follows: <IfModule mpm_event_module> StartServers 5 ServerLimit 10 ThreadLimit 200 MinSpareThreads 75 MaxSpareThreads 250 ThreadsPerChild 25 MaxRequestWorkers 400 MaxConnectionsPerChild 10 MaxClients 250 </IfModule> I wrote a simple test case on thinkphp V6.0.12 base framework using PHP 8.1.9,the code is as follows <?php namespace app\index\controller; Class Test { public function myTest() { $result=file_get_contents("/home/ivstool/version/version.xml"); return json([ "status" => 0, "resultCode" => 0, "msg" => 'SUCCESS', "data" => $result ] ); } public function info() { phpinfo(); } } ?> After completing the above basic conditions, I wrote a simple multi-threaded httpd request example using python's multi-threading, the code is as follows: import requests import threading import json ``` class CoreTest: def __init__(self): self.ip ="Server IP address" requestSession = requests.session() self.session = requestSession self.headers = { 'Host': self.ip, 'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; rv:16.0) Gecko/20100101 Firefox/16.0', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Connection': 'keep-alive', 'referer': "https://{0}".format(self.ip)+":8443/" } for i in range(0,100): self.task('thread_{0}'.format(str(i))) def task(self, thread_name): print('I am' + thread_name + 'doing test work....') url = "https://{0}".format(self.ip)+":8443/index/Test/myTest" response = self.session.get(url=url, verify=False, headers= self.headers) print(response.text) ``` When this use case runs for a period of time, the longer the better, a surprising phenomenon occurs, PHP generates a segmentation fault, I can see that multiple core files are generated in the core dump directory, and I use the GDB tool to trace core file information, get the following stack information Resulted in this output: ``` warning: File "/usr/lib64/libthread_db-1.0.so" auto-loading has been declined by your `auto-load safe-path' set to "$debugdir:$datadir/auto-load". To enable execution of this file add add-auto-load-safe-path /usr/lib64/libthread_db-1.0.so line to your configuration file "/root/.gdbinit". To completely disable this security protection add set auto-load safe-path / line to your configuration file "/root/.gdbinit". For more information about this security protection see the "Auto-loading safe path" section in the GDB manual. E.g., run from the shell: info "(gdb)Auto-loading safe path" warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available. bt warning: File "/usr/lib64/libthread_db-1.0.so" auto-loading has been declined by your `auto-load safe-path' set to "$debugdir:$datadir/auto-load". warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available. Core was generated by `/home/ivs_omu_portal/httpd/bin/httpd'. Program terminated with signal SIGSEGV, Segmentation fault. #0 0x0000ffffb5a194b8 in zend_signal_handler_defer (signo=1, siginfo=0xffffa2feb610, context=0xffffa2feb690) at /home/ivs_omu_portal/install/php-src-php-8.1.9/Zend/zend_signal.c:96 96 /home/ivs_omu_portal/install/php-src-php-8.1.9/Zend/zend_signal.c: No such file or directory. [Current thread is 1 (LWP 1333780)] (gdb) bt #0 0x0000ffffb5a194b8 in zend_signal_handler_defer (signo=1, siginfo=0xffffa2feb610, context=0xffffa2feb690) at /home/ivs_omu_portal/install/php-src-php-8.1.9/Zend/zend_signal.c:96 #1 <signal handler called> #2 0x0000ffffb6e2dd70 in pthread_kill () from /usr/lib64/libpthread.so.0 #3 0x000000000047641c in wakeup_listener () at event.c:605 #4 0x00000000004764ec in signal_threads (mode=mode@entry=1) at event.c:628 #5 0x000000000047a508 in signal_threads (mode=1) at event.c:619 #6 check_infinite_requests () at event.c:1251 #7 listener_thread (thd=0xffffa2fed1d0, dummy=<optimized out>) at event.c:1679 #8 0x0000ffffb6e267b0 in ?? () from /usr/lib64/libpthread.so.0 #9 0x0000ffffb6d5c23c in ?? () from /usr/lib64/libc.so.6 ``` But I expected this output instead: ``` no core storage file ``` ### PHP Version PHP-8.1.9 ### Operating System Euler

« previous php.bugs (#242222) next »