leaking_addresses: simplify path skipping
Currently script has multiple configuration arrays. This is confusing, evident by the fact that a bunch of the entries are in the wrong place. We can simplify the code by just having a single array for absolute paths to skip and a single array for file names to skip wherever they appear in the scanned directory tree. There are also currently multiple subroutines to handle the different arrays, we can reduce these to a single subroutine also. Simplify the path skipping code. Signed-off-by: Tobin C. Harding <me@tobin.cc>
This commit is contained in:
parent
e2858caddc
commit
b401f56f33
|
@ -48,41 +48,26 @@ my $kernel_config_file = ""; # Kernel configuration file.
|
||||||
my $opt_32bit = 0; # Scan 32-bit kernel.
|
my $opt_32bit = 0; # Scan 32-bit kernel.
|
||||||
my $page_offset_32bit = 0; # Page offset for 32-bit kernel.
|
my $page_offset_32bit = 0; # Page offset for 32-bit kernel.
|
||||||
|
|
||||||
# Do not parse these files (absolute path).
|
# Skip these absolute paths.
|
||||||
my @skip_parse_files_abs = ('/proc/kmsg',
|
my @skip_abs = (
|
||||||
'/proc/kcore',
|
'/proc/kmsg',
|
||||||
'/proc/fs/ext4/sdb1/mb_groups',
|
'/proc/device-tree',
|
||||||
'/proc/1/fd/3',
|
'/sys/firmware/devicetree',
|
||||||
'/sys/firmware/devicetree',
|
'/sys/kernel/debug/tracing/trace_pipe',
|
||||||
'/proc/device-tree',
|
'/sys/kernel/security/apparmor/revision');
|
||||||
'/sys/kernel/debug/tracing/trace_pipe',
|
|
||||||
'/sys/kernel/security/apparmor/revision');
|
|
||||||
|
|
||||||
# Do not parse these files under any subdirectory.
|
# Skip these under any subdirectory.
|
||||||
my @skip_parse_files_any = ('0',
|
my @skip_any = (
|
||||||
'1',
|
'pagemap',
|
||||||
'2',
|
'events',
|
||||||
'pagemap',
|
'access',
|
||||||
'events',
|
'registers',
|
||||||
'access',
|
'snapshot_raw',
|
||||||
'registers',
|
'trace_pipe_raw',
|
||||||
'snapshot_raw',
|
'ptmx',
|
||||||
'trace_pipe_raw',
|
'trace_pipe',
|
||||||
'ptmx',
|
'fd',
|
||||||
'trace_pipe');
|
'usbmon');
|
||||||
|
|
||||||
# Do not walk these directories (absolute path).
|
|
||||||
my @skip_walk_dirs_abs = ();
|
|
||||||
|
|
||||||
# Do not walk these directories under any subdirectory.
|
|
||||||
my @skip_walk_dirs_any = ('self',
|
|
||||||
'thread-self',
|
|
||||||
'cwd',
|
|
||||||
'fd',
|
|
||||||
'usbmon',
|
|
||||||
'stderr',
|
|
||||||
'stdin',
|
|
||||||
'stdout');
|
|
||||||
|
|
||||||
sub help
|
sub help
|
||||||
{
|
{
|
||||||
|
@ -417,26 +402,20 @@ sub parse_dmesg
|
||||||
# True if we should skip this path.
|
# True if we should skip this path.
|
||||||
sub skip
|
sub skip
|
||||||
{
|
{
|
||||||
my ($path, $paths_abs, $paths_any) = @_;
|
my ($path) = @_;
|
||||||
|
|
||||||
foreach (@$paths_abs) {
|
foreach (@skip_abs) {
|
||||||
return 1 if (/^$path$/);
|
return 1 if (/^$path$/);
|
||||||
}
|
}
|
||||||
|
|
||||||
my($filename, $dirs, $suffix) = fileparse($path);
|
my($filename, $dirs, $suffix) = fileparse($path);
|
||||||
foreach (@$paths_any) {
|
foreach (@skip_any) {
|
||||||
return 1 if (/^$filename$/);
|
return 1 if (/^$filename$/);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub skip_parse
|
|
||||||
{
|
|
||||||
my ($path) = @_;
|
|
||||||
return skip($path, \@skip_parse_files_abs, \@skip_parse_files_any);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub timed_parse_file
|
sub timed_parse_file
|
||||||
{
|
{
|
||||||
my ($file) = @_;
|
my ($file) = @_;
|
||||||
|
@ -466,12 +445,6 @@ sub parse_file
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (skip_parse($file)) {
|
|
||||||
dprint "skipping file: $file\n";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dprint "parsing: $file\n";
|
|
||||||
|
|
||||||
open my $fh, "<", $file or return;
|
open my $fh, "<", $file or return;
|
||||||
while ( <$fh> ) {
|
while ( <$fh> ) {
|
||||||
if (may_leak_address($_)) {
|
if (may_leak_address($_)) {
|
||||||
|
@ -481,21 +454,12 @@ sub parse_file
|
||||||
close $fh;
|
close $fh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# True if we should skip walking this directory.
|
|
||||||
sub skip_walk
|
|
||||||
{
|
|
||||||
my ($path) = @_;
|
|
||||||
return skip($path, \@skip_walk_dirs_abs, \@skip_walk_dirs_any)
|
|
||||||
}
|
|
||||||
|
|
||||||
# Recursively walk directory tree.
|
# Recursively walk directory tree.
|
||||||
sub walk
|
sub walk
|
||||||
{
|
{
|
||||||
my @dirs = @_;
|
my @dirs = @_;
|
||||||
|
|
||||||
while (my $pwd = shift @dirs) {
|
while (my $pwd = shift @dirs) {
|
||||||
next if (skip_walk($pwd));
|
|
||||||
next if (!opendir(DIR, $pwd));
|
next if (!opendir(DIR, $pwd));
|
||||||
my @files = readdir(DIR);
|
my @files = readdir(DIR);
|
||||||
closedir(DIR);
|
closedir(DIR);
|
||||||
|
@ -506,11 +470,15 @@ sub walk
|
||||||
my $path = "$pwd/$file";
|
my $path = "$pwd/$file";
|
||||||
next if (-l $path);
|
next if (-l $path);
|
||||||
|
|
||||||
|
next if (skip($path));
|
||||||
|
|
||||||
if (-d $path) {
|
if (-d $path) {
|
||||||
push @dirs, $path;
|
push @dirs, $path;
|
||||||
} else {
|
next;
|
||||||
timed_parse_file($path);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dprint "parsing: $path\n";
|
||||||
|
timed_parse_file($path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue