Revision bc8fbc5f305aecf63423da91e5faf4c0ce40bf38 authored by Marco Elver on 26 February 2021, 01:19:31 UTC, committed by Linus Torvalds on 26 February 2021, 17:41:02 UTC
Add KFENCE test suite, testing various error detection scenarios. Makes
use of KUnit for test organization. Since KFENCE's interface to obtain
error reports is via the console, the test verifies that KFENCE outputs
expected reports to the console.

[elver@google.com: fix typo in test]
  Link: https://lkml.kernel.org/r/X9lHQExmHGvETxY4@elver.google.com
[elver@google.com: show access type in report]
  Link: https://lkml.kernel.org/r/20210111091544.3287013-2-elver@google.com

Link: https://lkml.kernel.org/r/20201103175841.3495947-9-elver@google.com
Signed-off-by: Alexander Potapenko <glider@google.com>
Signed-off-by: Marco Elver <elver@google.com>
Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
Co-developed-by: Alexander Potapenko <glider@google.com>
Reviewed-by: Jann Horn <jannh@google.com>
Cc: Andrey Konovalov <andreyknvl@google.com>
Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Christopher Lameter <cl@linux.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Hillf Danton <hdanton@sina.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Joern Engel <joern@purestorage.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Paul E. McKenney <paulmck@kernel.org>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: SeongJae Park <sjpark@amazon.de>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 10efe55
Raw File
stackdelta
#!/usr/bin/env perl
# SPDX-License-Identifier: GPL-2.0

# Read two files produced by the stackusage script, and show the
# delta between them.
#
# Currently, only shows changes for functions listed in both files. We
# could add an option to show also functions which have vanished or
# appeared (which would often be due to gcc making other inlining
# decisions).
#
# Another possible option would be a minimum absolute value for the
# delta.
#
# A third possibility is for sorting by delta, but that can be
# achieved by piping to sort -k5,5g.

sub read_stack_usage_file {
    my %su;
    my $f = shift;
    open(my $fh, '<', $f)
	or die "cannot open $f: $!";
    while (<$fh>) {
	chomp;
	my ($file, $func, $size, $type) = split;
	# Old versions of gcc (at least 4.7) have an annoying quirk in
	# that a (static) function whose name has been changed into
	# for example ext4_find_unwritten_pgoff.isra.11 will show up
	# in the .su file with a name of just "11". Since such a
	# numeric suffix is likely to change across different
	# commits/compilers/.configs or whatever else we're trying to
	# tweak, we can't really track those functions, so we just
	# silently skip them.
	#
	# Newer gcc (at least 5.0) report the full name, so again,
	# since the suffix is likely to change, we strip it.
	next if $func =~ m/^[0-9]+$/;
	$func =~ s/\..*$//;
	# Line numbers are likely to change; strip those.
	$file =~ s/:[0-9]+$//;
	$su{"${file}\t${func}"} = {size => $size, type => $type};
    }
    close($fh);
    return \%su;
}

@ARGV == 2
    or die "usage: $0 <old> <new>";

my $old = read_stack_usage_file($ARGV[0]);
my $new = read_stack_usage_file($ARGV[1]);
my @common = sort grep {exists $new->{$_}} keys %$old;
for (@common) {
    my $x = $old->{$_}{size};
    my $y = $new->{$_}{size};
    my $delta = $y - $x;
    if ($delta) {
	printf "%s\t%d\t%d\t%+d\n", $_, $x, $y, $delta;
    }
}
back to top