Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pure perl assertion failure with POSIX::sigaction #10385

Closed
p5pRT opened this issue May 17, 2010 · 13 comments
Closed

pure perl assertion failure with POSIX::sigaction #10385

p5pRT opened this issue May 17, 2010 · 13 comments

Comments

@p5pRT
Copy link

p5pRT commented May 17, 2010

Migrated from rt.perl.org#75150 (status was 'open')

Searchable as RT75150$

@p5pRT
Copy link
Author

p5pRT commented May 17, 2010

From @nwc10

Created by @nwc10

This little test case​:

#!/usr/local/bin/perl -w

use strict;
use warnings;

use POSIX '​:signal_h' ;

# This is the special bit

*SIG = {};

my $mask = POSIX​::SigSet->new();
my $act = POSIX​::SigAction->new(sub {}, $mask);

sigaction(SIGCHLD, $act);
# Went boom

__END__

fails an assertion​:

perl5.13.0​: mg.c​:98​: S_save_magic​: Assertion `((sv)->sv_flags & (0x00200000|0x00400000|0x00800000))' failed.
Aborted

As best I can tell, that assertion was added in 1996 as part of perl5.002beta3

The test case is massively reduced from part of the current forks distribution.
It's forks​::signal, which in turn uses Sig​::SigAction, but as you can see, it's
possible to reduce it to something core only.

I don't know what the right fix is. This doesn't seem to be a core regression.

Nicholas Clark

Perl Info

Flags:
    category=core
    severity=low

Site configuration information for perl 5.13.0:

Configured by nick at Mon May 17 17:51:26 BST 2010.

Summary of my perl5 (revision 5 version 13 subversion 0) configuration:
  Derived from: 7eb4f9b7b5bb8d1dc09764c85ca57bc61f5b6f92
  Platform:
    osname=linux, osvers=2.6.18.8-xenu, archname=x86_64-linux
    uname='linux eris 2.6.18.8-xenu #1 smp sat oct 3 10:27:42 bst 2009 x86_64 gnulinux '
    config_args='-Dusedevel=y -Dcc=ccache gcc -Dld=gcc -Ubincompat5005 -Uinstallusrbinperl -Dcf_email=nick@ccl4.org -Dperladmin=nick@ccl4.org -Dinc_version_list=  -Dinc_version_list_init=0 -Doptimize=-g -Uusethreads -Uuse64bitall -Uusemymalloc -Duseperlio -Dprefix=~/Sandpit/snap5.9.x-v5.13.0-218-g7eb4f9b -Uusevendorprefix -Uvendorprefix=~/Sandpit/snap5.9.x-v5.13.0-218-g7eb4f9b -Dinstallman1dir=none -Dinstallman3dir=none -Uuserelocatableinc -Dnoextensions=Encode -Duseperlio -de'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=undef, usemultiplicity=undef
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=define, use64bitall=undef, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='ccache gcc', ccflags ='-DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-g',
    cppflags='-DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
    ccversion='', gccversion='4.3.2', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='gcc', ldflags =' -fstack-protector -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib /lib64 /usr/lib64
    libs=-lnsl -ldb -ldl -lm -lcrypt -lutil -lc
    perllibs=-lnsl -ldl -lm -lcrypt -lutil -lc
    libc=/lib/libc-2.7.so, so=so, useshrplib=false, libperl=libperl.a
    gnulibc_version='2.7'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -g -L/usr/local/lib -fstack-protector'

Locally applied patches:
    


@INC for perl 5.13.0:
    /home/nick/Sandpit/snap5.9.x-v5.13.0-218-g7eb4f9b/lib/perl5/site_perl/5.13.0/x86_64-linux
    /home/nick/Sandpit/snap5.9.x-v5.13.0-218-g7eb4f9b/lib/perl5/site_perl/5.13.0
    /home/nick/Sandpit/snap5.9.x-v5.13.0-218-g7eb4f9b/lib/perl5/5.13.0/x86_64-linux
    /home/nick/Sandpit/snap5.9.x-v5.13.0-218-g7eb4f9b/lib/perl5/5.13.0
    .


Environment for perl 5.13.0:
    HOME=/home/nick
    LANG (unset)
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/home/nick/bin:/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/local/sbin:/sbin:/usr/sbin
    PERL_BADLANG (unset)
    SHELL=/bin/bash

@p5pRT
Copy link
Author

p5pRT commented May 18, 2010

From @nwc10

On Mon, May 17, 2010 at 02​:10​:14PM -0700, Nicholas Clark wrote​:

I don't know what the right fix is. This doesn't seem to be a core regression.

Although there is this highly suspicious comment in the call stack​:

  /* This call actually calls sigaction() with almost the
  right settings, including appropriate interpretation
  of DEFAULT and IGNORE. However, why are we doing
  this when we're about to do it again just below? XXX */
  mg_set(*sigsvp);

Nicholas Clark

@p5pRT
Copy link
Author

p5pRT commented Aug 25, 2010

From @ntyni

This is a bug report for perl from Niko Tyni <ntyni@​debian.org>,
generated with the help of perlbug 1.39 running under perl 5.13.4.


Originally triggered by the CPAN forks module​:

./perl -Ilib -MPOSIX -e '*SIG={}; sigaction(1, POSIX​::SigAction->new)'
perl​: mg.c​:98​: S_save_magic​: Assertion `((sv)->sv_flags & (0x00200000|0x00400000|0x00800000))' failed.
zsh​: abort (core dumped) ./perl -Ilib -MPOSIX -e '*SIG={}; sigaction(1, POSIX​::SigAction->new)'

Seen at least on 5.10.1 and blead.

( This is also http​://bugs.debian.org/594250 )



Flags​:
  category=library
  severity=low
  module=POSIX


Site configuration information for perl 5.13.4​:

Configured by niko at Wed Aug 25 00​:21​:02 EEST 2010.

Summary of my perl5 (revision 5 version 13 subversion 4) configuration​:
  Commit id​: 9b47cdd
  Platform​:
  osname=linux, osvers=2.6.32-5-amd64, archname=x86_64-linux-gnu-thread-multi
  uname='linux madeleine 2.6.32-5-amd64 #1 smp thu aug 12 13​:01​:50 utc 2010 x86_64 gnulinux '
  config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=x86_64-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.13 -Darchlib=/usr/lib/perl/5.13 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.13.4 -Dsitearch=/usr/local/lib/perl/5.13.4 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -DDEBUGGING=both -Doptimize=-O2 -Dusedevel -Uuseshrplib -des'
  hint=recommended, useposix=true, d_sigaction=define
  useithreads=define, usemultiplicity=define
  useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
  use64bitint=define, use64bitall=define, uselongdouble=undef
  usemymalloc=n, bincompat5005=undef
  Compiler​:
  cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
  optimize='-O2 -g',
  cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include'
  ccversion='', gccversion='4.4.5 20100816 (prerelease)', gccosandvers=''
  intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
  d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
  ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
  alignbytes=8, prototype=define
  Linker and Libraries​:
  ld='cc', ldflags =' -fstack-protector -L/usr/local/lib'
  libpth=/usr/local/lib /lib /usr/lib /lib64 /usr/lib64
  libs=-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread -lc -lgdbm_compat
  perllibs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
  libc=/lib/libc-2.11.2.so, so=so, useshrplib=false, libperl=libperl.a
  gnulibc_version='2.11.2'
  Dynamic Linking​:
  dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
  cccdlflags='-fPIC', lddlflags='-shared -O2 -g -L/usr/local/lib -fstack-protector'

Locally applied patches​:
 


@​INC for perl 5.13.4​:
  lib
  /usr/local/lib/perl/5.13.4
  /usr/local/share/perl/5.13.4
  /usr/lib/perl5
  /usr/share/perl5
  /usr/lib/perl/5.13
  /usr/share/perl/5.13
  /usr/local/share/perl
  /usr/share/perl5
  .


Environment for perl 5.13.4​:
  HOME=/home/niko
  LANG=en_US.UTF-8
  LANGUAGE (unset)
  LC_CTYPE=fi_FI.UTF-8
  LD_LIBRARY_PATH (unset)
  LOGDIR (unset)
  PATH=/home/niko/bin​:/home/niko/bin​:/home/niko/bin​:/usr/local/bin​:/usr/bin​:/bin​:/usr/local/games​:/usr/games​:/sbin​:/usr/sbin​:/sbin​:/usr/sbin
  PERL_BADLANG (unset)
  SHELL=/bin/zsh

@p5pRT
Copy link
Author

p5pRT commented Aug 30, 2010

From @tonycoz

On Tue, Aug 24, 2010 at 10​:32​:18PM -0700, Niko Tyni wrote​:

Originally triggered by the CPAN forks module​:

./perl -Ilib -MPOSIX -e '*SIG={}; sigaction(1, POSIX​::SigAction->new)'
perl​: mg.c​:98​: S_save_magic​: Assertion `((sv)->sv_flags & (0x00200000|0x00400000|0x00800000))' failed.
zsh​: abort (core dumped) ./perl -Ilib -MPOSIX -e '*SIG={}; sigaction(1, POSIX​::SigAction->new)'

Seen at least on 5.10.1 and blead.

Fixed in 17cffb3.

Tony

@p5pRT
Copy link
Author

p5pRT commented Aug 30, 2010

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Aug 30, 2010

@tonycoz - Status changed from 'open' to 'resolved'

@p5pRT
Copy link
Author

p5pRT commented Aug 30, 2010

From @nwc10

On Tue, Aug 31, 2010 at 12​:41​:29AM +1000, Tony Cook wrote​:

On Tue, Aug 24, 2010 at 10​:32​:18PM -0700, Niko Tyni wrote​:

Originally triggered by the CPAN forks module​:

./perl -Ilib -MPOSIX -e '*SIG={}; sigaction(1, POSIX​::SigAction->new)'
perl​: mg.c​:98​: S_save_magic​: Assertion `((sv)->sv_flags & (0x00200000|0x00400000|0x00800000))' failed.
zsh​: abort (core dumped) ./perl -Ilib -MPOSIX -e '*SIG={}; sigaction(1, POSIX​::SigAction->new)'

Seen at least on 5.10.1 and blead.

Fixed in 17cffb3.

I believe that this bug is a duplicate of 75150

Whilst this fixes the immediate symptoms of an assertion failure, I'm not
convinced that it actually fixes the underlying bugginess, which is caused
by the core not handling this sanely​:

  *SIG={}

Nicholas Clark

@p5pRT
Copy link
Author

p5pRT commented Aug 31, 2010

From @tonycoz

On Mon, Aug 30, 2010 at 04​:01​:28PM +0100, Nicholas Clark wrote​:

On Tue, Aug 31, 2010 at 12​:41​:29AM +1000, Tony Cook wrote​:

On Tue, Aug 24, 2010 at 10​:32​:18PM -0700, Niko Tyni wrote​:

Originally triggered by the CPAN forks module​:

./perl -Ilib -MPOSIX -e '*SIG={}; sigaction(1, POSIX​::SigAction->new)'
perl​: mg.c​:98​: S_save_magic​: Assertion `((sv)->sv_flags & (0x00200000|0x00400000|0x00800000))' failed.
zsh​: abort (core dumped) ./perl -Ilib -MPOSIX -e '*SIG={}; sigaction(1, POSIX​::SigAction->new)'

Seen at least on 5.10.1 and blead.

Fixed in 17cffb3.

I believe that this bug is a duplicate of 75150

The patch prevents the test code from 75150 crashing.

Whilst this fixes the immediate symptoms of an assertion failure, I'm not
convinced that it actually fixes the underlying bugginess, which is caused
by the core not handling this sanely​:

*SIG={}

I'm not sure the current behaviour is insane.

Tony

@p5pRT
Copy link
Author

p5pRT commented Aug 31, 2010

The RT System itself - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Aug 31, 2010

@iabyn - Status changed from 'open' to 'resolved'

@p5pRT p5pRT closed this as completed Aug 31, 2010
@p5pRT
Copy link
Author

p5pRT commented Aug 31, 2010

@nwc10 - Status changed from 'resolved' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Aug 31, 2010

From @nwc10

On Tue Aug 31 02​:25​:47 2010, tonyc wrote​:

On Mon, Aug 30, 2010 at 04​:01​:28PM +0100, Nicholas Clark wrote​:

Whilst this fixes the immediate symptoms of an assertion failure,
I'm not
convinced that it actually fixes the underlying bugginess, which is
caused
by the core not handling this sanely​:

*SIG={}

I'm not sure the current behaviour is insane.

Too many negatives.

I'm parsing that as "It may not be wrong"
But my view is that "It may not be right either".

I don't consider this resolved yet.

Nicholas Clark

@p5pRT
Copy link
Author

p5pRT commented Nov 13, 2017

From zefram@fysh.org

Nicholas Clark wrote​:

I'm parsing that as "It may not be wrong"
But my view is that "It may not be right either".

The current behaviour looks OK to me. The signal handler doesn't get
installed in an effective manner, but hey, what do you expect from
replacing %SIG with a non-magical hash? It seems quite sane enough for
the level of sanity involved in making that replacement.

Do you have a specific proposal of what the behaviour should be? If not,
we should close this ticket.

-zefram

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant