Handle SIGPROT, CHERI's in-address space security exception

This commit is contained in:
Frank Denis
2023-09-12 21:02:18 +02:00
parent 38ada39711
commit 45aa3adb96
4 changed files with 19 additions and 1 deletions
+3
View File
@@ -21,6 +21,9 @@ static void sig(int _) { exit(0); }
volatile unsigned char * volatile x = (volatile unsigned char *) malloc(8);
size_t i;
#ifdef SIGPROT
signal(SIGPROT, sig);
#endif
signal(SIGSEGV, sig);
signal(SIGBUS, sig);
#if !defined(__SANITIZE_ADDRESS__) && !defined(__EMSCRIPTEN__)
+4 -1
View File
@@ -82,6 +82,7 @@ void *alloca (size_t);
defined(HAVE_POSIX_MEMALIGN)
# define HAVE_ALIGNED_MALLOC
#endif
#if defined(HAVE_MPROTECT) && \
!(defined(PROT_NONE) && defined(PROT_READ) && defined(PROT_WRITE))
# undef HAVE_MPROTECT
@@ -510,7 +511,9 @@ __attribute__((noreturn)) static void
_out_of_bounds(void)
{
# if defined(HAVE_RAISE) && !defined(__wasm__)
# ifdef SIGSEGV
# ifdef SIGPROT
raise(SIGPROT);
# elif defined(SIGSEGV)
raise(SIGSEGV);
# elif defined(SIGKILL)
raise(SIGKILL);
+6
View File
@@ -29,6 +29,9 @@ segv_handler(int sig)
printf("Intentional segfault / bus error caught\n");
printf("OK\n");
#ifdef SIG_DFL
# ifdef SIGPROT
signal(SIGPROT, SIG_DFL);
# endif
# ifdef SIGSEGV
signal(SIGSEGV, SIG_DFL);
# endif
@@ -82,6 +85,9 @@ main(void)
}
printf("OK\n");
#ifdef SIG_DFL
# ifdef SIGPROT
signal(SIGPROT, segv_handler);
# endif
# ifdef SIGSEGV
signal(SIGSEGV, segv_handler);
# endif
+6
View File
@@ -25,6 +25,9 @@ segv_handler(int sig)
printf("Intentional segfault / bus error caught\n");
printf("OK\n");
#ifdef SIG_DFL
# ifdef SIGPROT
signal(SIGPROT, SIG_DFL);
# endif
# ifdef SIGSEGV
signal(SIGSEGV, SIG_DFL);
# endif
@@ -49,6 +52,9 @@ main(void)
#endif
#ifdef SIG_DFL
# ifdef SIGPROT
signal(SIGPROT, segv_handler);
# endif
# ifdef SIGSEGV
signal(SIGSEGV, segv_handler);
# endif