d60bed4
--- configure.orig	2019-04-17 20:17:42.351687679 -0600
d60bed4
+++ configure	2019-04-17 20:22:22.321887572 -0600
d60bed4
@@ -7341,8 +7341,10 @@ else
d60bed4
 
385abae
 		    #include <stdio.h>
385abae
 		    #include <stdlib.h>
385abae
+		    #define CAN_UNRANDOMIZE_SBRK 1
385abae
+		    #include "h/unrandomize.h"
385abae
 		    int main(int argc,char *argv[],char *envp[]) {
385abae
-			#include "h/unrandomize.h"
385abae
+			UNRANDOMIZE_SBRK;
385abae
 			return 0;
385abae
 		    }
d60bed4
 
d60bed4
@@ -7376,11 +7378,10 @@ else
d60bed4
 
385abae
 		    #include <stdio.h>
385abae
 		    #include <stdlib.h>
Jerry James b08b3a4
+		    #include "h/unrandomize.h"
Jerry James e078710
 		    int main(int argc,char * argv[],char * envp[]) {
Jerry James e078710
 			FILE *f;
Jerry James e078710
-			#ifdef CAN_UNRANDOMIZE_SBRK
Jerry James e078710
-			#include "h/unrandomize.h"
Jerry James e078710
-			#endif
Jerry James e078710
+			UNRANDOMIZE_SBRK;
385abae
 			if (!(f=fopen("conftest1","w")))
385abae
 			   return -1;
d60bed4
 			   fprintf(f,"%p",sbrk(0));
d60bed4
@@ -7411,11 +7412,10 @@ else
d60bed4
 
385abae
 		    #include <stdio.h>
385abae
 		    #include <stdlib.h>
Jerry James b08b3a4
+		    #include "h/unrandomize.h"
Jerry James e078710
 		    int main(int argc,char * argv[],char * envp[]) {
Jerry James e078710
 			FILE *f;
Jerry James e078710
-			#ifdef CAN_UNRANDOMIZE_SBRK
Jerry James e078710
-			#include "h/unrandomize.h"
Jerry James e078710
-			#endif
Jerry James e078710
+			UNRANDOMIZE_SBRK;
Jerry James e078710
 			if (!(f=fopen("conftest1","w"))) return -1;
d60bed4
 			   fprintf(f,"%p",sbrk(0));
385abae
 			   return 0;
d60bed4
@@ -7459,7 +7459,7 @@ else
d60bed4
 
d60bed4
 		#include <stdio.h>
d60bed4
 		#include <stdlib.h>
d60bed4
-
d60bed4
+		#include "h/unrandomize.h"
d60bed4
 		unsigned long w;
d60bed4
 
d60bed4
 		void
d60bed4
@@ -7472,9 +7472,7 @@ else
d60bed4
 		main(int argc,char **argv,char **envp) {
d60bed4
 		    void *b;
d60bed4
 		    FILE *fp = fopen("conftest1","w");
d60bed4
-		    #ifdef CAN_UNRANDOMIZE_SBRK
d60bed4
-		    #include "h/unrandomize.h"
d60bed4
-		    #endif
d60bed4
+		    UNRANDOMIZE_SBRK;
d60bed4
 		    foo();
d60bed4
 		    fprintf(fp,"%d",((unsigned long) &b) > w ? -1 : 1);
d60bed4
 		    fclose(fp);
d60bed4
@@ -7512,15 +7510,14 @@ else
d60bed4
 
385abae
 		#include <stdio.h>
385abae
 		#include <stdlib.h>
385abae
+		#include "h/unrandomize.h"
d60bed4
 		int
d60bed4
 		main(int argc,char **argv,char **envp) {
d60bed4
 		    void *v ;
385abae
 		    FILE *fp = fopen("conftest1","w");
385abae
 		    unsigned long i,j;
d60bed4
 
385abae
-		    #ifdef CAN_UNRANDOMIZE_SBRK
385abae
-		    #include "h/unrandomize.h"
385abae
-		    #endif
385abae
+		    UNRANDOMIZE_SBRK;
385abae
 		    j=1;
385abae
 		    j<<=$PAGEWIDTH;
385abae
 		    j<<=16;
d60bed4
@@ -7564,15 +7561,14 @@ else
d60bed4
 
385abae
 		#include <stdio.h>
385abae
 		#include <stdlib.h>
385abae
+		#include "h/unrandomize.h"
d60bed4
 		int
d60bed4
 		main(int argc,char **argv,char **envp) {
d60bed4
 		    void *v ;
385abae
 		    FILE *fp = fopen("conftest1","w");
385abae
 		    unsigned long i,j;
d60bed4
 
385abae
-		    #ifdef CAN_UNRANDOMIZE_SBRK
385abae
-		    #include "h/unrandomize.h"
385abae
-		    #endif
385abae
+		    UNRANDOMIZE_SBRK;
385abae
 		    j=1;
385abae
 		    j<<=$PAGEWIDTH;
385abae
 		    j<<=16;
d60bed4
@@ -7617,11 +7613,10 @@ else
d60bed4
 
385abae
 		#include <stdio.h>
385abae
 		#include <stdlib.h>
385abae
+		#include "h/unrandomize.h"
385abae
 		int
385abae
 		main(int argc,char **argv,char **envp) {
385abae
-		    #ifdef CAN_UNRANDOMIZE_SBRK
385abae
-		    #include "h/unrandomize.h"
385abae
-		    #endif
385abae
+		    UNRANDOMIZE_SBRK;
385abae
 		    return (long)$cstack_address<0 ? 0 : -1;
d60bed4
 		}
d60bed4
 _ACEOF
d60bed4
@@ -7655,13 +7650,12 @@ else
d60bed4
 
385abae
 		#include <stdio.h>
385abae
 		#include <stdlib.h>
385abae
+		#include "h/unrandomize.h"
385abae
 		int main(int argc,char **argv,char **envp) {
385abae
 		    void *b,*c;
385abae
 		    FILE *fp = fopen("conftest1","w");
385abae
 		    long n;
385abae
-		    #ifdef CAN_UNRANDOMIZE_SBRK
385abae
-		    #include "h/unrandomize.h"
385abae
-		    #endif
385abae
+		    UNRANDOMIZE_SBRK;
385abae
 		    b=alloca(sizeof(b));
385abae
 		    c=alloca(sizeof(c));
385abae
 		    n=b>c ? b-c : c-b;
d60bed4
--- configure.in.orig	2019-04-17 20:17:42.346687693 -0600
d60bed4
+++ configure.in	2019-04-17 20:22:14.506910168 -0600
d60bed4
@@ -1124,8 +1124,10 @@ if test "$HAVE_SBRK" = "1" ; then
d60bed4
 		[[
385abae
 		    #include <stdio.h>
385abae
 		    #include <stdlib.h>
385abae
+		    #define CAN_UNRANDOMIZE_SBRK 1
385abae
+		    #include "h/unrandomize.h"
385abae
 		    int main(int argc,char *argv[],char *envp[]) {
385abae
-			#include "h/unrandomize.h"
385abae
+			UNRANDOMIZE_SBRK;
385abae
 			return 0;
385abae
 		    }
d60bed4
 		]])],
d60bed4
@@ -1140,11 +1142,10 @@ if test "$HAVE_SBRK" = "1" ; then
d60bed4
 		[[
385abae
 		    #include <stdio.h>
385abae
 		    #include <stdlib.h>
Jerry James b08b3a4
+		    #include "h/unrandomize.h"
Jerry James e078710
 		    int main(int argc,char * argv[],char * envp[]) {
Jerry James e078710
 			FILE *f;
Jerry James e078710
-			#ifdef CAN_UNRANDOMIZE_SBRK
Jerry James e078710
-			#include "h/unrandomize.h"
Jerry James e078710
-			#endif
Jerry James e078710
+			UNRANDOMIZE_SBRK;
385abae
 			if (!(f=fopen("conftest1","w")))
385abae
 			   return -1;
d60bed4
 			   fprintf(f,"%p",sbrk(0));
d60bed4
@@ -1161,11 +1162,10 @@ if test "$HAVE_SBRK" = "1" ; then
d60bed4
 		[[
385abae
 		    #include <stdio.h>
385abae
 		    #include <stdlib.h>
Jerry James b08b3a4
+		    #include "h/unrandomize.h"
Jerry James e078710
 		    int main(int argc,char * argv[],char * envp[]) {
Jerry James e078710
 			FILE *f;
Jerry James e078710
-			#ifdef CAN_UNRANDOMIZE_SBRK
Jerry James e078710
-			#include "h/unrandomize.h"
Jerry James e078710
-			#endif
Jerry James e078710
+			UNRANDOMIZE_SBRK;
Jerry James e078710
 			if (!(f=fopen("conftest1","w"))) return -1;
d60bed4
 			   fprintf(f,"%p",sbrk(0));
385abae
 			   return 0;
d60bed4
@@ -1192,7 +1192,7 @@ AC_RUN_IFELSE(
d60bed4
 	    [[
d60bed4
 		#include <stdio.h>
d60bed4
 		#include <stdlib.h>
d60bed4
-
d60bed4
+		#include "h/unrandomize.h"
d60bed4
 		unsigned long w;
385abae
 
d60bed4
 		void
d60bed4
@@ -1205,9 +1205,7 @@ AC_RUN_IFELSE(
d60bed4
 		main(int argc,char **argv,char **envp) {
d60bed4
 		    void *b;
d60bed4
 		    FILE *fp = fopen("conftest1","w");
d60bed4
-		    #ifdef CAN_UNRANDOMIZE_SBRK
d60bed4
-		    #include "h/unrandomize.h"
d60bed4
-		    #endif
d60bed4
+		    UNRANDOMIZE_SBRK;
d60bed4
 		    foo();
d60bed4
 		    fprintf(fp,"%d",((unsigned long) &b) > w ? -1 : 1);
d60bed4
 		    fclose(fp);
d60bed4
@@ -1224,15 +1222,14 @@ AC_RUN_IFELSE(
d60bed4
 	    [[
385abae
 		#include <stdio.h>
385abae
 		#include <stdlib.h>
385abae
+		#include "h/unrandomize.h"
d60bed4
 		int
d60bed4
 		main(int argc,char **argv,char **envp) {
d60bed4
 		    void *v ;
385abae
 		    FILE *fp = fopen("conftest1","w");
385abae
 		    unsigned long i,j;
d60bed4
 		    
385abae
-		    #ifdef CAN_UNRANDOMIZE_SBRK
385abae
-		    #include "h/unrandomize.h"
385abae
-		    #endif
385abae
+		    UNRANDOMIZE_SBRK;
385abae
 		    j=1;
385abae
 		    j<<=$PAGEWIDTH;
385abae
 		    j<<=16;
d60bed4
@@ -1255,15 +1252,14 @@ AC_RUN_IFELSE(
d60bed4
 	    [[
385abae
 		#include <stdio.h>
385abae
 		#include <stdlib.h>
385abae
+		#include "h/unrandomize.h"
d60bed4
 		int
d60bed4
 		main(int argc,char **argv,char **envp) {
d60bed4
 		    void *v ;
385abae
 		    FILE *fp = fopen("conftest1","w");
385abae
 		    unsigned long i,j;
d60bed4
 		    
385abae
-		    #ifdef CAN_UNRANDOMIZE_SBRK
385abae
-		    #include "h/unrandomize.h"
385abae
-		    #endif
385abae
+		    UNRANDOMIZE_SBRK;
385abae
 		    j=1;
385abae
 		    j<<=$PAGEWIDTH;
385abae
 		    j<<=16;
d60bed4
@@ -1287,11 +1283,10 @@ AC_RUN_IFELSE(
d60bed4
 	    [[
385abae
 		#include <stdio.h>
385abae
 		#include <stdlib.h>
385abae
+		#include "h/unrandomize.h"
385abae
 		int
385abae
 		main(int argc,char **argv,char **envp) {
385abae
-		    #ifdef CAN_UNRANDOMIZE_SBRK
385abae
-		    #include "h/unrandomize.h"
385abae
-		    #endif
385abae
+		    UNRANDOMIZE_SBRK;
385abae
 		    return (long)$cstack_address<0 ? 0 : -1;
d60bed4
 		}]])],
d60bed4
     [AC_MSG_RESULT(yes)
d60bed4
@@ -1306,13 +1301,12 @@ AC_RUN_IFELSE(
d60bed4
 	    [[
385abae
 		#include <stdio.h>
385abae
 		#include <stdlib.h>
385abae
+		#include "h/unrandomize.h"
385abae
 		int main(int argc,char **argv,char **envp) {
385abae
 		    void *b,*c;
385abae
 		    FILE *fp = fopen("conftest1","w");
385abae
 		    long n;
385abae
-		    #ifdef CAN_UNRANDOMIZE_SBRK
385abae
-		    #include "h/unrandomize.h"
385abae
-		    #endif
385abae
+		    UNRANDOMIZE_SBRK;
385abae
 		    b=alloca(sizeof(b));
385abae
 		    c=alloca(sizeof(c));
385abae
 		    n=b>c ? b-c : c-b;
d60bed4
--- h/unrandomize.h.orig	2019-04-17 20:11:26.049753854 -0600
d60bed4
+++ h/unrandomize.h	2019-05-04 11:09:26.514874293 -0600
Jerry James e078710
@@ -1,3 +1,5 @@
Jerry James e078710
+#include <stdio.h>
Jerry James e078710
+#include <stdlib.h>
Jerry James e078710
 #include <sys/personality.h>
Jerry James e078710
 #include <syscall.h>
Jerry James e078710
 #include <unistd.h>
Jerry James b08b3a4
@@ -5,61 +7,66 @@
Jerry James e078710
 #include <alloca.h>
Jerry James e078710
 #include <errno.h>
Jerry James e078710
 
Jerry James e078710
-{
Jerry James e078710
-  errno=0;
Jerry James e078710
-
Jerry James e078710
-  {
Jerry James e078710
-
Jerry James b08b3a4
-    /*READ_IMPLIES_EXEC is for selinux, but selinux will reset it in the child*/
Jerry James b08b3a4
-    long pers = personality(READ_IMPLIES_EXEC|personality(0xffffffffUL));
Jerry James e078710
-    long flag = ADDR_NO_RANDOMIZE;
Jerry James e078710
-
d60bed4
-    if (sizeof(long)==4) flag|=ADDR_LIMIT_3GB/* |ADDR_COMPAT_LAYOUT */;
Jerry James e078710
-
Jerry James e078710
-    if (pers==-1) {printf("personality failure %d\n",errno);exit(-1);}
Jerry James e078710
-    if ((pers & flag)!=flag && !getenv("GCL_UNRANDOMIZE")) {
Jerry James e078710
-      errno=0;
Jerry James e078710
-      if (personality(pers | flag) != -1 && (personality(0xffffffffUL) & flag)==flag) {
Jerry James e078710
-	int i,j,k;
Jerry James e078710
-	char **n,**a;
Jerry James e078710
-	void *v;
Jerry James e078710
-	for (i=j=0;argv[i];i++)
Jerry James e078710
-	  j+=strlen(argv[i])+1;
Jerry James e078710
-	for (k=0;envp[k];k++)
Jerry James e078710
-	  j+=strlen(envp[k])+1;
Jerry James e078710
-	j+=(i+k+3)*sizeof(char *);
Jerry James e078710
-	if ((v=sbrk(j))==(void *)-1) {
Jerry James e078710
-	  printf("Cannot brk environment space\n");
Jerry James e078710
-	  exit(-1);
Jerry James e078710
-	}
Jerry James e078710
-	a=v;
Jerry James e078710
-	v=a+i+1;
Jerry James e078710
-	n=v;
Jerry James e078710
-	v=n+k+2;
Jerry James e078710
-	for (i=0;argv[i];i++) {
Jerry James e078710
-	  a[i]=v;
Jerry James e078710
-	  strcpy(v,argv[i]);
Jerry James e078710
-	  v+=strlen(v)+1;
Jerry James e078710
-	}
Jerry James e078710
-	a[i]=0;
Jerry James e078710
-	for (k=0;envp[k];k++) {
Jerry James e078710
-	  n[k]=v;
Jerry James e078710
-	  strcpy(v,envp[k]);
Jerry James e078710
-	  v+=strlen(v)+1;
Jerry James e078710
-	}
Jerry James e078710
-	n[k]="GCL_UNRANDOMIZE=t";
Jerry James e078710
-	n[k+1]=0;
385abae
-	errno=0;
385abae
-#ifdef HAVE_GCL_CLEANUP	
385abae
-	gcl_cleanup(0);
Jerry James e078710
+#ifdef CAN_UNRANDOMIZE_SBRK
385abae
+# ifdef HAVE_GCL_CLEANUP
385abae
+#  define GCL_CLEANUP gcl_cleanup(0)
Jerry James e078710
+# else
385abae
+#  define GCL_CLEANUP
Jerry James e078710
+# endif
Jerry James e078710
+# define UNRANDOMIZE_SBRK do {						\
Jerry James e078710
+  errno=0;								\
Jerry James e078710
+  {									\
Jerry James b08b3a4
+    /*READ_IMPLIES_EXEC is for selinux, but selinux will reset it in the child*/ \
385abae
+    long pers = personality(READ_IMPLIES_EXEC|personality(0xffffffffUL)); \
Jerry James e078710
+    long flag = ADDR_NO_RANDOMIZE;					\
Jerry James e078710
+									\
d60bed4
+    if (sizeof(long)==4) flag|=ADDR_LIMIT_3GB/* |ADDR_COMPAT_LAYOUT */;	\
Jerry James e078710
+									\
Jerry James e078710
+    if (pers==-1) {printf("personality failure %d\n",errno);exit(-1);}	\
d60bed4
+    if (/*(pers & flag)!=flag &&*/ !getenv("GCL_UNRANDOMIZE")) {	\
Jerry James e078710
+      errno=0;								\
Jerry James e078710
+      if (personality(pers | flag) != -1 && (personality(0xffffffffUL) & flag)==flag) { \
Jerry James e078710
+	int i,j,k;							\
Jerry James e078710
+	char **n,**a;							\
Jerry James e078710
+	void *v;							\
Jerry James e078710
+	for (i=j=0;argv[i];i++)						\
Jerry James e078710
+	  j+=strlen(argv[i])+1;						\
Jerry James e078710
+	for (k=0;envp[k];k++)						\
Jerry James e078710
+	  j+=strlen(envp[k])+1;						\
Jerry James e078710
+	j+=(i+k+3)*sizeof(char *);					\
Jerry James e078710
+	if ((v=sbrk(j))==(void *)-1) {					\
Jerry James e078710
+	  printf("Cannot brk environment space\n");			\
Jerry James e078710
+	  exit(-1);							\
Jerry James e078710
+	}								\
Jerry James e078710
+	a=v;								\
Jerry James e078710
+	v=a+i+1;							\
Jerry James e078710
+	n=v;								\
Jerry James e078710
+	v=n+k+2;							\
Jerry James e078710
+	for (i=0;argv[i];i++) {						\
Jerry James e078710
+	  a[i]=v;							\
Jerry James e078710
+	  strcpy(v,argv[i]);						\
Jerry James e078710
+	  v+=strlen(v)+1;						\
Jerry James e078710
+	}								\
Jerry James e078710
+	a[i]=0;								\
Jerry James e078710
+	for (k=0;envp[k];k++) {						\
Jerry James e078710
+	  n[k]=v;							\
Jerry James e078710
+	  strcpy(v,envp[k]);						\
Jerry James e078710
+	  v+=strlen(v)+1;						\
Jerry James e078710
+	}								\
Jerry James e078710
+	n[k]="GCL_UNRANDOMIZE=t";					\
Jerry James e078710
+	n[k+1]=0;							\
Jerry James e078710
+	errno=0;							\
385abae
+	GCL_CLEANUP;							\
Jerry James e078710
+	execve(*a,a,n);							\
Jerry James e078710
+	printf("execve failure %d\n",errno);				\
Jerry James e078710
+	exit(-1);							\
Jerry James e078710
+      } else {								\
Jerry James e078710
+	printf("personality change failure %d\n",errno);		\
Jerry James e078710
+	exit(-1);							\
Jerry James e078710
+      }									\
Jerry James e078710
+    }									\
Jerry James e078710
+  }									\
Jerry James e078710
+} while (0)
Jerry James e078710
+#else
Jerry James e078710
+# define UNRANDOMIZE_SBRK
Jerry James e078710
 #endif
Jerry James e078710
-	execve(*a,a,n);
Jerry James e078710
-	printf("execve failure %d\n",errno);
Jerry James e078710
-	exit(-1);
Jerry James e078710
-      } else {
Jerry James e078710
-	printf("personality change failure %d\n",errno);
Jerry James e078710
-	exit(-1);
Jerry James e078710
-      }
Jerry James e078710
-    }
Jerry James e078710
-  }
Jerry James e078710
-}
d60bed4
--- o/main.c.orig	2019-04-17 20:10:11.025965895 -0600
d60bed4
+++ o/main.c	2019-05-04 11:34:06.174604494 -0600
385abae
@@ -53,6 +53,7 @@ void initialize_process();
Jerry James b08b3a4
 #include "include.h"
Jerry James b08b3a4
 #include <signal.h>
Jerry James b08b3a4
 #include "page.h"
Jerry James b08b3a4
+#include "unrandomize.h"
Jerry James b08b3a4
 
Jerry James b08b3a4
 bool saving_system=FALSE;
Jerry James b08b3a4
 
385abae
@@ -504,11 +505,7 @@ main(int argc, char **argv, char **envp)
385abae
   GET_FULL_PATH_SELF(kcl_self);
e190683
   *argv=kcl_self;
385abae
 
Jerry James b08b3a4
-#ifdef CAN_UNRANDOMIZE_SBRK
Jerry James b08b3a4
-#include <stdio.h>
Jerry James b08b3a4
-#include <stdlib.h>
Jerry James b08b3a4
-#include "unrandomize.h"
Jerry James b08b3a4
-#endif
Jerry James b08b3a4
+  UNRANDOMIZE_SBRK;
385abae
 
385abae
   gcl_init_alloc(&argv);
385abae