checkpatch: add checks for constant non-octal permissions
umode_t permissions are sometimes mistakenly written with decimal constants. Verify that numeric permissions are using octal. Add a list of the most commonly used functions and macros that have umode_t permissions and the argument position. Add a $Octal type to $Constant. Allow $LvalOrFunc to be a pointer indirection too. Signed-off-by: Joe Perches <joe@perches.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
91f72e9c6e
commit
2435880fe5
|
@ -289,11 +289,12 @@ our $Int_type = qr{(?i)llu|ull|ll|lu|ul|l|u};
|
||||||
our $Binary = qr{(?i)0b[01]+$Int_type?};
|
our $Binary = qr{(?i)0b[01]+$Int_type?};
|
||||||
our $Hex = qr{(?i)0x[0-9a-f]+$Int_type?};
|
our $Hex = qr{(?i)0x[0-9a-f]+$Int_type?};
|
||||||
our $Int = qr{[0-9]+$Int_type?};
|
our $Int = qr{[0-9]+$Int_type?};
|
||||||
|
our $Octal = qr{0[0-7]+$Int_type?};
|
||||||
our $Float_hex = qr{(?i)0x[0-9a-f]+p-?[0-9]+[fl]?};
|
our $Float_hex = qr{(?i)0x[0-9a-f]+p-?[0-9]+[fl]?};
|
||||||
our $Float_dec = qr{(?i)(?:[0-9]+\.[0-9]*|[0-9]*\.[0-9]+)(?:e-?[0-9]+)?[fl]?};
|
our $Float_dec = qr{(?i)(?:[0-9]+\.[0-9]*|[0-9]*\.[0-9]+)(?:e-?[0-9]+)?[fl]?};
|
||||||
our $Float_int = qr{(?i)[0-9]+e-?[0-9]+[fl]?};
|
our $Float_int = qr{(?i)[0-9]+e-?[0-9]+[fl]?};
|
||||||
our $Float = qr{$Float_hex|$Float_dec|$Float_int};
|
our $Float = qr{$Float_hex|$Float_dec|$Float_int};
|
||||||
our $Constant = qr{$Float|$Binary|$Hex|$Int};
|
our $Constant = qr{$Float|$Binary|$Octal|$Hex|$Int};
|
||||||
our $Assignment = qr{\*\=|/=|%=|\+=|-=|<<=|>>=|&=|\^=|\|=|=};
|
our $Assignment = qr{\*\=|/=|%=|\+=|-=|<<=|>>=|&=|\^=|\|=|=};
|
||||||
our $Compare = qr{<=|>=|==|!=|<|>};
|
our $Compare = qr{<=|>=|==|!=|<|>};
|
||||||
our $Arithmetic = qr{\+|-|\*|\/|%};
|
our $Arithmetic = qr{\+|-|\*|\/|%};
|
||||||
|
@ -378,6 +379,15 @@ our @modifierList = (
|
||||||
qr{fastcall},
|
qr{fastcall},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
our @mode_permission_funcs = (
|
||||||
|
["module_param", 3],
|
||||||
|
["module_param_(?:array|named|string)", 4],
|
||||||
|
["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],
|
||||||
|
);
|
||||||
|
|
||||||
our $allowed_asm_includes = qr{(?x:
|
our $allowed_asm_includes = qr{(?x:
|
||||||
irq|
|
irq|
|
||||||
memory
|
memory
|
||||||
|
@ -423,7 +433,7 @@ our $Typecast = qr{\s*(\(\s*$NonptrType\s*\)){0,1}\s*};
|
||||||
# Any use must be runtime checked with $^V
|
# Any use must be runtime checked with $^V
|
||||||
|
|
||||||
our $balanced_parens = qr/(\((?:[^\(\)]++|(?-1))*\))/;
|
our $balanced_parens = qr/(\((?:[^\(\)]++|(?-1))*\))/;
|
||||||
our $LvalOrFunc = qr{($Lval)\s*($balanced_parens{0,1})\s*};
|
our $LvalOrFunc = qr{((?:[\&\*]\s*)?$Lval)\s*($balanced_parens{0,1})\s*};
|
||||||
our $FuncArg = qr{$Typecast{0,1}($LvalOrFunc|$Constant)};
|
our $FuncArg = qr{$Typecast{0,1}($LvalOrFunc|$Constant)};
|
||||||
|
|
||||||
sub deparenthesize {
|
sub deparenthesize {
|
||||||
|
@ -4473,6 +4483,28 @@ sub process {
|
||||||
WARN("EXPORTED_WORLD_WRITABLE",
|
WARN("EXPORTED_WORLD_WRITABLE",
|
||||||
"Exporting world writable files is usually an error. Consider more restrictive permissions.\n" . $herecurr);
|
"Exporting world writable files is usually an error. Consider more restrictive permissions.\n" . $herecurr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach my $entry (@mode_permission_funcs) {
|
||||||
|
my $func = $entry->[0];
|
||||||
|
my $arg_pos = $entry->[1];
|
||||||
|
|
||||||
|
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 ($^V && $^V ge 5.10.0 &&
|
||||||
|
$line =~ /$test/) {
|
||||||
|
my $val = $1;
|
||||||
|
$val = $6 if ($skip_args ne "");
|
||||||
|
|
||||||
|
if ($val =~ /^$Int$/ && $val !~ /^$Octal$/) {
|
||||||
|
ERROR("NON_OCTAL_PERMISSIONS",
|
||||||
|
"Use octal not decimal permissions\n" . $herecurr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# If we have no input at all, then there is nothing to report on
|
# If we have no input at all, then there is nothing to report on
|
||||||
|
|
Loading…
Reference in New Issue