[compiler-rt] acaca56 - [HWASan] Test longjmp(jmpbuf, 0).
Matt Morehouse via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 15 12:12:44 PDT 2021
Author: Matt Morehouse
Date: 2021-09-15T12:11:59-07:00
New Revision: acaca56471a7c7b68591f1bc0214177c43fa05d6
URL: https://github.com/llvm/llvm-project/commit/acaca56471a7c7b68591f1bc0214177c43fa05d6
DIFF: https://github.com/llvm/llvm-project/commit/acaca56471a7c7b68591f1bc0214177c43fa05d6.diff
LOG: [HWASan] Test longjmp(jmpbuf, 0).
Our interceptor needs to change retval to 1 when 0 is passed.
Reviewed By: eugenis
Differential Revision: https://reviews.llvm.org/D109788
Added:
Modified:
compiler-rt/test/hwasan/TestCases/longjmp-setjmp-interception.c
Removed:
################################################################################
diff --git a/compiler-rt/test/hwasan/TestCases/longjmp-setjmp-interception.c b/compiler-rt/test/hwasan/TestCases/longjmp-setjmp-interception.c
index 68c1aaca0c61d..19e8cebb6634c 100644
--- a/compiler-rt/test/hwasan/TestCases/longjmp-setjmp-interception.c
+++ b/compiler-rt/test/hwasan/TestCases/longjmp-setjmp-interception.c
@@ -1,9 +1,13 @@
-// RUN: %clang_hwasan -g %s -o %t && not %run %t 2>&1 | FileCheck %s
+// RUN: %clang_hwasan -g %s -o %t
+// RUN: not %run %t 0 2>&1 | FileCheck %s
+// RUN: not %run %t -33 2>&1 | FileCheck %s
// Only implemented for interceptor ABI on AArch64.
// REQUIRES: aarch64-target-arch
+#include <assert.h>
#include <setjmp.h>
#include <stdio.h>
+#include <stdlib.h>
/* Testing longjmp/setjmp should test that accesses to scopes jmp'd over are
caught. */
@@ -11,10 +15,7 @@ int __attribute__((noinline))
uses_longjmp(int **other_array, int num, jmp_buf env) {
int internal_array[100] = {0};
*other_array = &internal_array[0];
- if (num % 2)
- longjmp(env, num);
- else
- return num % 8;
+ longjmp(env, num);
}
int __attribute__((noinline)) uses_setjmp(int num) {
@@ -23,6 +24,7 @@ int __attribute__((noinline)) uses_setjmp(int num) {
sigjmp_buf cur_env;
int temp = 0;
if ((temp = sigsetjmp(cur_env, 1)) != 0) {
+ assert((num == 0 && temp == 1) || (num != 0 && temp == num));
// We're testing that our longjmp interceptor untagged the previous stack.
// Hence the tag in memory should be zero.
if (other_array != NULL)
@@ -33,7 +35,9 @@ int __attribute__((noinline)) uses_setjmp(int num) {
return uses_longjmp(&other_array, num, cur_env);
}
-int __attribute__((noinline)) main() {
- uses_setjmp(1);
+int __attribute__((noinline)) main(int argc, char *argv[]) {
+ assert(argc == 2);
+ int longjmp_retval = atoi(argv[1]);
+ uses_setjmp(longjmp_retval);
return 0;
}
More information about the llvm-commits
mailing list