diff options
Diffstat (limited to 'scripts/checkpatch.pl')
| -rwxr-xr-x | scripts/checkpatch.pl | 164 |
1 files changed, 141 insertions, 23 deletions
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index d12435992dea..89b1df4e72ab 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl | |||
| @@ -47,6 +47,8 @@ my $ignore_perl_version = 0; | |||
| 47 | my $minimum_perl_version = 5.10.0; | 47 | my $minimum_perl_version = 5.10.0; |
| 48 | my $min_conf_desc_length = 4; | 48 | my $min_conf_desc_length = 4; |
| 49 | my $spelling_file = "$D/spelling.txt"; | 49 | my $spelling_file = "$D/spelling.txt"; |
| 50 | my $codespell = 0; | ||
| 51 | my $codespellfile = "/usr/local/share/codespell/dictionary.txt"; | ||
| 50 | 52 | ||
| 51 | sub help { | 53 | sub help { |
| 52 | my ($exitcode) = @_; | 54 | my ($exitcode) = @_; |
| @@ -88,6 +90,9 @@ Options: | |||
| 88 | file. It's your fault if there's no backup or git | 90 | file. It's your fault if there's no backup or git |
| 89 | --ignore-perl-version override checking of perl version. expect | 91 | --ignore-perl-version override checking of perl version. expect |
| 90 | runtime errors. | 92 | runtime errors. |
| 93 | --codespell Use the codespell dictionary for spelling/typos | ||
| 94 | (default:/usr/local/share/codespell/dictionary.txt) | ||
| 95 | --codespellfile Use this codespell dictionary | ||
| 91 | -h, --help, --version display this help and exit | 96 | -h, --help, --version display this help and exit |
| 92 | 97 | ||
| 93 | When FILE is - read standard input. | 98 | When FILE is - read standard input. |
| @@ -146,6 +151,8 @@ GetOptions( | |||
| 146 | 'ignore-perl-version!' => \$ignore_perl_version, | 151 | 'ignore-perl-version!' => \$ignore_perl_version, |
| 147 | 'debug=s' => \%debug, | 152 | 'debug=s' => \%debug, |
| 148 | 'test-only=s' => \$tst_only, | 153 | 'test-only=s' => \$tst_only, |
| 154 | 'codespell!' => \$codespell, | ||
| 155 | 'codespellfile=s' => \$codespellfile, | ||
| 149 | 'h|help' => \$help, | 156 | 'h|help' => \$help, |
| 150 | 'version' => \$help | 157 | 'version' => \$help |
| 151 | ) or help(1); | 158 | ) or help(1); |
| @@ -316,6 +323,7 @@ our $Operators = qr{ | |||
| 316 | 323 | ||
| 317 | our $c90_Keywords = qr{do|for|while|if|else|return|goto|continue|switch|default|case|break}x; | 324 | our $c90_Keywords = qr{do|for|while|if|else|return|goto|continue|switch|default|case|break}x; |
| 318 | 325 | ||
| 326 | our $BasicType; | ||
| 319 | our $NonptrType; | 327 | our $NonptrType; |
| 320 | our $NonptrTypeMisordered; | 328 | our $NonptrTypeMisordered; |
| 321 | our $NonptrTypeWithAttr; | 329 | our $NonptrTypeWithAttr; |
| @@ -436,6 +444,14 @@ foreach my $entry (@mode_permission_funcs) { | |||
| 436 | $mode_perms_search .= $entry->[0]; | 444 | $mode_perms_search .= $entry->[0]; |
| 437 | } | 445 | } |
| 438 | 446 | ||
| 447 | our $mode_perms_world_writable = qr{ | ||
| 448 | S_IWUGO | | ||
| 449 | S_IWOTH | | ||
| 450 | S_IRWXUGO | | ||
| 451 | S_IALLUGO | | ||
| 452 | 0[0-7][0-7][2367] | ||
| 453 | }x; | ||
| 454 | |||
| 439 | our $allowed_asm_includes = qr{(?x: | 455 | our $allowed_asm_includes = qr{(?x: |
| 440 | irq| | 456 | irq| |
| 441 | memory| | 457 | memory| |
| @@ -449,7 +465,6 @@ my $misspellings; | |||
| 449 | my %spelling_fix; | 465 | my %spelling_fix; |
| 450 | 466 | ||
| 451 | if (open(my $spelling, '<', $spelling_file)) { | 467 | if (open(my $spelling, '<', $spelling_file)) { |
| 452 | my @spelling_list; | ||
| 453 | while (<$spelling>) { | 468 | while (<$spelling>) { |
| 454 | my $line = $_; | 469 | my $line = $_; |
| 455 | 470 | ||
| @@ -461,21 +476,50 @@ if (open(my $spelling, '<', $spelling_file)) { | |||
| 461 | 476 | ||
| 462 | my ($suspect, $fix) = split(/\|\|/, $line); | 477 | my ($suspect, $fix) = split(/\|\|/, $line); |
| 463 | 478 | ||
| 464 | push(@spelling_list, $suspect); | ||
| 465 | $spelling_fix{$suspect} = $fix; | 479 | $spelling_fix{$suspect} = $fix; |
| 466 | } | 480 | } |
| 467 | close($spelling); | 481 | close($spelling); |
| 468 | $misspellings = join("|", @spelling_list); | ||
| 469 | } else { | 482 | } else { |
| 470 | warn "No typos will be found - file '$spelling_file': $!\n"; | 483 | warn "No typos will be found - file '$spelling_file': $!\n"; |
| 471 | } | 484 | } |
| 472 | 485 | ||
| 486 | if ($codespell) { | ||
| 487 | if (open(my $spelling, '<', $codespellfile)) { | ||
| 488 | while (<$spelling>) { | ||
| 489 | my $line = $_; | ||
| 490 | |||
| 491 | $line =~ s/\s*\n?$//g; | ||
| 492 | $line =~ s/^\s*//g; | ||
| 493 | |||
| 494 | next if ($line =~ m/^\s*#/); | ||
| 495 | next if ($line =~ m/^\s*$/); | ||
| 496 | next if ($line =~ m/, disabled/i); | ||
| 497 | |||
| 498 | $line =~ s/,.*$//; | ||
| 499 | |||
| 500 | my ($suspect, $fix) = split(/->/, $line); | ||
| 501 | |||
| 502 | $spelling_fix{$suspect} = $fix; | ||
| 503 | } | ||
| 504 | close($spelling); | ||
| 505 | } else { | ||
| 506 | warn "No codespell typos will be found - file '$codespellfile': $!\n"; | ||
| 507 | } | ||
| 508 | } | ||
| 509 | |||
| 510 | $misspellings = join("|", sort keys %spelling_fix) if keys %spelling_fix; | ||
| 511 | |||
| 473 | sub build_types { | 512 | sub build_types { |
| 474 | my $mods = "(?x: \n" . join("|\n ", @modifierList) . "\n)"; | 513 | my $mods = "(?x: \n" . join("|\n ", @modifierList) . "\n)"; |
| 475 | my $all = "(?x: \n" . join("|\n ", @typeList) . "\n)"; | 514 | my $all = "(?x: \n" . join("|\n ", @typeList) . "\n)"; |
| 476 | my $Misordered = "(?x: \n" . join("|\n ", @typeListMisordered) . "\n)"; | 515 | my $Misordered = "(?x: \n" . join("|\n ", @typeListMisordered) . "\n)"; |
| 477 | my $allWithAttr = "(?x: \n" . join("|\n ", @typeListWithAttr) . "\n)"; | 516 | my $allWithAttr = "(?x: \n" . join("|\n ", @typeListWithAttr) . "\n)"; |
| 478 | $Modifier = qr{(?:$Attribute|$Sparse|$mods)}; | 517 | $Modifier = qr{(?:$Attribute|$Sparse|$mods)}; |
| 518 | $BasicType = qr{ | ||
| 519 | (?:$typeOtherOSTypedefs\b)| | ||
| 520 | (?:$typeTypedefs\b)| | ||
| 521 | (?:${all}\b) | ||
| 522 | }x; | ||
| 479 | $NonptrType = qr{ | 523 | $NonptrType = qr{ |
| 480 | (?:$Modifier\s+|const\s+)* | 524 | (?:$Modifier\s+|const\s+)* |
| 481 | (?: | 525 | (?: |
| @@ -1646,7 +1690,7 @@ sub fix_inserted_deleted_lines { | |||
| 1646 | foreach my $old_line (@{$linesRef}) { | 1690 | foreach my $old_line (@{$linesRef}) { |
| 1647 | my $save_line = 1; | 1691 | my $save_line = 1; |
| 1648 | my $line = $old_line; #don't modify the array | 1692 | my $line = $old_line; #don't modify the array |
| 1649 | if ($line =~ /^(?:\+\+\+\|\-\-\-)\s+\S+/) { #new filename | 1693 | if ($line =~ /^(?:\+\+\+|\-\-\-)\s+\S+/) { #new filename |
| 1650 | $delta_offset = 0; | 1694 | $delta_offset = 0; |
| 1651 | } elsif ($line =~ /^\@\@ -\d+,\d+ \+\d+,\d+ \@\@/) { #new hunk | 1695 | } elsif ($line =~ /^\@\@ -\d+,\d+ \+\d+,\d+ \@\@/) { #new hunk |
| 1652 | $range_last_linenr = $new_linenr; | 1696 | $range_last_linenr = $new_linenr; |
| @@ -1854,6 +1898,7 @@ sub process { | |||
| 1854 | 1898 | ||
| 1855 | my $in_header_lines = $file ? 0 : 1; | 1899 | my $in_header_lines = $file ? 0 : 1; |
| 1856 | my $in_commit_log = 0; #Scanning lines before patch | 1900 | my $in_commit_log = 0; #Scanning lines before patch |
| 1901 | my $commit_log_long_line = 0; | ||
| 1857 | my $reported_maintainer_file = 0; | 1902 | my $reported_maintainer_file = 0; |
| 1858 | my $non_utf8_charset = 0; | 1903 | my $non_utf8_charset = 0; |
| 1859 | 1904 | ||
| @@ -2189,6 +2234,14 @@ sub process { | |||
| 2189 | "Remove Gerrit Change-Id's before submitting upstream.\n" . $herecurr); | 2234 | "Remove Gerrit Change-Id's before submitting upstream.\n" . $herecurr); |
| 2190 | } | 2235 | } |
| 2191 | 2236 | ||
| 2237 | # Check for line lengths > 75 in commit log, warn once | ||
| 2238 | if ($in_commit_log && !$commit_log_long_line && | ||
| 2239 | length($line) > 75) { | ||
| 2240 | WARN("COMMIT_LOG_LONG_LINE", | ||
| 2241 | "Possible unwrapped commit description (prefer a maximum 75 chars per line)\n" . $herecurr); | ||
| 2242 | $commit_log_long_line = 1; | ||
| 2243 | } | ||
| 2244 | |||
| 2192 | # Check for git id commit length and improperly formed commit descriptions | 2245 | # Check for git id commit length and improperly formed commit descriptions |
| 2193 | if ($in_commit_log && $line =~ /\b(c)ommit\s+([0-9a-f]{5,})/i) { | 2246 | if ($in_commit_log && $line =~ /\b(c)ommit\s+([0-9a-f]{5,})/i) { |
| 2194 | my $init_char = $1; | 2247 | my $init_char = $1; |
| @@ -2303,8 +2356,9 @@ sub process { | |||
| 2303 | } | 2356 | } |
| 2304 | 2357 | ||
| 2305 | # Check for various typo / spelling mistakes | 2358 | # Check for various typo / spelling mistakes |
| 2306 | if (defined($misspellings) && ($in_commit_log || $line =~ /^\+/)) { | 2359 | if (defined($misspellings) && |
| 2307 | while ($rawline =~ /(?:^|[^a-z@])($misspellings)(?:$|[^a-z@])/gi) { | 2360 | ($in_commit_log || $line =~ /^(?:\+|Subject:)/i)) { |
| 2361 | while ($rawline =~ /(?:^|[^a-z@])($misspellings)(?:\b|$|[^a-z@])/gi) { | ||
| 2308 | my $typo = $1; | 2362 | my $typo = $1; |
| 2309 | my $typo_fix = $spelling_fix{lc($typo)}; | 2363 | my $typo_fix = $spelling_fix{lc($typo)}; |
| 2310 | $typo_fix = ucfirst($typo_fix) if ($typo =~ /^[A-Z]/); | 2364 | $typo_fix = ucfirst($typo_fix) if ($typo =~ /^[A-Z]/); |
| @@ -2459,8 +2513,9 @@ sub process { | |||
| 2459 | #line length limit | 2513 | #line length limit |
| 2460 | if ($line =~ /^\+/ && $prevrawline !~ /\/\*\*/ && | 2514 | if ($line =~ /^\+/ && $prevrawline !~ /\/\*\*/ && |
| 2461 | $rawline !~ /^.\s*\*\s*\@$Ident\s/ && | 2515 | $rawline !~ /^.\s*\*\s*\@$Ident\s/ && |
| 2462 | !($line =~ /^\+\s*$logFunctions\s*\(\s*(?:(KERN_\S+\s*|[^"]*))?"[X\t]*"\s*(?:|,|\)\s*;)\s*$/ || | 2516 | !($line =~ /^\+\s*$logFunctions\s*\(\s*(?:(KERN_\S+\s*|[^"]*))?$String\s*(?:|,|\)\s*;)\s*$/ || |
| 2463 | $line =~ /^\+\s*"[^"]*"\s*(?:\s*|,|\)\s*;)\s*$/) && | 2517 | $line =~ /^\+\s*$String\s*(?:\s*|,|\)\s*;)\s*$/ || |
| 2518 | $line =~ /^\+\s*#\s*define\s+\w+\s+$String$/) && | ||
| 2464 | $length > $max_line_length) | 2519 | $length > $max_line_length) |
| 2465 | { | 2520 | { |
| 2466 | WARN("LONG_LINE", | 2521 | WARN("LONG_LINE", |
| @@ -2552,8 +2607,15 @@ sub process { | |||
| 2552 | } | 2607 | } |
| 2553 | } | 2608 | } |
| 2554 | 2609 | ||
| 2555 | if ($line =~ /^\+.*(\w+\s*)?\(\s*$Type\s*\)[ \t]+(?!$Assignment|$Arithmetic|[,;:\?\(\{\}\[\<\>]|&&|\|\||\\$)/ && | 2610 | # check for space after cast like "(int) foo" or "(struct foo) bar" |
| 2556 | (!defined($1) || $1 !~ /sizeof\s*/)) { | 2611 | # avoid checking a few false positives: |
| 2612 | # "sizeof(<type>)" or "__alignof__(<type>)" | ||
| 2613 | # function pointer declarations like "(*foo)(int) = bar;" | ||
| 2614 | # structure definitions like "(struct foo) { 0 };" | ||
| 2615 | # multiline macros that define functions | ||
| 2616 | # known attributes or the __attribute__ keyword | ||
| 2617 | if ($line =~ /^\+(.*)\(\s*$Type\s*\)([ \t]++)((?![={]|\\$|$Attribute|__attribute__))/ && | ||
| 2618 | (!defined($1) || $1 !~ /\b(?:sizeof|__alignof__)\s*$/)) { | ||
| 2557 | if (CHK("SPACING", | 2619 | if (CHK("SPACING", |
| 2558 | "No space is necessary after a cast\n" . $herecurr) && | 2620 | "No space is necessary after a cast\n" . $herecurr) && |
| 2559 | $fix) { | 2621 | $fix) { |
| @@ -3146,6 +3208,18 @@ sub process { | |||
| 3146 | $herecurr); | 3208 | $herecurr); |
| 3147 | } | 3209 | } |
| 3148 | 3210 | ||
| 3211 | # check for const <foo> const where <foo> is not a pointer or array type | ||
| 3212 | if ($sline =~ /\bconst\s+($BasicType)\s+const\b/) { | ||
| 3213 | my $found = $1; | ||
| 3214 | if ($sline =~ /\bconst\s+\Q$found\E\s+const\b\s*\*/) { | ||
| 3215 | WARN("CONST_CONST", | ||
| 3216 | "'const $found const *' should probably be 'const $found * const'\n" . $herecurr); | ||
| 3217 | } elsif ($sline !~ /\bconst\s+\Q$found\E\s+const\s+\w+\s*\[/) { | ||
| 3218 | WARN("CONST_CONST", | ||
| 3219 | "'const $found const' should probably be 'const $found'\n" . $herecurr); | ||
| 3220 | } | ||
| 3221 | } | ||
| 3222 | |||
| 3149 | # check for non-global char *foo[] = {"bar", ...} declarations. | 3223 | # check for non-global char *foo[] = {"bar", ...} declarations. |
| 3150 | if ($line =~ /^.\s+(?:static\s+|const\s+)?char\s+\*\s*\w+\s*\[\s*\]\s*=\s*\{/) { | 3224 | if ($line =~ /^.\s+(?:static\s+|const\s+)?char\s+\*\s*\w+\s*\[\s*\]\s*=\s*\{/) { |
| 3151 | WARN("STATIC_CONST_CHAR_ARRAY", | 3225 | WARN("STATIC_CONST_CHAR_ARRAY", |
| @@ -3153,6 +3227,19 @@ sub process { | |||
| 3153 | $herecurr); | 3227 | $herecurr); |
| 3154 | } | 3228 | } |
| 3155 | 3229 | ||
| 3230 | # check for sizeof(foo)/sizeof(foo[0]) that could be ARRAY_SIZE(foo) | ||
| 3231 | if ($line =~ m@\bsizeof\s*\(\s*($Lval)\s*\)@) { | ||
| 3232 | my $array = $1; | ||
| 3233 | if ($line =~ m@\b(sizeof\s*\(\s*\Q$array\E\s*\)\s*/\s*sizeof\s*\(\s*\Q$array\E\s*\[\s*0\s*\]\s*\))@) { | ||
| 3234 | my $array_div = $1; | ||
| 3235 | if (WARN("ARRAY_SIZE", | ||
| 3236 | "Prefer ARRAY_SIZE($array)\n" . $herecurr) && | ||
| 3237 | $fix) { | ||
| 3238 | $fixed[$fixlinenr] =~ s/\Q$array_div\E/ARRAY_SIZE($array)/; | ||
| 3239 | } | ||
| 3240 | } | ||
| 3241 | } | ||
| 3242 | |||
| 3156 | # check for function declarations without arguments like "int foo()" | 3243 | # check for function declarations without arguments like "int foo()" |
| 3157 | if ($line =~ /(\b$Type\s+$Ident)\s*\(\s*\)/) { | 3244 | if ($line =~ /(\b$Type\s+$Ident)\s*\(\s*\)/) { |
| 3158 | if (ERROR("FUNCTION_WITHOUT_ARGS", | 3245 | if (ERROR("FUNCTION_WITHOUT_ARGS", |
| @@ -3309,6 +3396,14 @@ sub process { | |||
| 3309 | "Prefer dev_$level(... to dev_printk(KERN_$orig, ...\n" . $herecurr); | 3396 | "Prefer dev_$level(... to dev_printk(KERN_$orig, ...\n" . $herecurr); |
| 3310 | } | 3397 | } |
| 3311 | 3398 | ||
| 3399 | # ENOSYS means "bad syscall nr" and nothing else. This will have a small | ||
| 3400 | # number of false positives, but assembly files are not checked, so at | ||
| 3401 | # least the arch entry code will not trigger this warning. | ||
| 3402 | if ($line =~ /\bENOSYS\b/) { | ||
| 3403 | WARN("ENOSYS", | ||
| 3404 | "ENOSYS means 'invalid syscall nr' and nothing else\n" . $herecurr); | ||
| 3405 | } | ||
| 3406 | |||
| 3312 | # function brace can't be on same line, except for #defines of do while, | 3407 | # function brace can't be on same line, except for #defines of do while, |
| 3313 | # or if closed on same line | 3408 | # or if closed on same line |
| 3314 | if (($line=~/$Type\s*$Ident\(.*\).*\s*{/) and | 3409 | if (($line=~/$Type\s*$Ident\(.*\).*\s*{/) and |
| @@ -3565,7 +3660,7 @@ sub process { | |||
| 3565 | 3660 | ||
| 3566 | # Ignore operators passed as parameters. | 3661 | # Ignore operators passed as parameters. |
| 3567 | if ($op_type ne 'V' && | 3662 | if ($op_type ne 'V' && |
| 3568 | $ca =~ /\s$/ && $cc =~ /^\s*,/) { | 3663 | $ca =~ /\s$/ && $cc =~ /^\s*[,\)]/) { |
| 3569 | 3664 | ||
| 3570 | # # Ignore comments | 3665 | # # Ignore comments |
| 3571 | # } elsif ($op =~ /^$;+$/) { | 3666 | # } elsif ($op =~ /^$;+$/) { |
| @@ -3750,6 +3845,14 @@ sub process { | |||
| 3750 | $ok = 1; | 3845 | $ok = 1; |
| 3751 | } | 3846 | } |
| 3752 | 3847 | ||
| 3848 | # for asm volatile statements | ||
| 3849 | # ignore a colon with another | ||
| 3850 | # colon immediately before or after | ||
| 3851 | if (($op eq ':') && | ||
| 3852 | ($ca =~ /:$/ || $cc =~ /^:/)) { | ||
| 3853 | $ok = 1; | ||
| 3854 | } | ||
| 3855 | |||
| 3753 | # messages are ERROR, but ?: are CHK | 3856 | # messages are ERROR, but ?: are CHK |
| 3754 | if ($ok == 0) { | 3857 | if ($ok == 0) { |
| 3755 | my $msg_type = \&ERROR; | 3858 | my $msg_type = \&ERROR; |
| @@ -3963,12 +4066,12 @@ sub process { | |||
| 3963 | } | 4066 | } |
| 3964 | } | 4067 | } |
| 3965 | 4068 | ||
| 3966 | # Return of what appears to be an errno should normally be -'ve | 4069 | # Return of what appears to be an errno should normally be negative |
| 3967 | if ($line =~ /^.\s*return\s*(E[A-Z]*)\s*;/) { | 4070 | if ($sline =~ /\breturn(?:\s*\(+\s*|\s+)(E[A-Z]+)(?:\s*\)+\s*|\s*)[;:,]/) { |
| 3968 | my $name = $1; | 4071 | my $name = $1; |
| 3969 | if ($name ne 'EOF' && $name ne 'ERROR') { | 4072 | if ($name ne 'EOF' && $name ne 'ERROR') { |
| 3970 | WARN("USE_NEGATIVE_ERRNO", | 4073 | WARN("USE_NEGATIVE_ERRNO", |
| 3971 | "return of an errno should typically be -ve (return -$1)\n" . $herecurr); | 4074 | "return of an errno should typically be negative (ie: return -$1)\n" . $herecurr); |
| 3972 | } | 4075 | } |
| 3973 | } | 4076 | } |
| 3974 | 4077 | ||
| @@ -4178,7 +4281,8 @@ sub process { | |||
| 4178 | } | 4281 | } |
| 4179 | } | 4282 | } |
| 4180 | 4283 | ||
| 4181 | #warn if <asm/foo.h> is #included and <linux/foo.h> is available (uses RAW line) | 4284 | # warn if <asm/foo.h> is #included and <linux/foo.h> is available and includes |
| 4285 | # itself <asm/foo.h> (uses RAW line) | ||
| 4182 | if ($tree && $rawline =~ m{^.\s*\#\s*include\s*\<asm\/(.*)\.h\>}) { | 4286 | if ($tree && $rawline =~ m{^.\s*\#\s*include\s*\<asm\/(.*)\.h\>}) { |
| 4183 | my $file = "$1.h"; | 4287 | my $file = "$1.h"; |
| 4184 | my $checkfile = "include/linux/$file"; | 4288 | my $checkfile = "include/linux/$file"; |
| @@ -4186,12 +4290,15 @@ sub process { | |||
| 4186 | $realfile ne $checkfile && | 4290 | $realfile ne $checkfile && |
| 4187 | $1 !~ /$allowed_asm_includes/) | 4291 | $1 !~ /$allowed_asm_includes/) |
| 4188 | { | 4292 | { |
| 4189 | if ($realfile =~ m{^arch/}) { | 4293 | my $asminclude = `grep -Ec "#include\\s+<asm/$file>" $root/$checkfile`; |
| 4190 | CHK("ARCH_INCLUDE_LINUX", | 4294 | if ($asminclude > 0) { |
| 4191 | "Consider using #include <linux/$file> instead of <asm/$file>\n" . $herecurr); | 4295 | if ($realfile =~ m{^arch/}) { |
| 4192 | } else { | 4296 | CHK("ARCH_INCLUDE_LINUX", |
| 4193 | WARN("INCLUDE_LINUX", | 4297 | "Consider using #include <linux/$file> instead of <asm/$file>\n" . $herecurr); |
| 4194 | "Use #include <linux/$file> instead of <asm/$file>\n" . $herecurr); | 4298 | } else { |
| 4299 | WARN("INCLUDE_LINUX", | ||
| 4300 | "Use #include <linux/$file> instead of <asm/$file>\n" . $herecurr); | ||
| 4301 | } | ||
| 4195 | } | 4302 | } |
| 4196 | } | 4303 | } |
| 4197 | } | 4304 | } |
| @@ -4700,6 +4807,16 @@ sub process { | |||
| 4700 | } | 4807 | } |
| 4701 | } | 4808 | } |
| 4702 | 4809 | ||
| 4810 | # check for __read_mostly with const non-pointer (should just be const) | ||
| 4811 | if ($line =~ /\b__read_mostly\b/ && | ||
| 4812 | $line =~ /($Type)\s*$Ident/ && $1 !~ /\*\s*$/ && $1 =~ /\bconst\b/) { | ||
| 4813 | if (ERROR("CONST_READ_MOSTLY", | ||
| 4814 | "Invalid use of __read_mostly with const type\n" . $herecurr) && | ||
| 4815 | $fix) { | ||
| 4816 | $fixed[$fixlinenr] =~ s/\s+__read_mostly\b//; | ||
| 4817 | } | ||
| 4818 | } | ||
| 4819 | |||
| 4703 | # don't use __constant_<foo> functions outside of include/uapi/ | 4820 | # don't use __constant_<foo> functions outside of include/uapi/ |
| 4704 | if ($realfile !~ m@^include/uapi/@ && | 4821 | if ($realfile !~ m@^include/uapi/@ && |
| 4705 | $line =~ /(__constant_(?:htons|ntohs|[bl]e(?:16|32|64)_to_cpu|cpu_to_[bl]e(?:16|32|64)))\s*\(/) { | 4822 | $line =~ /(__constant_(?:htons|ntohs|[bl]e(?:16|32|64)_to_cpu|cpu_to_[bl]e(?:16|32|64)))\s*\(/) { |
| @@ -5261,6 +5378,7 @@ sub process { | |||
| 5261 | stacktrace_ops| | 5378 | stacktrace_ops| |
| 5262 | sysfs_ops| | 5379 | sysfs_ops| |
| 5263 | tty_operations| | 5380 | tty_operations| |
| 5381 | uart_ops| | ||
| 5264 | usb_mon_operations| | 5382 | usb_mon_operations| |
| 5265 | wd_ops}x; | 5383 | wd_ops}x; |
| 5266 | if ($line !~ /\bconst\b/ && | 5384 | if ($line !~ /\bconst\b/ && |
| @@ -5318,8 +5436,8 @@ sub process { | |||
| 5318 | } | 5436 | } |
| 5319 | } | 5437 | } |
| 5320 | 5438 | ||
| 5321 | if ($line =~ /debugfs_create_file.*S_IWUGO/ || | 5439 | if ($line =~ /debugfs_create_\w+.*\b$mode_perms_world_writable\b/ || |
| 5322 | $line =~ /DEVICE_ATTR.*S_IWUGO/ ) { | 5440 | $line =~ /DEVICE_ATTR.*\b$mode_perms_world_writable\b/) { |
| 5323 | WARN("EXPORTED_WORLD_WRITABLE", | 5441 | WARN("EXPORTED_WORLD_WRITABLE", |
| 5324 | "Exporting world writable files is usually an error. Consider more restrictive permissions.\n" . $herecurr); | 5442 | "Exporting world writable files is usually an error. Consider more restrictive permissions.\n" . $herecurr); |
| 5325 | } | 5443 | } |
