From db49c933fe34a54947dbc7df381fa1700dc1e74f Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Fri, 20 Mar 2026 23:35:38 +0100 Subject: First commit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- sigsegv-recovery.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 sigsegv-recovery.c (limited to 'sigsegv-recovery.c') diff --git a/sigsegv-recovery.c b/sigsegv-recovery.c new file mode 100644 index 0000000..b69449b --- /dev/null +++ b/sigsegv-recovery.c @@ -0,0 +1,46 @@ +/* See LICENSE file for copyright and license details. */ +#include +#include +#include +#include +#include + + +int *volatile just_null = NULL; + +static jmp_buf jmpenv; + + +static void +sigsegv(int signo) +{ + (void) signo; + + siglongjmp(jmpenv, 1); +} + + +int +main(void) +{ + volatile int sum = 0; + volatile int i; + struct sigaction sa; + + memset(&sa, 0, sizeof(sa)); + sa.sa_handler = &sigsegv; + sigfillset(&sa.sa_mask); + sigaction(SIGSEGV, &sa, NULL); + + for (i = 1; i <= 10; i++) { + if (!sigsetjmp(jmpenv, 1)) { + printf("%i: before null dereference\n", i); + sum += *just_null; + } else { + printf("%i: after null dereference\n", i); + } + } + + fflush(stdout); + return sum; +} -- cgit v1.2.3-70-g09d2