From: Thomas Fitzsimmons <fitzsim@fitzsim.org>
To: Paul Eggert <eggert@cs.ucla.edu>
Cc: 33174@debbugs.gnu.org
Subject: bug#33174: 27.0.50; Dump fails on GNU/Linux ppc64le
Date: Tue, 30 Oct 2018 05:30:47 -0400 [thread overview]
Message-ID: <m3va5jbx2w.fsf@fitzsim.org> (raw)
In-Reply-To: <9fbbce6a-ca72-e4e2-1456-49e146542896@cs.ucla.edu> (Paul Eggert's message of "Mon, 29 Oct 2018 22:58:19 -0700")
Paul Eggert <eggert@cs.ucla.edu> writes:
> Thomas Fitzsimmons wrote:
>> BTW, let me know if you don't think it's useful to debug this further.
>> I'm OK just disabling randomization when I build Emacs for the time
>> being and waiting until the portable dumper work lands, but I'm happy to
>> continue if you think it will lead to a general fix.
>
> It's not clear when the portable dumper will land; it might not ever
> land, unfortunately. So I would like to work on bug#33174 a bit
> longer, if only so that we can put something intelligible into the
> PROBLEMS file.
OK.
>> It seems like it's crashing when trying to memcpy over the BSS area, on
>> this line in unexelf.c (see below):
>
> By the time the memcpy is run the damage has already been done: the
> memory layout is messed up and we can't fix that simply by passing
> different arguments to memcpy. We have to prevent the memory layout
> from being messed up in the first place by disabling undesirable
> address space layout randomization and doing this very early in
> execution.
Ah, OK, so the goal is to programmatically do something similar to
echo'ing to randomize_va_space, but just for the temacs process.
> The key question for me is in this set of system calls:
>
>> 58215 personality(0xffffffff) = 0 (PER_LINUX)
>> 58215 personality(PER_LINUX|ADDR_NO_RANDOMIZE) = 0 (PER_LINUX)
>> 58215 personality(0xffffffff) = 0x40000 (PER_LINUX|ADDR_NO_RANDOMIZE)
>> 58215 brk(NULL) = 0x27070000
>> 58215 dup2(0, 0) = 0
>> 58215 dup2(1, 1) = 1
>> 58215 dup2(2, 2) = 2
>
> Surely the call to disable_address_randomization () must have returned
> true, but can you verify that, either via GDB or (shudder) by
> inserting print statements?
(I sorted out glibc source code and debug symbols so they'll be accurate
now). Yes, disable_address_randomization returns true:
[...]
(gdb) finish
Run till exit from #0 0x0000000010136d9c in disable_address_randomization () at sysdep.c:165
0x0000000010016c94 in main (argc=<optimized out>, argv=0x7fffd4430178) at emacs.c:710
710 if (disable_aslr && disable_address_randomization ()
Value returned is $1 = true
[...]
> Also, the call from 'main' to getenv ("EMACS_HEAP_EXEC") must have
> returned NULL. Can you also verify this?
(gdb) c
Continuing.
Breakpoint 4, 0x00007fff9dc1ef98 in __GI_getenv (name=0x10274ce8 "EMACS_HEAP_EXEC") at getenv.c:34
34 {
(gdb) finish
Run till exit from #0 0x00007fff9dc1ef98 in __GI_getenv (name=0x10274ce8 "EMACS_HEAP_EXEC") at getenv.c:34
0x0000000010017870 in main (argc=<optimized out>, argv=0x7ffff4883248) at emacs.c:711
711 && !getenv ("EMACS_HEAP_EXEC"))
Value returned is $2 = 0x7ffff488fe49 "true"
Actually, EMACS_HEAP_EXEC is true! If I unset it, then the bootstrap
works with and without "Fix bootstrap infloop in GNU/Linux alpha"
applied.
I'm building Emacs inside Emacs via M-x shell. "EMACS_HEAP_EXEC=true"
is in process-environment. Given that I'm also running EXWM, no matter
what build shell I start up, even an xterm, EMACS_HEAP_EXEC is set to
"true" in the environment.
Ah, by running the "outer" Emacs via a serial console (i.e., not from
within Emacs, and starting with EMACS_HEAP_EXEC unset in the
environment), I think I see what happened. Because of the ifdef just
above the randomization disablement code:
# ifdef __PPC64__
bool disable_aslr = true;
# else
bool disable_aslr = dumping;
# endif
randomization is unconditionally disabled on PPC64, and so
EMACS_HEAP_EXEC is unconditionally set to true in the outer build
Emacs's initial-environment. With "Fix bootstrap infloop in GNU/Linux
alpha" applied, building Emacs within Emacs on PPC64 will no longer work
because the re-exec will be skipped during bootstrap.
Maybe can you try building Emacs within Emacs on one of those CentOS
machines to confirm?
Thanks,
Thomas
next prev parent reply other threads:[~2018-10-30 9:30 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-27 10:35 bug#33174: 27.0.50; Dump fails on GNU/Linux ppc64le Thomas Fitzsimmons
2018-10-27 13:16 ` Thomas Fitzsimmons
2018-10-27 20:26 ` Paul Eggert
2018-10-28 8:05 ` Paul Eggert
2018-10-28 12:56 ` Thomas Fitzsimmons
2018-10-28 19:22 ` Paul Eggert
2018-10-30 1:28 ` Thomas Fitzsimmons
2018-10-30 2:16 ` Paul Eggert
2018-10-29 1:47 ` Thomas Fitzsimmons
2018-10-29 7:22 ` Paul Eggert
2018-10-30 2:44 ` Thomas Fitzsimmons
2018-10-30 5:58 ` Paul Eggert
2018-10-30 9:30 ` Thomas Fitzsimmons [this message]
2018-11-12 6:39 ` Paul Eggert
2018-11-12 17:24 ` Andy Moreton
2018-11-13 2:29 ` Thomas Fitzsimmons
2018-11-13 14:42 ` Paul Eggert
2018-11-19 3:14 ` Thomas Fitzsimmons
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m3va5jbx2w.fsf@fitzsim.org \
--to=fitzsim@fitzsim.org \
--cc=33174@debbugs.gnu.org \
--cc=eggert@cs.ucla.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).