--- ./o/main.c.orig 2010-11-02 15:56:45.000000000 -0600
+++ ./o/main.c 2011-06-01 15:48:42.269433777 -0600
@@ -51,6 +51,7 @@
#include <signal.h>
#endif
#include "page.h"
+#include "unrandomize.h"
bool saving_system ;
@@ -146,11 +147,7 @@
#endif
*argv=kcl_self;
-#ifdef CAN_UNRANDOMIZE_SBRK
-#include <stdio.h>
-#include <stdlib.h>
-#include "unrandomize.h"
-#endif
+ UNRANDOMIZE_SBRK;
#ifdef LD_BIND_NOW
#include <stdio.h>
--- ./configure.orig 2011-06-01 15:40:10.483433770 -0600
+++ ./configure 2011-06-01 15:49:00.462433776 -0600
@@ -6851,9 +6851,11 @@
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
+ #define CAN_UNRANDOMIZE_SBRK 1
+ #include "h/unrandomize.h"
void gprof_cleanup() {}
int main(int argc,char *argv[],char *envp[]) {
- #include "h/unrandomize.h"
+ UNRANDOMIZE_SBRK;
return 0;}
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
@@ -6885,12 +6887,11 @@
/* end confdefs.h. */
#include <stdio.h>
+ #include "h/unrandomize.h"
void gprof_cleanup() {}
int main(int argc,char * argv[],char * envp[]) {
FILE *f;
- #ifdef CAN_UNRANDOMIZE_SBRK
- #include "h/unrandomize.h"
- #endif
+ UNRANDOMIZE_SBRK;
if (!(f=fopen("conftest1","w"))) return -1;
fprintf(f,"%u",sbrk(0));
return 0;}
@@ -6914,12 +6915,11 @@
/* end confdefs.h. */
#include <stdio.h>
+ #include "h/unrandomize.h"
void gprof_cleanup() {}
int main(int argc,char * argv[],char * envp[]) {
FILE *f;
- #ifdef CAN_UNRANDOMIZE_SBRK
- #include "h/unrandomize.h"
- #endif
+ UNRANDOMIZE_SBRK;
if (!(f=fopen("conftest1","w"))) return -1;
fprintf(f,"%u",sbrk(0));
return 0;}
@@ -7006,6 +7006,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include "h/unrandomize.h"
void gprof_cleanup() {}
int
@@ -7014,9 +7015,7 @@
char *b,*b1;
FILE *fp;
-#ifdef CAN_UNRANDOMIZE_SBRK
-#include "h/unrandomize.h"
-#endif
+ UNRANDOMIZE_SBRK;
b = (void *) malloc(1000);
fp = fopen("conftest1","w");
--- ./h/unrandomize.h.orig 2010-01-12 07:19:15.000000000 -0700
+++ ./h/unrandomize.h 2011-06-01 15:47:46.957433777 -0600
@@ -1,39 +1,45 @@
+#include <stdio.h>
+#include <stdlib.h>
#include <sys/personality.h>
#include <syscall.h>
#include <unistd.h>
#include <alloca.h>
#include <errno.h>
-
-{
- errno=0;
-
- {
-
- long pers = personality(0xffffffffUL);
- if (pers==-1) {printf("personality failure %d\n",errno);exit(-1);}
- if (!(pers & ADDR_NO_RANDOMIZE) && !getenv("GCL_UNRANDOMIZE")) {
- errno=0;
- if (personality(pers | ADDR_NO_RANDOMIZE) != -1 && personality(0xffffffffUL) & ADDR_NO_RANDOMIZE) {
- int i;
- char **n;
- for (i=0;envp[i];i++);
- n=alloca((i+2)*sizeof(*n));
- n[i+1]=0;
- n[i--]="GCL_UNRANDOMIZE=t";
- for (;i>=0;i--)
- n[i]=envp[i];
-#ifdef GCL_GPROF
- gprof_cleanup();
+#ifdef CAN_UNRANDOMIZE_SBRK
+# ifdef GCL_GPROF
+# define GPROF_CLEANUP gprof_cleanup()
+# else
+# define GPROF_CLEANUP
+# endif
+# define UNRANDOMIZE_SBRK do { \
+ errno=0; \
+ { \
+ long pers = personality(0xffffffffUL); \
+ if (pers==-1) {printf("personality failure %d\n",errno);exit(-1);} \
+ if (!(pers & ADDR_NO_RANDOMIZE) && !getenv("GCL_UNRANDOMIZE")) { \
+ errno=0; \
+ if (personality(pers | ADDR_NO_RANDOMIZE) != -1 && personality(0xffffffffUL) & ADDR_NO_RANDOMIZE) { \
+ int i; \
+ char **n; \
+ for (i=0;envp[i];i++); \
+ n=alloca((i+2)*sizeof(*n)); \
+ n[i+1]=0; \
+ n[i--]="GCL_UNRANDOMIZE=t"; \
+ for (;i>=0;i--) \
+ n[i]=envp[i]; \
+ GPROF_CLEANUP; \
+ errno=0; \
+ execve(*argv,argv,n); \
+ printf("execve failure %d\n",errno); \
+ exit(-1); \
+ } else { \
+ printf("personality change failure %d\n",errno); \
+ exit(-1); \
+ } \
+ } \
+ } \
+ } while (0)
+#else
+# define UNRANDOMIZE_SBRK
#endif
- errno=0;
- execve(*argv,argv,n);
- printf("execve failure %d\n",errno);
- exit(-1);
- } else {
- printf("personality change failure %d\n",errno);
- exit(-1);
- }
- }
- }
-}
--- ./configure.in.orig 2011-06-01 15:39:34.750433770 -0600
+++ ./configure.in 2011-06-01 15:44:46.725433778 -0600
@@ -1146,9 +1146,11 @@
AC_MSG_CHECKING([for personality(ADDR_NO_RANDOMIZE) support])
AC_RUN_IFELSE([AC_LANG_SOURCE([[
+ #define CAN_UNRANDOMIZE_SBRK 1
+ #include "h/unrandomize.h"
void gprof_cleanup() {}
int main(int argc,char *argv[],char *envp[]) {
- #include "h/unrandomize.h"
+ UNRANDOMIZE_SBRK;
return 0;}]])],CAN_UNRANDOMIZE_SBRK=1,CAN_UNRANDOMIZE_SBRK=0,CAN_UNRANDOMIZE_SBRK=0)
if test "$CAN_UNRANDOMIZE_SBRK" != 0 ; then
@@ -1161,12 +1163,11 @@
AC_MSG_CHECKING([that sbrk is (now) non-random])
AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <stdio.h>
+ #include "h/unrandomize.h"
void gprof_cleanup() {}
int main(int argc,char * argv[],char * envp[]) {
FILE *f;
- #ifdef CAN_UNRANDOMIZE_SBRK
- #include "h/unrandomize.h"
- #endif
+ UNRANDOMIZE_SBRK;
if (!(f=fopen("conftest1","w"))) return -1;
fprintf(f,"%u",sbrk(0));
return 0;}]])],SBRK=`cat conftest1`,SBRK=0,SBRK=0)
@@ -1175,12 +1176,11 @@
fi
AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <stdio.h>
+ #include "h/unrandomize.h"
void gprof_cleanup() {}
int main(int argc,char * argv[],char * envp[]) {
FILE *f;
- #ifdef CAN_UNRANDOMIZE_SBRK
- #include "h/unrandomize.h"
- #endif
+ UNRANDOMIZE_SBRK;
if (!(f=fopen("conftest1","w"))) return -1;
fprintf(f,"%u",sbrk(0));
return 0;}]])],SBRK1=`cat conftest1`,SBRK1=0,SBRK1=0)
@@ -1222,6 +1222,7 @@
AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <stdio.h>
#include <stdlib.h>
+#include "h/unrandomize.h"
void gprof_cleanup() {}
int
@@ -1230,9 +1231,7 @@
char *b,*b1;
FILE *fp;
-#ifdef CAN_UNRANDOMIZE_SBRK
-#include "h/unrandomize.h"
-#endif
+ UNRANDOMIZE_SBRK;
b = (void *) malloc(1000);
fp = fopen("conftest1","w");