aboutsummaryrefslogtreecommitdiff
blob: dd79a888dd1be77cf0f2bd5fb240a11b224bbadf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
https://bugs.gentoo.org/411439
http://debbugs.gnu.org/cgi/bugreport.cgi?bug=11398

On grsecurity/PaX systems, unexec will fail due to a gap between
the bss section and the heap.  This can be prevented by disabling
memory randomization in temacs with "paxctl -r".

--- emacs-23.4-orig/configure.in
+++ emacs-23.4/configure.in
@@ -800,6 +800,8 @@
 AC_PATH_PROG(INSTALL_INFO, install-info,:, /sbin)
 dnl Don't use GZIP, which is used by gzip for additional parameters.
 AC_PATH_PROG(GZIP_PROG, gzip)
+AC_PATH_PROG(PAXCTL, paxctl,,
+  [$PATH$PATH_SEPARATOR/sbin$PATH_SEPARATOR/usr/sbin])
 
 
 ## Need makeinfo >= 4.6 (?) to build the manuals.
--- emacs-23.4-orig/src/Makefile.in
+++ emacs-23.4/src/Makefile.in
@@ -508,6 +508,12 @@
    some cpps.  */
 TEMACS_LDFLAGS = LD_SWITCH_SYSTEM LD_SWITCH_SYSTEM_TEMACS LD_SWITCH_MACHINE LD_SWITCH_MACHINE_TEMACS
 
+/* If available, the full path to the paxctl program.
+   On grsecurity/PaX systems, unexec will fail due to a gap between
+   the bss section and the heap.  This can be prevented by disabling
+   memory randomization in temacs with "paxctl -r".  See bug#11398.  */
+PAXCTL = @PAXCTL@
+
 /* A macro which other sections of Makefile can redefine to munge the
    flags before they are passed to LD.  This is helpful if you have
    redefined LD to something odd, like "gcc".
@@ -933,6 +939,7 @@
 	-EMACSLOADPATH=${lispsource} ./emacs -q -batch -f list-load-path-shadows
 #else
 	LC_ALL=C $(RUN_TEMACS) -batch -l loadup dump
+	test "X$(PAXCTL)" = X || $(PAXCTL) -zex emacs$(EXEEXT)
 	@: This new Emacs is as functional and more efficient then
 	@: bootstrap-emacs, so let us replace it.
 	-ln -f emacs${EXEEXT} bootstrap-emacs${EXEEXT}
@@ -974,6 +981,9 @@
     -o temacs ${STARTFILES} ${obj} ${otherobj}  \
     ${LIBES}
 #endif
+#ifndef CANNOT_DUMP
+	test "X$(PAXCTL)" = X || $(PAXCTL) -r temacs$(EXEEXT)
+#endif
 
 /* We do not use ALL_LDFLAGS because LD_SWITCH_SYSTEM and LD_SWITCH_MACHINE
    often contain options that have to do with using Emacs''s crt0,
@@ -1419,6 +1429,7 @@
 	ln -f temacs${EXEEXT} bootstrap-emacs${EXEEXT}
 #else
 	$(RUN_TEMACS) --batch --load loadup bootstrap
+	test "X$(PAXCTL)" = X || $(PAXCTL) -zex emacs$(EXEEXT)
 	mv -f emacs${EXEEXT} bootstrap-emacs${EXEEXT}
 #endif /* ! defined (CANNOT_DUMP) */
 	@: Compile some files earlier to speed up further compilation.