On 21 January 2012 10:08, Zygmunt Krynicki <zygmunt.kryni...@linaro.org> wrote:
> On Fri, Jan 20, 2012 at 10:40 PM, Matt Waddel <matt.wad...@linaro.org> wrote:
>> I: create linaro user
>> Can't set $0 with prctl(): Bad address at /usr/sbin/adduser line 86.
>>
>> Here is the perl code around line 86 in adduser:
>> ----
>> my %config;                     # configuration hash
>>
>> my @defaults = ("/etc/adduser.conf");
>> my $nogroup_id = getgrnam("nogroup") || 65534;
>> $0 =~ s+.*/++;                  <<<<<<<<< Line 86 >>>>>>>>>>>
>
> This line attempts to set $0 to the substitution of a regular
> expression, it takes $_ as an argument and replaces the value matched
> by a regular expression .*/ with an empty string.

Isn't it substituting on $0, not $_? (it's using =~).

> I don't pretend to understand the error message, it just seems to me
> that $0 is the implicit variable that contains the entire string when
> using regular expressions ($1... and so on are subsequent matches) and
> that $0 in that context might be read only.

$0 here is the process name, and Perl is trying to set it using
prctl(PR_SET_NAME, ...). [Google says it's done that only since
Perl 5.14.] I think you're running under QEMU at this point, and
QEMU doesn't support PR_SET_NAME. (It does do something with prctl
but it basically just feeds all the arguments across, and since
for PR_SET_NAME one of them is a pointer this doesn't work since
qemu guest pointers are not host pointers).

In other words, looks like a qemu bug :-)

(I think having a basic utility like adduser fiddle with its
own process name is a bit cheesy though.)

-- PMM

_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to