Message ID | 20230328-nolibc-smash-stack-volatile-v1-1-2b4aa7563a77@weissschuh.net (mailing list archive) |
---|---|
State | Accepted |
Commit | e7654c3fbdb348a0c54244015d97f0a0b8773b8c |
Headers | show |
Series | tools/nolibc: tests: use volatile to force stack smashing | expand |
diff --git a/tools/testing/selftests/nolibc/nolibc-test.c b/tools/testing/selftests/nolibc/nolibc-test.c index 21bacc928bf7..47013b78972e 100644 --- a/tools/testing/selftests/nolibc/nolibc-test.c +++ b/tools/testing/selftests/nolibc/nolibc-test.c @@ -667,17 +667,13 @@ int run_stdlib(int min, int max) return ret; } -#if defined(__clang__) -__attribute__((optnone)) -#elif defined(__GNUC__) -__attribute__((optimize("O0"))) -#endif static int smash_stack(void) { char buf[100]; + volatile char *ptr = buf; for (size_t i = 0; i < 200; i++) - buf[i] = 'P'; + ptr[i] = 'P'; return 1; }
Use a volatile pointer to write outside the buffer so the compiler can't optimize it away. Reported-by: Alexey Dobriyan <adobriyan@gmail.com> Link: https://lore.kernel.org/lkml/c0584807-511c-4496-b062-1263ea38f349@p183/ Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> --- This is based on the "dev" branch of the rcu tree. --- tools/testing/selftests/nolibc/nolibc-test.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) --- base-commit: 6e7cac3d5b8c77ddedfaa7efad23aa542cde53b2 change-id: 20230328-nolibc-smash-stack-volatile-0e87e9273fea Best regards,