Обсуждение: BUG #7968: Perl DBI segfaults in connect()

Поиск
Список
Период
Сортировка

BUG #7968: Perl DBI segfaults in connect()

От
mperilstein@trueposition.com
Дата:
The following bug has been logged on the website:

Bug reference:      7968
Logged by:          Mitchell Perilstein
Email address:      mperilstein@trueposition.com
PostgreSQL version: 9.1.5
Operating system:   SPARC Solaris 10
Description:        =


Summary: A perl DBI/DBD client makes a connect() call to a db server in down
or restarting state and coredumps.  There was a similar stack trace reported
in 2011 but not exactly.  I can probably reproduce this more succinctly with
a testcase if needed.

This code (part of Bucardo) was the call:

    $dbh =3D DBI->connect
        (
         $dsn,
         $user,
         $pass,
         {AutoCommit=3D>0, RaiseError=3D>1, PrintError=3D>0}
    );

The perl caller logs this and crashes:

    DBI
connect('dbname=3DTPLocationGateway;port=3D5432;host=3Dtplocalvirt','tpadmi=
n',...)
failed: =

    FATAL:  database "TPLocationGateway" does not exist at
/tpapp/tpdb/lib/perl5/Bucardo.pm line 4936

The Solaris coredump looks like this:

    #  pstack core
    core 'core' of 18694:   perl /tpapp/tpdb/bin/bucardo
--log-destination=3D/tpdata/tpdb/logs --log
     fed60fb0 pg_warn  (0, ae3648, 5fb0f0, 2d764, aa0f20, fed60f78) + 38
     fed27174 pqGetErrorNotice3 (adb080, 11000, 0, abf545, 0, ffbfed0c) +
4fc
     fed260a8 pqParseInput3 (adb080, adb3f4, 4, ffbfed78, fed431ac, 282019)
+ 168
     fed1db30 PQgetResult (adb080, adb080, 1, 2000000, 128808, fed431ac) +
c4
     fed726a8 handle_old_async (4bada0, a75548, 1000000, 8000000, 64,
fed8e6e0) + 5c4
     fed6d088 pg_st_destroy (4bada0, adcf20, 0, 217ec, fed8e6e0, a75548) +
198
     fed59af8 XS_DBD__Pg__st_DESTROY (128808, 4, 803948, fed8e6e0, 2245c,
4bada0) + 304
     feecec58 XS_DBI_dispatch (803948, c06a8, feeda8b0, feeec0a4, 0, 22460)
+ 20f0
     ff2a7634 Perl_pp_entersub (c0db4, 0, ffc00000, c2538, ffbff5a0,
ff348000) + 6fc
     ff269c2c S_call_body (ffbff5a0, 0, 3000, de41c, 529e50, ff35d978) + 54
     ff2698c0 Perl_call_sv (2c00, 2c00, 3050, 26e3c, ff35b3e4, ff35b3c8) +
9cc
     ff2f0f8c Perl_sv_clear (8147b0, 3000, 3000, 124be0, ff348000, 41) +
280
     ff2f18d0 Perl_sv_free (8147b0, ff2f0c98, 568f8, 8, 0, 8147b0) + 1d8
     ff2f14a8 Perl_sv_clear (501f2c, 7d4, ff2f15a8, 0, ff348000, 3000) +
79c
     ff2f18d0 Perl_sv_free (501f2c, 7d4, 568f8, ff, 0, 501f2c) + 1d8
     ff245628 Perl_mg_free (a5c894, ff35b398, 0, b, 2000900b, 5ffdb8) + ac
     ff2f121c Perl_sv_clear (a5c894, 1, 2c00, ff35d97c, ff348000, 0) + 510
     ff2f18d0 Perl_sv_free (a5c894, 5fb428, 568f8, ff2e69e4, 0, a5c894) +
1d8
     ff2e692c S_visit  (ff2e6968, 5fb428, 5fb668, 5fb278, ff348000, 1d7) +
80
     ff2e6b28 Perl_sv_clean_objs (2f80, 1, ff34b560, ff348000, 61514, 2c00)
+ 48
     ff264c84 perl_destruct (0, 3400, 0, 1, ff35b3ec, 3400) + 2f8
     00011050 main     (8, ffbffaf4, 0, 22400, 22420, 22400) + b4
     00010f84 _start   (0, 0, 0, 0, 0, 0) + 108
    # pflags core
    core 'core' of 18694:   perl /tpapp/tpdb/bin/bucardo
--log-destination=3D/tpdata/tpdb/logs --log
            data model =3D _ILP32  flags =3D MSACCT|MSFORK
     /1:    flags =3D 0
            sigmask =3D 0xffffbefc,0x0000ffff  cursig =3D SIGSEGV

Solaris (but we've seen it on similar boxes):

    #  uname -a
    SunOS WilWlg1 5.10 Generic_147440-25 sun4v sparc sun4v

Perl v5.8.4 :

    # perl -V
    Summary of my perl5 (revision 5 version 8 subversion 4) configuration:
      Platform:
        osname=3Dsolaris, osvers=3D2.10, archname=3Dsun4-solaris-64int
        uname=3D'sunos localhost 5.10 sun4u sparc SUNW,Ultra-2'
        config_args=3D''
        hint=3Drecommended, useposix=3Dtrue, d_sigaction=3Ddefine
        usethreads=3Dundef use5005threads=3Dundef useithreads=3Dundef
usemultiplicity=3Dundef
        useperlio=3Ddefine d_sfio=3Dundef uselargefiles=3Ddefine usesocks=
=3Dundef
        use64bitint=3Ddefine use64bitall=3Dundef uselongdouble=3Dundef
        usemymalloc=3Dn, bincompat5005=3Dundef
      Compiler:
        cc=3D'cc', ccflags =3D'-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=3D64
-xarch=3Dv8 -D_TS_ERRNO',
        optimize=3D'-xO3 -xspace -xildoff',
        cppflags=3D''
        ccversion=3D'Sun WorkShop', gccversion=3D'', gccosandvers=3D''
        intsize=3D4, longsize=3D4, ptrsize=3D4, doublesize=3D8, byteorder=
=3D87654321
        d_longlong=3Ddefine, longlongsize=3D8, d_longdbl=3Ddefine, longdbls=
ize=3D16
        ivtype=3D'long long', ivsize=3D8, nvtype=3D'double', nvsize=3D8,
Off_t=3D'off_t', lseeksize=3D8
        alignbytes=3D8, prototype=3Ddefine
      Linker and Libraries:
        ld=3D'cc', ldflags =3D''
        libpth=3D/lib /usr/lib /usr/ccs/lib
        libs=3D-lsocket -lnsl -ldl -lm -lc
        perllibs=3D-lsocket -lnsl -ldl -lm -lc
        libc=3D/lib/libc.so, so=3Dso, useshrplib=3Dtrue, libperl=3Dlibperl.=
so
        gnulibc_version=3D''
      Dynamic Linking:
        dlsrc=3Ddl_dlopen.xs, dlext=3Dso, d_dlsymun=3Dundef, ccdlflags=3D'-R
/usr/perl5/5.8.4/lib/sun4-solaris-64int/CORE'
        cccdlflags=3D'-KPIC', lddlflags=3D'-G'
    =

    =

    Characteristics of this binary (from libperl): =

      Compile-time options: USE_64_BIT_INT USE_LARGE_FILES
      Locally applied patches:
            22667 The optree builder was looping when constructing the ops
...
            22715 Upgrade to FileCache 1.04
            22733 Missing copyright in the README.
            22746 fix a coredump caused by rv2gv not fully converting a PV
...
            22755 Fix 29149 - another UTF8 cache bug hit by substr.
            22774 [perl #28938] split could leave an array without ...
            22775 [perl #29127] scalar delete of empty slice returned
garbage
            22776 [perl #28986] perl -e "open m" crashes Perl
            22777 add test for change #22776 ("open m" crashes Perl)
            22778 add test for change #22746 ([perl #29102] Crash on assign
...
            22781 [perl #29340] Bizarre copy of ARRAY make sure a pad op's
...
            22796 [perl #29346] Double warning for int(undef) and abs(undef)
...
            22818 BOM-marked and (BOMless) UTF-16 scripts not working
            22823 [perl #29581] glob() misses a lot of matches
            22827 Smoke [5.9.2] 22818 FAIL(F) MSWin32 WinXP/.Net SP1 (x86/1
cpu)
            22830 [perl #29637] Thread creation time is hypersensitive
            22831 improve hashing algorithm for ptr tables in perl_clone:
...
            22839 [perl #29790] Optimization busted: '@a =3D "b", sort @a'
...
            22850 [PATCH] 'perl -v' fails if local_patches contains code
snippets
            22852 TEST needs to ignore SCM files
            22886 Pod::Find should ignore SCM files and dirs
            22888 Remove redundant %SIG assignments from FileCache
            23006 [perl #30509] use encoding and "eq" cause memory leak
            23074 Segfault using HTML::Entities
            23106 Numeric comparison operators mustn't compare addresses of
...
            23320 [perl #30066] Memory leak in nested shared data structures
...
            23321 [perl #31459] Bug in read()
            27722 perlio.c breaks on Solaris/gcc when > 256 FDs are
available
            SPRINTF0 - fixes for sprintf formatting issues - CVE-2005-3962
            6663288 Upgrade to CGI.pm 3.33
            REGEXP0 - fix for UTF-8 recoding in regexps - CVE-2007-5116
            6758953 Perl Sys::Syslog can log messages with wrong severity
            6935710 patch 141552-01 causes an error when the Syslog perl
module is used
            6961567 CVE-2010-1168 - Safe.pm 2.24 and earlier may allow
attackers to break out of safe compartment
            7004391 CGI.pm needs update to filter newlines in headers
(CVE-2010-2761, CVE-2010-4411)
            7116936 Problem with utility/perl
      Built under solaris
      Compiled at Jan  8 2012 04:18:12
      %ENV:
        PERL5LIB=3D"/tpapp/tpdb/lib/perl5"
      @INC:
        /tpapp/tpdb/lib/perl5/sun4-solaris-64int
        /tpapp/tpdb/lib/perl5
        /usr/perl5/5.8.4/lib/sun4-solaris-64int
        /usr/perl5/5.8.4/lib
        /usr/perl5/site_perl/5.8.4/sun4-solaris-64int
        /usr/perl5/site_perl/5.8.4
        /usr/perl5/site_perl
        /usr/perl5/vendor_perl/5.8.4/sun4-solaris-64int
        /usr/perl5/vendor_perl/5.8.4
        /usr/perl5/vendor_perl
        .

Interesting Modules:
     DBD-Pg-2.19.3
     DBI-1.623
     DBIx-Safe-1.2.5

Bucardo:
    git version e83e2e22e79c6cf6be5912925d50e271e02a886d
    approximately version 4.99.6 plus a little

Re: BUG #7968: Perl DBI segfaults in connect()

От
Tom Lane
Дата:
mperilstein@trueposition.com writes:
> Summary: A perl DBI/DBD client makes a connect() call to a db server in down
> or restarting state and coredumps.

The stack trace looks like the problem is in a notice handler installed
by DBD-Pg, not in libpq proper.  I'm not sure that the authors of DBD-Pg
read pgsql-bugs --- you might want to contact them another way.  The
bug tracker at http://search.cpan.org/dist/DBD-Pg/ might be a good bet.

            regards, tom lane

Re: BUG #7968: Perl DBI segfaults in connect()

От
Tom Lane
Дата:
Mitchell Perilstein <Mitchell.Perilstein@trueposition.com> writes:
> Yes, that was a better place to look.  They have it already:
> https://rt.cpan.org/Public/Bug/Display.html?id=69664

Looks like they don't know how to reproduce it though, so you could
help them out by adding a test case there.

            regards, tom lane

Re: BUG #7968: Perl DBI segfaults in connect()

От
Mitchell Perilstein
Дата:
Yes, that was a better place to look.  They have it already:
https://rt.cpan.org/Public/Bug/Display.html?id=69664

Thanks!


On 03/18/2013 12:33 PM, Tom Lane wrote:
> mperilstein@trueposition.com writes:
>> Summary: A perl DBI/DBD client makes a connect() call to a db server in down
>> or restarting state and coredumps.
> The stack trace looks like the problem is in a notice handler installed
> by DBD-Pg, not in libpq proper.  I'm not sure that the authors of DBD-Pg
> read pgsql-bugs --- you might want to contact them another way.  The
> bug tracker at http://search.cpan.org/dist/DBD-Pg/ might be a good bet.
>
>             regards, tom lane
>


Confidentiality Notice: This e-mail (including any attachments) is intended only for the recipients named above. It may
containconfidential or privileged information and should not be read, copied or otherwise used by any other person. If
youare not a named recipient, please notify the sender of that fact and delete the e-mail from your system.