ID: 30563 Updated by: [EMAIL PROTECTED] Reported By: david at donpiso dot com Status: Bogus Bug Type: Reproducible crash Operating System: Linux 2.4.25 PHP Version: 4.3.9 New Comment:
The fact that your test: gcc tst-libc6.c -o tst-libc6 -ldb doesn't show up in ldd is dubious on the first machine. It may be necessary to add: extern int db_open(void); to force the db_open symbol to be resolved at initial link time to trigger the same conditions as in PHP. To debug the PHP issue further you could use LD_DEBUG and LD_DEBUG_OUTPUT (see "man ld.so") and work out where the db_open() is getting resolved to from nss_db. All the copies of the nss_db library I have use a statically linked copy of Berkeley DB. Previous Comments: ------------------------------------------------------------------------ [2004-10-28 17:00:51] david at donpiso dot com It doesn't break. Test program is: #include <netdb.h> #include <stdio.h> int main(int argc, char *argv) { struct protoent *pe; pe=getprotobyname("tcp"); printf("Name: %s, Number: %u\n",pe->p_name,pe->p_proto); } Tests are: -Test 1: gcc tst-libc6.c -o tst-libc6 ldd tst-libc6 libc.so.6 => /lib/libc.so.6 (0x40024000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) ./tst-libc6 Name: tcp, Number: 6 -Test 2: gcc tst-libc6.c -o tst-libc6 -ldb ldd tst-libc6 libc.so.6 => /lib/libc.so.6 (0x40024000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) ./tst-libc6 Name: tcp, Number: 6 -Test 3: gcc tst-libc6.c -o tst-libc6 -lnss_db ldd tst-libc6 libnss_db.so.2 => /lib/libnss_db.so.2 (0x40024000) libc.so.6 => /lib/libc.so.6 (0x4002b000) libnss_files.so.2 => /lib/libnss_files.so.2 (0x4014e000) libdb-3.1.so => /lib/libdb-3.1.so (0x40157000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) ./tst-libc6 Name: tcp, Number: 6 So it works and doesn't segfault. Compared to a machine that works, I notice that the working one has a glibc 2.3.1 against the glibc 2.2.5 that drives the failing one. I will try to upgrade glibc, although it worked well for slightly older Apache+PHP versions and I have to evaluate posible collateral effects on other applications before upgrading glibc from 2.2 to 2.3... On the working machine, test 2 shows different libraries: -Test 2: gcc tst-libc6.c -o tst-libc6 -ldb ldd tst-libc6 libdb-3.3.so => /lib/libdb-3.3.so (0x40025000) libc.so.6 => /lib/libc.so.6 (0x400af000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) ./tst-libc6 Name: tcp, Number: 6 Here it includes libdb (as you may expect), while on the first case Test2 just links against the same libraries as Test1 (both working). Maybe some dependencies in php make libraries to behave bogus and make that call to fail... I will try to upgrade libraries, but if you know a better method to avoid failure without changing them, will be of help (it is a production server, I can test new versions of Apache and PHP in parallel with the production daemons, but upgrading system libraries is a little more dangerous and painful as it is 24/7 service...) Thank you anyway for your time :-) ------------------------------------------------------------------------ [2004-10-26 16:36:11] [EMAIL PROTECTED] This looks suspiciously like a bad glibc installation: #0 0x00000000 in ?? () #1 0x407f9cec in db_open () from /lib/libnss_db.so.2 I doubt there is a PHP or Apache bug here. Try a simple program calling getprotobyname("tcp") to see if that segfaults; try it again when linked against -ldb. ------------------------------------------------------------------------ [2004-10-26 15:06:19] david at donpiso dot com Yes, you're right. There is a Segmentation Violation: (gdb) run -DSSL -e debug -k start -X Starting program: /uxd/apache-server2/bin/httpd -DSSL -e debug -k start -X [Tue Oct 26 15:03:42 2004] [debug] mod_so.c(247): loaded module include_module [Tue Oct 26 15:03:42 2004] [debug] mod_so.c(247): loaded module deflate_module [Tue Oct 26 15:03:42 2004] [debug] mod_so.c(247): loaded module log_config_module [Tue Oct 26 15:03:42 2004] [debug] mod_so.c(247): loaded module env_module [Tue Oct 26 15:03:42 2004] [debug] mod_so.c(247): loaded module ssl_module [Tue Oct 26 15:03:42 2004] [debug] mod_so.c(247): loaded module status_module [Tue Oct 26 15:03:42 2004] [debug] mod_so.c(247): loaded module info_module [Tue Oct 26 15:03:43 2004] [debug] mod_so.c(247): loaded module negotiation_module [Tue Oct 26 15:03:43 2004] [debug] mod_so.c(247): loaded module dir_module [Tue Oct 26 15:03:43 2004] [debug] mod_so.c(247): loaded module alias_module [Tue Oct 26 15:03:43 2004] [debug] mod_so.c(247): loaded module php4_module Program received signal SIGSEGV, Segmentation fault. 0x00000000 in ?? () (gdb) bt #0 0x00000000 in ?? () #1 0x407f9cec in db_open () from /lib/libnss_db.so.2 #2 0x407f9dac in internal_setent () from /lib/libnss_db.so.2 #3 0x407f85dd in _nss_db_endprotoent () from /lib/libnss_db.so.2 #4 0x407f8887 in _nss_db_getprotobyname_r () from /lib/libnss_db.so.2 #5 0x403fd080 in getprotobyname_r () from /lib/libc.so.6 #6 0x403fcf31 in getprotobyname () from /lib/libc.so.6 #7 0x40551484 in zm_startup_sockets (type=1, module_number=4) at /uxd/temp/php-4.3.9/ext/sockets/sockets.c:461 #8 0x405f59b3 in zend_startup_module (module=0x406fa040) at /uxd/temp/php-4.3.9/Zend/zend_API.c:1005 #9 0x405c9294 in php_startup_extensions (ptr=0x40705908, count=19) at /uxd/temp/php-4.3.9/main/main.c:1044 #10 0x4060e54f in php_startup_internal_extensions () at main/internal_functions.c:81 #11 0x405c9845 in php_module_startup (sf=0x407055e0, additional_modules=0x407058c0, num_additional_modules=1) at /uxd/temp/php-4.3.9/main/main.c:1216 #12 0x4060c1e6 in php_apache2_startup (sapi_module=0x407055e0) at /uxd/temp/php-4.3.9/sapi/apache2handler/sapi_apache2.c:289 #13 0x4060c34d in php_apache_server_startup (pconf=0x80a5090, plog=0x80d9160, ptemp=0x80f7958, s=0x80a9198) at /uxd/temp/php-4.3.9/sapi/apache2handler/sapi_apache2.c:388 #14 0x0806eaa1 in ap_run_post_config (pconf=0x80a5090, plog=0x80d9160, ptemp=0x80f7958, s=0x80a9198) at config.c:87 #15 0x0807364c in main (argc=7, argv=0xbffff854) at main.c:606 #16 0x4033117d in __libc_start_main () from /lib/libc.so.6 ------------------------------------------------------------------------ [2004-10-26 14:47:25] [EMAIL PROTECTED] Can you try with -X added to the flags passed to run in gdb, to try a single-process startup. ------------------------------------------------------------------------ [2004-10-26 13:21:32] david at donpiso dot com Description: ------------ Apache simply fails to start after loading all modules, it seems it exits after loading, probably following initialization phase of the modules. No error neither at console nor log files. This happens since Apache 2.0.48 + PHP 4.3.4 in this machine, but I succeeded to start Apache 2.0.49 + PHP 4.3.6 in a different machine. Now tried Apache 2.0.52 + PHP 4.3.9 and still doesn't work. This is PHP configure: ./configure --with-apxs2=/usr/local/apache-server2/bin/apxs --enable-ctype --with-gd --enable-gd-native-ttf --with-jpeg-dir=/usr --with-png --with-gmp --with-pgsql --enable-shmop --enable-memory-limit --enable-shared --disable-debug --with-zlib=/usr --disable-cgi --disable-path-info-check --enable-safe-mode --with-openssl --with-bz2 --enable-calendar --enable-exif --enable-ftp --enable-sockets --without-mysql This are Apache modules: Server version: Apache/2.0.52 Server built: Oct 25 2004 18:59:00 Server's Module Magic Number: 20020903:9 Architecture: 32-bit Server compiled with.... -D APACHE_MPM_DIR="server/mpm/prefork" -D APR_HAS_SENDFILE -D APR_HAS_MMAP -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled) -D APR_USE_SYSVSEM_SERIALIZE -D APR_USE_PTHREAD_SERIALIZE -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT -D APR_HAS_OTHER_CHILD -D AP_HAVE_RELIABLE_PIPED_LOGS -D HTTPD_ROOT="/usr/local/apache-server2" -D SUEXEC_BIN="/usr/local/apache-server2/bin/suexec" -D DEFAULT_PIDLOG="logs/httpd.pid" -D DEFAULT_SCOREBOARD="logs/apache_runtime_status" -D DEFAULT_LOCKFILE="logs/accept.lock" -D DEFAULT_ERRORLOG="logs/error_log" -D AP_TYPES_CONFIG_FILE="conf/mime.types" -D SERVER_CONFIG_FILE="conf/httpd.conf" The php.ini changes: precision = 14 y2k_compliance = Off output_buffering = 4096 allow_call_time_pass_reference = Off safe_mode_gid = On highlight.* ;max_input_time = 60 memory_limit = 6M error_reporting = E_ALL display_errors = Off log_errors = On error_log = /(...)/apache2/logs/php.log variables_order = "GPCS" register_argc_argv = Off post_max_size = 4M magic_quotes_gpc = Off upload_tmp_dir = /(...)/tmp upload_max_filesize = 4M ;SMTP = localhost ;sendmail_from = [EMAIL PROTECTED] session.cache_expire = 60 session.use_trans_sid = 1 Actual result: -------------- Running "gdb httpd" gives: GNU gdb 5.2 (...) This GDB was configured as "i386-slackware-linux"... (gdb) run -DSSL -e debug -k start Starting program: /uxd/apache-server2/bin/httpd -DSSL -e debug -k start [Tue Oct 26 13:16:42 2004] [debug] mod_so.c(247): loaded module include_module [Tue Oct 26 13:16:42 2004] [debug] mod_so.c(247): loaded module deflate_module [Tue Oct 26 13:16:42 2004] [debug] mod_so.c(247): loaded module log_config_module [Tue Oct 26 13:16:42 2004] [debug] mod_so.c(247): loaded module env_module [Tue Oct 26 13:16:42 2004] [debug] mod_so.c(247): loaded module ssl_module [Tue Oct 26 13:16:42 2004] [debug] mod_so.c(247): loaded module status_module [Tue Oct 26 13:16:42 2004] [debug] mod_so.c(247): loaded module info_module [Tue Oct 26 13:16:42 2004] [debug] mod_so.c(247): loaded module negotiation_module [Tue Oct 26 13:16:42 2004] [debug] mod_so.c(247): loaded module dir_module [Tue Oct 26 13:16:42 2004] [debug] mod_so.c(247): loaded module alias_module [Tue Oct 26 13:16:43 2004] [debug] mod_so.c(247): loaded module php4_module Program exited normally. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=30563&edit=1