|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2009-06-30 16:40 UTC] tom at ideaweb dot de
Description:
------------
Segmentation fault if the following line is enabled in apache.conf:
php_admin_value open_basedir
/www/htdocs/ecolint.ch/dev:/www/htdocs/ecolint.ch/tmp:/www/htdocs/ecol
int.ch/mysql
Maybe i made something wrong or its not a bug in php, because i not
really understand the debug output, but i hope it helps =)
(gdb) run -X
Starting program: /www/apache/2.2.11/bin/httpd -X
Failed to read a valid object file image from memory.
[Thread debugging using libthread_db enabled]
[New Thread -1212832064 (LWP 4837)]
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1212832064 (LWP 4837)]
0xb757a7b7 in OnUpdateBaseDir (entry=0x824fba0,
new_value=0x83b6398
"/www/htdocs/ecolint.ch/dev:/www/htdocs/ecolint.ch/tmp:/www/htdocs/eco
lint.ch/mysql",
new_value_length=82, mh_arg1=0x48, mh_arg2=0xb7b593a0,
mh_arg3=0x0, stage=4) at /www/src/php-5.3.0/main/fopen_wrappers.c:103
103 if (!*p || !**p) {
(gdb) bt
#0 0xb757a7b7 in OnUpdateBaseDir (entry=0x824fba0,
new_value=0x83b6398
"/www/htdocs/ecolint.ch/dev:/www/htdocs/ecolint.ch/tmp:/www/htdocs/eco
lint.ch/mysql",
new_value_length=82, mh_arg1=0x48, mh_arg2=0xb7b593a0,
mh_arg3=0x0, stage=4) at /www/src/php-5.3.0/main/fopen_wrappers.c:103
#1 0xb75f6d09 in zend_alter_ini_entry_ex (name=0x819a670
"open_basedir", name_length=13,
new_value=0x8228770
"/www/htdocs/ecolint.ch/dev:/www/htdocs/ecolint.ch/tmp:/www/htdocs/eco
lint.ch/mysql",
new_value_length=82, modify_type=4, stage=4, force_change=0) at
/www/src/php-5.3.0/Zend/zend_ini.c:285
#2 0xb75f6b0f in zend_alter_ini_entry (name=0x819a670 "open_basedir",
name_length=13,
new_value=0x8228770
"/www/htdocs/ecolint.ch/dev:/www/htdocs/ecolint.ch/tmp:/www/htdocs/eco
lint.ch/mysql",
new_value_length=82, modify_type=4, stage=4) at /www/src/php-
5.3.0/Zend/zend_ini.c:243
#3 0xb76a86b6 in apply_config (dummy=0x8228df8) at /www/src/php-
5.3.0/sapi/apache2handler/apache_config.c:197
#4 0xb76a7a73 in php_handler (r=0x837fe30) at /www/src/php-
5.3.0/sapi/apache2handler/sapi_apache2.c:547
#5 0x0807dad7 in ap_run_handler (r=0x837fe30) at config.c:157
#6 0x08080bc7 in ap_invoke_handler (r=0x837fe30) at config.c:372
#7 0x080c8658 in ap_process_request (r=0x837fe30) at
http_request.c:282
#8 0x080c581e in ap_process_http_connection (c=0x836fd40) at
http_core.c:190
#9 0x08084a87 in ap_run_process_connection (c=0x836fd40) at
connection.c:43
#10 0x080f846d in child_main (child_num_arg=<value optimized out>) at
prefork.c:650
#11 0x080f86a5 in make_child (s=0x813d648, slot=0) at prefork.c:690
#12 0x080f944c in ap_mpm_run (_pconf=0x81380a8, plog=0x8188328,
s=0x813d648) at prefork.c:966
#13 0x0806b44f in main (argc=135487648, argv=0x836db60) at main.c:740
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Oct 24 12:00:01 2025 UTC |
Its really strange, because i have several php53 installations without any trouble with the same configuration, but only on one dev server it crashes. if you cannot reproduce, its not a big deal that you can get access to our dev server, there are not secrets and no data... <VirtualHost *:80> ServerAdmin webmaster@ecolint.ch ServerName ecodev.ecolint.ch ServerAlias ecm.ideaweb.de ServerAlias 217.169.129.40 #ErrorDocument 404 / DocumentRoot /var/www/ecolint.ch/dev/ecolint/trunk/admin CustomLog /var/www/ecolint.ch/logs/access_log combined ErrorLog /var/www/ecolint.ch/logs/error_log <Directory /var/www/ecolint.ch/dev/ecolint/trunk/admin/> Options -MultiViews -Indexes -Includes +FollowSymlinks AllowOverride All Order allow,deny Allow from all </Directory> Alias /mysql/ /var/www/ecolint.ch/mysql/ <Directory /var/www/ecolint.ch/mysql/> Options -MultiViews -Indexes -Includes -FollowSymlinks AllowOverride All Order allow,deny Allow from all </Directory> php_admin_flag register_globals off php_admin_flag magic_quotes_gpc off php_admin_flag magic_quotes_runtime off php_admin_value default_charset utf-8 php_admin_value session.save_path /www/htdocs/ecolint.ch/tmp/ php_admin_value upload_tmp_dir /www/htdocs/ecolint.ch/tmp/ php_admin_value open_basedir /www/htdocs/ecolint.ch/dev:/www/htdocs/ecolint.ch/tmp:/www/htdocs/ecol int.ch/mysql RewriteEngine On RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) RewriteRule .* - [F] </VirtualHost>Sorry for the delay, the test server was in use... Seems to be the same =( (gdb) run -X -d /www/apache/current/ Starting program: /www/apache/2.2.11/bin/httpd -X -d /www/apache/current/ Failed to read a valid object file image from memory. [Thread debugging using libthread_db enabled] [New Thread -1212967232 (LWP 27684)] Program received signal SIGSEGV, Segmentation fault. [Switching to Thread -1212967232 (LWP 27684)] 0xb755848f in OnUpdateBaseDir (entry=0x824fbb8, new_value=0x83b5070 "/www/htdocs/ecolint.ch/dev:/www/htdocs/ecolint.ch/tmp:/www/htdocs/eco lint.ch/mysql", new_value_length=82, mh_arg1=0x48, mh_arg2=0xb7b37e80, mh_arg3=0x0, stage=4) at /www/src/php5.3-200907101630/main/fopen_wrappers.c:103 103 if (!*p || !**p) { (gdb)Ok, I think I've ran into some kind of overflow game here. This is my test PHP setup in httpd.conf: php_admin_value safe_mode 0 php_admin_value upload_tmp_dir somepath1_123456 php_admin_value session.save_path somepath2_123456 php_admin_value open_basedir /home/webs/ php_admin_value include_path .:/usr/share/misc:/usr/share:/home/webs/.libs:/home/webs/.libs/php-pear php_admin_value display_errors On To be able to see what path is being looked for in open_basedir I'm including a file that is not within the /home/webs directory. This is the result as expected: Warning: include_once(): open_basedir restriction in effect. File(/tmp/something) is not within the allowed path(s): (/home/webs/) in /home/webs/_devel/public/index2.php on line 13 Call Stack: 0.0000 616224 1. {main}() Note that the upload_tmp_dir and session.save_path variables are exactly 16 chars long. Now let's shorten the second one a little bit: php_admin_value upload_tmp_dir somepath1_123456 php_admin_value session.save_path somepath2_12345 php_admin_value open_basedir /home/webs/ And what I got here: Warning: include_once(): open_basedir restriction in effect. File(/tmp/something) is not within the allowed path(s): (somepath2_12345) in /home/webs/_devel/public/index2.php on line 13 Call Stack: 0.0000 616184 1. {main}() Oops? Is that path really what I have set? Let's shorten the next one: php_admin_value upload_tmp_dir somepath1_12345 php_admin_value session.save_path somepath2_12345 php_admin_value open_basedir /home/webs/ And here we go: Warning: include_once(): open_basedir restriction in effect. File(/tmp/something) is not within the allowed path(s): (somepath1_12345) in /home/webs/_devel/public/index2.php on line 13 Call Stack: 0.0000 616176 1. {main}() Looks like for three different setups there different strings slip into the open_basedir variable. Silly. I hope this helps a bit in finding the bug.I installed php5.3-200908010830: with the "prefix" directory php_admin_value open_basedir /var/www/ecolint.ch/dev:/var/www/ecolint.ch/tmp:/var/www/ecolint.ch/my sql:/www/prog/php everything works as expected, but without it php_admin_value open_basedir /www/htdocs/ecolint.ch/dev:/www/htdocs/ecolint.ch/tmp:/www/htdocs/ecol int.ch/mysql it crashes again: (gdb) run -X Starting program: /www/apache/2.2.11/bin/httpd -X Failed to read a valid object file image from memory. [Thread debugging using libthread_db enabled] [New Thread -1213593920 (LWP 22640)] Program received signal SIGSEGV, Segmentation fault. [Switching to Thread -1213593920 (LWP 22640)] 0xb74bf52b in OnUpdateBaseDir (entry=0x824fb10, new_value=0x84d3ce8 "/www/htdocs/ecolint.ch/dev:/www/htdocs/ecolint.ch/tmp:/www/htdocs/eco lint.ch/mysql", new_value_length=82, mh_arg1=0x48, mh_arg2=0xb7a9eee0, mh_arg3=0x0, stage=4) at /www/src/php5.3-200908010830/main/fopen_wrappers.c:103 103 if (!*p || !**p) { (gdb) bt #0 0xb74bf52b in OnUpdateBaseDir (entry=0x824fb10, new_value=0x84d3ce8 "/www/htdocs/ecolint.ch/dev:/www/htdocs/ecolint.ch/tmp:/www/htdocs/eco lint.ch/mysql", new_value_length=82, mh_arg1=0x48, mh_arg2=0xb7a9eee0, mh_arg3=0x0, stage=4) at /www/src/php5.3-200908010830/main/fopen_wrappers.c:103 #1 0xb753bb45 in zend_alter_ini_entry_ex (name=0x819a7a0 "open_basedir", name_length=13, new_value=0x81fad60 "/www/htdocs/ecolint.ch/dev:/www/htdocs/ecolint.ch/tmp:/www/htdocs/eco lint.ch/mysql", new_value_length=82, modify_type=4, stage=4, force_change=0) at /www/src/php5.3-200908010830/Zend/zend_ini.c:291 #2 0xb753b94b in zend_alter_ini_entry (name=0x819a7a0 "open_basedir", name_length=13, new_value=0x81fad60 "/www/htdocs/ecolint.ch/dev:/www/htdocs/ecolint.ch/tmp:/www/htdocs/eco lint.ch/mysql", new_value_length=82, modify_type=4, stage=4) at /www/src/php5.3- 200908010830/Zend/zend_ini.c:249 #3 0xb75ed4fe in apply_config (dummy=0x81fb3e8) at /www/src/php5.3- 200908010830/sapi/apache2handler/apache_config.c:197 #4 0xb75ec8bb in php_handler (r=0x8384c18) at /www/src/php5.3- 200908010830/sapi/apache2handler/sapi_apache2.c:547 #5 0x0807dad7 in ap_run_handler (r=0x8384c18) at config.c:157 #6 0x08080bc7 in ap_invoke_handler (r=0x8384c18) at config.c:372 #7 0x080c84da in ap_internal_redirect (new_uri=0x8384be8 "/index.php/contacts/form_contacts_browse/1?", r=0x837fee0) at http_request.c:501 #8 0x080f3f41 in handler_redirect (r=0x837fee0) at mod_rewrite.c:4801 #9 0x0807dad7 in ap_run_handler (r=0x837fee0) at config.c:157 #10 0x08080bc7 in ap_invoke_handler (r=0x837fee0) at config.c:372 #11 0x080c8658 in ap_process_request (r=0x837fee0) at http_request.c:282 #12 0x080c581e in ap_process_http_connection (c=0x836fdf0) at http_core.c:190 #13 0x08084a87 in ap_run_process_connection (c=0x836fdf0) at connection.c:43 #14 0x080f846d in child_main (child_num_arg=<value optimized out>) at prefork.c:650 #15 0x080f86a5 in make_child (s=0x813d648, slot=0) at prefork.c:690 #16 0x080f944c in ap_mpm_run (_pconf=0x81380a8, plog=0x8188328, s=0x813d648) at prefork.c:966 #17 0x0806b44f in main (argc=135487648, argv=0x836dc10) at main.c:740 the strange output (bug #48880) i will check later....)There is something very fishy going on. Your backtrace shows that OnUpdateBaseDir was called with stage=4 and then it shows the segfault at the line that has: if (!*p || !**p) { But that was exactly what I fixed when I fixed bug #48880 stage 4 is PHP_INI_STAGE_ACTIVATE and the current code has: if (stage == PHP_INI_STAGE_STARTUP || stage == PHP_INI_STAGE_SHUTDOWN || stage == PHP_INI_STAGE_ACTIVATE || stage == PHP_INI_STAGE_DEACTIVATE) { /* We're in a PHP_INI_SYSTEM context, no restrictions */ *p = new_value; return SUCCESS; } /* Otherwise we're in runtime */ if (!*p || !**p) { /* open_basedir not set yet, go ahead and give it a value */ *p = new_value; return SUCCESS; } So I don't see how a call to OnUpdateBaseDir with stage=4 could have gotten to that condition if you are indeed running the latest code. Please check main/fopen_wrappers.c line 96 and make sure it has the check for PHP_INI_STAGE_ACTIVATE there.