[php-src] Issue #13400: mprotect() failed [13] Permission denied followed by a segfault on MacOS with Apple Silicon
| From: | realFlowControl | 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