diff options
author | Leah Neukirchen <leah@vuxu.org> | 2019-01-11 15:52:56 +0100 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2019-01-11 15:52:56 +0100 |
commit | 210da56f6ff711ba6b92d0b83f0c2ecfc824cff0 (patch) | |
tree | 67b08d1b0b5ae61cff605118ddefd33451264944 /fail.c | |
parent | 7f7d49564d86851ef74e48fce23bb5f54f22b392 (diff) | |
download | fail-210da56f6ff711ba6b92d0b83f0c2ecfc824cff0.tar.gz fail-210da56f6ff711ba6b92d0b83f0c2ecfc824cff0.tar.xz fail-210da56f6ff711ba6b92d0b83f0c2ecfc824cff0.zip |
new fail: recurse_alloca (to test -fstack-clash-protection)
Diffstat (limited to 'fail.c')
-rw-r--r-- | fail.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/fail.c b/fail.c index b95b1b6..5d1b80b 100644 --- a/fail.c +++ b/fail.c @@ -9,6 +9,7 @@ #include <sys/stat.h> #include <sys/types.h> +#include <alloca.h> #include <fcntl.h> #include <signal.h> #include <stdio.h> @@ -73,13 +74,22 @@ oom() void recurse(char *n) { - char m[1024]; + char m[512]; recurse(m); if (n) m[0] = n[0] = 42; } void +recurse_alloca(char *n) +{ + char *m = alloca(1024*1024); + recurse_alloca(m); + if (n) + m[0] = n[0] = 42; +} + +void abortme() { abort(); @@ -148,13 +158,14 @@ main(int argc, char *argv[]) { int c; - while ((c = getopt(argc, argv, "123DOabcdikrst")) != -1) { + while ((c = getopt(argc, argv, "123DORabcdikrst")) != -1) { switch (c) { case '1': exit(-1); break; case '2': exit(2); break; case '3': exit(111); break; case 'D': uninterruptible(); break; case 'O': oom(); break; + case 'R': recurse_alloca(0); break; case 'a': abortme(); break; case 'b': mmap_sigbus(); break; case 'c': violate_seccomp(); break; @@ -167,6 +178,6 @@ main(int argc, char *argv[]) } } - write(2, "Usage: fail [-123Oabcdikrst]\n", 29); + write(2, "Usage: fail [-123ORabcdikrst]\n", 30); exit(1); } |