977 |
|
|
978 |
if test "$SBRK" != "$SBRK1" ; then |
if test "$SBRK" != "$SBRK1" ; then |
979 |
AC_MSG_RESULT(yes) |
AC_MSG_RESULT(yes) |
980 |
AC_MSG_CHECKING([for randomized brk remedy]) |
# AC_CHECK_HEADER(linux/personality.h, true, |
981 |
|
# AC_MSG_ERROR(linux/personality.h not found)) |
982 |
|
# AC_TRY_RUN([#include <syscall.h> |
983 |
|
# #include <linux/personality.h> |
984 |
|
# #include <stdio.h> |
985 |
|
# #include <unistd.h> |
986 |
|
# int main(int argc,char *argv[],char *envp[]) { |
987 |
|
# FILE *f; |
988 |
|
# if (!(f=fopen("conftest1","w"))) |
989 |
|
# return -1; |
990 |
|
# fprintf(f,"%x",ADDR_NO_RANDOMIZE); |
991 |
|
# return 0; |
992 |
|
# }], |
993 |
|
# ADDR_NO_RANDOMIZE=`cat conftest1`,ADDR_NO_RANDOMIZE=0,ADDR_NO_RANDOMIZE=0) |
994 |
|
# if test "$ADDR_NO_RANDOMIZE" = "0" ; then |
995 |
|
# AC_MSG_RESULT(cannot get ADDR_NO_RANDOMIZE constant) |
996 |
|
# exit 1 |
997 |
|
# fi |
998 |
|
# AC_DEFINE_UNQUOTED(ADDR_NO_RANDOMIZE,$ADDR_NO_RANGOMIZE) |
999 |
|
# |
1000 |
|
# Many boxes do not have the definition yet |
1001 |
|
# |
1002 |
|
ADDR_NO_RANDOMIZE=0x40000 |
1003 |
|
AC_DEFINE_UNQUOTED(ADDR_NO_RANDOMIZE,$ADDR_NO_RANDOMIZE) |
1004 |
|
AC_MSG_CHECKING([for ADDR_NO_RANOMIZE constant]) |
1005 |
|
AC_MSG_RESULT($ADDR_NO_RANDOMIZE) |
1006 |
|
AC_CHECK_HEADER(sys/personality.h, true, |
1007 |
|
AC_MSG_ERROR(sys/personality.h not found)) |
1008 |
AC_TRY_RUN([#include <syscall.h> |
AC_TRY_RUN([#include <syscall.h> |
1009 |
#include <linux/personality.h> |
#include <sys/personality.h> |
1010 |
#include <stdio.h> |
#include <stdio.h> |
1011 |
#include <unistd.h> |
#include <unistd.h> |
1012 |
int main(int argc,char * argv[]) { |
int main(int argc,char *argv[],char *envp[]) { |
1013 |
FILE *f; |
FILE *f; |
1014 |
#if SIZEOF_LONG == 4 |
long pers; |
1015 |
if (!syscall(SYS_personality,PER_LINUX32)) |
pers=personality(-1); |
1016 |
#else |
if (!(pers & ADDR_NO_RANDOMIZE)) { |
1017 |
if (!syscall(SYS_personality,PER_LINUX)) |
personality(pers | ADDR_NO_RANDOMIZE); |
1018 |
#endif |
execve(*argv,argv,envp); |
1019 |
execvp(argv[0],argv); |
} |
1020 |
if (!(f=fopen("conftest1","w"))) |
if (!(f=fopen("conftest1","w"))) |
1021 |
return -1; |
return -1; |
1022 |
fprintf(f,"%u",sbrk(0)); |
fprintf(f,"%u",sbrk(0)); |
1028 |
exit 1 |
exit 1 |
1029 |
fi |
fi |
1030 |
AC_TRY_RUN([#include <syscall.h> |
AC_TRY_RUN([#include <syscall.h> |
1031 |
#include <linux/personality.h> |
#include <sys/personality.h> |
1032 |
#include <stdio.h> |
#include <stdio.h> |
1033 |
#include <unistd.h> |
#include <unistd.h> |
1034 |
int main(int argc,char * argv[]) { |
int main(int argc,char * argv[],char *envp[]) { |
1035 |
FILE *f; |
FILE *f; |
1036 |
#if SIZEOF_LONG == 4 |
long pers; |
1037 |
if (!syscall(SYS_personality,PER_LINUX32)) |
pers=personality(-1); |
1038 |
#else |
if (!(pers & ADDR_NO_RANDOMIZE)) { |
1039 |
if (!syscall(SYS_personality,PER_LINUX)) |
personality(pers | ADDR_NO_RANDOMIZE); |
1040 |
#endif |
execve(*argv,argv,envp); |
1041 |
execvp(argv[0],argv); |
} |
1042 |
if (!(f=fopen("conftest1","w"))) |
if (!(f=fopen("conftest1","w"))) |
1043 |
return -1; |
return -1; |
1044 |
fprintf(f,"%u",sbrk(0)); |
fprintf(f,"%u",sbrk(0)); |
1049 |
AC_MSG_RESULT(cannot trap sbrk) |
AC_MSG_RESULT(cannot trap sbrk) |
1050 |
exit 1 |
exit 1 |
1051 |
fi |
fi |
1052 |
|
AC_MSG_CHECKING([for randomized brk remedy]) |
1053 |
if test "$SBRK" = "$SBRK1" ; then |
if test "$SBRK" = "$SBRK1" ; then |
1054 |
AC_MSG_RESULT(yes) |
AC_MSG_RESULT(yes) |
1055 |
AC_DEFINE(NEED_NONRANDOM_SBRK) |
AC_DEFINE(NEED_NONRANDOM_SBRK) |
1154 |
#include <stdlib.h> |
#include <stdlib.h> |
1155 |
#ifdef NEED_NONRANDOM_SBRK |
#ifdef NEED_NONRANDOM_SBRK |
1156 |
#include <syscall.h> |
#include <syscall.h> |
1157 |
#include <linux/personality.h> |
#include <sys/personality.h> |
1158 |
#include <unistd.h> |
#include <unistd.h> |
1159 |
#endif |
#endif |
1160 |
int |
int |
1164 |
FILE *fp; |
FILE *fp; |
1165 |
|
|
1166 |
#ifdef NEED_NONRANDOM_SBRK |
#ifdef NEED_NONRANDOM_SBRK |
1167 |
#if SIZEOF_LONG == 4 |
pers=personality(-1); |
1168 |
if (!syscall(SYS_personality,PER_LINUX32)) |
if (!(pers & ADDR_NO_RANDOMIZE)) { |
1169 |
#else |
personality(pers | ADDR_NO_RANDOMIZE); |
1170 |
if (!syscall(SYS_personality,PER_LINUX)) |
execve(*argv,argv,envp); |
1171 |
|
} |
1172 |
#endif |
#endif |
|
execvp(argv[0],argv); |
|
|
#endif |
|
1173 |
b = (void *) malloc(1000); |
b = (void *) malloc(1000); |
1174 |
fp = fopen("conftest1","w"); |
fp = fopen("conftest1","w"); |
1175 |
|
|