--- ./configure.in.orig 2012-07-26 09:50:25.715238529 -0600
+++ ./configure.in 2012-07-26 09:52:37.218033294 -0600
@@ -1187,9 +1187,11 @@ if test "$HAVE_SBRK" = "1" ; then
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
@@ -1202,12 +1204,11 @@ if test "$HAVE_SBRK" = "1" ; then
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)
@@ -1216,12 +1217,11 @@ if test "$HAVE_SBRK" = "1" ; then
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)
@@ -1263,6 +1263,7 @@ AC_MSG_CHECKING([finding DBEGIN])
AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <stdio.h>
#include <stdlib.h>
+#include "h/unrandomize.h"
void gprof_cleanup() {}
int
@@ -1271,9 +1272,7 @@ main(int argc,char * argv[],char *envp[]
char *b,*b1;
FILE *fp;
-#ifdef CAN_UNRANDOMIZE_SBRK
-#include "h/unrandomize.h"
-#endif
+ UNRANDOMIZE_SBRK;
b = (void *) malloc(1000);
fp = fopen("conftest1","w");
--- ./configure.orig 2013-05-10 10:16:24.215085642 -0600
+++ ./configure 2013-05-10 10:19:55.934751565 -0600
@@ -7086,9 +7086,11 @@ else
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 :
@@ -7120,12 +7122,11 @@ else
/* 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;}
@@ -7149,12 +7150,11 @@ else
/* 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;}
@@ -7241,6 +7241,7 @@ else
#include <stdio.h>
#include <stdlib.h>
+#include "h/unrandomize.h"
void gprof_cleanup() {}
int
@@ -7249,9 +7250,7 @@ main(int argc,char * argv[],char *envp[]
char *b,*b1;
FILE *fp;
-#ifdef CAN_UNRANDOMIZE_SBRK
-#include "h/unrandomize.h"
-#endif
+ UNRANDOMIZE_SBRK;
b = (void *) malloc(1000);
fp = fopen("conftest1","w");
--- ./o/main.c.orig 2010-11-02 15:56:45.000000000 -0600
+++ ./o/main.c 2012-07-26 09:52:37.251033241 -0600
@@ -51,6 +51,7 @@ void initialize_process();
#include <signal.h>
#endif
#include "page.h"
+#include "unrandomize.h"
bool saving_system ;
@@ -146,11 +147,7 @@ main(int argc, char **argv, char **envp)
#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>
--- ./h/unrandomize.h.orig 2010-01-12 07:19:15.000000000 -0700
+++ ./h/unrandomize.h 2012-07-26 09:52:37.274033201 -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);
- }
- }
- }
-}