[php-src] Issue #13400: mprotect() failed [13] Permission denied followed by a segfault on MacOS with Apple Silicon

From: Date: Thu, 15 Feb 2024 14:28:54 +0000
Subject: [php-src] Issue #13400: mprotect() failed [13] Permission denied followed by a segfault on MacOS with Apple Silicon
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-246462@lists.php.net to get a copy of this message
Issue: https://github.com/php/php-src/issues/13400 Author: realFlowControl ### Description The following code: ```php <?php echo "Done"; ``` Resulted in this output: ``` mprotect() failed [13] Permission denied Bus error: 10 ``` But I expected this output instead: ``` done ``` Executed on CLI using /opt/php/8.3/bin/php -n -d "zend_extension=opcache" -d "opcache.enable_cli=1" -d "opcache.jit=tracing" -d "opcache.jit_buffer_size=40M" -f test.php (where test.php holds the above content). Using lldb I get the following: ``` Process 39185 launched: '/opt/php/8.3/bin/php' (arm64) mprotect() failed [13] Permission denied Process 39185 stopped * thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=2, address=0x110fa3ff0) frame #0: 0x0000000102deb668 opcache.so`zend_jit_startup(buf=0x000000010e7a4000, size=41943040, reattached=false) at zend_jit.c:4994:13 4991 dasm_ptr = dasm_end = (void*)(((char*)dasm_buf) + size - sizeof(*dasm_ptr) * 2); 4992 if (!reattached) { 4993 zend_jit_unprotect(); -> 4994 *dasm_ptr = dasm_buf; 4995 #if _WIN32 4996 /* reserve space for global labels */ 4997 *dasm_ptr = (void**)*dasm_ptr + zend_lb_MAX; (lldb) bt * thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=2, address=0x110fa3ff0) * frame #0: 0x0000000102deb668 opcache.so`zend_jit_startup(buf=0x000000010e7a4000, size=41943040, reattached=false) at zend_jit.c:4994:13 frame #1: 0x0000000102d93590 opcache.so`accel_post_startup at ZendAccelerator.c:3253:8 frame #2: 0x00000001007f6550 php`zend_post_startup at zend.c:1072:7 frame #3: 0x00000001006f95ec php`php_module_startup(sf=0x0000000101506e28, additional_module=0x0000000000000000) at main.c:2259:6 frame #4: 0x0000000100a9c84c php`php_cli_startup(sapi_module=0x0000000101506e28) at php_cli.c:410:9 frame #5: 0x0000000100a9a860 php`main(argc=12, argv=0x0000600002344000) at php_cli.c:1307:6 frame #6: 0x0000000189acd0e0 dyld`start + 2360 ``` The mprotect() failed [13] Permission denied originates from the mprotect() call in zend_jit_unprotect() in https://github.com/php/php-src/blob/PHP-8.3/ext/opcache/jit/zend_jit.c#L4657 This might be related: https://developer.apple.com/forums/thread/672804 ### PHP Version 8.3 ### Operating System MacOS 14.13.1

« previous php.bugs (#246462) next »