Perl / perl5

🐪 The Perl programming language
https://dev.perl.org/perl5/
Other
1.96k stars 556 forks source link

Since perl5.14, prctl is used to modify the process name through $0. prctl may have issues on older kernel #11890

Open p5pRT opened 12 years ago

p5pRT commented 12 years ago

Migrated from rt.perl.org#108792 (status was 'stalled')

Searchable as RT108792$

p5pRT commented 12 years ago

From ikerssm@gmail.com

TRying to cross-debootstrap from x86 system to armhf i get an error configuring cron​: Setting up cron (3.0pl1-120+b1) ... Can't set $0 with prctl()​: Bad address at /usr/sbin/addgroup line 86.

related /usr/sbin/addgroup lines​:

85 my $nogroup_id = getgrnam("nogroup") || 65534; 86 $0 =~ s+.*/++; 87 88 our $verbose = 1; # should we be verbose?

this does not happen if the target rootfs is armel instead of armhf. I've been discussing (asking for help better said)\, in arm-debian-mailing list and they 've pointed me in this direction.

Dominic Dumont said​: Well\, according to perlvar(1) (look for \$0)\, modifying $0 is not portable. (In this case\, I don't see the point​: addgroup program is short lived\, hence shortening the process name is not likely to be useful.)

Since perl5.14\, prctl is used to modify the process name through $0. prctl may have issues on older kernel.

This may be a perl 5.14 bug. OTOH\, changing $0 in addgroup is a bad idea.

The weird thing is if i install and amd64 kernel in my x86 system and try to debootstrap everithing works fine. So\, this bug may be only reproducible in x86 systems with 686 (or below) kernels.

Thanks.

Iker

Perl Info ``` Flags: category=core severity=medium Site configuration information for perl 5.14.2: Configured by Debian Project at Mon Nov 28 21:49:25 UTC 2011. Summary of my perl5 (revision 5 version 14 subversion 2) configuration: Platform: osname=linux, osvers=2.6.32-5-686, archname=i486-linux-gnu-thread-multi-64int uname='linux callisto 2.6.32-5-686 #1 smp mon oct 3 04:15:24 utc 2011 i686 gnulinux ' config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=i486-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.14 -Darchlib=/usr/lib/perl/5.14 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.14.2 -Dsitearch=/usr/local/lib/perl/5.14.2 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Duse64bitint -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -Ui_libutil -DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib -Dlibperl=libperl.so.5.14.2 -des' hint=recommended, useposix=true, d_sigaction=define useithreads=define, usemultiplicity=define useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef use64bitint=define, use64bitall=undef, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -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 -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include' ccversion='', gccversion='4.6.2', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=12345678 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12 ivtype='long long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=4, prototype=define Linker and Libraries: ld='cc', ldflags =' -fstack-protector -L/usr/local/lib' libpth=/usr/local/lib /lib/i386-linux-gnu /lib/../lib /usr/lib/i386-linux-gnu /usr/lib/../lib /lib /usr/lib /usr/lib64 libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt perllibs=-ldl -lm -lpthread -lc -lcrypt libc=, so=so, useshrplib=true, libperl=libperl.so.5.14.2 gnulibc_version='2.13' 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.14.2: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl . Environment for perl 5.14.2: HOME=/root LANG=es_ES.UTF-8 LANGUAGE= LD_LIBRARY_PATH (unset) LOGDIR (unset) PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PERL_BADLANG (unset) SHELL=/bin/bash ```
p5pRT commented 8 years ago

@dcollinsn - Status changed from 'new' to 'stalled'