|
|
e190683 |
--- ./configure.orig 2014-10-28 12:00:00.000000000 -0600
|
|
|
e190683 |
+++ ./configure 2014-10-28 12:00:00.000000000 -0600
|
|
|
e190683 |
@@ -7695,9 +7695,11 @@ else
|
|
|
e190683 |
|
|
Jerry James |
e078710 |
#include <stdio.h>
|
|
Jerry James |
e078710 |
#include <stdlib.h>
|
|
Jerry James |
b08b3a4 |
+ #define CAN_UNRANDOMIZE_SBRK 1
|
|
Jerry James |
b08b3a4 |
+ #include "h/unrandomize.h"
|
|
Jerry James |
e078710 |
void gprof_cleanup() {}
|
|
Jerry James |
e078710 |
int main(int argc,char **argv,char **envp) {
|
|
Jerry James |
e078710 |
- #include "h/unrandomize.h"
|
|
Jerry James |
b08b3a4 |
+ UNRANDOMIZE_SBRK;
|
|
|
e190683 |
return 0;}
|
|
|
e190683 |
_ACEOF
|
|
|
e190683 |
if ac_fn_c_try_run "$LINENO"; then :
|
|
|
e190683 |
@@ -7725,12 +7727,11 @@ else
|
|
|
e190683 |
|
|
Jerry James |
e078710 |
#include <stdio.h>
|
|
Jerry James |
e078710 |
#include <stdlib.h>
|
|
Jerry James |
b08b3a4 |
+ #include "h/unrandomize.h"
|
|
Jerry James |
e078710 |
void gprof_cleanup() {}
|
|
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;
|
|
Jerry James |
e078710 |
fprintf(f,"%u",sbrk(0));
|
|
|
e190683 |
return 0;}
|
|
|
e190683 |
@@ -7755,12 +7756,11 @@ else
|
|
|
e190683 |
|
|
Jerry James |
e078710 |
#include <stdio.h>
|
|
Jerry James |
e078710 |
#include <stdlib.h>
|
|
Jerry James |
b08b3a4 |
+ #include "h/unrandomize.h"
|
|
Jerry James |
e078710 |
void gprof_cleanup() {}
|
|
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;
|
|
Jerry James |
e078710 |
fprintf(f,"%u",sbrk(0));
|
|
|
e190683 |
return 0;}
|
|
|
e190683 |
@@ -7814,6 +7814,7 @@ else
|
|
|
e190683 |
|
|
Jerry James |
e078710 |
#include <stdio.h>
|
|
Jerry James |
e078710 |
#include <stdlib.h>
|
|
Jerry James |
e078710 |
+ #include "h/unrandomize.h"
|
|
Jerry James |
e078710 |
void *
|
|
Jerry James |
e078710 |
foo() {
|
|
Jerry James |
e078710 |
int i;
|
|
|
e190683 |
@@ -7826,9 +7827,7 @@ else
|
|
Jerry James |
e078710 |
FILE *fp = fopen("conftest1","w");
|
|
Jerry James |
e078710 |
unsigned long i,j;
|
|
Jerry James |
e078710 |
|
|
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 |
j=1;
|
|
Jerry James |
e078710 |
j<<=$PAGEWIDTH;
|
|
Jerry James |
e078710 |
j<<=16;
|
|
|
e190683 |
@@ -7872,6 +7871,7 @@ else
|
|
|
e190683 |
|
|
Jerry James |
e078710 |
#include <stdio.h>
|
|
Jerry James |
e078710 |
#include <stdlib.h>
|
|
Jerry James |
e078710 |
+ #include "h/unrandomize.h"
|
|
Jerry James |
e078710 |
void *
|
|
Jerry James |
e078710 |
foo() {
|
|
Jerry James |
e078710 |
int i;
|
|
|
e190683 |
@@ -7884,9 +7884,7 @@ else
|
|
Jerry James |
e078710 |
FILE *fp = fopen("conftest1","w");
|
|
Jerry James |
e078710 |
unsigned long i,j;
|
|
Jerry James |
e078710 |
|
|
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 |
j=1;
|
|
Jerry James |
e078710 |
j<<=$PAGEWIDTH;
|
|
Jerry James |
e078710 |
j<<=16;
|
|
|
e190683 |
@@ -7931,11 +7929,10 @@ else
|
|
|
e190683 |
|
|
Jerry James |
e078710 |
#include <stdio.h>
|
|
Jerry James |
e078710 |
#include <stdlib.h>
|
|
Jerry James |
e078710 |
+ #include "h/unrandomize.h"
|
|
Jerry James |
e078710 |
void gprof_cleanup() {}
|
|
Jerry James |
e078710 |
int main(int argc,char **argv,char **envp) {
|
|
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 |
return (long)$cstack_address<0 ? 0 : -1;
|
|
|
e190683 |
}
|
|
|
e190683 |
_ACEOF
|
|
|
e190683 |
@@ -7970,14 +7967,13 @@ else
|
|
|
e190683 |
|
|
Jerry James |
e078710 |
#include <stdio.h>
|
|
Jerry James |
e078710 |
#include <stdlib.h>
|
|
Jerry James |
e078710 |
+ #include "h/unrandomize.h"
|
|
Jerry James |
e078710 |
void gprof_cleanup() {}
|
|
Jerry James |
e078710 |
int main(int argc,char **argv,char **envp) {
|
|
Jerry James |
e078710 |
void *b,*c;
|
|
Jerry James |
e078710 |
FILE *fp = fopen("conftest1","w");
|
|
Jerry James |
e078710 |
long n;
|
|
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 |
b=alloca(sizeof(b));
|
|
Jerry James |
e078710 |
c=alloca(sizeof(c));
|
|
Jerry James |
e078710 |
n=b>c ? b-c : c-b;
|
|
|
e190683 |
@@ -8017,6 +8013,7 @@ else
|
|
|
e190683 |
|
|
Jerry James |
e078710 |
#include <stdio.h>
|
|
Jerry James |
e078710 |
#include <stdlib.h>
|
|
Jerry James |
e078710 |
+ #include "h/unrandomize.h"
|
|
Jerry James |
e078710 |
void *
|
|
Jerry James |
e078710 |
foo(void) {
|
|
Jerry James |
e078710 |
int i;
|
|
|
e190683 |
@@ -8027,9 +8024,7 @@ else
|
|
Jerry James |
e078710 |
int main(int argc,char **argv,char **envp) {
|
|
Jerry James |
e078710 |
char *b;
|
|
Jerry James |
e078710 |
FILE *fp = fopen("conftest1","w");
|
|
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 |
fprintf(fp,"%d",((long) &b) > ((long) foo()) ? -1 : 1);
|
|
Jerry James |
e078710 |
fclose(fp);
|
|
Jerry James |
e078710 |
return 0;
|
|
|
e190683 |
--- ./configure.in.orig 2014-10-28 12:00:00.000000000 -0600
|
|
|
e190683 |
+++ ./configure.in 2014-10-28 12:00:00.000000000 -0600
|
|
|
e190683 |
@@ -1435,9 +1435,11 @@ if test "$HAVE_SBRK" = "1" ; then
|
|
|
e190683 |
AC_LANG_SOURCE([[
|
|
Jerry James |
e078710 |
#include <stdio.h>
|
|
Jerry James |
e078710 |
#include <stdlib.h>
|
|
Jerry James |
b08b3a4 |
+ #define CAN_UNRANDOMIZE_SBRK 1
|
|
Jerry James |
b08b3a4 |
+ #include "h/unrandomize.h"
|
|
Jerry James |
e078710 |
void gprof_cleanup() {}
|
|
Jerry James |
e078710 |
int main(int argc,char **argv,char **envp) {
|
|
Jerry James |
e078710 |
- #include "h/unrandomize.h"
|
|
Jerry James |
b08b3a4 |
+ UNRANDOMIZE_SBRK;
|
|
|
e190683 |
return 0;}]])],
|
|
|
e190683 |
[AC_MSG_RESULT(yes)
|
|
|
e190683 |
AC_DEFINE(CAN_UNRANDOMIZE_SBRK,1,[can prevent sbrk from returning random values])],
|
|
|
e190683 |
@@ -1447,12 +1449,11 @@ if test "$HAVE_SBRK" = "1" ; then
|
|
|
e190683 |
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
Jerry James |
e078710 |
#include <stdio.h>
|
|
Jerry James |
e078710 |
#include <stdlib.h>
|
|
Jerry James |
b08b3a4 |
+ #include "h/unrandomize.h"
|
|
Jerry James |
e078710 |
void gprof_cleanup() {}
|
|
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;
|
|
Jerry James |
e078710 |
fprintf(f,"%u",sbrk(0));
|
|
|
e190683 |
return 0;}]])],SBRK=`cat conftest1`,SBRK=0,SBRK=0)
|
|
|
e190683 |
@@ -1462,12 +1463,11 @@ if test "$HAVE_SBRK" = "1" ; then
|
|
|
e190683 |
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
Jerry James |
e078710 |
#include <stdio.h>
|
|
Jerry James |
e078710 |
#include <stdlib.h>
|
|
Jerry James |
b08b3a4 |
+ #include "h/unrandomize.h"
|
|
Jerry James |
e078710 |
void gprof_cleanup() {}
|
|
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;
|
|
Jerry James |
e078710 |
fprintf(f,"%u",sbrk(0));
|
|
|
e190683 |
return 0;}]])],SBRK1=`cat conftest1`,SBRK1=0,SBRK1=0)
|
|
|
e190683 |
@@ -1539,6 +1539,7 @@ AC_MSG_CHECKING(CSTACK_ADDRESS)
|
|
|
e190683 |
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
Jerry James |
e078710 |
#include <stdio.h>
|
|
Jerry James |
e078710 |
#include <stdlib.h>
|
|
Jerry James |
e078710 |
+ #include "h/unrandomize.h"
|
|
Jerry James |
e078710 |
void *
|
|
Jerry James |
e078710 |
foo() {
|
|
Jerry James |
e078710 |
int i;
|
|
|
e190683 |
@@ -1551,9 +1552,7 @@ AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
Jerry James |
e078710 |
FILE *fp = fopen("conftest1","w");
|
|
Jerry James |
e078710 |
unsigned long i,j;
|
|
Jerry James |
e078710 |
|
|
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 |
j=1;
|
|
Jerry James |
e078710 |
j<<=$PAGEWIDTH;
|
|
Jerry James |
e078710 |
j<<=16;
|
|
|
e190683 |
@@ -1573,6 +1572,7 @@ AC_MSG_CHECKING([cstack bits])
|
|
|
e190683 |
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
Jerry James |
e078710 |
#include <stdio.h>
|
|
Jerry James |
e078710 |
#include <stdlib.h>
|
|
Jerry James |
e078710 |
+ #include "h/unrandomize.h"
|
|
Jerry James |
e078710 |
void *
|
|
Jerry James |
e078710 |
foo() {
|
|
Jerry James |
e078710 |
int i;
|
|
|
e190683 |
@@ -1585,9 +1585,7 @@ AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
Jerry James |
e078710 |
FILE *fp = fopen("conftest1","w");
|
|
Jerry James |
e078710 |
unsigned long i,j;
|
|
Jerry James |
e078710 |
|
|
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 |
j=1;
|
|
Jerry James |
e078710 |
j<<=$PAGEWIDTH;
|
|
Jerry James |
e078710 |
j<<=16;
|
|
|
e190683 |
@@ -1608,11 +1606,10 @@ AC_MSG_CHECKING(NEG_CSTACK_ADDRESS)
|
|
|
e190683 |
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
Jerry James |
e078710 |
#include <stdio.h>
|
|
Jerry James |
e078710 |
#include <stdlib.h>
|
|
Jerry James |
e078710 |
+ #include "h/unrandomize.h"
|
|
Jerry James |
e078710 |
void gprof_cleanup() {}
|
|
Jerry James |
e078710 |
int main(int argc,char **argv,char **envp) {
|
|
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 |
return (long)$cstack_address<0 ? 0 : -1;
|
|
|
e190683 |
}]])],[AC_MSG_RESULT(yes)
|
|
|
e190683 |
neg_cstack_address=1
|
|
|
e190683 |
@@ -1625,14 +1622,13 @@ AC_MSG_CHECKING([finding CSTACK_ALIGNMEN
|
|
|
e190683 |
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
Jerry James |
e078710 |
#include <stdio.h>
|
|
Jerry James |
e078710 |
#include <stdlib.h>
|
|
Jerry James |
e078710 |
+ #include "h/unrandomize.h"
|
|
Jerry James |
e078710 |
void gprof_cleanup() {}
|
|
Jerry James |
e078710 |
int main(int argc,char **argv,char **envp) {
|
|
Jerry James |
e078710 |
void *b,*c;
|
|
Jerry James |
e078710 |
FILE *fp = fopen("conftest1","w");
|
|
Jerry James |
e078710 |
long n;
|
|
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 |
b=alloca(sizeof(b));
|
|
Jerry James |
e078710 |
c=alloca(sizeof(c));
|
|
Jerry James |
e078710 |
n=b>c ? b-c : c-b;
|
|
|
e190683 |
@@ -1648,6 +1644,7 @@ AC_MSG_CHECKING(CSTACK_DIRECTION)
|
|
|
e190683 |
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
Jerry James |
e078710 |
#include <stdio.h>
|
|
Jerry James |
e078710 |
#include <stdlib.h>
|
|
Jerry James |
e078710 |
+ #include "h/unrandomize.h"
|
|
Jerry James |
e078710 |
void *
|
|
Jerry James |
e078710 |
foo(void) {
|
|
Jerry James |
e078710 |
int i;
|
|
|
e190683 |
@@ -1658,9 +1655,7 @@ AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
|
Jerry James |
e078710 |
int main(int argc,char **argv,char **envp) {
|
|
Jerry James |
e078710 |
char *b;
|
|
Jerry James |
e078710 |
FILE *fp = fopen("conftest1","w");
|
|
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 |
fprintf(fp,"%d",((long) &b) > ((long) foo()) ? -1 : 1);
|
|
Jerry James |
e078710 |
fclose(fp);
|
|
Jerry James |
e078710 |
return 0;
|
|
|
e190683 |
--- ./h/unrandomize.h.orig 2014-10-23 15:29:00.000000000 -0600
|
|
|
e190683 |
+++ ./h/unrandomize.h 2014-10-28 12:00:00.000000000 -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 |
-
|
|
Jerry James |
e078710 |
- 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;
|
|
Jerry James |
e078710 |
-#ifdef GCL_GPROF
|
|
Jerry James |
e078710 |
- gprof_cleanup();
|
|
Jerry James |
e078710 |
+#ifdef CAN_UNRANDOMIZE_SBRK
|
|
Jerry James |
e078710 |
+# ifdef GCL_GPROF
|
|
Jerry James |
e078710 |
+# define GPROF_CLEANUP gprof_cleanup()
|
|
Jerry James |
e078710 |
+# else
|
|
Jerry James |
e078710 |
+# define GPROF_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*/ \
|
|
Jerry James |
e078710 |
+ long pers = personality(0xffffffffUL); \
|
|
Jerry James |
e078710 |
+ long flag = ADDR_NO_RANDOMIZE; \
|
|
Jerry James |
e078710 |
+ \
|
|
Jerry James |
e078710 |
+ 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; \
|
|
Jerry James |
e078710 |
+ GPROF_CLEANUP; \
|
|
Jerry James |
e078710 |
+ errno=0; \
|
|
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 |
- errno=0;
|
|
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 |
-}
|
|
|
e190683 |
--- ./o/main.c.orig 2014-10-23 15:29:00.000000000 -0600
|
|
|
e190683 |
+++ ./o/main.c 2014-10-28 12:00:00.000000000 -0600
|
|
Jerry James |
b08b3a4 |
@@ -50,6 +50,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 |
|
|
|
e190683 |
@@ -370,11 +371,7 @@ main(int argc, char **argv, char **envp)
|
|
|
e190683 |
#endif
|
|
|
e190683 |
*argv=kcl_self;
|
|
|
e190683 |
|
|
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;
|
|
Jerry James |
b08b3a4 |
|
|
Jerry James |
b08b3a4 |
#ifdef LD_BIND_NOW
|
|
Jerry James |
b08b3a4 |
#include <stdio.h>
|