Message ID | 20200418031833.234942-6-davidgow@google.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | KUnit-KASAN Integration | expand |
On Sat, Apr 18, 2020 at 5:19 AM 'David Gow' via kasan-dev <kasan-dev@googlegroups.com> wrote: > > KASAN errors will currently trigger a panic when panic_on_warn is set. > This renders kasan_multishot useless, as further KASAN errors won't be > reported if the kernel has already paniced. By making kasan_multishot > disable this behaviour for KASAN errors, we can still have the benefits > of panic_on_warn for non-KASAN warnings, yet be able to use > kasan_multishot. > > This is particularly important when running KASAN tests, which need to > trigger multiple KASAN errors: previously these would panic the system > if panic_on_warn was set, now they can run (and will panic the system > should non-KASAN warnings show up). > > Signed-off-by: David Gow <davidgow@google.com> Reviewed-by: Andrey Konovalov <andreyknvl@google.com> > --- > mm/kasan/report.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/kasan/report.c b/mm/kasan/report.c > index 0c206bbf9cb3..79fe23bd4f60 100644 > --- a/mm/kasan/report.c > +++ b/mm/kasan/report.c > @@ -94,7 +94,7 @@ static void end_report(unsigned long *flags) > pr_err("==================================================================\n"); > add_taint(TAINT_BAD_PAGE, LOCKDEP_NOW_UNRELIABLE); > spin_unlock_irqrestore(&report_lock, *flags); > - if (panic_on_warn) { > + if (panic_on_warn && !test_bit(KASAN_BIT_MULTI_SHOT, &kasan_flags)) { > /* > * This thread may hit another WARN() in the panic path. > * Resetting this prevents additional WARN() from panicking the > -- > 2.26.1.301.g55bc3eb7cb9-goog > > -- > You received this message because you are subscribed to the Google Groups "kasan-dev" group. > To unsubscribe from this group and stop receiving emails from it, send an email to kasan-dev+unsubscribe@googlegroups.com. > To view this discussion on the web visit https://groups.google.com/d/msgid/kasan-dev/20200418031833.234942-6-davidgow%40google.com.
diff --git a/mm/kasan/report.c b/mm/kasan/report.c index 0c206bbf9cb3..79fe23bd4f60 100644 --- a/mm/kasan/report.c +++ b/mm/kasan/report.c @@ -94,7 +94,7 @@ static void end_report(unsigned long *flags) pr_err("==================================================================\n"); add_taint(TAINT_BAD_PAGE, LOCKDEP_NOW_UNRELIABLE); spin_unlock_irqrestore(&report_lock, *flags); - if (panic_on_warn) { + if (panic_on_warn && !test_bit(KASAN_BIT_MULTI_SHOT, &kasan_flags)) { /* * This thread may hit another WARN() in the panic path. * Resetting this prevents additional WARN() from panicking the
KASAN errors will currently trigger a panic when panic_on_warn is set. This renders kasan_multishot useless, as further KASAN errors won't be reported if the kernel has already paniced. By making kasan_multishot disable this behaviour for KASAN errors, we can still have the benefits of panic_on_warn for non-KASAN warnings, yet be able to use kasan_multishot. This is particularly important when running KASAN tests, which need to trigger multiple KASAN errors: previously these would panic the system if panic_on_warn was set, now they can run (and will panic the system should non-KASAN warnings show up). Signed-off-by: David Gow <davidgow@google.com> --- mm/kasan/report.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)