util/lint: Update checkpatch & files to upstream linux
- Update checkpatch.pl to version 522b837 (checkpatch: warn when formats use %Z and suggest %z) - This update moves the const_struct definitions into an external file. coreboot will want to update this file, but for now I'm just pulling it in directly from the linux tree. - Update spelling.txt used by checkpatch.pl to version 505d308 (scripts/spelling.txt: add "overide" pattern and fix typo instances) - Add better notes where things have been changed for coreboot to make future merges easier. Change-Id: I0ef067874fe7b1d23276a10e63858895d6083f69 Signed-off-by: Martin Roth <martinroth@google.com> Reviewed-on: https://review.coreboot.org/18810 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
parent
96b89ae5eb
commit
edd591d8ca
|
@ -38,14 +38,14 @@ my $show_types = 0;
|
|||
my $list_types = 0;
|
||||
my $fix = 0;
|
||||
my $fix_inplace = 0;
|
||||
my $root;
|
||||
my $root = $P; #coreboot
|
||||
my %debug;
|
||||
my %camelcase = ();
|
||||
my %use_type = ();
|
||||
my @use = ();
|
||||
my %ignore_type = ();
|
||||
my @ignore = ();
|
||||
my @exclude = ();
|
||||
my @exclude = (); #coreboot
|
||||
my $help = 0;
|
||||
my $configuration_file = ".checkpatch.conf";
|
||||
my $max_line_length = 80;
|
||||
|
@ -55,7 +55,9 @@ my $min_conf_desc_length = 4;
|
|||
my $spelling_file = "$D/spelling.txt";
|
||||
my $codespell = 0;
|
||||
my $codespellfile = "/usr/share/codespell/dictionary.txt";
|
||||
my $conststructsfile = "$D/const_structs.checkpatch";
|
||||
my $color = 1;
|
||||
my $allow_c99_comments = 1;
|
||||
|
||||
sub help {
|
||||
my ($exitcode) = @_;
|
||||
|
@ -192,7 +194,7 @@ GetOptions(
|
|||
'subjective!' => \$check,
|
||||
'strict!' => \$check,
|
||||
'ignore=s' => \@ignore,
|
||||
'exclude=s' => \@exclude,
|
||||
'exclude=s' => \@exclude, #coreboot
|
||||
'types=s' => \@use,
|
||||
'show-types!' => \$show_types,
|
||||
'list-types!' => \$list_types,
|
||||
|
@ -230,9 +232,9 @@ if ($^V && $^V lt $minimum_perl_version) {
|
|||
}
|
||||
}
|
||||
|
||||
#if no filenames are given, push '-' to read patch from stdin
|
||||
if ($#ARGV < 0) {
|
||||
print "$P: no input files\n";
|
||||
exit(1);
|
||||
push(@ARGV, '-');
|
||||
}
|
||||
|
||||
sub hash_save_array_words {
|
||||
|
@ -316,7 +318,6 @@ our $Sparse = qr{
|
|||
__kernel|
|
||||
__force|
|
||||
__iomem|
|
||||
__pmem|
|
||||
__must_check|
|
||||
__init_refok|
|
||||
__kprobes|
|
||||
|
@ -337,7 +338,7 @@ our $Attribute = qr{
|
|||
__percpu|
|
||||
__nocast|
|
||||
__safe|
|
||||
__bitwise__|
|
||||
__bitwise|
|
||||
__packed__|
|
||||
__packed2__|
|
||||
__naked|
|
||||
|
@ -426,7 +427,7 @@ our $typeTypedefs = qr{(?x:
|
|||
our $zero_initializer = qr{(?:(?:0[xX])?0+$Int_type?|NULL|false)\b};
|
||||
|
||||
our $logFunctions = qr{(?x:
|
||||
printk(?:_ratelimited|_once|)|
|
||||
printk(?:_ratelimited|_once|_deferred_once|_deferred|)|
|
||||
(?:[a-z0-9]+_){1,2}(?:printk|emerg|alert|crit|err|warning|warn|notice|info|debug|dbg|vdbg|devel|cont|WARN)(?:_ratelimited|_once|)|
|
||||
WARN(?:_RATELIMIT|_ONCE|)|
|
||||
panic|
|
||||
|
@ -526,7 +527,11 @@ our @mode_permission_funcs = (
|
|||
["module_param_array_named", 5],
|
||||
["debugfs_create_(?:file|u8|u16|u32|u64|x8|x16|x32|x64|size_t|atomic_t|bool|blob|regset32|u32_array)", 2],
|
||||
["proc_create(?:_data|)", 2],
|
||||
["(?:CLASS|DEVICE|SENSOR)_ATTR", 2],
|
||||
["(?:CLASS|DEVICE|SENSOR|SENSOR_DEVICE|IIO_DEVICE)_ATTR", 2],
|
||||
["IIO_DEV_ATTR_[A-Z_]+", 1],
|
||||
["SENSOR_(?:DEVICE_|)ATTR_2", 2],
|
||||
["SENSOR_TEMPLATE(?:_2|)", 3],
|
||||
["__ATTR", 2],
|
||||
);
|
||||
|
||||
#Create a search pattern for all these functions to speed up a loop below
|
||||
|
@ -544,6 +549,32 @@ our $mode_perms_world_writable = qr{
|
|||
0[0-7][0-7][2367]
|
||||
}x;
|
||||
|
||||
our %mode_permission_string_types = (
|
||||
"S_IRWXU" => 0700,
|
||||
"S_IRUSR" => 0400,
|
||||
"S_IWUSR" => 0200,
|
||||
"S_IXUSR" => 0100,
|
||||
"S_IRWXG" => 0070,
|
||||
"S_IRGRP" => 0040,
|
||||
"S_IWGRP" => 0020,
|
||||
"S_IXGRP" => 0010,
|
||||
"S_IRWXO" => 0007,
|
||||
"S_IROTH" => 0004,
|
||||
"S_IWOTH" => 0002,
|
||||
"S_IXOTH" => 0001,
|
||||
"S_IRWXUGO" => 0777,
|
||||
"S_IRUGO" => 0444,
|
||||
"S_IWUGO" => 0222,
|
||||
"S_IXUGO" => 0111,
|
||||
);
|
||||
|
||||
#Create a search pattern for all these strings to speed up a loop below
|
||||
our $mode_perms_string_search = "";
|
||||
foreach my $entry (keys %mode_permission_string_types) {
|
||||
$mode_perms_string_search .= '|' if ($mode_perms_string_search ne "");
|
||||
$mode_perms_string_search .= $entry;
|
||||
}
|
||||
|
||||
our $allowed_asm_includes = qr{(?x:
|
||||
irq|
|
||||
memory|
|
||||
|
@ -601,6 +632,29 @@ if ($codespell) {
|
|||
|
||||
$misspellings = join("|", sort keys %spelling_fix) if keys %spelling_fix;
|
||||
|
||||
my $const_structs = "";
|
||||
if (open(my $conststructs, '<', $conststructsfile)) {
|
||||
while (<$conststructs>) {
|
||||
my $line = $_;
|
||||
|
||||
$line =~ s/\s*\n?$//g;
|
||||
$line =~ s/^\s*//g;
|
||||
|
||||
next if ($line =~ m/^\s*#/);
|
||||
next if ($line =~ m/^\s*$/);
|
||||
if ($line =~ /\s/) {
|
||||
print("$conststructsfile: '$line' invalid - ignored\n");
|
||||
next;
|
||||
}
|
||||
|
||||
$const_structs .= '|' if ($const_structs ne "");
|
||||
$const_structs .= $line;
|
||||
}
|
||||
close($conststructsfile);
|
||||
} else {
|
||||
warn "No structs that should be const will be found - file '$conststructsfile': $!\n";
|
||||
}
|
||||
|
||||
sub build_types {
|
||||
my $mods = "(?x: \n" . join("|\n ", (@modifierList, @modifierListFile)) . "\n)";
|
||||
my $all = "(?x: \n" . join("|\n ", (@typeList, @typeListFile)) . "\n)";
|
||||
|
@ -707,6 +761,16 @@ sub seed_camelcase_file {
|
|||
}
|
||||
}
|
||||
|
||||
sub is_maintained_obsolete {
|
||||
my ($filename) = @_;
|
||||
|
||||
return 0 if (!$tree || !(-e "$root/scripts/get_maintainer.pl"));
|
||||
|
||||
my $status = `perl $root/scripts/get_maintainer.pl --status --nom --nol --nogit --nogit-fallback -f $filename 2>&1`;
|
||||
|
||||
return $status =~ /obsolete/i;
|
||||
}
|
||||
|
||||
my $camelcase_seeded = 0;
|
||||
sub seed_camelcase_includes {
|
||||
return if ($camelcase_seeded);
|
||||
|
@ -1148,6 +1212,11 @@ sub sanitise_line {
|
|||
$res =~ s@(\#\s*(?:error|warning)\s+).*@$1$clean@;
|
||||
}
|
||||
|
||||
if ($allow_c99_comments && $res =~ m@(//.*$)@) {
|
||||
my $match = $1;
|
||||
$res =~ s/\Q$match\E/"$;" x length($match)/e;
|
||||
}
|
||||
|
||||
return $res;
|
||||
}
|
||||
|
||||
|
@ -1788,6 +1857,8 @@ my $prefix = '';
|
|||
sub show_type {
|
||||
my ($type) = @_;
|
||||
|
||||
$type =~ tr/[a-z]/[A-Z]/;
|
||||
|
||||
return defined $use_type{$type} if (scalar keys %use_type > 0);
|
||||
|
||||
return !defined $ignore_type{$type};
|
||||
|
@ -2073,7 +2144,8 @@ sub process {
|
|||
my $is_patch = 0;
|
||||
my $in_header_lines = $file ? 0 : 1;
|
||||
my $in_commit_log = 0; #Scanning lines before patch
|
||||
my $commit_log_possible_stack_dump = 0;
|
||||
my $has_commit_log = 0; #Encountered lines before patch
|
||||
my $commit_log_possible_stack_dump = 0;
|
||||
my $commit_log_long_line = 0;
|
||||
my $commit_log_has_diff = 0;
|
||||
my $reported_maintainer_file = 0;
|
||||
|
@ -2093,6 +2165,7 @@ sub process {
|
|||
my $realline = 0;
|
||||
my $realcnt = 0;
|
||||
my $here = '';
|
||||
my $context_function; #undef'd unless there's a known function
|
||||
my $in_comment = 0;
|
||||
my $comment_edge = 0;
|
||||
my $first_line = 0;
|
||||
|
@ -2126,12 +2199,13 @@ sub process {
|
|||
|
||||
if ($rawline=~/^\+\+\+\s+(\S+)/) {
|
||||
$setup_docs = 0;
|
||||
if ($1 =~ m@Documentation/kernel-parameters.txt$@) {
|
||||
if ($1 =~ m@Documentation/admin-guide/kernel-parameters.rst$@) {
|
||||
$setup_docs = 1;
|
||||
}
|
||||
#next;
|
||||
}
|
||||
if ($rawline=~/^\@\@ -\d+(?:,\d+)? \+(\d+)(,(\d+))? \@\@/) {
|
||||
if ($rawline=~/^\@\@ -\d+(?:,\d+)? \+(\d+)(,(\d+))? \@\@(.*)/) {
|
||||
my $context = $4;
|
||||
$realline=$1-1;
|
||||
if (defined $2) {
|
||||
$realcnt=$3+1;
|
||||
|
@ -2140,6 +2214,12 @@ sub process {
|
|||
}
|
||||
$in_comment = 0;
|
||||
|
||||
if ($context =~ /\b(\w+)\s*\(/) {
|
||||
$context_function = $1;
|
||||
} else {
|
||||
undef $context_function;
|
||||
}
|
||||
|
||||
# Guestimate if this is a continuing comment. Run
|
||||
# the context looking for a comment "edge". If this
|
||||
# edge is a close comment then we must be in a comment
|
||||
|
@ -2280,6 +2360,7 @@ sub process {
|
|||
$found_file = 1;
|
||||
}
|
||||
|
||||
# coreboot
|
||||
my $skipme = 0;
|
||||
foreach (@exclude) {
|
||||
if ($realfile =~ m@^(?:$_/)@) {
|
||||
|
@ -2302,6 +2383,10 @@ sub process {
|
|||
}
|
||||
|
||||
if ($found_file) {
|
||||
if (is_maintained_obsolete($realfile)) {
|
||||
WARN("OBSOLETE",
|
||||
"$realfile is marked as 'obsolete' in the MAINTAINERS hierarchy. No unnecessary modifications please.\n");
|
||||
}
|
||||
if ($realfile =~ m@^(?:drivers/net/|net/|drivers/staging/)@) {
|
||||
$check = 1;
|
||||
} else {
|
||||
|
@ -2473,8 +2558,9 @@ sub process {
|
|||
|
||||
# Check for git id commit length and improperly formed commit descriptions
|
||||
if ($in_commit_log && !$commit_log_possible_stack_dump &&
|
||||
$line !~ /^\s*(?:Link|Patchwork|http|https|BugLink):/i &&
|
||||
($line =~ /\bcommit\s+[0-9a-f]{5,}\b/i ||
|
||||
($line =~ /\b[0-9a-f]{12,40}\b/i &&
|
||||
($line =~ /(?:\s|^)[0-9a-f]{12,40}(?:[\s"'\(\[]|$)/i &&
|
||||
$line !~ /[\<\[][0-9a-f]{12,40}[\>\]]/i &&
|
||||
$line !~ /\bfixes:\s*[0-9a-f]{12,40}/i))) {
|
||||
my $init_char = "c";
|
||||
|
@ -2533,6 +2619,7 @@ sub process {
|
|||
$line =~ /^rename (?:from|to) [\w\/\.\-]+\s*$/ ||
|
||||
($line =~ /\{\s*([\w\/\.\-]*)\s*\=\>\s*([\w\/\.\-]*)\s*\}/ &&
|
||||
(defined($1) || defined($2))))) {
|
||||
$is_patch = 1;
|
||||
$reported_maintainer_file = 1;
|
||||
WARN("FILE_PATH_CHANGES",
|
||||
"added, moved or deleted file(s), does MAINTAINERS need updating?\n" . $herecurr);
|
||||
|
@ -2545,20 +2632,6 @@ sub process {
|
|||
$herecurr) if (!$emitted_corrupt++);
|
||||
}
|
||||
|
||||
# Check for absolute kernel paths.
|
||||
if ($tree) {
|
||||
while ($line =~ m{(?:^|\s)(/\S*)}g) {
|
||||
my $file = $1;
|
||||
|
||||
if ($file =~ m{^(.*?)(?::\d+)+:?$} &&
|
||||
check_absolute_file($1, $herecurr)) {
|
||||
#
|
||||
} else {
|
||||
check_absolute_file($file, $herecurr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# UTF-8 regex found at http://www.w3.org/International/questions/qa-forms-utf-8.en.php
|
||||
if (($realfile =~ /^$/ || $line =~ /^\+/) &&
|
||||
$rawline !~ m/^$UTF8*$/) {
|
||||
|
@ -2579,6 +2652,7 @@ sub process {
|
|||
$rawline =~ /^(commit\b|from\b|[\w-]+:).*$/i)) {
|
||||
$in_header_lines = 0;
|
||||
$in_commit_log = 1;
|
||||
$has_commit_log = 1;
|
||||
}
|
||||
|
||||
# Check if there is UTF-8 in a commit log when a mail header has explicitly
|
||||
|
@ -2595,6 +2669,20 @@ sub process {
|
|||
"8-bit UTF-8 used in possible commit log\n" . $herecurr);
|
||||
}
|
||||
|
||||
# Check for absolute kernel paths in commit message
|
||||
if ($tree && $in_commit_log) {
|
||||
while ($line =~ m{(?:^|\s)(/\S*)}g) {
|
||||
my $file = $1;
|
||||
|
||||
if ($file =~ m{^(.*?)(?::\d+)+:?$} &&
|
||||
check_absolute_file($1, $herecurr)) {
|
||||
#
|
||||
} else {
|
||||
check_absolute_file($file, $herecurr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Check for various typo / spelling mistakes
|
||||
if (defined($misspellings) &&
|
||||
($in_commit_log || $line =~ /^(?:\+|Subject:)/i)) {
|
||||
|
@ -2637,6 +2725,7 @@ sub process {
|
|||
|
||||
# Check for FSF mailing addresses.
|
||||
if ($rawline =~ /\bwrite to the Free/i ||
|
||||
$rawline =~ /\b675\s+Mass\s+Ave/i ||
|
||||
$rawline =~ /\b59\s+Temple\s+Pl/i ||
|
||||
$rawline =~ /\b51\s+Franklin\s+St/i) {
|
||||
my $herevet = "$here\n" . cat_vet($rawline) . "\n";
|
||||
|
@ -2748,7 +2837,7 @@ sub process {
|
|||
}
|
||||
|
||||
# check we are in a valid source file if not then ignore this hunk
|
||||
next if ($realfile !~ /\.(h|c|s|S|pl|sh|dtsi|dts)$/);
|
||||
next if ($realfile !~ /\.(h|c|s|S|sh|dtsi|dts)$/);
|
||||
|
||||
# line length limit (with some exclusions)
|
||||
#
|
||||
|
@ -2782,6 +2871,10 @@ sub process {
|
|||
$line =~ /^\+\s*#\s*define\s+\w+\s+$String$/) {
|
||||
$msg_type = "";
|
||||
|
||||
# EFI_GUID is another special case
|
||||
} elsif ($line =~ /^\+.*\bEFI_GUID\s*\(/) {
|
||||
$msg_type = "";
|
||||
|
||||
# Otherwise set the alternate message types
|
||||
|
||||
# a comment starts before $max_line_length
|
||||
|
@ -2946,6 +3039,30 @@ sub process {
|
|||
"Block comments use a trailing */ on a separate line\n" . $herecurr);
|
||||
}
|
||||
|
||||
# Block comment * alignment
|
||||
if ($prevline =~ /$;[ \t]*$/ && #ends in comment
|
||||
$line =~ /^\+[ \t]*$;/ && #leading comment
|
||||
$rawline =~ /^\+[ \t]*\*/ && #leading *
|
||||
(($prevrawline =~ /^\+.*?\/\*/ && #leading /*
|
||||
$prevrawline !~ /\*\/[ \t]*$/) || #no trailing */
|
||||
$prevrawline =~ /^\+[ \t]*\*/)) { #leading *
|
||||
my $oldindent;
|
||||
$prevrawline =~ m@^\+([ \t]*/?)\*@;
|
||||
if (defined($1)) {
|
||||
$oldindent = expand_tabs($1);
|
||||
} else {
|
||||
$prevrawline =~ m@^\+(.*/?)\*@;
|
||||
$oldindent = expand_tabs($1);
|
||||
}
|
||||
$rawline =~ m@^\+([ \t]*)\*@;
|
||||
my $newindent = $1;
|
||||
$newindent = expand_tabs($newindent);
|
||||
if (length($oldindent) ne length($newindent)) {
|
||||
WARN("BLOCK_COMMENT_STYLE",
|
||||
"Block comments should align the * on each line\n" . $hereprev);
|
||||
}
|
||||
}
|
||||
|
||||
# check for missing blank lines after struct/union declarations
|
||||
# with exceptions for various attributes and macros
|
||||
if ($prevline =~ /^[\+ ]};?\s*$/ &&
|
||||
|
@ -3355,8 +3472,20 @@ sub process {
|
|||
#ignore lines not being added
|
||||
next if ($line =~ /^[^\+]/);
|
||||
|
||||
# check for dereferences that span multiple lines
|
||||
if ($prevline =~ /^\+.*$Lval\s*(?:\.|->)\s*$/ &&
|
||||
$line =~ /^\+\s*(?!\#\s*(?!define\s+|if))\s*$Lval/) {
|
||||
$prevline =~ /($Lval\s*(?:\.|->))\s*$/;
|
||||
my $ref = $1;
|
||||
$line =~ /^.\s*($Lval)/;
|
||||
$ref .= $1;
|
||||
$ref =~ s/\s//g;
|
||||
WARN("MULTILINE_DEREFERENCE",
|
||||
"Avoid multiple line dereference - prefer '$ref'\n" . $hereprev);
|
||||
}
|
||||
|
||||
# check for declarations of signed or unsigned without int
|
||||
while ($line =~ m{($Declare)\s*(?!char\b|short\b|int\b|long\b)\s*($Ident)?\s*[=,;\[\)\(]}g) {
|
||||
while ($line =~ m{\b($Declare)\s*(?!char\b|short\b|int\b|long\b)\s*($Ident)?\s*[=,;\[\)\(]}g) {
|
||||
my $type = $1;
|
||||
my $var = $2;
|
||||
$var = "" if (!defined $var);
|
||||
|
@ -3577,22 +3706,13 @@ sub process {
|
|||
}
|
||||
}
|
||||
|
||||
# check for uses of DEFINE_PCI_DEVICE_TABLE
|
||||
if ($line =~ /\bDEFINE_PCI_DEVICE_TABLE\s*\(\s*(\w+)\s*\)\s*=/) {
|
||||
if (WARN("DEFINE_PCI_DEVICE_TABLE",
|
||||
"Prefer struct pci_device_id over deprecated DEFINE_PCI_DEVICE_TABLE\n" . $herecurr) &&
|
||||
$fix) {
|
||||
$fixed[$fixlinenr] =~ s/\b(?:static\s+|)DEFINE_PCI_DEVICE_TABLE\s*\(\s*(\w+)\s*\)\s*=\s*/static const struct pci_device_id $1\[\] = /;
|
||||
}
|
||||
}
|
||||
|
||||
# check for new typedefs, only function parameters and sparse annotations
|
||||
# make sense.
|
||||
if ($line =~ /\btypedef\s/ &&
|
||||
$line !~ /\btypedef\s+$Type\s*\(\s*\*?$Ident\s*\)\s*\(/ &&
|
||||
$line !~ /\btypedef\s+$Type\s+$Ident\s*\(/ &&
|
||||
$line !~ /\b$typeTypedefs\b/ &&
|
||||
$line !~ /\b__bitwise(?:__|)\b/) {
|
||||
$line !~ /\b__bitwise\b/) {
|
||||
WARN("NEW_TYPEDEFS",
|
||||
"do not add new typedefs\n" . $herecurr);
|
||||
}
|
||||
|
@ -3736,6 +3856,7 @@ sub process {
|
|||
# function brace can't be on same line, except for #defines of do while,
|
||||
# or if closed on same line
|
||||
if (($line=~/$Type\s*$Ident\(.*\).*\s*{/) and
|
||||
#coreboot - Ignore struct lines with attributes - they're not functions
|
||||
($line!~/struct.*__attribute__\(\(.*\)\)/) and
|
||||
!($line=~/\#\s*define.*do\s\{/) and !($line=~/}/)) {
|
||||
if (ERROR("OPEN_BRACE",
|
||||
|
@ -3856,12 +3977,12 @@ sub process {
|
|||
# 1. with a type on the left -- int [] a;
|
||||
# 2. at the beginning of a line for slice initialisers -- [0...10] = 5,
|
||||
# 3. inside a curly brace -- = { [0...10] = 5 }
|
||||
# 4. in an extended asm instruction -- : [r0]"r"(r0)
|
||||
# 4. in an extended asm instruction -- : [r0]"r"(r0) (coreboot)
|
||||
while ($line =~ /(.*?\s)\[/g) {
|
||||
my ($where, $prefix) = ($-[1], $1);
|
||||
if ($prefix !~ /$Type\s+$/ &&
|
||||
($where != 0 || $prefix !~ /^.\s+$/) &&
|
||||
$prefix !~ /[{,:]\s+$/) {
|
||||
$prefix !~ /[{,:]\s+$/) { #coreboot
|
||||
if (ERROR("BRACKET_SPACE",
|
||||
"space prohibited before open square bracket '['\n" . $herecurr) &&
|
||||
$fix) {
|
||||
|
@ -4683,7 +4804,17 @@ sub process {
|
|||
$has_flow_statement = 1 if ($ctx =~ /\b(goto|return)\b/);
|
||||
$has_arg_concat = 1 if ($ctx =~ /\#\#/ && $ctx !~ /\#\#\s*(?:__VA_ARGS__|args)\b/);
|
||||
|
||||
$dstat =~ s/^.\s*\#\s*define\s+$Ident(?:\([^\)]*\))?\s*//;
|
||||
$dstat =~ s/^.\s*\#\s*define\s+$Ident(\([^\)]*\))?\s*//;
|
||||
my $define_args = $1;
|
||||
my $define_stmt = $dstat;
|
||||
my @def_args = ();
|
||||
|
||||
if (defined $define_args && $define_args ne "") {
|
||||
$define_args = substr($define_args, 1, length($define_args) - 2);
|
||||
$define_args =~ s/\s*//g;
|
||||
@def_args = split(",", $define_args);
|
||||
}
|
||||
|
||||
$dstat =~ s/$;//g;
|
||||
$dstat =~ s/\\\n.//g;
|
||||
$dstat =~ s/^\s*//s;
|
||||
|
@ -4719,6 +4850,15 @@ sub process {
|
|||
^\[
|
||||
}x;
|
||||
#print "REST<$rest> dstat<$dstat> ctx<$ctx>\n";
|
||||
|
||||
$ctx =~ s/\n*$//;
|
||||
my $herectx = $here . "\n";
|
||||
my $stmt_cnt = statement_rawlines($ctx);
|
||||
|
||||
for (my $n = 0; $n < $stmt_cnt; $n++) {
|
||||
$herectx .= raw_line($linenr, $n) . "\n";
|
||||
}
|
||||
|
||||
if ($dstat ne '' &&
|
||||
$dstat !~ /^(?:$Ident|-?$Constant),$/ && # 10, // foo(),
|
||||
$dstat !~ /^(?:$Ident|-?$Constant);$/ && # foo();
|
||||
|
@ -4730,17 +4870,10 @@ sub process {
|
|||
$dstat !~ /^do\s*$Constant\s*while\s*$Constant;?$/ && # do {...} while (...); // do {...} while (...)
|
||||
$dstat !~ /^for\s*$Constant$/ && # for (...)
|
||||
$dstat !~ /^for\s*$Constant\s+(?:$Ident|-?$Constant)$/ && # for (...) bar()
|
||||
$dstat !~ /^do\s*\{/ && # do {...
|
||||
$dstat !~ /^do\s*{/ && # do {...
|
||||
$dstat !~ /^\(\{/ && # ({...
|
||||
$ctx !~ /^.\s*#\s*define\s+TRACE_(?:SYSTEM|INCLUDE_FILE|INCLUDE_PATH)\b/)
|
||||
{
|
||||
$ctx =~ s/\n*$//;
|
||||
my $herectx = $here . "\n";
|
||||
my $cnt = statement_rawlines($ctx);
|
||||
|
||||
for (my $n = 0; $n < $cnt; $n++) {
|
||||
$herectx .= raw_line($linenr, $n) . "\n";
|
||||
}
|
||||
|
||||
if ($dstat =~ /;/) {
|
||||
ERROR("MULTISTATEMENT_MACRO_USE_DO_WHILE",
|
||||
|
@ -4749,6 +4882,46 @@ sub process {
|
|||
ERROR("COMPLEX_MACRO",
|
||||
"Macros with complex values should be enclosed in parentheses\n" . "$herectx");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
# Make $define_stmt single line, comment-free, etc
|
||||
my @stmt_array = split('\n', $define_stmt);
|
||||
my $first = 1;
|
||||
$define_stmt = "";
|
||||
foreach my $l (@stmt_array) {
|
||||
$l =~ s/\\$//;
|
||||
if ($first) {
|
||||
$define_stmt = $l;
|
||||
$first = 0;
|
||||
} elsif ($l =~ /^[\+ ]/) {
|
||||
$define_stmt .= substr($l, 1);
|
||||
}
|
||||
}
|
||||
$define_stmt =~ s/$;//g;
|
||||
$define_stmt =~ s/\s+/ /g;
|
||||
$define_stmt = trim($define_stmt);
|
||||
|
||||
# check if any macro arguments are reused (ignore '...' and 'type')
|
||||
foreach my $arg (@def_args) {
|
||||
next if ($arg =~ /\.\.\./);
|
||||
next if ($arg =~ /^type$/i);
|
||||
my $tmp = $define_stmt;
|
||||
$tmp =~ s/\b(typeof|__typeof__|__builtin\w+|typecheck\s*\(\s*$Type\s*,|\#+)\s*\(*\s*$arg\s*\)*\b//g;
|
||||
$tmp =~ s/\#+\s*$arg\b//g;
|
||||
$tmp =~ s/\b$arg\s*\#\#//g;
|
||||
my $use_cnt = $tmp =~ s/\b$arg\b//g;
|
||||
if ($use_cnt > 1) {
|
||||
CHK("MACRO_ARG_REUSE",
|
||||
"Macro argument reuse '$arg' - possible side-effects?\n" . "$herectx");
|
||||
}
|
||||
# check if any macro arguments may have other precedence issues
|
||||
if ($define_stmt =~ m/($Operators)?\s*\b$arg\b\s*($Operators)?/m &&
|
||||
((defined($1) && $1 ne ',') ||
|
||||
(defined($2) && $2 ne ','))) {
|
||||
CHK("MACRO_ARG_PRECEDENCE",
|
||||
"Macro argument '$arg' may be better as '($arg)' to avoid precedence issues\n" . "$herectx");
|
||||
}
|
||||
}
|
||||
|
||||
# check for macros with flow control, but without ## concatenation
|
||||
|
@ -4956,6 +5129,12 @@ sub process {
|
|||
}
|
||||
}
|
||||
|
||||
# check for single line unbalanced braces
|
||||
if ($sline =~ /^.\s*\}\s*else\s*$/ ||
|
||||
$sline =~ /^.\s*else\s*\{\s*$/) {
|
||||
CHK("BRACES", "Unbalanced braces around else statement\n" . $herecurr);
|
||||
}
|
||||
|
||||
# check for unnecessary blank lines around braces
|
||||
if (($line =~ /^.\s*}\s*$/ && $prevrawline =~ /^.\s*$/)) {
|
||||
if (CHK("BRACES",
|
||||
|
@ -4976,7 +5155,7 @@ sub process {
|
|||
my $asm_volatile = qr{\b(__asm__|asm)\s+(__volatile__|volatile)\b};
|
||||
if ($line =~ /\bvolatile\b/ && $line !~ /$asm_volatile/) {
|
||||
WARN("VOLATILE",
|
||||
"Use of volatile is usually wrong: see Documentation/volatile-considered-harmful.txt\n" . $herecurr);
|
||||
"Use of volatile is usually wrong: see Documentation/process/volatile-considered-harmful.rst\n" . $herecurr);
|
||||
}
|
||||
|
||||
# Check for user-visible strings broken across lines, which breaks the ability
|
||||
|
@ -5018,6 +5197,16 @@ sub process {
|
|||
"break quoted strings at a space character\n" . $hereprev);
|
||||
}
|
||||
|
||||
#check for an embedded function name in a string when the function is known
|
||||
# as part of a diff. This does not work for -f --file checking as it
|
||||
#depends on patch context providing the function name
|
||||
if ($line =~ /^\+.*$String/ &&
|
||||
defined($context_function) &&
|
||||
get_quoted_string($line, $rawline) =~ /\b$context_function\b/) {
|
||||
WARN("EMBEDDED_FUNCTION_NAME",
|
||||
"Prefer using \"%s\", __func__ to embedded function names\n" . $herecurr);
|
||||
}
|
||||
|
||||
# check for spaces before a quoted newline
|
||||
if ($rawline =~ /^.*\".*\s\\n/) {
|
||||
if (WARN("QUOTED_WHITESPACE_BEFORE_NEWLINE",
|
||||
|
@ -5040,18 +5229,27 @@ sub process {
|
|||
"Consecutive strings are generally better as a single string\n" . $herecurr);
|
||||
}
|
||||
|
||||
# check for %L{u,d,i} and 0x%[udi] in strings
|
||||
my $string;
|
||||
# check for non-standard and hex prefixed decimal printf formats
|
||||
my $show_L = 1; #don't show the same defect twice
|
||||
my $show_Z = 1;
|
||||
while ($line =~ /(?:^|")([X\t]*)(?:"|$)/g) {
|
||||
$string = substr($rawline, $-[1], $+[1] - $-[1]);
|
||||
my $string = substr($rawline, $-[1], $+[1] - $-[1]);
|
||||
$string =~ s/%%/__/g;
|
||||
if ($string =~ /(?<!%)%[\*\d\.\$]*L[udi]/) {
|
||||
# check for %L
|
||||
if ($show_L && $string =~ /%[\*\d\.\$]*L([diouxX])/) {
|
||||
WARN("PRINTF_L",
|
||||
"\%Ld/%Lu are not-standard C, use %lld/%llu\n" . $herecurr);
|
||||
last;
|
||||
"\%L$1 is non-standard C, use %ll$1\n" . $herecurr);
|
||||
$show_L = 0;
|
||||
}
|
||||
if ($string =~ /0x%[\*\d\.\$\Llzth]*[udi]/) {
|
||||
ERROR("PRINTF_0xDECIMAL",
|
||||
# check for %Z
|
||||
if ($show_Z && $string =~ /%[\*\d\.\$]*Z([diouxX])/) {
|
||||
WARN("PRINTF_Z",
|
||||
"%Z$1 is non-standard C, use %z$1\n" . $herecurr);
|
||||
$show_Z = 0;
|
||||
}
|
||||
# check for 0x<decimal>
|
||||
if ($string =~ /0x%[\*\d\.\$\Llzth]*[diou]/) {
|
||||
ERROR("PRINTF_0XDECIMAL",
|
||||
"Prefixing 0x with decimal output is defective\n" . $herecurr);
|
||||
}
|
||||
}
|
||||
|
@ -5130,6 +5328,12 @@ sub process {
|
|||
}
|
||||
}
|
||||
|
||||
# check for logging continuations
|
||||
if ($line =~ /\bprintk\s*\(\s*KERN_CONT\b|\bpr_cont\s*\(/) {
|
||||
WARN("LOGGING_CONTINUATION",
|
||||
"Avoid logging continuation uses where feasible\n" . $herecurr);
|
||||
}
|
||||
|
||||
# check for mask then right shift without a parentheses
|
||||
if ($^V && $^V ge 5.10.0 &&
|
||||
$line =~ /$LvalOrFunc\s*\&\s*($LvalOrFunc)\s*>>/ &&
|
||||
|
@ -5423,8 +5627,9 @@ sub process {
|
|||
"Using weak declarations can have unintended link defects\n" . $herecurr);
|
||||
}
|
||||
|
||||
# check for c99 types like uint8_t used outside of uapi/
|
||||
# check for c99 types like uint8_t used outside of uapi/ and tools/
|
||||
if ($realfile !~ m@\binclude/uapi/@ &&
|
||||
$realfile !~ m@\btools/@ &&
|
||||
$line =~ /\b($Declare)\s*$Ident\s*[=;,\[]/) {
|
||||
my $type = $1;
|
||||
if ($type =~ /\b($typeC99Typedefs)\b/) {
|
||||
|
@ -5514,46 +5719,46 @@ sub process {
|
|||
}
|
||||
|
||||
# Check for memcpy(foo, bar, ETH_ALEN) that could be ether_addr_copy(foo, bar)
|
||||
if ($^V && $^V ge 5.10.0 &&
|
||||
defined $stat &&
|
||||
$stat =~ /^\+(?:.*?)\bmemcpy\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*\,\s*ETH_ALEN\s*\)/) {
|
||||
if (WARN("PREFER_ETHER_ADDR_COPY",
|
||||
"Prefer ether_addr_copy() over memcpy() if the Ethernet addresses are __aligned(2)\n" . "$here\n$stat\n") &&
|
||||
$fix) {
|
||||
$fixed[$fixlinenr] =~ s/\bmemcpy\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*\,\s*ETH_ALEN\s*\)/ether_addr_copy($2, $7)/;
|
||||
}
|
||||
}
|
||||
# if ($^V && $^V ge 5.10.0 &&
|
||||
# defined $stat &&
|
||||
# $stat =~ /^\+(?:.*?)\bmemcpy\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*\,\s*ETH_ALEN\s*\)/) {
|
||||
# if (WARN("PREFER_ETHER_ADDR_COPY",
|
||||
# "Prefer ether_addr_copy() over memcpy() if the Ethernet addresses are __aligned(2)\n" . "$here\n$stat\n") &&
|
||||
# $fix) {
|
||||
# $fixed[$fixlinenr] =~ s/\bmemcpy\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*\,\s*ETH_ALEN\s*\)/ether_addr_copy($2, $7)/;
|
||||
# }
|
||||
# }
|
||||
|
||||
# Check for memcmp(foo, bar, ETH_ALEN) that could be ether_addr_equal*(foo, bar)
|
||||
if ($^V && $^V ge 5.10.0 &&
|
||||
defined $stat &&
|
||||
$stat =~ /^\+(?:.*?)\bmemcmp\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*\,\s*ETH_ALEN\s*\)/) {
|
||||
WARN("PREFER_ETHER_ADDR_EQUAL",
|
||||
"Prefer ether_addr_equal() or ether_addr_equal_unaligned() over memcmp()\n" . "$here\n$stat\n")
|
||||
}
|
||||
# if ($^V && $^V ge 5.10.0 &&
|
||||
# defined $stat &&
|
||||
# $stat =~ /^\+(?:.*?)\bmemcmp\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*\,\s*ETH_ALEN\s*\)/) {
|
||||
# WARN("PREFER_ETHER_ADDR_EQUAL",
|
||||
# "Prefer ether_addr_equal() or ether_addr_equal_unaligned() over memcmp()\n" . "$here\n$stat\n")
|
||||
# }
|
||||
|
||||
# check for memset(foo, 0x0, ETH_ALEN) that could be eth_zero_addr
|
||||
# check for memset(foo, 0xFF, ETH_ALEN) that could be eth_broadcast_addr
|
||||
if ($^V && $^V ge 5.10.0 &&
|
||||
defined $stat &&
|
||||
$stat =~ /^\+(?:.*?)\bmemset\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*\,\s*ETH_ALEN\s*\)/) {
|
||||
|
||||
my $ms_val = $7;
|
||||
|
||||
if ($ms_val =~ /^(?:0x|)0+$/i) {
|
||||
if (WARN("PREFER_ETH_ZERO_ADDR",
|
||||
"Prefer eth_zero_addr over memset()\n" . "$here\n$stat\n") &&
|
||||
$fix) {
|
||||
$fixed[$fixlinenr] =~ s/\bmemset\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*,\s*ETH_ALEN\s*\)/eth_zero_addr($2)/;
|
||||
}
|
||||
} elsif ($ms_val =~ /^(?:0xff|255)$/i) {
|
||||
if (WARN("PREFER_ETH_BROADCAST_ADDR",
|
||||
"Prefer eth_broadcast_addr() over memset()\n" . "$here\n$stat\n") &&
|
||||
$fix) {
|
||||
$fixed[$fixlinenr] =~ s/\bmemset\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*,\s*ETH_ALEN\s*\)/eth_broadcast_addr($2)/;
|
||||
}
|
||||
}
|
||||
}
|
||||
# if ($^V && $^V ge 5.10.0 &&
|
||||
# defined $stat &&
|
||||
# $stat =~ /^\+(?:.*?)\bmemset\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*\,\s*ETH_ALEN\s*\)/) {
|
||||
#
|
||||
# my $ms_val = $7;
|
||||
#
|
||||
# if ($ms_val =~ /^(?:0x|)0+$/i) {
|
||||
# if (WARN("PREFER_ETH_ZERO_ADDR",
|
||||
# "Prefer eth_zero_addr over memset()\n" . "$here\n$stat\n") &&
|
||||
# $fix) {
|
||||
# $fixed[$fixlinenr] =~ s/\bmemset\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*,\s*ETH_ALEN\s*\)/eth_zero_addr($2)/;
|
||||
# }
|
||||
# } elsif ($ms_val =~ /^(?:0xff|255)$/i) {
|
||||
# if (WARN("PREFER_ETH_BROADCAST_ADDR",
|
||||
# "Prefer eth_broadcast_addr() over memset()\n" . "$here\n$stat\n") &&
|
||||
# $fix) {
|
||||
# $fixed[$fixlinenr] =~ s/\bmemset\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*,\s*ETH_ALEN\s*\)/eth_broadcast_addr($2)/;
|
||||
# }
|
||||
# }
|
||||
# }
|
||||
|
||||
# typecasts on min/max could be min_t/max_t
|
||||
if ($^V && $^V ge 5.10.0 &&
|
||||
|
@ -5673,13 +5878,26 @@ sub process {
|
|||
"externs should be avoided in .c files\n" . $herecurr);
|
||||
}
|
||||
|
||||
if ($realfile =~ /\.[ch]$/ && defined $stat &&
|
||||
$stat =~ /^.\s*(?:extern\s+)?$Type\s*$Ident\s*\(\s*([^{]+)\s*\)\s*;/s &&
|
||||
$1 ne "void") {
|
||||
my $args = trim($1);
|
||||
while ($args =~ m/\s*($Type\s*(?:$Ident|\(\s*\*\s*$Ident?\s*\)\s*$balanced_parens)?)/g) {
|
||||
my $arg = trim($1);
|
||||
if ($arg =~ /^$Type$/ && $arg !~ /enum\s+$Ident$/) {
|
||||
WARN("FUNCTION_ARGUMENTS",
|
||||
"function definition argument '$arg' should also have an identifier name\n" . $herecurr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# checks for new __setup's
|
||||
if ($rawline =~ /\b__setup\("([^"]*)"/) {
|
||||
my $name = $1;
|
||||
|
||||
if (!grep(/$name/, @setup_docs)) {
|
||||
CHK("UNDOCUMENTED_SETUP",
|
||||
"__setup appears un-documented -- check Documentation/kernel-parameters.txt\n" . $herecurr);
|
||||
"__setup appears un-documented -- check Documentation/admin-guide/kernel-parameters.rst\n" . $herecurr);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5744,8 +5962,9 @@ sub process {
|
|||
}
|
||||
}
|
||||
|
||||
# check for #defines like: 1 << <digit> that could be BIT(digit)
|
||||
if ($line =~ /#\s*define\s+\w+\s+\(?\s*1\s*([ulUL]*)\s*\<\<\s*(?:\d+|$Ident)\s*\)?/) {
|
||||
# check for #defines like: 1 << <digit> that could be BIT(digit), it is not exported to uapi
|
||||
if ($realfile !~ m@^include/uapi/@ &&
|
||||
$line =~ /#\s*define\s+\w+\s+\(?\s*1\s*([ulUL]*)\s*\<\<\s*(?:\d+|$Ident)\s*\)?/) {
|
||||
my $ull = "";
|
||||
$ull = "_ULL" if (defined($1) && $1 =~ /ll/i);
|
||||
if (CHK("BIT_MACRO",
|
||||
|
@ -5786,7 +6005,7 @@ sub process {
|
|||
}
|
||||
if (!$has_break && $has_statement) {
|
||||
WARN("MISSING_BREAK",
|
||||
"Possible switch case/default not preceeded by break or fallthrough comment\n" . $herecurr);
|
||||
"Possible switch case/default not preceded by break or fallthrough comment\n" . $herecurr);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5871,46 +6090,6 @@ sub process {
|
|||
}
|
||||
|
||||
# check for various structs that are normally const (ops, kgdb, device_tree)
|
||||
my $const_structs = qr{
|
||||
acpi_dock_ops|
|
||||
address_space_operations|
|
||||
backlight_ops|
|
||||
block_device_operations|
|
||||
dentry_operations|
|
||||
dev_pm_ops|
|
||||
dma_map_ops|
|
||||
extent_io_ops|
|
||||
file_lock_operations|
|
||||
file_operations|
|
||||
hv_ops|
|
||||
ide_dma_ops|
|
||||
intel_dvo_dev_ops|
|
||||
item_operations|
|
||||
iwl_ops|
|
||||
kgdb_arch|
|
||||
kgdb_io|
|
||||
kset_uevent_ops|
|
||||
lock_manager_operations|
|
||||
microcode_ops|
|
||||
mtrr_ops|
|
||||
neigh_ops|
|
||||
nlmsvc_binding|
|
||||
of_device_id|
|
||||
pci_raw_ops|
|
||||
pipe_buf_operations|
|
||||
platform_hibernation_ops|
|
||||
platform_suspend_ops|
|
||||
proto_ops|
|
||||
rpc_pipe_ops|
|
||||
seq_operations|
|
||||
snd_ac97_build_ops|
|
||||
soc_pcmcia_socket_ops|
|
||||
stacktrace_ops|
|
||||
sysfs_ops|
|
||||
tty_operations|
|
||||
uart_ops|
|
||||
usb_mon_operations|
|
||||
wd_ops}x;
|
||||
if ($line !~ /\bconst\b/ &&
|
||||
$line =~ /\bstruct\s+($const_structs)\b/) {
|
||||
WARN("CONST_STRUCT",
|
||||
|
@ -5977,6 +6156,12 @@ sub process {
|
|||
}
|
||||
}
|
||||
|
||||
# check for mutex_trylock_recursive usage
|
||||
if ($line =~ /mutex_trylock_recursive/) {
|
||||
ERROR("LOCKING",
|
||||
"recursive locking is bad, do not use this ever.\n" . $herecurr);
|
||||
}
|
||||
|
||||
# check for lockdep_set_novalidate_class
|
||||
if ($line =~ /^.\s*lockdep_set_novalidate_class\s*\(/ ||
|
||||
$line =~ /__lockdep_no_validate__\s*\)/ ) {
|
||||
|
@ -5997,34 +6182,69 @@ sub process {
|
|||
# Mode permission misuses where it seems decimal should be octal
|
||||
# This uses a shortcut match to avoid unnecessary uses of a slow foreach loop
|
||||
if ($^V && $^V ge 5.10.0 &&
|
||||
defined $stat &&
|
||||
$line =~ /$mode_perms_search/) {
|
||||
foreach my $entry (@mode_permission_funcs) {
|
||||
my $func = $entry->[0];
|
||||
my $arg_pos = $entry->[1];
|
||||
|
||||
my $lc = $stat =~ tr@\n@@;
|
||||
$lc = $lc + $linenr;
|
||||
my $stat_real = raw_line($linenr, 0);
|
||||
for (my $count = $linenr + 1; $count <= $lc; $count++) {
|
||||
$stat_real = $stat_real . "\n" . raw_line($count, 0);
|
||||
}
|
||||
|
||||
my $skip_args = "";
|
||||
if ($arg_pos > 1) {
|
||||
$arg_pos--;
|
||||
$skip_args = "(?:\\s*$FuncArg\\s*,\\s*){$arg_pos,$arg_pos}";
|
||||
}
|
||||
my $test = "\\b$func\\s*\\(${skip_args}([\\d]+)\\s*[,\\)]";
|
||||
if ($line =~ /$test/) {
|
||||
my $test = "\\b$func\\s*\\(${skip_args}($FuncArg(?:\\|\\s*$FuncArg)*)\\s*[,\\)]";
|
||||
if ($stat =~ /$test/) {
|
||||
my $val = $1;
|
||||
$val = $6 if ($skip_args ne "");
|
||||
|
||||
if ($val !~ /^0$/ &&
|
||||
(($val =~ /^$Int$/ && $val !~ /^$Octal$/) ||
|
||||
length($val) ne 4)) {
|
||||
if (($val =~ /^$Int$/ && $val !~ /^$Octal$/) ||
|
||||
($val =~ /^$Octal$/ && length($val) ne 4)) {
|
||||
ERROR("NON_OCTAL_PERMISSIONS",
|
||||
"Use 4 digit octal (0777) not decimal permissions\n" . $herecurr);
|
||||
} elsif ($val =~ /^$Octal$/ && (oct($val) & 02)) {
|
||||
"Use 4 digit octal (0777) not decimal permissions\n" . "$here\n" . $stat_real);
|
||||
}
|
||||
if ($val =~ /^$Octal$/ && (oct($val) & 02)) {
|
||||
ERROR("EXPORTED_WORLD_WRITABLE",
|
||||
"Exporting writable files is usually an error. Consider more restrictive permissions.\n" . $herecurr);
|
||||
"Exporting writable files is usually an error. Consider more restrictive permissions.\n" . "$here\n" . $stat_real);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# check for uses of S_<PERMS> that could be octal for readability
|
||||
if ($line =~ /\b$mode_perms_string_search\b/) {
|
||||
my $val = "";
|
||||
my $oval = "";
|
||||
my $to = 0;
|
||||
my $curpos = 0;
|
||||
my $lastpos = 0;
|
||||
while ($line =~ /\b(($mode_perms_string_search)\b(?:\s*\|\s*)?\s*)/g) {
|
||||
$curpos = pos($line);
|
||||
my $match = $2;
|
||||
my $omatch = $1;
|
||||
last if ($lastpos > 0 && ($curpos - length($omatch) != $lastpos));
|
||||
$lastpos = $curpos;
|
||||
$to |= $mode_permission_string_types{$match};
|
||||
$val .= '\s*\|\s*' if ($val ne "");
|
||||
$val .= $match;
|
||||
$oval .= $omatch;
|
||||
}
|
||||
$oval =~ s/^\s*\|\s*//;
|
||||
$oval =~ s/\s*\|\s*$//;
|
||||
my $octal = sprintf("%04o", $to);
|
||||
if (WARN("SYMBOLIC_PERMS",
|
||||
"Symbolic permissions '$oval' are not preferred. Consider using octal permissions '$octal'.\n" . $herecurr) &&
|
||||
$fix) {
|
||||
$fixed[$fixlinenr] =~ s/$val/$octal/;
|
||||
}
|
||||
}
|
||||
|
||||
# validate content of MODULE_LICENSE against list from include/linux/module.h
|
||||
if ($line =~ /\bMODULE_LICENSE\s*\(\s*($String)\s*\)/) {
|
||||
my $extracted_string = get_quoted_string($line, $rawline);
|
||||
|
@ -6066,7 +6286,7 @@ sub process {
|
|||
ERROR("NOT_UNIFIED_DIFF",
|
||||
"Does not appear to be a unified-diff format patch\n");
|
||||
}
|
||||
if ($is_patch && $filename ne '-' && $chk_signoff && $signoff == 0) {
|
||||
if ($is_patch && $has_commit_log && $chk_signoff && $signoff == 0) {
|
||||
ERROR("MISSING_SIGN_OFF",
|
||||
"Missing Signed-off-by: line(s)\n");
|
||||
}
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
acpi_dock_ops
|
||||
address_space_operations
|
||||
backlight_ops
|
||||
block_device_operations
|
||||
dentry_operations
|
||||
dev_pm_ops
|
||||
dma_map_ops
|
||||
extent_io_ops
|
||||
file_lock_operations
|
||||
file_operations
|
||||
hv_ops
|
||||
ide_dma_ops
|
||||
intel_dvo_dev_ops
|
||||
item_operations
|
||||
iwl_ops
|
||||
kgdb_arch
|
||||
kgdb_io
|
||||
kset_uevent_ops
|
||||
lock_manager_operations
|
||||
microcode_ops
|
||||
mtrr_ops
|
||||
neigh_ops
|
||||
nlmsvc_binding
|
||||
of_device_id
|
||||
pci_raw_ops
|
||||
pipe_buf_operations
|
||||
platform_hibernation_ops
|
||||
platform_suspend_ops
|
||||
proto_ops
|
||||
rpc_pipe_ops
|
||||
seq_operations
|
||||
snd_ac97_build_ops
|
||||
soc_pcmcia_socket_ops
|
||||
stacktrace_ops
|
||||
sysfs_ops
|
||||
tty_operations
|
||||
uart_ops
|
||||
usb_mon_operations
|
||||
wd_ops
|
|
@ -16,6 +16,7 @@ absense||absence
|
|||
absolut||absolute
|
||||
absoulte||absolute
|
||||
acccess||access
|
||||
acceess||access
|
||||
acceleratoin||acceleration
|
||||
accelleration||acceleration
|
||||
accesing||accessing
|
||||
|
@ -39,13 +40,14 @@ achitecture||architecture
|
|||
acient||ancient
|
||||
acitions||actions
|
||||
acitve||active
|
||||
acknowldegement||acknowldegement
|
||||
acknowldegement||acknowledgment
|
||||
acknowledgement||acknowledgment
|
||||
ackowledge||acknowledge
|
||||
ackowledged||acknowledged
|
||||
acording||according
|
||||
activete||activate
|
||||
acumulating||accumulating
|
||||
acumulator||accumulator
|
||||
adapater||adapter
|
||||
addional||additional
|
||||
additionaly||additionally
|
||||
|
@ -60,15 +62,19 @@ adress||address
|
|||
adresses||addresses
|
||||
adviced||advised
|
||||
afecting||affecting
|
||||
againt||against
|
||||
agaist||against
|
||||
albumns||albums
|
||||
alegorical||allegorical
|
||||
algined||aligned
|
||||
algorith||algorithm
|
||||
algorithmical||algorithmically
|
||||
algoritm||algorithm
|
||||
algoritms||algorithms
|
||||
algorrithm||algorithm
|
||||
algorritm||algorithm
|
||||
aligment||alignment
|
||||
alignement||alignment
|
||||
allign||align
|
||||
allocatrd||allocated
|
||||
allocte||allocate
|
||||
|
@ -84,6 +90,10 @@ alue||value
|
|||
ambigious||ambiguous
|
||||
amoung||among
|
||||
amout||amount
|
||||
an union||a union
|
||||
an user||a user
|
||||
an userspace||a userspace
|
||||
an one||a one
|
||||
analysator||analyzer
|
||||
ang||and
|
||||
anniversery||anniversary
|
||||
|
@ -96,6 +106,7 @@ appearence||appearance
|
|||
applicaion||application
|
||||
appliction||application
|
||||
applictions||applications
|
||||
applys||applies
|
||||
appplications||applications
|
||||
appropiate||appropriate
|
||||
appropriatly||appropriately
|
||||
|
@ -184,6 +195,7 @@ cacluated||calculated
|
|||
caculation||calculation
|
||||
calender||calendar
|
||||
calle||called
|
||||
callibration||calibration
|
||||
calucate||calculate
|
||||
calulate||calculate
|
||||
cancelation||cancellation
|
||||
|
@ -234,6 +246,9 @@ commited||committed
|
|||
commiting||committing
|
||||
committ||commit
|
||||
commoditiy||commodity
|
||||
comsume||consume
|
||||
comsumer||consumer
|
||||
comsuming||consuming
|
||||
compability||compatibility
|
||||
compaibility||compatibility
|
||||
compatability||compatibility
|
||||
|
@ -244,6 +259,7 @@ compatiblity||compatibility
|
|||
competion||completion
|
||||
compilant||compliant
|
||||
compleatly||completely
|
||||
completition||completion
|
||||
completly||completely
|
||||
complient||compliant
|
||||
componnents||components
|
||||
|
@ -254,9 +270,11 @@ comunication||communication
|
|||
conbination||combination
|
||||
conditionaly||conditionally
|
||||
conected||connected
|
||||
configuartion||configuration
|
||||
configuratoin||configuration
|
||||
configuraton||configuration
|
||||
configuretion||configuration
|
||||
configutation||configuration
|
||||
conider||consider
|
||||
conjuction||conjunction
|
||||
connectinos||connections
|
||||
|
@ -305,6 +323,9 @@ defintion||definition
|
|||
defintions||definitions
|
||||
defualt||default
|
||||
defult||default
|
||||
deintializing||deinitializing
|
||||
deintialize||deinitialize
|
||||
deintialized||deinitialized
|
||||
deivce||device
|
||||
delared||declared
|
||||
delare||declare
|
||||
|
@ -317,6 +338,7 @@ dependant||dependent
|
|||
depreacted||deprecated
|
||||
depreacte||deprecate
|
||||
desactivate||deactivate
|
||||
desciptor||descriptor
|
||||
desciptors||descriptors
|
||||
descripton||description
|
||||
descrition||description
|
||||
|
@ -346,9 +368,12 @@ differrence||difference
|
|||
difinition||definition
|
||||
diplay||display
|
||||
direectly||directly
|
||||
disassocation||disassociation
|
||||
disapear||disappear
|
||||
disapeared||disappeared
|
||||
disappared||disappeared
|
||||
disble||disable
|
||||
disbled||disabled
|
||||
disconnet||disconnect
|
||||
discontinous||discontinuous
|
||||
dispertion||dispersion
|
||||
|
@ -369,10 +394,12 @@ easilly||easily
|
|||
ecspecially||especially
|
||||
edditable||editable
|
||||
editting||editing
|
||||
efective||effective
|
||||
efficently||efficiently
|
||||
ehther||ether
|
||||
eigth||eight
|
||||
eletronic||electronic
|
||||
embeded||embedded
|
||||
enabledi||enabled
|
||||
enchanced||enhanced
|
||||
encorporating||incorporating
|
||||
|
@ -408,6 +435,7 @@ expecially||especially
|
|||
explicite||explicit
|
||||
explicitely||explicitly
|
||||
explict||explicit
|
||||
explictely||explicitly
|
||||
explictly||explicitly
|
||||
expresion||expression
|
||||
exprimental||experimental
|
||||
|
@ -417,9 +445,12 @@ extention||extension
|
|||
extracter||extractor
|
||||
faild||failed
|
||||
faill||fail
|
||||
failied||failed
|
||||
faillure||failure
|
||||
failue||failure
|
||||
failuer||failure
|
||||
faireness||fairness
|
||||
falied||failed
|
||||
faliure||failure
|
||||
familar||familiar
|
||||
fatser||faster
|
||||
|
@ -436,11 +467,13 @@ finsih||finish
|
|||
flusing||flushing
|
||||
folloing||following
|
||||
followign||following
|
||||
followings||following
|
||||
follwing||following
|
||||
forseeable||foreseeable
|
||||
forse||force
|
||||
fortan||fortran
|
||||
forwardig||forwarding
|
||||
framming||framing
|
||||
framwork||framework
|
||||
frequncy||frequency
|
||||
frome||from
|
||||
|
@ -482,6 +515,7 @@ howver||however
|
|||
hsould||should
|
||||
hypter||hyper
|
||||
identidier||identifier
|
||||
illigal||illegal
|
||||
imblance||imbalance
|
||||
immeadiately||immediately
|
||||
immedaite||immediate
|
||||
|
@ -520,11 +554,13 @@ informtion||information
|
|||
infromation||information
|
||||
ingore||ignore
|
||||
inital||initial
|
||||
initalized||initialized
|
||||
initalised||initialized
|
||||
initalise||initialize
|
||||
initalize||initialize
|
||||
initation||initiation
|
||||
initators||initiators
|
||||
initialiazation||initialization
|
||||
initializiation||initialization
|
||||
initialzed||initialized
|
||||
initilization||initialization
|
||||
|
@ -532,6 +568,7 @@ initilize||initialize
|
|||
inofficial||unofficial
|
||||
insititute||institute
|
||||
instal||install
|
||||
instanciated||instantiated
|
||||
inteface||interface
|
||||
integreated||integrated
|
||||
integrety||integrity
|
||||
|
@ -553,13 +590,15 @@ interruptted||interrupted
|
|||
interupted||interrupted
|
||||
interupt||interrupt
|
||||
intial||initial
|
||||
intialization||initialization
|
||||
intialized||initialized
|
||||
intialize||initialize
|
||||
intregral||integral
|
||||
intrrupt||interrupt
|
||||
intterrupt||interrupt
|
||||
intuative||intuitive
|
||||
invaid||invalid
|
||||
invalde||invald
|
||||
invalde||invalid
|
||||
invalide||invalid
|
||||
invididual||individual
|
||||
invokation||invocation
|
||||
|
@ -567,6 +606,8 @@ invokations||invocations
|
|||
irrelevent||irrelevant
|
||||
isnt||isn't
|
||||
isssue||issue
|
||||
iternations||iterations
|
||||
itertation||iteration
|
||||
itslef||itself
|
||||
jave||java
|
||||
jeffies||jiffies
|
||||
|
@ -621,6 +662,7 @@ messsage||message
|
|||
messsages||messages
|
||||
microprocesspr||microprocessor
|
||||
milliseonds||milliseconds
|
||||
minium||minimum
|
||||
minumum||minimum
|
||||
miscelleneous||miscellaneous
|
||||
misformed||malformed
|
||||
|
@ -629,7 +671,6 @@ mispelt||misspelt
|
|||
miximum||maximum
|
||||
mmnemonic||mnemonic
|
||||
mnay||many
|
||||
modeled||modelled
|
||||
modulues||modules
|
||||
monochorome||monochrome
|
||||
monochromo||monochrome
|
||||
|
@ -650,6 +691,7 @@ neccecary||necessary
|
|||
neccesary||necessary
|
||||
neccessary||necessary
|
||||
necesary||necessary
|
||||
neded||needed
|
||||
negaive||negative
|
||||
negoitation||negotiation
|
||||
negotation||negotiation
|
||||
|
@ -669,8 +711,11 @@ occurances||occurrences
|
|||
occured||occurred
|
||||
occurence||occurrence
|
||||
occure||occurred
|
||||
occured||occurred
|
||||
occuring||occurring
|
||||
offet||offset
|
||||
omited||omitted
|
||||
omiting||omitting
|
||||
omitt||omit
|
||||
ommiting||omitting
|
||||
ommitted||omitted
|
||||
|
@ -682,13 +727,19 @@ optionnal||optional
|
|||
optmizations||optimizations
|
||||
orientatied||orientated
|
||||
orientied||oriented
|
||||
orignal||original
|
||||
otherise||otherwise
|
||||
ouput||output
|
||||
oustanding||outstanding
|
||||
overaall||overall
|
||||
overhread||overhead
|
||||
overlaping||overlapping
|
||||
overide||override
|
||||
overrided||overridden
|
||||
overriden||overridden
|
||||
overun||overrun
|
||||
overwritting||overwriting
|
||||
overwriten||overwritten
|
||||
pacakge||package
|
||||
pachage||package
|
||||
packacge||package
|
||||
|
@ -699,6 +750,7 @@ pakage||package
|
|||
pallette||palette
|
||||
paln||plan
|
||||
paramameters||parameters
|
||||
paramaters||parameters
|
||||
paramater||parameter
|
||||
parametes||parameters
|
||||
parametised||parametrised
|
||||
|
@ -706,6 +758,7 @@ paramter||parameter
|
|||
paramters||parameters
|
||||
particuarly||particularly
|
||||
particularily||particularly
|
||||
partiton||partition
|
||||
pased||passed
|
||||
passin||passing
|
||||
pathes||paths
|
||||
|
@ -725,6 +778,7 @@ pleaes||please
|
|||
ploting||plotting
|
||||
plugable||pluggable
|
||||
poinnter||pointer
|
||||
pointeur||pointer
|
||||
poiter||pointer
|
||||
posible||possible
|
||||
positon||position
|
||||
|
@ -753,6 +807,7 @@ procceed||proceed
|
|||
proccesors||processors
|
||||
procesed||processed
|
||||
proces||process
|
||||
procesing||processing
|
||||
processessing||processing
|
||||
processess||processes
|
||||
processpr||processor
|
||||
|
@ -781,6 +836,7 @@ protable||portable
|
|||
protcol||protocol
|
||||
protecion||protection
|
||||
protocoll||protocol
|
||||
promixity||proximity
|
||||
psudo||pseudo
|
||||
psuedo||pseudo
|
||||
psychadelic||psychedelic
|
||||
|
@ -802,6 +858,7 @@ recommanded||recommended
|
|||
recyle||recycle
|
||||
redircet||redirect
|
||||
redirectrion||redirection
|
||||
reename||rename
|
||||
refcounf||refcount
|
||||
refence||reference
|
||||
refered||referred
|
||||
|
@ -938,6 +995,7 @@ straming||streaming
|
|||
struc||struct
|
||||
structres||structures
|
||||
stuct||struct
|
||||
strucuture||structure
|
||||
stucture||structure
|
||||
sturcture||structure
|
||||
subdirectoires||subdirectories
|
||||
|
@ -945,7 +1003,9 @@ suble||subtle
|
|||
substract||subtract
|
||||
succesfully||successfully
|
||||
succesful||successful
|
||||
successed||succeeded
|
||||
successfull||successful
|
||||
successfuly||successfully
|
||||
sucessfully||successfully
|
||||
sucess||success
|
||||
superflous||superfluous
|
||||
|
@ -961,13 +1021,22 @@ suppport||support
|
|||
supress||suppress
|
||||
surpresses||suppresses
|
||||
susbsystem||subsystem
|
||||
suspeneded||suspended
|
||||
suspicously||suspiciously
|
||||
swaping||swapping
|
||||
switchs||switches
|
||||
swith||switch
|
||||
swithable||switchable
|
||||
swithc||switch
|
||||
swithced||switched
|
||||
swithcing||switching
|
||||
swithed||switched
|
||||
swithing||switching
|
||||
symetric||symmetric
|
||||
synax||syntax
|
||||
synchonized||synchronized
|
||||
syncronize||synchronize
|
||||
syncronized||synchronized
|
||||
syncronizing||synchronizing
|
||||
syncronus||synchronous
|
||||
syste||system
|
||||
|
@ -979,6 +1048,7 @@ targetting||targeting
|
|||
teh||the
|
||||
temorary||temporary
|
||||
temproarily||temporarily
|
||||
therfore||therefore
|
||||
thier||their
|
||||
threds||threads
|
||||
threshhold||threshold
|
||||
|
@ -992,7 +1062,7 @@ tramsmitted||transmitted
|
|||
tramsmit||transmit
|
||||
tranfer||transfer
|
||||
transciever||transceiver
|
||||
transferd||transferrd
|
||||
transferd||transferred
|
||||
transfered||transferred
|
||||
transfering||transferring
|
||||
transision||transition
|
||||
|
@ -1006,22 +1076,31 @@ ture||true
|
|||
tyep||type
|
||||
udpate||update
|
||||
uesd||used
|
||||
uncommited||uncommitted
|
||||
unconditionaly||unconditionally
|
||||
underun||underrun
|
||||
unecessary||unnecessary
|
||||
unexecpted||unexpected
|
||||
unexpcted||unexpected
|
||||
unexpectd||unexpected
|
||||
unexpeted||unexpected
|
||||
unexpexted||unexpected
|
||||
unfortunatelly||unfortunately
|
||||
unifiy||unify
|
||||
unintialized||uninitialized
|
||||
unkmown||unknown
|
||||
unknonw||unknown
|
||||
unknow||unknown
|
||||
unkown||unknown
|
||||
unneded||unneeded
|
||||
unneedingly||unnecessarily
|
||||
unnsupported||unsupported
|
||||
unmached||unmatched
|
||||
unresgister||unregister
|
||||
unrgesiter||unregister
|
||||
unsinged||unsigned
|
||||
unstabel||unstable
|
||||
unsolicitied||unsolicited
|
||||
unsuccessfull||unsuccessful
|
||||
unsuported||unsupported
|
||||
untill||until
|
||||
|
@ -1042,6 +1121,7 @@ vaid||valid
|
|||
vaild||valid
|
||||
valide||valid
|
||||
variantions||variations
|
||||
varible||variable
|
||||
varient||variant
|
||||
vaule||value
|
||||
verbse||verbose
|
||||
|
|
Loading…
Reference in New Issue