unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#32083: 26.1.50; temacs bootstrap execs itself forever on alpha-unknown-linux-gnu
@ 2018-07-07 15:28 Ulrich Mueller
  2018-07-07 16:05 ` Ulrich Mueller
  2018-07-08 18:51 ` Paul Eggert
  0 siblings, 2 replies; 6+ messages in thread
From: Ulrich Mueller @ 2018-07-07 15:28 UTC (permalink / raw)
  To: 32083; +Cc: Paul Eggert, Tobias Klausmann

Forwarding Gentoo bug https://bugs.gentoo.org/660448:

Tobias Klausmann has reported a problem with building Emacs 26.1 on an
Alpha machine under GNU/Linux:

make -C ../lisp update-subdirs
make[2]: Entering directory '/space/portage-tmp/portage/app-editors/emacs-26.1/work/emacs-26.1/lisp'
for file in . ./calc ./calendar ./emacs-lisp ./emulation ./erc ./eshell ./gnus ./image ./international ./language ./mail ./mh-e ./net ./nxml ./obsolete ./org ./play ./progmodes ./term ./textmodes ./url ./vc; do \
   ./../build-aux/update-subdirs $file; \
done;
make[2]: Leaving directory '/space/portage-tmp/portage/app-editors/emacs-26.1/work/emacs-26.1/lisp'
./temacs --batch  --load loadup bootstrap
[Build aborted with C-c after waiting for a long time.]

Seemingly temacs hangs there indefinitely, but gdb shows that it is
executing itself forever:

(gdb) run
Starting program: /space/homedirs/ulm/emacs/src/temacs --batch --load loadup bootstrap
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/libthread_db.so.1".
process 859 is executing new program: /space/homedirs/ulm/emacs/src/temacs
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/libthread_db.so.1".
process 859 is executing new program: /space/homedirs/ulm/emacs/src/temacs
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/libthread_db.so.1".
process 859 is executing new program: /space/homedirs/ulm/emacs/src/temacs
^C
Program received signal SIGINT, Interrupt.
0x00000200000010f0 in ?? () from /lib/ld-linux.so.2

Setting a breakpoint in disable_address_randomization() shows the
following values:

   pers = 0
   desired_pers = 262144
   personality(desired_pers) = 0
   personality(0xffffffff) = 262144

So apparently, setting the persona to ADDR_NO_RANDOMIZE succeeds?
However, after the execvp, the above values are the same as before
again (especially pers = 0).

Git bisecting shows that the problem was introduced by this commit:

commit e95b023163e96538b15f030b7176b7ec59cf86f5
Author: Paul Eggert <eggert@cs.ucla.edu>
Date:   Fri Jul 15 13:07:09 2016 +0200

    Port to glibc 2.24 (pre-release) + ppc64

    Inspired by a suggestion by Florian Weimer in:
    https://sourceware.org/ml/libc-alpha/2016-07/msg00425.html
    * configure.ac (HAVE_PERSONALITY_ADDR_NO_RANDOMIZE):
    Rename from HAVE_PERSONALITY_LINUX32, and check for
    ADDR_NO_RANDOMIZE (the crucial thing) instead of for LINUX32.
    All uses changed.
    * src/emacs.c (main) [HAVE_PERSONALITY_ADDR_NO_RANDOMIZE]:
    Use ADDR_NO_RANDOMIZE from personality.h rather than inventing the
    flag ourselves.  Just set that flag, rather than also setting the
    persona.  When doing it, avoid functions like putenv that may
    allocate memory.


In GNU Emacs 26.1.50 (build 1, alpha-unknown-linux-gnu)
 of 2018-07-07 built on monolith
Repository revision: b73cde5e2815c531df7f5fd13e214a7d92f78239

Configured using:
 'configure --prefix=/usr --build=alpha-unknown-linux-gnu
 --host=alpha-unknown-linux-gnu --mandir=/usr/share/man
 --infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc
 --localstatedir=/var/lib --disable-silent-rules
 --docdir=/usr/share/doc/emacs-26.1
 --htmldir=/usr/share/doc/emacs-26.1/html --libdir=/usr/lib
 --program-suffix=-emacs-26 --infodir=/usr/share/info/emacs-26
 --localstatedir=/var
 --enable-locallisppath=/etc/emacs:/usr/share/emacs/site-lisp
 --without-compress-install --without-hesiod --without-pop
 --with-file-notification=inotify --enable-acl --without-dbus
 --without-modules --without-gameuser --without-gpm --without-kerberos
 --without-kerberos5 --without-lcms2 --without-xml2 --without-mailutils
 --without-selinux --with-gnutls --without-libsystemd --with-threads
 --without-wide-int --with-zlib --with-sound=no --without-x
 --without-ns'

Configured features:
NOTIFY ACL GNUTLS ZLIB THREADS





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#32083: 26.1.50; temacs bootstrap execs itself forever on alpha-unknown-linux-gnu
  2018-07-07 15:28 bug#32083: 26.1.50; temacs bootstrap execs itself forever on alpha-unknown-linux-gnu Ulrich Mueller
@ 2018-07-07 16:05 ` Ulrich Mueller
  2018-07-07 18:03   ` Paul Eggert
  2018-07-08 18:51 ` Paul Eggert
  1 sibling, 1 reply; 6+ messages in thread
From: Ulrich Mueller @ 2018-07-07 16:05 UTC (permalink / raw)
  To: 32083; +Cc: Paul Eggert, Tobias Klausmann

Maybe worth mentioning that the build succeeds if I unconditionally
set disable_aslr = false in emacs.c. It shows the warning box but
produces a working emacs executable in spite of this:

Dumping under the name emacs
**************************************************
Warning: Your system has a gap between BSS and the
heap (34147687 bytes).  This usually means that exec-shield
or something similar is in effect.  The dump may
fail because of this.  See the section about
exec-shield in etc/PROBLEMS for more information.
**************************************************





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#32083: 26.1.50; temacs bootstrap execs itself forever on alpha-unknown-linux-gnu
  2018-07-07 16:05 ` Ulrich Mueller
@ 2018-07-07 18:03   ` Paul Eggert
  2018-07-07 22:30     ` Ulrich Mueller
  0 siblings, 1 reply; 6+ messages in thread
From: Paul Eggert @ 2018-07-07 18:03 UTC (permalink / raw)
  To: Ulrich Mueller, 32083; +Cc: Tobias Klausmann

[-- Attachment #1: Type: text/plain, Size: 421 bytes --]

Thanks for the bug report. Please try the attached patch; if it works around the 
bug for you, I'll install it on the emacs-26 branch and it should appear in the 
next Emacs release.

It would also be helpful to file a bug report with the Alpha Linux kernel folks, 
as there does seem to be a kernel bug here (or at least, an unexpected 
inconsistency with x86-64 with respect to how process personalities survive exec).

[-- Attachment #2: 0001-Fix-bootstrap-infloop-in-GNU-Linux-alpha.patch --]
[-- Type: text/x-patch, Size: 1035 bytes --]

From 13726cbac681e442649de1dfd73fcc7f889e87d9 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Sat, 7 Jul 2018 10:59:22 -0700
Subject: [PATCH] Fix bootstrap infloop in GNU/Linux alpha

* src/emacs.c (main): Do not re-exec if EMACS_HEAP_EXEC
is already set (Bug#32083).
---
 src/emacs.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/emacs.c b/src/emacs.c
index 017c62308c..f5e47428ef 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -707,10 +707,12 @@ main (int argc, char **argv)
   bool disable_aslr = dumping;
 # endif
 
-  if (disable_aslr && disable_address_randomization ())
+  if (disable_aslr && disable_address_randomization ()
+      && !getenv ("EMACS_HEAP_EXEC"))
     {
       /* Set this so the personality will be reverted before execs
-	 after this one.  */
+	 after this one, and to work around an re-exec loop on buggy
+	 kernels (Bug#32083).  */
       xputenv ("EMACS_HEAP_EXEC=true");
 
       /* Address randomization was enabled, but is now disabled.
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* bug#32083: 26.1.50; temacs bootstrap execs itself forever on alpha-unknown-linux-gnu
  2018-07-07 18:03   ` Paul Eggert
@ 2018-07-07 22:30     ` Ulrich Mueller
  2018-07-08 16:05       ` Paul Eggert
  0 siblings, 1 reply; 6+ messages in thread
From: Ulrich Mueller @ 2018-07-07 22:30 UTC (permalink / raw)
  To: Paul Eggert; +Cc: 32083, Tobias Klausmann

>>>>> On Sat, 7 Jul 2018, Paul Eggert wrote:

> Thanks for the bug report. Please try the attached patch; if it
> works around the bug for you, I'll install it on the emacs-26 branch
> and it should appear in the next Emacs release.

Thank you. The patch fixes the problem here.

> It would also be helpful to file a bug report with the Alpha Linux
> kernel folks, as there does seem to be a kernel bug here (or at
> least, an unexpected inconsistency with x86-64 with respect to how
> process personalities survive exec).

Indeed it is different. In Linux, the SET_PERSONALITY macro in
arch/alpha/include/asm/elf.h simply does:

   set_personality(PER_LINUX)

whereas elsewhere (e.g., ppc) the same macro has additional masking
(with PER_MASK being the lowest 8 bits, so ADDR_NO_RANDOMIZE would be
preserved):

   set_personality(PER_LINUX | (current->personality & (~PER_MASK)))

We'll investigate and report a bug to Linux upstream.





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#32083: 26.1.50; temacs bootstrap execs itself forever on alpha-unknown-linux-gnu
  2018-07-07 22:30     ` Ulrich Mueller
@ 2018-07-08 16:05       ` Paul Eggert
  0 siblings, 0 replies; 6+ messages in thread
From: Paul Eggert @ 2018-07-08 16:05 UTC (permalink / raw)
  To: Ulrich Mueller; +Cc: Tobias Klausmann, 32083-done

Ulrich Mueller wrote:
> The patch fixes the problem here.

Thanks for checking, and for following up on the kernel side. I pushed the Emacs 
patch into the emacs-26 branch and am marking the Emacs bug as done.





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#32083: 26.1.50; temacs bootstrap execs itself forever on alpha-unknown-linux-gnu
  2018-07-07 15:28 bug#32083: 26.1.50; temacs bootstrap execs itself forever on alpha-unknown-linux-gnu Ulrich Mueller
  2018-07-07 16:05 ` Ulrich Mueller
@ 2018-07-08 18:51 ` Paul Eggert
  1 sibling, 0 replies; 6+ messages in thread
From: Paul Eggert @ 2018-07-08 18:51 UTC (permalink / raw)
  To: 32083

Here's the URL for how Ulrich followed up on the linux-alpha bug, for those 
interested in spelunking this:

https://marc.info/?m=153102886305111





^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2018-07-08 18:51 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-07-07 15:28 bug#32083: 26.1.50; temacs bootstrap execs itself forever on alpha-unknown-linux-gnu Ulrich Mueller
2018-07-07 16:05 ` Ulrich Mueller
2018-07-07 18:03   ` Paul Eggert
2018-07-07 22:30     ` Ulrich Mueller
2018-07-08 16:05       ` Paul Eggert
2018-07-08 18:51 ` Paul Eggert

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).