[php-src] Issue #9837: SIGSEGV in Opcache when upgrading WordPress inside Docker container on PHP 8

From: Date: Wed, 26 Oct 2022 21:25:26 +0000
Subject: [php-src] Issue #9837: SIGSEGV in Opcache when upgrading WordPress inside Docker container on PHP 8
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-242688@lists.php.net to get a copy of this message
Issue: https://github.com/php/php-src/issues/9837 Author: khromov ### Description I am running WordPress using PHP with Nginx/php-fpm on Docker. It's based on [this Dockerfile](https://github.com/khromov/alpine-nginx-php8/blob/master/Dockerfile). The actual WordPress filesystem is mounted as a Docker volume. I noticed that almost always, PHP would crash when a WordPress upgrade would occur. WordPress upgrade is quite involved, including [downloading new files and replacing existing ones on the fly](https://github.com/WordPress/WordPress/blob/master/wp-admin/includes/class-core-upgrader.php#L157-L165). After a php-fpm process crashed, it would segfault on every request after that. The error is: ``` ... [26-Oct-2022 20:47:48] WARNING: [pool www] child 151 exited on signal 11 (SIGSEGV) after 7.174988 seconds from start [26-Oct-2022 20:47:48] NOTICE: [pool www] child 156 started ... ``` After trial and error, I traced the segfaulty to the Opcache module. From my testing setting opcache.jit=function instead of the default tracing seems to make the problem disappear. Here is the dmesg and gdb output. dmesg: ``` [ 7568.851168] traps: php-fpm8[17120] general protection fault ip:48d0f06e sp:7ffd7e154dc0 error:0 in zero (deleted)[48c36000+4000000] [ 7568.853172] potentially unexpected fatal signal 11. [ 7568.854032] CPU: 2 PID: 17120 Comm: php-fpm8 Not tainted 5.15.68.1-microsoft-standard-WSL2 #1 [ 7568.855241] RIP: 0033:0x48d0f06e [ 7568.855873] Code: 77 30 49 c7 47 08 00 00 00 00 49 8d 96 f0 00 00 00 49 89 57 10 49 8b 47 18 48 8b 50 50 48 b9 f8 99 21 15 b8 55 00 00 48 03 11 <48> 8b 12 49 89 57 40 48 b9 68 93 21 15 b8 55 00 00 4c 89 39 4d 89 [ 7568.858083] RSP: 002b:00007ffd7e154dc0 EFLAGS: 00010216 [ 7568.858724] RAX: 00007fb361c07be0 RBX: 000000004179f440 RCX: 000055b8152199f8 [ 7568.859805] RDX: 0000ff66c127d417 RSI: 0000000040eb1f77 RDI: 00007fb361d83a9e [ 7568.860743] RBP: 00007fb361c13820 R08: 00007fb361d83a78 R09: 000055b814eda870 [ 7568.861724] R10: 000055b814edaca8 R11: 000055b814eda838 R12: 00007fb361c137d0 [ 7568.863107] R13: 000055b814ef9670 R14: 00007fb361c136b0 R15: 00007fb361c138b0 [ 7568.864612] FS: 00007fb362188b48 GS: 0000000000000000 [ 7571.505049] php-fpm8[17132]: segfault at 8 ip 000055b814a205a3 sp 00007ffd7e154d88 error 4 in php-fpm8[55b814a00000+267000] [ 7571.506389] Code: 4d 89 3e 49 8b 14 07 31 c0 48 83 c2 18 e8 91 8a ff ff 4d 8b 3e 5a c3 48 8b 47 08 48 8d 35 85 9a 4d 00 48 8d 48 18 48 8b 47 10 <48> 8b 50 08 48 8d 05 3a a3 7f 00 48 8b 38 48 83 c2 18 31 c0 e9 60 [ 7571.508951] potentially unexpected fatal signal 11. [ 7571.509730] CPU: 4 PID: 17132 Comm: php-fpm8 Not tainted 5.15.68.1-microsoft-standard-WSL2 #1 [ 7571.511198] RIP: 0033:0x55b814a205a3 [ 7571.511772] Code: 4d 89 3e 49 8b 14 07 31 c0 48 83 c2 18 e8 91 8a ff ff 4d 8b 3e 5a c3 48 8b 47 08 48 8d 35 85 9a 4d 00 48 8d 48 18 48 8b 47 10 <48> 8b 50 08 48 8d 05 3a a3 7f 00 48 8b 38 48 83 c2 18 31 c0 e9 60 [ 7571.514472] RSP: 002b:00007ffd7e154d88 EFLAGS: 00010293 [ 7571.517068] RAX: 0000000000000000 RBX: 00007fb361c15ce0 RCX: 0000000040f39f48 [ 7571.518806] RDX: 00007fb35ee0de68 RSI: 000055b814efa020 RDI: 0000000041b02ea0 [ 7571.520164] RBP: 0000000041b02ea0 R08: 0000000000000000 R09: 0000000000000002 [ 7571.521275] R10: 00007fb35f2bb520 R11: 000000004101c660 R12: 0000000041b04810 [ 7571.522794] R13: 000055b814ef9670 R14: 00007fb361c15e40 R15: 0000000042fbebb8 [ 7571.524519] FS: 00007fb362188b48 GS: 0000000000000000 ``` gdb ``` /var/www/html $ gdb attach 218 -ex cont GNU gdb (GDB) 11.2 Copyright (C) 2022 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-alpine-linux-musl". Type "show configuration" for configuration details. For bug reporting instructions, please see: <https://www.gnu.org/software/gdb/bugs/>. Find the GDB manual and other documentation resources online at: <http://www.gnu.org/software/gdb/documentation/>. For help, type "help". Type "apropos word" to search for commands related to "word"... attach: No such file or directory. Attaching to process 218 Reading symbols from /usr/sbin/php-fpm8... (No debugging symbols found in /usr/sbin/php-fpm8) Reading symbols from /usr/lib/libargon2.so.1... (No debugging symbols found in /usr/lib/libargon2.so.1) Reading symbols from /usr/lib/libxml2.so.2... (No debugging symbols found in /usr/lib/libxml2.so.2) Reading symbols from /usr/lib/libpcre2-8.so.0... (No debugging symbols found in /usr/lib/libpcre2-8.so.0) Reading symbols from /lib/libz.so.1... (No debugging symbols found in /lib/libz.so.1) Reading symbols from /usr/lib/libedit.so.0... (No debugging symbols found in /usr/lib/libedit.so.0) Reading symbols from /lib/ld-musl-x86_64.so.1... (No debugging symbols found in /lib/ld-musl-x86_64.so.1) Reading symbols from /usr/lib/liblzma.so.5... (No debugging symbols found in /usr/lib/liblzma.so.5) Reading symbols from /usr/lib/libncursesw.so.6... (No debugging symbols found in /usr/lib/libncursesw.so.6) Reading symbols from /usr/lib/php8/modules/opcache.so... (No debugging symbols found in /usr/lib/php8/modules/opcache.so) Reading symbols from /usr/lib/php8/modules/ctype.so... (No debugging symbols found in /usr/lib/php8/modules/ctype.so) Reading symbols from /usr/lib/php8/modules/curl.so... (No debugging symbols found in /usr/lib/php8/modules/curl.so) Reading symbols from /usr/lib/libcurl.so.4... (No debugging symbols found in /usr/lib/libcurl.so.4) Reading symbols from /usr/lib/libnghttp2.so.14... (No debugging symbols found in /usr/lib/libnghttp2.so.14) Reading symbols from /lib/libssl.so.1.1... (No debugging symbols found in /lib/libssl.so.1.1) Reading symbols from /lib/libcrypto.so.1.1... (No debugging symbols found in /lib/libcrypto.so.1.1) Reading symbols from /usr/lib/libbrotlidec.so.1... (No debugging symbols found in /usr/lib/libbrotlidec.so.1) Reading symbols from /usr/lib/libbrotlicommon.so.1... (No debugging symbols found in /usr/lib/libbrotlicommon.so.1) Reading symbols from /usr/lib/php8/modules/dom.so... (No debugging symbols found in /usr/lib/php8/modules/dom.so) Reading symbols from /usr/lib/php8/modules/fileinfo.so... (No debugging symbols found in /usr/lib/php8/modules/fileinfo.so) Reading symbols from /usr/lib/php8/modules/gd.so... (No debugging symbols found in /usr/lib/php8/modules/gd.so) Reading symbols from /usr/lib/libpng16.so.16... (No debugging symbols found in /usr/lib/libpng16.so.16) Reading symbols from /usr/lib/libwebp.so.7... (No debugging symbols found in /usr/lib/libwebp.so.7) Reading symbols from /usr/lib/libjpeg.so.8... (No debugging symbols found in /usr/lib/libjpeg.so.8) Reading symbols from /usr/lib/libXpm.so.4... (No debugging symbols found in /usr/lib/libXpm.so.4) Reading symbols from /usr/lib/libfreetype.so.6... (No debugging symbols found in /usr/lib/libfreetype.so.6) Reading symbols from /usr/lib/libX11.so.6... (No debugging symbols found in /usr/lib/libX11.so.6) Reading symbols from /usr/lib/libbz2.so.1... (No debugging symbols found in /usr/lib/libbz2.so.1) Reading symbols from /usr/lib/libxcb.so.1... (No debugging symbols found in /usr/lib/libxcb.so.1) Reading symbols from /usr/lib/libXau.so.6... (No debugging symbols found in /usr/lib/libXau.so.6) Reading symbols from /usr/lib/libXdmcp.so.6... (No debugging symbols found in /usr/lib/libXdmcp.so.6) Reading symbols from /usr/lib/php8/modules/iconv.so... (No debugging symbols found in /usr/lib/php8/modules/iconv.so) Reading symbols from /usr/lib/php8/modules/intl.so... (No debugging symbols found in /usr/lib/php8/modules/intl.so) Reading symbols from /usr/lib/libicuio.so.71... (No debugging symbols found in /usr/lib/libicuio.so.71) Reading symbols from /usr/lib/libicui18n.so.71... (No debugging symbols found in /usr/lib/libicui18n.so.71) Reading symbols from /usr/lib/libicuuc.so.71... (No debugging symbols found in /usr/lib/libicuuc.so.71) Reading symbols from /usr/lib/libstdc++.so.6... (No debugging symbols found in /usr/lib/libstdc++.so.6) Reading symbols from /usr/lib/libgcc_s.so.1... (No debugging symbols found in /usr/lib/libgcc_s.so.1) Reading symbols from /usr/lib/libicudata.so.71... (No debugging symbols found in /usr/lib/libicudata.so.71) Reading symbols from /usr/lib/php8/modules/mbstring.so... (No debugging symbols found in /usr/lib/php8/modules/mbstring.so) Reading symbols from /usr/lib/libonig.so.5... (No debugging symbols found in /usr/lib/libonig.so.5) Reading symbols from /usr/lib/php8/modules/openssl.so... (No debugging symbols found in /usr/lib/php8/modules/openssl.so) Reading symbols from /usr/lib/php8/modules/pdo.so... (No debugging symbols found in /usr/lib/php8/modules/pdo.so) Reading symbols from /usr/lib/php8/modules/session.so... (No debugging symbols found in /usr/lib/php8/modules/session.so) Reading symbols from /usr/lib/php8/modules/simplexml.so... (No debugging symbols found in /usr/lib/php8/modules/simplexml.so) Reading symbols from /usr/lib/php8/modules/soap.so... (No debugging symbols found in /usr/lib/php8/modules/soap.so) Reading symbols from /usr/lib/php8/modules/tokenizer.so... (No debugging symbols found in /usr/lib/php8/modules/tokenizer.so) Reading symbols from /usr/lib/php8/modules/xml.so... (No debugging symbols found in /usr/lib/php8/modules/xml.so) Reading symbols from /usr/lib/php8/modules/xmlwriter.so... (No debugging symbols found in /usr/lib/php8/modules/xmlwriter.so) Reading symbols from /usr/lib/php8/modules/zip.so... (No debugging symbols found in /usr/lib/php8/modules/zip.so) Reading symbols from /usr/lib/libzip.so.5... (No debugging symbols found in /usr/lib/libzip.so.5) Reading symbols from /usr/lib/libzstd.so.1... (No debugging symbols found in /usr/lib/libzstd.so.1) Reading symbols from /usr/lib/php8/modules/exif.so... (No debugging symbols found in /usr/lib/php8/modules/exif.so) Reading symbols from /usr/lib/php8/modules/mysqlnd.so... (No debugging symbols found in /usr/lib/php8/modules/mysqlnd.so) Reading symbols from /usr/lib/php8/modules/pdo_sqlite.so... (No debugging symbols found in /usr/lib/php8/modules/pdo_sqlite.so) Reading symbols from /usr/lib/libsqlite3.so.0... (No debugging symbols found in /usr/lib/libsqlite3.so.0) Reading symbols from /usr/lib/php8/modules/phar.so... (No debugging symbols found in /usr/lib/php8/modules/phar.so) Reading symbols from /usr/lib/php8/modules/xmlreader.so... (No debugging symbols found in /usr/lib/php8/modules/xmlreader.so) Reading symbols from /usr/lib/php8/modules/mysqli.so... (No debugging symbols found in /usr/lib/php8/modules/mysqli.so) Reading symbols from /usr/lib/php8/modules/pdo_mysql.so... (No debugging symbols found in /usr/lib/php8/modules/pdo_mysql.so) Reading symbols from /usr/lib/php8/modules/igbinary.so... (No debugging symbols found in /usr/lib/php8/modules/igbinary.so) Reading symbols from /usr/lib/php8/modules/redis.so... (No debugging symbols found in /usr/lib/php8/modules/redis.so) Reading symbols from /usr/lib/liblz4.so.1... (No debugging symbols found in /usr/lib/liblz4.so.1) Reading symbols from /usr/lib/php8/modules/imagick.so... (No debugging symbols found in /usr/lib/php8/modules/imagick.so) Reading symbols from /usr/lib/libgomp.so.1... (No debugging symbols found in /usr/lib/libgomp.so.1) Reading symbols from /usr/lib/libMagickWand-7.Q16HDRI.so.10... (No debugging symbols found in /usr/lib/libMagickWand-7.Q16HDRI.so.10) Reading symbols from /usr/lib/libMagickCore-7.Q16HDRI.so.10... (No debugging symbols found in /usr/lib/libMagickCore-7.Q16HDRI.so.10) Reading symbols from /usr/lib/liblcms2.so.2... (No debugging symbols found in /usr/lib/liblcms2.so.2) Reading symbols from /usr/lib/libfontconfig.so.1... (No debugging symbols found in /usr/lib/libfontconfig.so.1) Reading symbols from /usr/lib/libXext.so.6... (No debugging symbols found in /usr/lib/libXext.so.6) Reading symbols from /usr/lib/libltdl.so.7... (No debugging symbols found in /usr/lib/libltdl.so.7) Reading symbols from /usr/lib/libexpat.so.1... (No debugging symbols found in /usr/lib/libexpat.so.1) 0x00007fb3621474a3 in ?? () from /lib/ld-musl-x86_64.so.1 Continuing. Program received signal SIGSEGV, Segmentation fault. 0x000055b814a205a3 in ?? () (gdb) Quit (gdb) bt #0 0x000055b814a205a3 in ?? () #1 0x000055b814a26123 in ?? () #2 0x0000000048c90673 in ?? () #3 0x0000000000000001 in ?? () #4 0x0000000000000004 in ?? () #5 0x0000000041a53700 in ?? () #6 0x0000000040ea0228 in ?? () #7 0x0000000000000000 in ?? () ``` ### PHP Version 8.0.25 ### Operating System alpine:3.16 (Docker)

« previous php.bugs (#242688) next »