]> git.eshelyaron.com Git - emacs.git/commitdiff
Make .pdmp file more reproducible
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 20 Nov 2019 02:23:01 +0000 (18:23 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Wed, 20 Nov 2019 02:27:10 +0000 (18:27 -0800)
Problem reported by Ulrich Müller
<https://lists.gnu.org/r/emacs-devel/2019-11/msg00757.html>
and diagnosed by Andreas Schwab
<https://lists.gnu.org/r/emacs-devel/2019-11/msg00774.html>.
* src/sysdep.c (maybe_disable_address_randomization):
Disable ASLR if any kind of dumping, instead of merely if
unexec dumping.  Omit first arg for simplicity; all uses changed.

src/emacs.c
src/lisp.h
src/sysdep.c

index 21a05d337ef7c2ea64c36c69fbffe89895522d46..8a6e34deda7596d69e05d7ca7dbb0e7c3ee35a50 100644 (file)
@@ -1054,8 +1054,7 @@ main (int argc, char **argv)
     load_pdump (argc, argv);
 #endif
 
-  argc = maybe_disable_address_randomization (
-    will_dump_with_unexec_p (), argc, argv);
+  argc = maybe_disable_address_randomization (argc, argv);
 
 #if defined GNU_LINUX && defined HAVE_UNEXEC
   if (!initialized)
index 1d25add92877652748c781d3dd1399ccb21fcb37..e0ae2c4262dba8bc99e412550baa974d34d0ab86 100644 (file)
@@ -4576,10 +4576,10 @@ struct tty_display_info;
 
 /* Defined in sysdep.c.  */
 #ifdef HAVE_PERSONALITY_ADDR_NO_RANDOMIZE
-extern int maybe_disable_address_randomization (bool, int, char **);
+extern int maybe_disable_address_randomization (int, char **);
 #else
 INLINE int
-maybe_disable_address_randomization (bool dumping, int argc, char **argv)
+maybe_disable_address_randomization (int argc, char **argv)
 {
   return argc;
 }
index aa18ee22fd5ab2d5153014242f900b365cb5ae01..e34ab2eb58787afa8d29437a8e37f226f77aed6e 100644 (file)
@@ -158,14 +158,17 @@ static int exec_personality;
 /* Try to disable randomization if the current process needs it and
    does not appear to have it already.  */
 int
-maybe_disable_address_randomization (bool dumping, int argc, char **argv)
+maybe_disable_address_randomization (int argc, char **argv)
 {
   /* Undocumented Emacs option used only by this function.  */
   static char const aslr_disabled_option[] = "--__aslr-disabled";
 
   if (argc < 2 || strcmp (argv[1], aslr_disabled_option) != 0)
     {
-      bool disable_aslr = dumping;
+      /* If dumping via unexec, ASLR must be disabled, as otherwise
+        data may be scattered and undumpable as a simple executable.
+        If pdumping, disabling ASLR makes the .pdmp file reproducible.  */
+      bool disable_aslr = will_dump_p ();
 # ifdef __PPC64__
       disable_aslr = true;
 # endif