This service will be undergoing maintenance at 00:00 UTC, 2017-10-23 It is expected to last about 30 minutes
Bug 151127 - (perl ia64 segfault) bind-libs bad parameters to strcpy()
(perl ia64 segfault) bind-libs bad parameters to strcpy()
Status: CLOSED RAWHIDE
Product: Fedora
Classification: Fedora
Component: bind (Show other bugs)
rawhide
ia64 Linux
high Severity high
: ---
: ---
Assigned To: Jason Vas Dias
David Lawrence
:
Depends On:
Blocks: FC4Blocker
  Show dependency treegraph
 
Reported: 2005-03-15 00:25 EST by Warren Togami
Modified: 2007-11-30 17:11 EST (History)
4 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2005-04-27 05:41:57 EDT
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)

  None (edit)
Description Warren Togami 2005-03-15 00:25:38 EST
The below failure happens only on ia64 when attempting to build perl-Net-DNS in
beehive.  It crashes reproducibly in the same place.

http://people.redhat.com/wtogami/temp/perl-Net-DNS-540395-ia64-natasha.build.redhat.com.log
Executing(%build): /bin/sh -e /usr/src/build/540398-ia64/install-tmp/rpm-tmp.17788
+ umask 022
+ cd /usr/src/build/540398-ia64/BUILD
+ cd Net-DNS-0.48
+ LANG=C
+ export LANG
+ unset DISPLAY
+ CFLAGS='-O2 -Wall -g -pipe -Wp,-D_FORTIFY_SOURCE=2'
+ perl Makefile.PL PREFIX=/usr/src/build/540398-ia64/install/usr INSTALLDIRS=vendor
Testing if you have a C compiler and the needed header files....
cc -O2 -Wall -g -pipe -Wp,-D_FORTIFY_SOURCE=2   -c -o compile.o compile.c
/usr/src/build/540398-ia64/install-tmp/rpm-tmp.17788: line 27:   462
Segmentation fault      CFLAGS="$RPM_OPT_FLAGS" perl Makefile.PL
PREFIX=$RPM_BUILD_ROOT/usr INSTALLDIRS=vendor </dev/null
error: Bad exit status from /usr/src/build/540398-ia64/install-tmp/rpm-tmp.17788
(%build)
Comment 1 Chip Turner 2005-03-15 23:05:10 EST
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
Comment 2 Warren Togami 2005-03-15 23:13:16 EST
Not sure who to assign this to.
Comment 3 Warren Togami 2005-03-16 02:34:39 EST
<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
Comment 5 Warren Togami 2005-03-16 17:40:21 EST
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.
Comment 6 Warren Togami 2005-03-16 17:51:37 EST
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 ()
Comment 7 Warren Togami 2005-03-16 18:00:49 EST
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
Comment 8 Warren Togami 2005-03-16 22:27:14 EST
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
Comment 9 Jason Vas Dias 2005-03-17 10:57:46 EST
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.

Comment 10 Jason Vas Dias 2005-03-17 12:05:32 EST
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.


Comment 11 Jason Vas Dias 2005-03-17 12:59:28 EST
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 ?
 
Comment 12 Jason Vas Dias 2005-03-17 13:14:50 EST
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.


Comment 13 Warren Togami 2005-03-17 13:28:17 EST
Please don't add that BuildRequires.  I'll handle perl-Net-DNS.  Thanks for your
fix!
Comment 16 Jason Vas Dias 2005-03-17 18:56:12 EST
This bug is now fixed with perl-5.8.6-5 and perl-Net-DNS-0.48-3 

Note You need to log in before you can comment on or make changes to this bug.