Coccinelle: add api/d_find_alias.cocci
Ensure that calls to d_find_alias() have a corresponding dput(). Signed-off-by: Cyril Roelandt <tipecaml@gmail.com> Cc: Julia Lawall <Julia.Lawall@lip6.fr> Cc: Gilles Muller <Gilles.Muller@lip6.fr> Cc: Nicolas Palix <nicolas.palix@imag.fr> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
19af395d7c
commit
af56e3f017
1 changed files with 80 additions and 0 deletions
80
scripts/coccinelle/api/d_find_alias.cocci
Normal file
80
scripts/coccinelle/api/d_find_alias.cocci
Normal file
|
@ -0,0 +1,80 @@
|
|||
/// Make sure calls to d_find_alias() have a corresponding call to dput().
|
||||
//
|
||||
// Keywords: d_find_alias, dput
|
||||
//
|
||||
// Confidence: Moderate
|
||||
// URL: http://coccinelle.lip6.fr/
|
||||
// Options: -include_headers
|
||||
|
||||
virtual context
|
||||
virtual org
|
||||
virtual patch
|
||||
virtual report
|
||||
|
||||
@r exists@
|
||||
local idexpression struct dentry *dent;
|
||||
expression E, E1;
|
||||
statement S1, S2;
|
||||
position p1, p2;
|
||||
@@
|
||||
(
|
||||
if (!(dent@p1 = d_find_alias(...))) S1
|
||||
|
|
||||
dent@p1 = d_find_alias(...)
|
||||
)
|
||||
|
||||
<...when != dput(dent)
|
||||
when != if (...) { <+... dput(dent) ...+> }
|
||||
when != true !dent || ...
|
||||
when != dent = E
|
||||
when != E = dent
|
||||
if (!dent || ...) S2
|
||||
...>
|
||||
(
|
||||
return <+...dent...+>;
|
||||
|
|
||||
return @p2 ...;
|
||||
|
|
||||
dent@p2 = E1;
|
||||
|
|
||||
E1 = dent;
|
||||
)
|
||||
|
||||
@depends on context@
|
||||
local idexpression struct dentry *r.dent;
|
||||
position r.p1,r.p2;
|
||||
@@
|
||||
* dent@p1 = ...
|
||||
...
|
||||
(
|
||||
* return@p2 ...;
|
||||
|
|
||||
* dent@p2
|
||||
)
|
||||
|
||||
|
||||
@script:python depends on org@
|
||||
p1 << r.p1;
|
||||
p2 << r.p2;
|
||||
@@
|
||||
cocci.print_main("Missing call to dput()",p1)
|
||||
cocci.print_secs("",p2)
|
||||
|
||||
@depends on patch@
|
||||
local idexpression struct dentry *r.dent;
|
||||
position r.p2;
|
||||
@@
|
||||
(
|
||||
+ dput(dent);
|
||||
return @p2 ...;
|
||||
|
|
||||
+ dput(dent);
|
||||
dent@p2 = ...;
|
||||
)
|
||||
|
||||
@script:python depends on report@
|
||||
p1 << r.p1;
|
||||
p2 << r.p2;
|
||||
@@
|
||||
msg = "Missing call to dput() at line %s."
|
||||
coccilib.report.print_report(p1[0], msg % (p2[0].line))
|
Loading…
Reference in a new issue