[PATCH 2/2] kmemleak: add checksum to backtrace report

Jim Cromie posted 2 patches 2 years, 1 month ago
[PATCH 2/2] kmemleak: add checksum to backtrace report
Posted by Jim Cromie 2 years, 1 month ago
Change /sys/kernel/debug/kmemleak report format slightly, adding
"(extra info)" to the backtrace header:

from: "  backtrace:"
to:   "  backtrace (crc <cksum>):"

The <cksum> allows a user to see recurring backtraces without
detailed/careful reading of multiline stacks.  So after cycling
kmemleak-test a few times, I know some leaks are repeating.

  bash-5.2# grep backtrace /sys/kernel/debug/kmemleak | wc
     62     186    1792
  bash-5.2# grep backtrace /sys/kernel/debug/kmemleak | sort -u | wc
     37     111    1067

syzkaller parses kmemleak for "unreferenced object" only, so is
unaffected by this change.  Other github repos are moribund.

Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
 mm/kmemleak.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/kmemleak.c b/mm/kmemleak.c
index 10c9b611c395..4c22a2d7cab4 100644
--- a/mm/kmemleak.c
+++ b/mm/kmemleak.c
@@ -362,7 +362,7 @@ static void print_unreferenced(struct seq_file *seq,
 	warn_or_seq_printf(seq, "  comm \"%s\", pid %d, jiffies %lu\n",
 			   object->comm, object->pid, object->jiffies);
 	hex_dump_object(seq, object);
-	warn_or_seq_printf(seq, "  backtrace:\n");
+	warn_or_seq_printf(seq, "  backtrace (crc %x):\n", object->checksum);
 
 	for (i = 0; i < nr_entries; i++) {
 		void *ptr = (void *)entries[i];
-- 
2.41.0
Re: [PATCH 2/2] kmemleak: add checksum to backtrace report
Posted by Catalin Marinas 2 years, 1 month ago
On Thu, Nov 16, 2023 at 03:43:18PM -0700, Jim Cromie wrote:
> Change /sys/kernel/debug/kmemleak report format slightly, adding
> "(extra info)" to the backtrace header:
> 
> from: "  backtrace:"
> to:   "  backtrace (crc <cksum>):"
> 
> The <cksum> allows a user to see recurring backtraces without
> detailed/careful reading of multiline stacks.  So after cycling
> kmemleak-test a few times, I know some leaks are repeating.
> 
>   bash-5.2# grep backtrace /sys/kernel/debug/kmemleak | wc
>      62     186    1792
>   bash-5.2# grep backtrace /sys/kernel/debug/kmemleak | sort -u | wc
>      37     111    1067
> 
> syzkaller parses kmemleak for "unreferenced object" only, so is
> unaffected by this change.  Other github repos are moribund.
> 
> Signed-off-by: Jim Cromie <jim.cromie@gmail.com>

Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Re: [PATCH 2/2] kmemleak: add checksum to backtrace report
Posted by jim.cromie@gmail.com 2 years, 1 month ago
On Sat, Nov 18, 2023 at 10:36 AM Catalin Marinas
<catalin.marinas@arm.com> wrote:
>
> On Thu, Nov 16, 2023 at 03:43:18PM -0700, Jim Cromie wrote:
> > Change /sys/kernel/debug/kmemleak report format slightly, adding
> > "(extra info)" to the backtrace header:
> >
> > from: "  backtrace:"
> > to:   "  backtrace (crc <cksum>):"
> >
> > The <cksum> allows a user to see recurring backtraces without
> > detailed/careful reading of multiline stacks.  So after cycling
> > kmemleak-test a few times, I know some leaks are repeating.
> >
> >   bash-5.2# grep backtrace /sys/kernel/debug/kmemleak | wc
> >      62     186    1792
> >   bash-5.2# grep backtrace /sys/kernel/debug/kmemleak | sort -u | wc
> >      37     111    1067

So, speculating from here,
what else could be done with <crc: deadbeef> ?

1 - (optionally) collapsing backtraces, replacing the stack with
   "seen previously, at <mumble>"
    of some clear / succinct flavor (maybe several ?)

2 - stack specific instructions from user

echo drop/ignore/histogram/<mumble>  deadbeef \
     > /sys/kernel/debug/kmemleak

this crc-specific instruction could control the optionality of 1.
on a trace-by-trace basis even.

The "seen previously" would be an obvious place to look
for a root cause of a detected leak.
tools beyond drop/ignore/histogram/<mumble>
are worth some consideration ?

> Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>