Bug 151127
| Summary: | (perl ia64 segfault) bind-libs bad parameters to strcpy() | ||
|---|---|---|---|
| Product: | [Fedora] Fedora | Reporter: | Warren Togami <wtogami> |
| Component: | bind | Assignee: | Jason Vas Dias <jvdias> |
| Status: | CLOSED RAWHIDE | QA Contact: | David Lawrence <dkl> |
| Severity: | high | Docs Contact: | |
| Priority: | high | ||
| Version: | rawhide | CC: | cturner, davej, ezannoni, jakub |
| Target Milestone: | --- | ||
| Target Release: | --- | ||
| Hardware: | ia64 | ||
| OS: | Linux | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | Bug Fix | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2005-04-27 09:41:57 UTC | Type: | --- |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
| Bug Depends On: | |||
| Bug Blocks: | 136450 | ||
|
Description
Warren Togami
2005-03-15 05:25:38 UTC
trying to diagnose this locked the buildbox. to reproduce lockup: install src rpm, untar tarball. cd into directory. run "gdb /usr/bin/perl" then "r Makefile.PL" and enjoy the frozen screen Not sure who to assign this to. <warren> jakub, chip said the kernel crash during gdb happened at the same place that it segfaults without gdb. <jakub> warren: try LD_PRELOAD=libSegFault.so, ulimit -c unlimited and gdb on the core it generates or something Reproduced perl segfault on boris and natasha (RHEL3 ia64 kernel) and bullwinkle (2.6.9-1.906_EL). bullwinkle has some other malfunction, so not yet been able to see if gdb perl can crash it too. It doesn't crash bullwinkle. gdb manages a backtrace, but Sopwith said don't install debuginfo in there and reassign to Chip for him to deal with it. Filing a separate bug for the RHEL3 kernel crash. Testing if you have a C compiler and the needed header files.... Detaching after fork from child process 32311. cc -O2 -Wall -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -c -o compile.o compile.c You have a working compiler. Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 2305843009222377472 (LWP 32308)] 0x20000000006b84f0 in strcpy () from /lib/tls/libc.so.6.1 (gdb) bt #0 0x20000000006b84f0 in strcpy () from /lib/tls/libc.so.6.1 #1 0x200000000038b140 in endprotoent_r () from /usr/lib/libbind.so.3 #2 0x200000000038b420 in getprotobyname_r () from /usr/lib/libbind.so.3 #3 0x200000000026d560 in Perl_pp_gprotoent () from /usr/lib/perl5/5.8.6/ia64-linux-thread-multi/CORE/libperl.so #4 0x200000000026d810 in Perl_pp_gpbyname () from /usr/lib/perl5/5.8.6/ia64-linux-thread-multi/CORE/libperl.so #5 0x200000000015f200 in Perl_runops_debug () from /usr/lib/perl5/5.8.6/ia64-linux-thread-multi/CORE/libperl.so #6 0x20000000000ad730 in perl_run () from /usr/lib/perl5/5.8.6/ia64-linux-thread-multi/CORE/libperl.so #7 0x4000000000002370 in main () Not sure how useful this backtrace will be... Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 2305843009222377472 (LWP 6408)] 0x20000000006b84f0 in ?? () from /lib/tls/libc.so.6.1 (gdb) bt #0 0x20000000006b84f0 in ?? () from /lib/tls/libc.so.6.1 #1 0x200000000038b140 in endprotoent_r () from /usr/lib/libbind.so.3 #2 0x200000000038b420 in getprotobyname_r () from /usr/lib/libbind.so.3 #3 0x200000000026d560 in Perl_pp_gprotoent (my_perl=0x6000000000008010) at pp_sys.c:4900 #4 0x200000000026d810 in Perl_pp_gpbyname (my_perl=0x6000000000008010) at pp_sys.c:4867 #5 0x200000000015f200 in Perl_runops_debug (my_perl=0x6000000000008010) at dump.c:1449 #6 0x20000000000ad730 in perl_run (my_perl=Cannot access memory at address 0x0 ) at perl.c:1935 #7 0x4000000000002370 in main (argc=Variable "argc" is not available. ) at perlmain.c:98 -bash-3.00$ rpm -qa |grep debuginfo glibc-debuginfo-2.3.4-14 perl-debuginfo-5.8.6-4 bind-libs is passing bad parameters to strcpy(). Reassigning. Setting High
priority because it is blocking other package builds.
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 2305843009222377472 (LWP 12304)]
0x20000000006b84f0 in ?? () from /lib/tls/libc.so.6.1
(gdb) bt
#0 0x20000000006b84f0 in ?? () from /lib/tls/libc.so.6.1
#1 0x200000000038b140 in copy_protoent (pe=0x6000000000606910,
pptr=0x20000000008a41b0, buf=Variable "buf" is not available.)
at /usr/include/bits/string3.h:123
#2 0x200000000038b420 in getprotobyname_r (name=0x6000000000515690 "tcp",
pptr=0x20000000008a41b0,
buf=0x6000000000010c60 "", buflen=4096, answerp=0x20000000008a41d8) at
getprotoent_r.c:45
#3 0x200000000026d560 in Perl_pp_gprotoent (my_perl=0x6000000000008010) at
pp_sys.c:4900
#4 0x200000000026d810 in Perl_pp_gpbyname (my_perl=0x6000000000008010) at
pp_sys.c:4867
#5 0x200000000015f200 in Perl_runops_debug (my_perl=0x6000000000008010) at
dump.c:1449
#6 0x20000000000ad730 in perl_run (my_perl=Cannot access memory at address 0x0
) at perl.c:1935
#7 0x4000000000002370 in main (argc=Variable "argc" is not available.
) at perlmain.c:98
The root problem here is that perl is linked with libbind instead of
libresolv :
# ldd /usr/bin/perl
libperl.so =>
/usr/lib/perl5/5.8.6/ia64-linux-thread-multi/CORE/libperl.so
(0x2000000000050000)
libbind.so.3 => /usr/lib/libbind.so.3 (0x2000000000368000)
libnsl.so.1 => /lib/libnsl.so.1 (0x200000000041c000)
libdl.so.2 => /lib/libdl.so.2 (0x2000000000458000)
libm.so.6.1 => /lib/tls/libm.so.6.1 (0x2000000000470000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x2000000000540000)
libutil.so.1 => /lib/libutil.so.1 (0x2000000000588000)
libpthread.so.0 => /lib/tls/libpthread.so.0
(0x200000000059c000)
libc.so.6.1 => /lib/tls/libc.so.6.1 (0x20000000005d4000)
/lib/ld-linux-ia64.so.2 (0x2000000000000000)
And it is probably NOT picking up the includes from
/usr/include/bind
(ie. it is not getting the includes:
/usr/include/bind/{netdb.h,resolv.h,arpa/nameser.h}
necessary to use libbind properly,
but rather:
/usr/include/{netdb.h,resolv.h,arpa/nameser.h}
which are incompatible with libbind usage.
).
I don't think it is a good idea to make perl use libbind .
libbind is NOT configured by /etc/nsswitch.conf, but by
/etc/irs.conf.
If perl must use libbind, then it should be modified to pick
up the proper include files from /usr/include/bind .
I think rebuilding perl to use libresolv instead of libbind should
fix this problem.
However, I'm investigating if this is really a libbind issue or if
it is because the wrong include files were used - if it is a libbind
issue I'll fix it.
Changing line 1269 in perl-5.8.6/Configure should do the trick: Line 1269: libswanted="sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun" Should be: libswanted="sfio socket resolv inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun" Otherwise you'll need to change all the includes that include netdb.h, resolv.h, arpa/nameser.h to bind/netdb.h, bind/resolv.h, bind/arpa/nameser.h This issue is actually noted in PERL's INSTALL file: ./INSTALL: 1841:installed may run into troubles because BIND installs its own netdb.h Here's the patch to Configure that should fix this problem: --- perl-5.8.6/Configure.libresolv 2005-03-17 11:54:54.000000000 -0500 +++ perl-5.8.6/Configure 2005-03-17 11:55:26.000000000 -0500 @@ -1266,7 +1266,7 @@ : List of libraries we want. : If anyone needs extra -lxxx, put those in a hint file. -libswanted="sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun" +libswanted="sfio socket resolv inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun" libswanted="$libswanted m crypt sec util c cposix posix ucb bsd BSD" : We probably want to search /usr/shlib before most other libraries. : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist. I'm testing this now and will let you know how it works. I've now built both perl and perl-Net-DNS with the above patch on ia64 (natasha) and they work fine - perl passes all tests, perl-Net-DNS builds and installs, and I can run the BIND test scripts (a heavy Net::DNS user). Shall I go ahead and build perl and perl-Net-DNS with the patch ? Is anyone getting mails from this bug report ? OK, since this it so obviously wrong for perl to be using libbind with the wrong include path, I'm going ahead and building perl-5.8.6-5 in FC4 with the fix. When that is done, I'll submit perl-Net-DNS with the BuildRequires: perl >= 3:5.8.6-5 so the new perl will be used. Please don't add that BuildRequires. I'll handle perl-Net-DNS. Thanks for your fix! This bug is now fixed with perl-5.8.6-5 and perl-Net-DNS-0.48-3 |