mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 04:04:43 +01:00
selftests/bpf: Don't override SIGSEGV handler with ASAN
test_progs has custom SIGSEGV handler, which interferes with the address sanitizer [1]. Add an #ifndef to avoid this. Additionally, declare an __asan_on_error() to dump the test logs in the same way it happens in the custom SIGSEGV handler. [1] https://lore.kernel.org/bpf/73d832948b01dbc0ebc60d85574bdf8537f3a810.camel@gmail.com/ Acked-by: Mykyta Yatsenko <yatsenko@meta.com> Acked-by: Eduard Zingerman <eddyz87@gmail.com> Signed-off-by: Ihor Solodrai <ihor.solodrai@linux.dev> Link: https://lore.kernel.org/r/20260223191118.655185-3-ihor.solodrai@linux.dev Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
a2714e7303
commit
4c9d07865c
1 changed files with 26 additions and 10 deletions
|
|
@ -1261,14 +1261,8 @@ int get_bpf_max_tramp_links(void)
|
|||
return ret;
|
||||
}
|
||||
|
||||
#define MAX_BACKTRACE_SZ 128
|
||||
void crash_handler(int signum)
|
||||
static void dump_crash_log(void)
|
||||
{
|
||||
void *bt[MAX_BACKTRACE_SZ];
|
||||
size_t sz;
|
||||
|
||||
sz = backtrace(bt, ARRAY_SIZE(bt));
|
||||
|
||||
fflush(stdout);
|
||||
stdout = env.stdout_saved;
|
||||
stderr = env.stderr_saved;
|
||||
|
|
@ -1277,12 +1271,32 @@ void crash_handler(int signum)
|
|||
env.test_state->error_cnt++;
|
||||
dump_test_log(env.test, env.test_state, true, false, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
#define MAX_BACKTRACE_SZ 128
|
||||
|
||||
void crash_handler(int signum)
|
||||
{
|
||||
void *bt[MAX_BACKTRACE_SZ];
|
||||
size_t sz;
|
||||
|
||||
sz = backtrace(bt, ARRAY_SIZE(bt));
|
||||
|
||||
dump_crash_log();
|
||||
|
||||
if (env.worker_id != -1)
|
||||
fprintf(stderr, "[%d]: ", env.worker_id);
|
||||
fprintf(stderr, "Caught signal #%d!\nStack trace:\n", signum);
|
||||
backtrace_symbols_fd(bt, sz, STDERR_FILENO);
|
||||
}
|
||||
|
||||
#ifdef __SANITIZE_ADDRESS__
|
||||
void __asan_on_error(void)
|
||||
{
|
||||
dump_crash_log();
|
||||
}
|
||||
#endif
|
||||
|
||||
void hexdump(const char *prefix, const void *buf, size_t len)
|
||||
{
|
||||
for (int i = 0; i < len; i++) {
|
||||
|
|
@ -1944,13 +1958,15 @@ int main(int argc, char **argv)
|
|||
.parser = parse_arg,
|
||||
.doc = argp_program_doc,
|
||||
};
|
||||
int err, i;
|
||||
|
||||
#ifndef __SANITIZE_ADDRESS__
|
||||
struct sigaction sigact = {
|
||||
.sa_handler = crash_handler,
|
||||
.sa_flags = SA_RESETHAND,
|
||||
};
|
||||
int err, i;
|
||||
|
||||
};
|
||||
sigaction(SIGSEGV, &sigact, NULL);
|
||||
#endif
|
||||
|
||||
env.stdout_saved = stdout;
|
||||
env.stderr_saved = stderr;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue