Bug #70360 [Opn]: Segmentation fault for every request

From: Date: Mon, 26 Oct 2015 21:14:03 +0000
Subject: Bug #70360 [Opn]: Segmentation fault for every request
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-196830@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=70360&edit=1 ID: 70360 Updated by: nikic@php.net Reported by: atippett at gmail dot com Summary: Segmentation fault for every request Status: Open Type: Bug Package: opcache Operating System: Linux fenrir 3.16.0-4-amd64 #1 PHP Version: 5.6.12 Block user comment: N Private report: N New Comment: As this issue is caused by pass 1_5 and happens in gc_remove_from_buffer() this may be the same issue as https://bugs.php.net/bug.php?id=70601. Could you check if 5.6.15RC1 (or 5.6-dev) resolves this issue? Previous Comments: ------------------------------------------------------------------------ [2015-09-30 15:59:06] aliis dot jh at gmail dot com Thanks nikic, we've now tested incrementally in the range: opcache.optimization_level = [0xfffffff0 - 0xffffffff] All, but the last bit flag work without segfaulting, i.e., opcache.optimization_level = [0xfffffff0 - 0xfffffffe] (OK - No Segfaults) This is equiv: [0b0000 0000 1111 1111 1111 1111 1111 1111 1111 0000] to [0b0000 0000 1111 1111 1111 1111 1111 1111 1111 1110] Likewise, incrementing from other direction: 0x00000001 - FAIL (segfaults) 0x00000002 - PASS (segfaults) 0x00000003 - FAIL (segfaults) ... for all bitmasks containing / including the first bit 0x0...1 So only the pass for bit flag: 0x00000001 is causing segfaults. Any thoughts or solutions for fixing this issue would be greatly appreciated. ------------------------------------------------------------------------ [2015-09-04 10:01:16] nikic@php.net @aliis: 0xf == 0b1111, so this will enable the first four passes (which is pass 1_5, pass 2 and pass 3 in practice). To further narrow this down you can try 0x1, 0x2 and 0x4. ------------------------------------------------------------------------ [2015-09-04 08:37:09] aliis dot jh at gmail dot com After further testing on fenrir, we have that all bitmask settings for: opcache.optimization_level do NOT produce segfaults EXCEPT the first bit. Working: 0xXXXXXXXX0 // where 'X'=f|0 Segfault: 0xXXXXXXXXf // where 'X'=f|0 So only combinations of bit flags with the first bit enabled result in segfaults, all other combinations work fine. From reference, I believe this is the flag for pass 1, operations: * - substitute persistent constants (true, false, null, etc) * - perform compile-time evaluation of constant binary and unary operations * - optimize series of ADD_STRING and/or ADD_CHAR * - convert CAST(IS_BOOL,x) into BOOL(x) * - convert INTI_FCALL_BY_NAME + DO_FCALL_BY_NAME into DO_FCALL Reference: http://stackoverflow.com/questions/21181045/php-opcache-optimization-levels-what-are-they https://github.com/zendtech/ZendOptimizerPlus/blob/master/Optimizer/zend_optimizer.c ------------------------------------------------------------------------ [2015-09-04 07:14:42] aliis dot jh at gmail dot com After updating fenrir to opcache: Zend OPcache v7.0.6-dev We're still getting segfaults with the php.ini setting: opcache.optimization_level=0xffffffff As soon as we set opcache.optimization_level=0 the segfaults stop. ------------------------------------------------------------------------ [2015-08-28 18:17:56] atippett at gmail dot com I believe this might be related to https://bugs.php.net/bug.php?id=69549 I'll run some tests tonight with the updated version of php on fenrir. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=70360 -- Edit this bug report at https://bugs.php.net/bug.php?id=70360&edit=1

« previous php.bugs (#196830) next »