The first error is always the most significant. The following
errors usually are the consequences of the first or duplicates.

This introduces single-shot mode, which means that we will print
only the first error. It's enabled by default, but user
still can switch to the old behavior via 'kasan_print_till_death'
boot option.

https://jira.sw.ru/browse/PSBM-39339

Signed-off-by: Andrey Ryabinin <aryabi...@odin.com>
---
 mm/kasan/report.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/mm/kasan/report.c b/mm/kasan/report.c
index 17af572..515ab38 100644
--- a/mm/kasan/report.c
+++ b/mm/kasan/report.c
@@ -216,14 +216,28 @@ static void kasan_report_error(struct kasan_access_info 
*info)
        spin_unlock_irqrestore(&report_lock, flags);
 }
 
+static bool print_till_death;
+static int __init kasan_setup(char *arg)
+{
+       print_till_death = true;
+       return 0;
+}
+__setup("kasan_print_till_death", kasan_setup);
+
 void kasan_report(unsigned long addr, size_t size,
                bool is_write, unsigned long ip)
 {
        struct kasan_access_info info;
+       static bool reported = false;
 
        if (likely(!kasan_enabled()))
                return;
 
+       if (likely(!print_till_death)) {
+               if (reported)
+                       return;
+               reported = true;
+       }
        info.access_addr = (void *)addr;
        info.access_size = size;
        info.is_write = is_write;
-- 
2.4.6

_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to