|
|
cb0eb8c |
--- ./configure.in.orig 2012-07-26 09:50:25.715238529 -0600
|
|
|
cb0eb8c |
+++ ./configure.in 2012-07-26 09:52:37.218033294 -0600
|
|
|
cb0eb8c |
@@ -1187,9 +1187,11 @@ if test "$HAVE_SBRK" = "1" ; then
|
|
|
e6a2505 |
|
|
|
277e3b5 |
AC_MSG_CHECKING([for personality(ADDR_NO_RANDOMIZE) support])
|
|
|
277e3b5 |
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
|
277e3b5 |
+ #define CAN_UNRANDOMIZE_SBRK 1
|
|
|
277e3b5 |
+ #include "h/unrandomize.h"
|
|
|
277e3b5 |
void gprof_cleanup() {}
|
|
|
277e3b5 |
int main(int argc,char *argv[],char *envp[]) {
|
|
|
277e3b5 |
- #include "h/unrandomize.h"
|
|
|
277e3b5 |
+ UNRANDOMIZE_SBRK;
|
|
|
277e3b5 |
return 0;}]])],CAN_UNRANDOMIZE_SBRK=1,CAN_UNRANDOMIZE_SBRK=0,CAN_UNRANDOMIZE_SBRK=0)
|
|
|
e6a2505 |
|
|
|
277e3b5 |
if test "$CAN_UNRANDOMIZE_SBRK" != 0 ; then
|
|
|
cb0eb8c |
@@ -1202,12 +1204,11 @@ if test "$HAVE_SBRK" = "1" ; then
|
|
|
277e3b5 |
AC_MSG_CHECKING([that sbrk is (now) non-random])
|
|
|
277e3b5 |
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
|
277e3b5 |
#include <stdio.h>
|
|
|
277e3b5 |
+ #include "h/unrandomize.h"
|
|
|
277e3b5 |
void gprof_cleanup() {}
|
|
|
277e3b5 |
int main(int argc,char * argv[],char * envp[]) {
|
|
|
277e3b5 |
FILE *f;
|
|
|
277e3b5 |
- #ifdef CAN_UNRANDOMIZE_SBRK
|
|
|
277e3b5 |
- #include "h/unrandomize.h"
|
|
|
277e3b5 |
- #endif
|
|
|
277e3b5 |
+ UNRANDOMIZE_SBRK;
|
|
|
277e3b5 |
if (!(f=fopen("conftest1","w"))) return -1;
|
|
|
277e3b5 |
fprintf(f,"%u",sbrk(0));
|
|
|
277e3b5 |
return 0;}]])],SBRK=`cat conftest1`,SBRK=0,SBRK=0)
|
|
|
cb0eb8c |
@@ -1216,12 +1217,11 @@ if test "$HAVE_SBRK" = "1" ; then
|
|
|
277e3b5 |
fi
|
|
|
277e3b5 |
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
|
277e3b5 |
#include <stdio.h>
|
|
|
277e3b5 |
+ #include "h/unrandomize.h"
|
|
|
277e3b5 |
void gprof_cleanup() {}
|
|
|
277e3b5 |
int main(int argc,char * argv[],char * envp[]) {
|
|
|
277e3b5 |
FILE *f;
|
|
|
277e3b5 |
- #ifdef CAN_UNRANDOMIZE_SBRK
|
|
|
277e3b5 |
- #include "h/unrandomize.h"
|
|
|
277e3b5 |
- #endif
|
|
|
277e3b5 |
+ UNRANDOMIZE_SBRK;
|
|
|
277e3b5 |
if (!(f=fopen("conftest1","w"))) return -1;
|
|
|
277e3b5 |
fprintf(f,"%u",sbrk(0));
|
|
|
277e3b5 |
return 0;}]])],SBRK1=`cat conftest1`,SBRK1=0,SBRK1=0)
|
|
|
cb0eb8c |
@@ -1263,6 +1263,7 @@ AC_MSG_CHECKING([finding DBEGIN])
|
|
|
277e3b5 |
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
|
277e3b5 |
#include <stdio.h>
|
|
|
277e3b5 |
#include <stdlib.h>
|
|
|
277e3b5 |
+#include "h/unrandomize.h"
|
|
|
277e3b5 |
|
|
|
277e3b5 |
void gprof_cleanup() {}
|
|
|
277e3b5 |
int
|
|
|
cb0eb8c |
@@ -1271,9 +1272,7 @@ main(int argc,char * argv[],char *envp[]
|
|
|
9eb0e10 |
char *b,*b1;
|
|
|
9eb0e10 |
FILE *fp;
|
|
|
9eb0e10 |
|
|
|
9eb0e10 |
-#ifdef CAN_UNRANDOMIZE_SBRK
|
|
|
9eb0e10 |
-#include "h/unrandomize.h"
|
|
|
9eb0e10 |
-#endif
|
|
|
9eb0e10 |
+ UNRANDOMIZE_SBRK;
|
|
|
9eb0e10 |
b = (void *) malloc(1000);
|
|
|
9eb0e10 |
fp = fopen("conftest1","w");
|
|
|
9eb0e10 |
|
|
Jerry James |
e1ab74d |
--- ./configure.orig 2013-05-10 10:16:24.215085642 -0600
|
|
Jerry James |
e1ab74d |
+++ ./configure 2013-05-10 10:19:55.934751565 -0600
|
|
Jerry James |
e1ab74d |
@@ -7086,9 +7086,11 @@ else
|
|
|
9eb0e10 |
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
|
9eb0e10 |
/* end confdefs.h. */
|
|
|
9eb0e10 |
|
|
|
9eb0e10 |
+ #define CAN_UNRANDOMIZE_SBRK 1
|
|
|
9eb0e10 |
+ #include "h/unrandomize.h"
|
|
|
9eb0e10 |
void gprof_cleanup() {}
|
|
|
9eb0e10 |
int main(int argc,char *argv[],char *envp[]) {
|
|
|
9eb0e10 |
- #include "h/unrandomize.h"
|
|
|
9eb0e10 |
+ UNRANDOMIZE_SBRK;
|
|
|
9eb0e10 |
return 0;}
|
|
|
9eb0e10 |
_ACEOF
|
|
|
9eb0e10 |
if ac_fn_c_try_run "$LINENO"; then :
|
|
Jerry James |
e1ab74d |
@@ -7120,12 +7122,11 @@ else
|
|
|
9eb0e10 |
/* end confdefs.h. */
|
|
|
9eb0e10 |
|
|
|
9eb0e10 |
#include <stdio.h>
|
|
|
9eb0e10 |
+ #include "h/unrandomize.h"
|
|
|
9eb0e10 |
void gprof_cleanup() {}
|
|
|
9eb0e10 |
int main(int argc,char * argv[],char * envp[]) {
|
|
|
9eb0e10 |
FILE *f;
|
|
|
9eb0e10 |
- #ifdef CAN_UNRANDOMIZE_SBRK
|
|
|
9eb0e10 |
- #include "h/unrandomize.h"
|
|
|
9eb0e10 |
- #endif
|
|
|
9eb0e10 |
+ UNRANDOMIZE_SBRK;
|
|
|
9eb0e10 |
if (!(f=fopen("conftest1","w"))) return -1;
|
|
|
9eb0e10 |
fprintf(f,"%u",sbrk(0));
|
|
|
9eb0e10 |
return 0;}
|
|
Jerry James |
e1ab74d |
@@ -7149,12 +7150,11 @@ else
|
|
|
9eb0e10 |
/* end confdefs.h. */
|
|
|
9eb0e10 |
|
|
|
9eb0e10 |
#include <stdio.h>
|
|
|
9eb0e10 |
+ #include "h/unrandomize.h"
|
|
|
9eb0e10 |
void gprof_cleanup() {}
|
|
|
9eb0e10 |
int main(int argc,char * argv[],char * envp[]) {
|
|
|
9eb0e10 |
FILE *f;
|
|
|
9eb0e10 |
- #ifdef CAN_UNRANDOMIZE_SBRK
|
|
|
9eb0e10 |
- #include "h/unrandomize.h"
|
|
|
9eb0e10 |
- #endif
|
|
|
9eb0e10 |
+ UNRANDOMIZE_SBRK;
|
|
|
9eb0e10 |
if (!(f=fopen("conftest1","w"))) return -1;
|
|
|
9eb0e10 |
fprintf(f,"%u",sbrk(0));
|
|
|
9eb0e10 |
return 0;}
|
|
Jerry James |
e1ab74d |
@@ -7241,6 +7241,7 @@ else
|
|
|
9eb0e10 |
|
|
|
9eb0e10 |
#include <stdio.h>
|
|
|
9eb0e10 |
#include <stdlib.h>
|
|
|
9eb0e10 |
+#include "h/unrandomize.h"
|
|
|
9eb0e10 |
|
|
|
9eb0e10 |
void gprof_cleanup() {}
|
|
|
9eb0e10 |
int
|
|
Jerry James |
e1ab74d |
@@ -7249,9 +7250,7 @@ main(int argc,char * argv[],char *envp[]
|
|
|
277e3b5 |
char *b,*b1;
|
|
|
277e3b5 |
FILE *fp;
|
|
|
e6a2505 |
|
|
|
e6a2505 |
-#ifdef CAN_UNRANDOMIZE_SBRK
|
|
|
277e3b5 |
-#include "h/unrandomize.h"
|
|
|
e6a2505 |
-#endif
|
|
|
277e3b5 |
+ UNRANDOMIZE_SBRK;
|
|
|
277e3b5 |
b = (void *) malloc(1000);
|
|
|
277e3b5 |
fp = fopen("conftest1","w");
|
|
|
e6a2505 |
|
|
|
660b8f4 |
--- ./o/main.c.orig 2010-11-02 15:56:45.000000000 -0600
|
|
|
cb0eb8c |
+++ ./o/main.c 2012-07-26 09:52:37.251033241 -0600
|
|
|
cb0eb8c |
@@ -51,6 +51,7 @@ void initialize_process();
|
|
|
660b8f4 |
#include <signal.h>
|
|
|
660b8f4 |
#endif
|
|
|
660b8f4 |
#include "page.h"
|
|
|
660b8f4 |
+#include "unrandomize.h"
|
|
|
660b8f4 |
|
|
|
660b8f4 |
bool saving_system ;
|
|
|
660b8f4 |
|
|
|
cb0eb8c |
@@ -146,11 +147,7 @@ main(int argc, char **argv, char **envp)
|
|
|
660b8f4 |
#endif
|
|
|
660b8f4 |
*argv=kcl_self;
|
|
|
660b8f4 |
|
|
|
660b8f4 |
-#ifdef CAN_UNRANDOMIZE_SBRK
|
|
|
660b8f4 |
-#include <stdio.h>
|
|
|
660b8f4 |
-#include <stdlib.h>
|
|
|
660b8f4 |
-#include "unrandomize.h"
|
|
|
660b8f4 |
-#endif
|
|
|
660b8f4 |
+ UNRANDOMIZE_SBRK;
|
|
|
660b8f4 |
|
|
|
660b8f4 |
#ifdef LD_BIND_NOW
|
|
|
660b8f4 |
#include <stdio.h>
|
|
|
660b8f4 |
--- ./h/unrandomize.h.orig 2010-01-12 07:19:15.000000000 -0700
|
|
|
cb0eb8c |
+++ ./h/unrandomize.h 2012-07-26 09:52:37.274033201 -0600
|
|
|
660b8f4 |
@@ -1,39 +1,45 @@
|
|
|
660b8f4 |
+#include <stdio.h>
|
|
|
660b8f4 |
+#include <stdlib.h>
|
|
|
660b8f4 |
#include <sys/personality.h>
|
|
|
660b8f4 |
#include <syscall.h>
|
|
|
660b8f4 |
#include <unistd.h>
|
|
|
660b8f4 |
#include <alloca.h>
|
|
|
660b8f4 |
#include <errno.h>
|
|
|
660b8f4 |
|
|
|
660b8f4 |
-
|
|
|
660b8f4 |
-{
|
|
|
660b8f4 |
- errno=0;
|
|
|
660b8f4 |
-
|
|
|
660b8f4 |
- {
|
|
|
660b8f4 |
-
|
|
|
660b8f4 |
- long pers = personality(0xffffffffUL);
|
|
|
660b8f4 |
- if (pers==-1) {printf("personality failure %d\n",errno);exit(-1);}
|
|
|
660b8f4 |
- if (!(pers & ADDR_NO_RANDOMIZE) && !getenv("GCL_UNRANDOMIZE")) {
|
|
|
660b8f4 |
- errno=0;
|
|
|
660b8f4 |
- if (personality(pers | ADDR_NO_RANDOMIZE) != -1 && personality(0xffffffffUL) & ADDR_NO_RANDOMIZE) {
|
|
|
660b8f4 |
- int i;
|
|
|
660b8f4 |
- char **n;
|
|
|
660b8f4 |
- for (i=0;envp[i];i++);
|
|
|
660b8f4 |
- n=alloca((i+2)*sizeof(*n));
|
|
|
660b8f4 |
- n[i+1]=0;
|
|
|
660b8f4 |
- n[i--]="GCL_UNRANDOMIZE=t";
|
|
|
660b8f4 |
- for (;i>=0;i--)
|
|
|
660b8f4 |
- n[i]=envp[i];
|
|
|
660b8f4 |
-#ifdef GCL_GPROF
|
|
|
660b8f4 |
- gprof_cleanup();
|
|
|
660b8f4 |
+#ifdef CAN_UNRANDOMIZE_SBRK
|
|
|
660b8f4 |
+# ifdef GCL_GPROF
|
|
|
660b8f4 |
+# define GPROF_CLEANUP gprof_cleanup()
|
|
|
660b8f4 |
+# else
|
|
|
660b8f4 |
+# define GPROF_CLEANUP
|
|
|
660b8f4 |
+# endif
|
|
|
660b8f4 |
+# define UNRANDOMIZE_SBRK do { \
|
|
|
660b8f4 |
+ errno=0; \
|
|
|
660b8f4 |
+ { \
|
|
|
660b8f4 |
+ long pers = personality(0xffffffffUL); \
|
|
|
660b8f4 |
+ if (pers==-1) {printf("personality failure %d\n",errno);exit(-1);} \
|
|
|
660b8f4 |
+ if (!(pers & ADDR_NO_RANDOMIZE) && !getenv("GCL_UNRANDOMIZE")) { \
|
|
|
660b8f4 |
+ errno=0; \
|
|
|
660b8f4 |
+ if (personality(pers | ADDR_NO_RANDOMIZE) != -1 && personality(0xffffffffUL) & ADDR_NO_RANDOMIZE) { \
|
|
|
660b8f4 |
+ int i; \
|
|
|
660b8f4 |
+ char **n; \
|
|
|
660b8f4 |
+ for (i=0;envp[i];i++); \
|
|
|
660b8f4 |
+ n=alloca((i+2)*sizeof(*n)); \
|
|
|
660b8f4 |
+ n[i+1]=0; \
|
|
|
660b8f4 |
+ n[i--]="GCL_UNRANDOMIZE=t"; \
|
|
|
660b8f4 |
+ for (;i>=0;i--) \
|
|
|
660b8f4 |
+ n[i]=envp[i]; \
|
|
|
660b8f4 |
+ GPROF_CLEANUP; \
|
|
|
660b8f4 |
+ errno=0; \
|
|
|
660b8f4 |
+ execve(*argv,argv,n); \
|
|
|
660b8f4 |
+ printf("execve failure %d\n",errno); \
|
|
|
660b8f4 |
+ exit(-1); \
|
|
|
660b8f4 |
+ } else { \
|
|
|
660b8f4 |
+ printf("personality change failure %d\n",errno); \
|
|
|
660b8f4 |
+ exit(-1); \
|
|
|
660b8f4 |
+ } \
|
|
|
660b8f4 |
+ } \
|
|
|
660b8f4 |
+ } \
|
|
|
660b8f4 |
+ } while (0)
|
|
|
660b8f4 |
+#else
|
|
|
660b8f4 |
+# define UNRANDOMIZE_SBRK
|
|
|
660b8f4 |
#endif
|
|
|
660b8f4 |
- errno=0;
|
|
|
660b8f4 |
- execve(*argv,argv,n);
|
|
|
660b8f4 |
- printf("execve failure %d\n",errno);
|
|
|
660b8f4 |
- exit(-1);
|
|
|
660b8f4 |
- } else {
|
|
|
660b8f4 |
- printf("personality change failure %d\n",errno);
|
|
|
660b8f4 |
- exit(-1);
|
|
|
660b8f4 |
- }
|
|
|
660b8f4 |
- }
|
|
|
660b8f4 |
- }
|
|
|
660b8f4 |
-}
|