mirror of
https://github.com/jedisct1/libsodium.git
synced 2024-12-19 01:55:02 -07:00
Handle SIGPROT, CHERI's in-address space security exception
This commit is contained in:
parent
38ada39711
commit
45aa3adb96
@ -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__)
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user