[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#875927: perl: SIGUNUSED removal in glibc 2.26 changes PL_sig_name / SIG_SIZE



Package: perl
Version: 5.26.0-8
Severity: normal
X-Debbugs-Cc: doko@debian.org, vorlon@debian.org, glibc@packages.debian.org

As seen in
 https://bugs.launchpad.net/ubuntu/+source/libanyevent-perl/+bug/1717367
an upstream change in glibc 2.26, presumably
https://patchwork.sourceware.org/patch/20800/ causes perl to change its
ABI when rebuilt against the new glibc. I'm copying Steve and Matthias
who worked on the issue on the Ubuntu side.

While Debian doesn't have glibc 2.26 yet, I'm filing this so we can
track the issue and get a fix in before things break. I'm copying the
glibc maintainers; is there already an expected time frame for 2.26?

The problem is that Perl's global array PL_sig_name[] and the SIG_SIZE
constant ($Config{sig_name}, $Config{sig_size} on the perl language side)
change due to the removal of the (long?) obsolete SIGUNUSED constant in
glibc. The Async::Interrupt (libasync-intterupt-perl) XS module compiles
in SIG_SIZE and walks PL_sig_name[] at run time based on that.  When the
array changes on the Perl side, Async::Interrupt does not know that and
accesses it out of bounds.

It looks to me like Perl upstream needs to pad PL_sig_name[] on the stable
branches (maint-5.*) when SIGUNUSED is missing (indicating glibc >= 2.26)
to ensure ABI compatibility.  For bleadperl / 5.27, where there are no
ABI guarantees, it seems appropriate to filter out SIGUNUSED altogether
regardless of the glibc version, given its apparent obsolete status.

Looking at codesearch.debian.net, this also concerns (reverse dependencies
of) libio-aio-perl, libcoro-perl and libev-perl.

I'll forward this upstream next.
-- 
Niko Tyni   ntyni@debian.org


Reply to: