mirror of
https://github.com/torvalds/linux.git
synced 2025-01-01 07:42:07 +00:00
coccinelle: misc: add flexible_array.cocci script
One-element and zero-length arrays are deprecated [1]. Kernel
code should always use "flexible array members" instead, except
for existing uapi definitions.
The script warns about one-element and zero-length arrays in structs.
[1] commit 68e4cd17e2
("docs: deprecated.rst: Add zero-length and
one-element arrays")
Cc: Kees Cook <keescook@chromium.org>
Cc: Gustavo A. R. Silva <gustavoars@kernel.org>
Signed-off-by: Denis Efremov <efremov@linux.com>
Signed-off-by: Julia Lawall <julia.lawall@inria.fr>
This commit is contained in:
parent
44d8870f21
commit
7b36c1398f
88
scripts/coccinelle/misc/flexible_array.cocci
Normal file
88
scripts/coccinelle/misc/flexible_array.cocci
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
///
|
||||||
|
/// Zero-length and one-element arrays are deprecated, see
|
||||||
|
/// Documentation/process/deprecated.rst
|
||||||
|
/// Flexible-array members should be used instead.
|
||||||
|
///
|
||||||
|
//
|
||||||
|
// Confidence: High
|
||||||
|
// Copyright: (C) 2020 Denis Efremov ISPRAS.
|
||||||
|
// Comments:
|
||||||
|
// Options: --no-includes --include-headers
|
||||||
|
|
||||||
|
virtual context
|
||||||
|
virtual report
|
||||||
|
virtual org
|
||||||
|
virtual patch
|
||||||
|
|
||||||
|
@initialize:python@
|
||||||
|
@@
|
||||||
|
def relevant(positions):
|
||||||
|
for p in positions:
|
||||||
|
if "uapi" in p.file:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
@r depends on !patch@
|
||||||
|
identifier name, array;
|
||||||
|
type T;
|
||||||
|
position p : script:python() { relevant(p) };
|
||||||
|
@@
|
||||||
|
|
||||||
|
(
|
||||||
|
struct name {
|
||||||
|
...
|
||||||
|
* T array@p[\(0\|1\)];
|
||||||
|
};
|
||||||
|
|
|
||||||
|
struct {
|
||||||
|
...
|
||||||
|
* T array@p[\(0\|1\)];
|
||||||
|
};
|
||||||
|
|
|
||||||
|
union name {
|
||||||
|
...
|
||||||
|
* T array@p[\(0\|1\)];
|
||||||
|
};
|
||||||
|
|
|
||||||
|
union {
|
||||||
|
...
|
||||||
|
* T array@p[\(0\|1\)];
|
||||||
|
};
|
||||||
|
)
|
||||||
|
|
||||||
|
@depends on patch@
|
||||||
|
identifier name, array;
|
||||||
|
type T;
|
||||||
|
position p : script:python() { relevant(p) };
|
||||||
|
@@
|
||||||
|
|
||||||
|
(
|
||||||
|
struct name {
|
||||||
|
...
|
||||||
|
T array@p[
|
||||||
|
- 0
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
|
||||||
|
struct {
|
||||||
|
...
|
||||||
|
T array@p[
|
||||||
|
- 0
|
||||||
|
];
|
||||||
|
};
|
||||||
|
)
|
||||||
|
|
||||||
|
@script: python depends on report@
|
||||||
|
p << r.p;
|
||||||
|
@@
|
||||||
|
|
||||||
|
msg = "WARNING use flexible-array member instead (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays)"
|
||||||
|
coccilib.report.print_report(p[0], msg)
|
||||||
|
|
||||||
|
@script: python depends on org@
|
||||||
|
p << r.p;
|
||||||
|
@@
|
||||||
|
|
||||||
|
msg = "WARNING use flexible-array member instead (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays)"
|
||||||
|
coccilib.org.print_todo(p[0], msg)
|
Loading…
Reference in New Issue
Block a user