Edit report at http://bugs.php.net/bug.php?id=52312&edit=1
ID: 52312 Comment by: v dot damore at gmail dot com Reported by: v dot damore at gmail dot com Summary: PHP safe_mode/open_basedir - lstat performance problem Status: Analyzed Type: Bug Package: Safe Mode/open_basedir Operating System: Linux PHP Version: 5.2.13 New Comment: Hello, I have recompiled php commenting both in main/main.c: /* if (PG(safe_mode) || (PG(open_basedir) && *PG(open_basedir))) { CWDG(realpath_cache_size_limit) = 0; } */ I have defined into TSRM/tsrm_virtual_cwd.c #define realpath(x,y) strcpy(y,x) and I have disabled PHP function symlink. Now I finally not have performance problems, but I suppose I still can have security problem. Can you help me in order to understand if there is a better solution? Previous Comments: ------------------------------------------------------------------------ [2010-07-14 16:25:28] v dot damore at gmail dot com I want make it clear first that: in submitted test we can see only 4 directory scan, I my production environment I have seen up to 8 directory scan for php file. If we disable PHAR I suppose only first full scan path will be removed. So other 3 full scan path remain there, probably we need to change php_check_specific_open_basedir in order to really try to remove inefficiencies. ------------------------------------------------------------------------ [2010-07-14 15:58:22] ras...@php.net Yup, there are clearly some inefficiencies here. We are relying too much on the realpath_cache being enabled. You can eliminate the phar one by eliminating phar for now. Recompile with --disable-phar until we get this cleaned up. ------------------------------------------------------------------------ [2010-07-14 15:43:52] v dot damore at gmail dot com changed summery in order to provide a better description ------------------------------------------------------------------------ [2010-07-13 21:49:55] v dot damore at gmail dot com Please pay attention correct URL for debugging info is http://damore.xoom.it/apache-2.2_php-5.3.2_break-lstat.txt ------------------------------------------------------------------------ [2010-07-13 21:04:24] v dot damore at gmail dot com If you take a look at debugging done in http://damore.xoom.it/apache-2.2_php-5.3.2_break-lstat.txt, you can see that tsrm_realpath_r is called in 2 different place: - First during phar_find_in_include_path function - Second during php_check_specific_open_basedir function. * During php_check_specific_open_basedir, traverse entire path at least three times, so i means 3 call to tsrm_realpath_r. I don't discuss the need to traverse entire path, but only one time. There should be a better way to implement such code, I'll try to write a patch if there is someone that want help me looking what I'm writing. ------------------------------------------------------------------------ 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 http://bugs.php.net/bug.php?id=52312 -- Edit this bug report at http://bugs.php.net/bug.php?id=52312&edit=1