提交 554e165c 编写于 作者: A Andy Whitcroft 提交者: Linus Torvalds

checkpatch: check for common memset parameter issues against statments

Move the memset checks over to work against the statement.  Also add
checks for 0 and 1 used as lengths.  Generally these indicate badly
ordered parameters.
Signed-off-by: NAndy Whitcroft <apw@canonical.com>
Cc: Joe Perches <joe@perches.com>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 f74bd194
......@@ -3120,6 +3120,28 @@ sub process {
"Avoid line continuations in quoted strings\n" . $herecurr);
}
# Check for misused memsets
if (defined $stat && $stat =~ /\bmemset\s*\((.*)\)/s) {
my $args = $1;
# Flatten any parentheses and braces
while ($args =~ s/\([^\(\)]*\)/10/s ||
$args =~ s/\{[^\{\}]*\}/10/s ||
$args =~ s/\[[^\[\]]*\]/10/s)
{
}
# Extract the simplified arguments.
my ($ms_addr, $ms_val, $ms_size) =
split(/\s*,\s*/, $args);
if ($ms_size =~ /^(0x|)0$/i) {
ERROR("MEMSET",
"memset size is 3rd argument, not the second.\n" . $herecurr);
} elsif ($ms_size =~ /^(0x|)1$/i) {
WARN("MEMSET",
"single byte memset is suspicious. Swapped 2nd/3rd argument?\n" . $herecurr);
}
}
# check for new externs in .c files.
if ($realfile =~ /\.c$/ && defined $stat &&
$stat =~ /^.\s*(?:extern\s+)?$Type\s+($Ident)(\s*)\(/s)
......@@ -3291,12 +3313,6 @@ sub process {
WARN("EXPORTED_WORLD_WRITABLE",
"Exporting world writable files is usually an error. Consider more restrictive permissions.\n" . $herecurr);
}
# Check for memset with swapped arguments
if ($line =~ /memset.*\,(\ |)(0x|)0(\ |0|)\);/) {
ERROR("MEMSET",
"memset size is 3rd argument, not the second.\n" . $herecurr);
}
}
# If we have no input at all, then there is nothing to report on
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册