mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
Pull misc kbuild updates from Michal Marek: "This is the non-critical part of kbuild: - several coccinelle updates - make deb-pkg creates an armhf package if CONFIG_VFP=y - make tags understands some more powerpc macros" * 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild: coccinelle: Improve checking for missing NULL terminators coccinelle: ifnullfree: handle various destroy functions coccinelle: ifnullfree: various cleanups cocinelle: iterators: semantic patch to delete unneeded of_node_put deb-pkg: Add automatic support for armhf architecture scripts/coccinelle: fix typos coccinelle: misc: remove "complex return code" warnings Coccinelle: fix incorrect -include option transformation coccinelle: tests: improve odd_ptr_err.cocci coccinelle: misc: move constants to the right scripts/tags.sh: Teach tags about some powerpc macros
This commit is contained in:
commit
5dfe5b2c71
10 changed files with 415 additions and 234 deletions
|
@ -30,7 +30,7 @@ FLAGS="$SPFLAGS --very-quiet"
|
||||||
# spatch only allows include directories with the syntax "-I include"
|
# spatch only allows include directories with the syntax "-I include"
|
||||||
# while gcc also allows "-Iinclude" and "-include include"
|
# while gcc also allows "-Iinclude" and "-include include"
|
||||||
COCCIINCLUDE=${LINUXINCLUDE//-I/-I }
|
COCCIINCLUDE=${LINUXINCLUDE//-I/-I }
|
||||||
COCCIINCLUDE=${COCCIINCLUDE//-include/-I}
|
COCCIINCLUDE=${COCCIINCLUDE// -include/ --include}
|
||||||
|
|
||||||
if [ "$C" = "1" -o "$C" = "2" ]; then
|
if [ "$C" = "1" -o "$C" = "2" ]; then
|
||||||
ONLINE=1
|
ONLINE=1
|
||||||
|
|
|
@ -16,19 +16,21 @@ virtual context
|
||||||
@r2 depends on patch@
|
@r2 depends on patch@
|
||||||
expression E;
|
expression E;
|
||||||
@@
|
@@
|
||||||
- if (E)
|
- if (E != NULL)
|
||||||
(
|
(
|
||||||
- kfree(E);
|
kfree(E);
|
||||||
+ kfree(E);
|
|
||||||
|
|
|
|
||||||
- debugfs_remove(E);
|
debugfs_remove(E);
|
||||||
+ debugfs_remove(E);
|
|
||||||
|
|
|
|
||||||
- debugfs_remove_recursive(E);
|
debugfs_remove_recursive(E);
|
||||||
+ debugfs_remove_recursive(E);
|
|
||||||
|
|
|
|
||||||
- usb_free_urb(E);
|
usb_free_urb(E);
|
||||||
+ usb_free_urb(E);
|
|
|
||||||
|
kmem_cache_destroy(E);
|
||||||
|
|
|
||||||
|
mempool_destroy(E);
|
||||||
|
|
|
||||||
|
dma_pool_destroy(E);
|
||||||
)
|
)
|
||||||
|
|
||||||
@r depends on context || report || org @
|
@r depends on context || report || org @
|
||||||
|
@ -36,8 +38,10 @@ expression E;
|
||||||
position p;
|
position p;
|
||||||
@@
|
@@
|
||||||
|
|
||||||
* if (E)
|
* if (E != NULL)
|
||||||
* \(kfree@p\|debugfs_remove@p\|debugfs_remove_recursive@p\|usb_free_urb\)(E);
|
* \(kfree@p\|debugfs_remove@p\|debugfs_remove_recursive@p\|
|
||||||
|
* usb_free_urb@p\|kmem_cache_destroy@p\|mempool_destroy@p\|
|
||||||
|
* dma_pool_destroy@p\)(E);
|
||||||
|
|
||||||
@script:python depends on org@
|
@script:python depends on org@
|
||||||
p << r.p;
|
p << r.p;
|
||||||
|
|
100
scripts/coccinelle/iterators/device_node_continue.cocci
Normal file
100
scripts/coccinelle/iterators/device_node_continue.cocci
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
/// Device node iterators put the previous value of the index variable, so an
|
||||||
|
/// explicit put causes a double put.
|
||||||
|
///
|
||||||
|
// Confidence: High
|
||||||
|
// Copyright: (C) 2015 Julia Lawall, Inria. GPLv2.
|
||||||
|
// URL: http://coccinelle.lip6.fr/
|
||||||
|
// Options: --no-includes --include-headers
|
||||||
|
// Keywords: for_each_child_of_node, etc.
|
||||||
|
|
||||||
|
virtual patch
|
||||||
|
virtual context
|
||||||
|
virtual org
|
||||||
|
virtual report
|
||||||
|
|
||||||
|
@r exists@
|
||||||
|
expression e1,e2;
|
||||||
|
local idexpression n;
|
||||||
|
iterator name for_each_node_by_name, for_each_node_by_type,
|
||||||
|
for_each_compatible_node, for_each_matching_node,
|
||||||
|
for_each_matching_node_and_match, for_each_child_of_node,
|
||||||
|
for_each_available_child_of_node, for_each_node_with_property;
|
||||||
|
iterator i;
|
||||||
|
position p1,p2;
|
||||||
|
statement S;
|
||||||
|
@@
|
||||||
|
|
||||||
|
(
|
||||||
|
(
|
||||||
|
for_each_node_by_name(n,e1) S
|
||||||
|
|
|
||||||
|
for_each_node_by_type(n,e1) S
|
||||||
|
|
|
||||||
|
for_each_compatible_node(n,e1,e2) S
|
||||||
|
|
|
||||||
|
for_each_matching_node(n,e1) S
|
||||||
|
|
|
||||||
|
for_each_matching_node_and_match(n,e1,e2) S
|
||||||
|
|
|
||||||
|
for_each_child_of_node(e1,n) S
|
||||||
|
|
|
||||||
|
for_each_available_child_of_node(e1,n) S
|
||||||
|
|
|
||||||
|
for_each_node_with_property(n,e1) S
|
||||||
|
)
|
||||||
|
&
|
||||||
|
i@p1(...) {
|
||||||
|
... when != of_node_get(n)
|
||||||
|
when any
|
||||||
|
of_node_put@p2(n);
|
||||||
|
... when any
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
@s exists@
|
||||||
|
local idexpression r.n;
|
||||||
|
statement S;
|
||||||
|
position r.p1,r.p2;
|
||||||
|
iterator i;
|
||||||
|
@@
|
||||||
|
|
||||||
|
of_node_put@p2(n);
|
||||||
|
... when any
|
||||||
|
i@p1(..., n, ...)
|
||||||
|
S
|
||||||
|
|
||||||
|
@t depends on s && patch && !context && !org && !report@
|
||||||
|
local idexpression n;
|
||||||
|
position r.p2;
|
||||||
|
@@
|
||||||
|
|
||||||
|
- of_node_put@p2(n);
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@t_context depends on s && !patch && (context || org || report)@
|
||||||
|
local idexpression n;
|
||||||
|
position r.p2;
|
||||||
|
position j0;
|
||||||
|
@@
|
||||||
|
|
||||||
|
* of_node_put@j0@p2(n);
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@script:python t_org depends on org@
|
||||||
|
j0 << t_context.j0;
|
||||||
|
@@
|
||||||
|
|
||||||
|
msg = "ERROR: probable double put."
|
||||||
|
coccilib.org.print_todo(j0[0], msg)
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@script:python t_report depends on report@
|
||||||
|
j0 << t_context.j0;
|
||||||
|
@@
|
||||||
|
|
||||||
|
msg = "ERROR: probable double put."
|
||||||
|
coccilib.report.print_report(j0[0], msg)
|
||||||
|
|
171
scripts/coccinelle/misc/compare_const_fl.cocci
Normal file
171
scripts/coccinelle/misc/compare_const_fl.cocci
Normal file
|
@ -0,0 +1,171 @@
|
||||||
|
/// Move constants to the right of binary operators.
|
||||||
|
//# Depends on personal taste in some cases.
|
||||||
|
///
|
||||||
|
// Confidence: Moderate
|
||||||
|
// Copyright: (C) 2015 Copyright: (C) 2015 Julia Lawall, Inria. GPLv2.
|
||||||
|
// URL: http://coccinelle.lip6.fr/
|
||||||
|
// Options: --no-includes --include-headers
|
||||||
|
|
||||||
|
virtual patch
|
||||||
|
virtual context
|
||||||
|
virtual org
|
||||||
|
virtual report
|
||||||
|
|
||||||
|
@r1 depends on patch && !context && !org && !report
|
||||||
|
disable bitor_comm, neg_if_exp@
|
||||||
|
constant c,c1;
|
||||||
|
local idexpression i;
|
||||||
|
expression e,e1,e2;
|
||||||
|
binary operator b = {==,!=,&,|};
|
||||||
|
type t;
|
||||||
|
@@
|
||||||
|
|
||||||
|
(
|
||||||
|
c b (c1)
|
||||||
|
|
|
||||||
|
sizeof(t) b e1
|
||||||
|
|
|
||||||
|
sizeof e b e1
|
||||||
|
|
|
||||||
|
i b e1
|
||||||
|
|
|
||||||
|
c | e1 | e2 | ...
|
||||||
|
|
|
||||||
|
c | (e ? e1 : e2)
|
||||||
|
|
|
||||||
|
- c
|
||||||
|
+ e
|
||||||
|
b
|
||||||
|
- e
|
||||||
|
+ c
|
||||||
|
)
|
||||||
|
|
||||||
|
@r2 depends on patch && !context && !org && !report
|
||||||
|
disable gtr_lss, gtr_lss_eq, not_int2@
|
||||||
|
constant c,c1;
|
||||||
|
expression e,e1,e2;
|
||||||
|
binary operator b;
|
||||||
|
binary operator b1 = {<,<=},b2 = {<,<=};
|
||||||
|
binary operator b3 = {>,>=},b4 = {>,>=};
|
||||||
|
local idexpression i;
|
||||||
|
type t;
|
||||||
|
@@
|
||||||
|
|
||||||
|
(
|
||||||
|
c b c1
|
||||||
|
|
|
||||||
|
sizeof(t) b e1
|
||||||
|
|
|
||||||
|
sizeof e b e1
|
||||||
|
|
|
||||||
|
(e1 b1 e) && (e b2 e2)
|
||||||
|
|
|
||||||
|
(e1 b3 e) && (e b4 e2)
|
||||||
|
|
|
||||||
|
i b e
|
||||||
|
|
|
||||||
|
- c < e
|
||||||
|
+ e > c
|
||||||
|
|
|
||||||
|
- c <= e
|
||||||
|
+ e >= c
|
||||||
|
|
|
||||||
|
- c > e
|
||||||
|
+ e < c
|
||||||
|
|
|
||||||
|
- c >= e
|
||||||
|
+ e <= c
|
||||||
|
)
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@r1_context depends on !patch && (context || org || report)
|
||||||
|
disable bitor_comm, neg_if_exp exists@
|
||||||
|
type t;
|
||||||
|
binary operator b = {==,!=,&,|};
|
||||||
|
constant c, c1;
|
||||||
|
expression e, e1, e2;
|
||||||
|
local idexpression i;
|
||||||
|
position j0;
|
||||||
|
@@
|
||||||
|
|
||||||
|
(
|
||||||
|
c b (c1)
|
||||||
|
|
|
||||||
|
sizeof(t) b e1
|
||||||
|
|
|
||||||
|
sizeof e b e1
|
||||||
|
|
|
||||||
|
i b e1
|
||||||
|
|
|
||||||
|
c | e1 | e2 | ...
|
||||||
|
|
|
||||||
|
c | (e ? e1 : e2)
|
||||||
|
|
|
||||||
|
* c@j0 b e
|
||||||
|
)
|
||||||
|
|
||||||
|
@r2_context depends on !patch && (context || org || report)
|
||||||
|
disable gtr_lss, gtr_lss_eq, not_int2 exists@
|
||||||
|
type t;
|
||||||
|
binary operator b, b1 = {<,<=}, b2 = {<,<=}, b3 = {>,>=}, b4 = {>,>=};
|
||||||
|
constant c, c1;
|
||||||
|
expression e, e1, e2;
|
||||||
|
local idexpression i;
|
||||||
|
position j0;
|
||||||
|
@@
|
||||||
|
|
||||||
|
(
|
||||||
|
c b c1
|
||||||
|
|
|
||||||
|
sizeof(t) b e1
|
||||||
|
|
|
||||||
|
sizeof e b e1
|
||||||
|
|
|
||||||
|
(e1 b1 e) && (e b2 e2)
|
||||||
|
|
|
||||||
|
(e1 b3 e) && (e b4 e2)
|
||||||
|
|
|
||||||
|
i b e
|
||||||
|
|
|
||||||
|
* c@j0 < e
|
||||||
|
|
|
||||||
|
* c@j0 <= e
|
||||||
|
|
|
||||||
|
* c@j0 > e
|
||||||
|
|
|
||||||
|
* c@j0 >= e
|
||||||
|
)
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@script:python r1_org depends on org@
|
||||||
|
j0 << r1_context.j0;
|
||||||
|
@@
|
||||||
|
|
||||||
|
msg = "Move constant to right."
|
||||||
|
coccilib.org.print_todo(j0[0], msg)
|
||||||
|
|
||||||
|
@script:python r2_org depends on org@
|
||||||
|
j0 << r2_context.j0;
|
||||||
|
@@
|
||||||
|
|
||||||
|
msg = "Move constant to right."
|
||||||
|
coccilib.org.print_todo(j0[0], msg)
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@script:python r1_report depends on report@
|
||||||
|
j0 << r1_context.j0;
|
||||||
|
@@
|
||||||
|
|
||||||
|
msg = "Move constant to right."
|
||||||
|
coccilib.report.print_report(j0[0], msg)
|
||||||
|
|
||||||
|
@script:python r2_report depends on report@
|
||||||
|
j0 << r2_context.j0;
|
||||||
|
@@
|
||||||
|
|
||||||
|
msg = "Move constant to right."
|
||||||
|
coccilib.report.print_report(j0[0], msg)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/// Make sure of_device_id tables are NULL terminated
|
/// Make sure (of/i2c/platform)_device_id tables are NULL terminated
|
||||||
//
|
//
|
||||||
// Keywords: of_table
|
// Keywords: of_table i2c_table platform_table
|
||||||
// Confidence: Medium
|
// Confidence: Medium
|
||||||
// Options: --include-headers
|
// Options: --include-headers
|
||||||
|
|
||||||
|
@ -13,18 +13,26 @@ virtual report
|
||||||
identifier var, arr;
|
identifier var, arr;
|
||||||
expression E;
|
expression E;
|
||||||
@@
|
@@
|
||||||
struct of_device_id arr[] = {
|
(
|
||||||
|
struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
|
||||||
...,
|
...,
|
||||||
{
|
{
|
||||||
.var = E,
|
.var = E,
|
||||||
* }
|
* }
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
|
||||||
|
...,
|
||||||
|
* { ..., E, ... },
|
||||||
|
};
|
||||||
|
)
|
||||||
|
|
||||||
@depends on patch@
|
@depends on patch@
|
||||||
identifier var, arr;
|
identifier var, arr;
|
||||||
expression E;
|
expression E;
|
||||||
@@
|
@@
|
||||||
struct of_device_id arr[] = {
|
(
|
||||||
|
struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
|
||||||
...,
|
...,
|
||||||
{
|
{
|
||||||
.var = E,
|
.var = E,
|
||||||
|
@ -32,19 +40,34 @@ struct of_device_id arr[] = {
|
||||||
+ },
|
+ },
|
||||||
+ { }
|
+ { }
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
|
||||||
|
...,
|
||||||
|
{ ..., E, ... },
|
||||||
|
+ { },
|
||||||
|
};
|
||||||
|
)
|
||||||
|
|
||||||
@r depends on org || report@
|
@r depends on org || report@
|
||||||
position p1;
|
position p1;
|
||||||
identifier var, arr;
|
identifier var, arr;
|
||||||
expression E;
|
expression E;
|
||||||
@@
|
@@
|
||||||
struct of_device_id arr[] = {
|
(
|
||||||
|
struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
|
||||||
...,
|
...,
|
||||||
{
|
{
|
||||||
.var = E,
|
.var = E,
|
||||||
}
|
}
|
||||||
@p1
|
@p1
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = {
|
||||||
|
...,
|
||||||
|
{ ..., E, ... }
|
||||||
|
@p1
|
||||||
|
};
|
||||||
|
)
|
||||||
|
|
||||||
@script:python depends on org@
|
@script:python depends on org@
|
||||||
p1 << r.p1;
|
p1 << r.p1;
|
||||||
|
|
|
@ -1,180 +0,0 @@
|
||||||
/// Simplify a trivial if-return sequence. Possibly combine with a
|
|
||||||
/// preceding function call.
|
|
||||||
///
|
|
||||||
// Confidence: High
|
|
||||||
// Copyright: (C) 2014 Julia Lawall, INRIA/LIP6. GPLv2.
|
|
||||||
// Copyright: (C) 2014 Gilles Muller, INRIA/LiP6. GPLv2.
|
|
||||||
// URL: http://coccinelle.lip6.fr/
|
|
||||||
// Comments:
|
|
||||||
// Options: --no-includes --include-headers
|
|
||||||
|
|
||||||
virtual patch
|
|
||||||
virtual context
|
|
||||||
virtual org
|
|
||||||
virtual report
|
|
||||||
|
|
||||||
@r depends on patch@
|
|
||||||
local idexpression e;
|
|
||||||
identifier i,f,fn;
|
|
||||||
@@
|
|
||||||
|
|
||||||
fn(...) { <...
|
|
||||||
- e@i =
|
|
||||||
+ return
|
|
||||||
f(...);
|
|
||||||
-if (i != 0) return i;
|
|
||||||
-return 0;
|
|
||||||
...> }
|
|
||||||
|
|
||||||
@depends on patch@
|
|
||||||
identifier r.i;
|
|
||||||
type t;
|
|
||||||
@@
|
|
||||||
|
|
||||||
-t i;
|
|
||||||
... when != i
|
|
||||||
|
|
||||||
@depends on patch@
|
|
||||||
expression e;
|
|
||||||
@@
|
|
||||||
|
|
||||||
-if (e != 0)
|
|
||||||
return e;
|
|
||||||
-return 0;
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------
|
|
||||||
|
|
||||||
@s1 depends on context || org || report@
|
|
||||||
local idexpression e;
|
|
||||||
identifier i,f,fn;
|
|
||||||
position p,p1,p2;
|
|
||||||
@@
|
|
||||||
|
|
||||||
fn(...) { <...
|
|
||||||
* e@i@p = f(...);
|
|
||||||
if (\(i@p1 != 0\|i@p2 < 0\))
|
|
||||||
return i;
|
|
||||||
return 0;
|
|
||||||
...> }
|
|
||||||
|
|
||||||
@s2 depends on context || org || report forall@
|
|
||||||
identifier s1.i;
|
|
||||||
type t;
|
|
||||||
position q,s1.p;
|
|
||||||
expression e,f;
|
|
||||||
@@
|
|
||||||
|
|
||||||
* t i@q;
|
|
||||||
... when != i
|
|
||||||
e@p = f(...);
|
|
||||||
|
|
||||||
@s3 depends on context || org || report@
|
|
||||||
expression e;
|
|
||||||
position p1!=s1.p1;
|
|
||||||
position p2!=s1.p2;
|
|
||||||
@@
|
|
||||||
|
|
||||||
*if (\(e@p1 != 0\|e@p2 < 0\))
|
|
||||||
return e;
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------
|
|
||||||
|
|
||||||
@script:python depends on org@
|
|
||||||
p << s1.p;
|
|
||||||
p1 << s1.p1;
|
|
||||||
q << s2.q;
|
|
||||||
@@
|
|
||||||
|
|
||||||
cocci.print_main("decl",q)
|
|
||||||
cocci.print_secs("use",p)
|
|
||||||
cocci.include_match(False)
|
|
||||||
|
|
||||||
@script:python depends on org@
|
|
||||||
p << s1.p;
|
|
||||||
p2 << s1.p2;
|
|
||||||
q << s2.q;
|
|
||||||
@@
|
|
||||||
|
|
||||||
cocci.print_main("decl",q)
|
|
||||||
cocci.print_secs("use with questionable test",p)
|
|
||||||
cocci.include_match(False)
|
|
||||||
|
|
||||||
@script:python depends on org@
|
|
||||||
p << s1.p;
|
|
||||||
p1 << s1.p1;
|
|
||||||
@@
|
|
||||||
|
|
||||||
cocci.print_main("use",p)
|
|
||||||
|
|
||||||
@script:python depends on org@
|
|
||||||
p << s1.p;
|
|
||||||
p2 << s1.p2;
|
|
||||||
@@
|
|
||||||
|
|
||||||
cocci.print_main("use with questionable test",p)
|
|
||||||
|
|
||||||
@script:python depends on org@
|
|
||||||
p << s3.p1;
|
|
||||||
@@
|
|
||||||
|
|
||||||
cocci.print_main("test",p)
|
|
||||||
|
|
||||||
@script:python depends on org@
|
|
||||||
p << s3.p2;
|
|
||||||
@@
|
|
||||||
|
|
||||||
cocci.print_main("questionable test",p)
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------
|
|
||||||
|
|
||||||
@script:python depends on report@
|
|
||||||
p << s1.p;
|
|
||||||
p1 << s1.p1;
|
|
||||||
q << s2.q;
|
|
||||||
@@
|
|
||||||
|
|
||||||
msg = "WARNING: end returns can be simpified and declaration on line %s can be dropped" % (q[0].line)
|
|
||||||
coccilib.report.print_report(p[0],msg)
|
|
||||||
cocci.include_match(False)
|
|
||||||
|
|
||||||
@script:python depends on report@
|
|
||||||
p << s1.p;
|
|
||||||
p1 << s1.p1;
|
|
||||||
q << s2.q
|
|
||||||
;
|
|
||||||
@@
|
|
||||||
|
|
||||||
msg = "WARNING: end returns may be simpified if negative or 0 value and declaration on line %s can be dropped" % (q[0].line)
|
|
||||||
coccilib.report.print_report(p[0],msg)
|
|
||||||
cocci.include_match(False)
|
|
||||||
|
|
||||||
@script:python depends on report@
|
|
||||||
p << s1.p;
|
|
||||||
p1 << s1.p1;
|
|
||||||
@@
|
|
||||||
|
|
||||||
msg = "WARNING: end returns can be simpified"
|
|
||||||
coccilib.report.print_report(p[0],msg)
|
|
||||||
|
|
||||||
@script:python depends on report@
|
|
||||||
p << s1.p;
|
|
||||||
p2 << s1.p2;
|
|
||||||
@@
|
|
||||||
|
|
||||||
msg = "WARNING: end returns can be simpified if negative or 0 value"
|
|
||||||
coccilib.report.print_report(p[0],msg)
|
|
||||||
|
|
||||||
@script:python depends on report@
|
|
||||||
p << s3.p1;
|
|
||||||
@@
|
|
||||||
|
|
||||||
msg = "WARNING: end returns can be simpified"
|
|
||||||
coccilib.report.print_report(p[0],msg)
|
|
||||||
|
|
||||||
@script:python depends on report@
|
|
||||||
p << s3.p2;
|
|
||||||
@@
|
|
||||||
|
|
||||||
msg = "WARNING: end returns can be simpified if tested value is negative or 0"
|
|
||||||
coccilib.report.print_report(p[0],msg)
|
|
|
@ -1,6 +1,6 @@
|
||||||
///
|
///
|
||||||
/// A variable is dereference under a NULL test.
|
/// A variable is dereferenced under a NULL test.
|
||||||
/// Even though it is know to be NULL.
|
/// Even though it is known to be NULL.
|
||||||
///
|
///
|
||||||
// Confidence: Moderate
|
// Confidence: Moderate
|
||||||
// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2.
|
// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2.
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
/// PTR_ERR should access the value just tested by IS_ERR
|
/// PTR_ERR should access the value just tested by IS_ERR
|
||||||
//# There can be false positives in the patch case, where it is the call
|
//# There can be false positives in the patch case, where it is the call to
|
||||||
//# IS_ERR that is wrong.
|
//# IS_ERR that is wrong.
|
||||||
///
|
///
|
||||||
// Confidence: High
|
// Confidence: High
|
||||||
// Copyright: (C) 2012 Julia Lawall, INRIA. GPLv2.
|
// Copyright: (C) 2012, 2015 Julia Lawall, INRIA. GPLv2.
|
||||||
// Copyright: (C) 2012 Gilles Muller, INRIA. GPLv2.
|
// Copyright: (C) 2012, 2015 Gilles Muller, INRIA. GPLv2.
|
||||||
// URL: http://coccinelle.lip6.fr/
|
// URL: http://coccinelle.lip6.fr/
|
||||||
// Comments:
|
|
||||||
// Options: --no-includes --include-headers
|
// Options: --no-includes --include-headers
|
||||||
|
|
||||||
virtual patch
|
virtual patch
|
||||||
|
@ -14,52 +13,105 @@ virtual context
|
||||||
virtual org
|
virtual org
|
||||||
virtual report
|
virtual report
|
||||||
|
|
||||||
@depends on patch@
|
@ok1 exists@
|
||||||
expression e,e1;
|
expression x,e;
|
||||||
|
position p;
|
||||||
@@
|
@@
|
||||||
|
|
||||||
|
if (IS_ERR(x=e) || ...) {
|
||||||
|
<...
|
||||||
|
PTR_ERR@p(x)
|
||||||
|
...>
|
||||||
|
}
|
||||||
|
|
||||||
|
@ok2 exists@
|
||||||
|
expression x,e1,e2;
|
||||||
|
position p;
|
||||||
|
@@
|
||||||
|
|
||||||
|
if (IS_ERR(x) || ...) {
|
||||||
|
<...
|
||||||
(
|
(
|
||||||
if (IS_ERR(e)) { ... PTR_ERR(e) ... }
|
PTR_ERR@p(\(e1 ? e2 : x\|e1 ? x : e2\))
|
||||||
|
|
|
|
||||||
if (IS_ERR(e=e1)) { ... PTR_ERR(e) ... }
|
PTR_ERR@p(x)
|
||||||
|
|
|
||||||
if (IS_ERR(e))
|
|
||||||
{ ...
|
|
||||||
PTR_ERR(
|
|
||||||
- e1
|
|
||||||
+ e
|
|
||||||
)
|
|
||||||
... }
|
|
||||||
)
|
)
|
||||||
|
...>
|
||||||
|
}
|
||||||
|
|
||||||
@r depends on !patch@
|
@r1 depends on patch && !context && !org && !report exists@
|
||||||
expression e,e1;
|
expression x,y;
|
||||||
position p1,p2;
|
position p != {ok1.p,ok2.p};
|
||||||
@@
|
@@
|
||||||
|
|
||||||
|
if (IS_ERR(x) || ...) {
|
||||||
|
... when any
|
||||||
|
when != IS_ERR(...)
|
||||||
(
|
(
|
||||||
if (IS_ERR(e)) { ... PTR_ERR(e) ... }
|
PTR_ERR(x)
|
||||||
|
|
|
|
||||||
if (IS_ERR(e=e1)) { ... PTR_ERR(e) ... }
|
PTR_ERR@p(
|
||||||
|
|
- y
|
||||||
*if (IS_ERR@p1(e))
|
+ x
|
||||||
{ ...
|
|
||||||
* PTR_ERR@p2(e1)
|
|
||||||
... }
|
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
... when any
|
||||||
|
}
|
||||||
|
|
||||||
@script:python depends on org@
|
// ----------------------------------------------------------------------------
|
||||||
p1 << r.p1;
|
|
||||||
p2 << r.p2;
|
@r1_context depends on !patch && (context || org || report) exists@
|
||||||
|
position p != {ok1.p,ok2.p};
|
||||||
|
expression x, y;
|
||||||
|
position j0, j1;
|
||||||
@@
|
@@
|
||||||
|
|
||||||
cocci.print_main("inconsistent IS_ERR and PTR_ERR",p1)
|
if (IS_ERR@j0(x) || ...) {
|
||||||
cocci.print_secs("PTR_ERR",p2)
|
... when any
|
||||||
|
when != IS_ERR(...)
|
||||||
|
(
|
||||||
|
PTR_ERR(x)
|
||||||
|
|
|
||||||
|
PTR_ERR@j1@p(
|
||||||
|
y
|
||||||
|
)
|
||||||
|
)
|
||||||
|
... when any
|
||||||
|
}
|
||||||
|
|
||||||
@script:python depends on report@
|
@r1_disj depends on !patch && (context || org || report) exists@
|
||||||
p1 << r.p1;
|
position p != {ok1.p,ok2.p};
|
||||||
p2 << r.p2;
|
expression x, y;
|
||||||
|
position r1_context.j0, r1_context.j1;
|
||||||
@@
|
@@
|
||||||
|
|
||||||
msg = "inconsistent IS_ERR and PTR_ERR, PTR_ERR on line %s" % (p2[0].line)
|
* if (IS_ERR@j0(x) || ...) {
|
||||||
coccilib.report.print_report(p1[0],msg)
|
... when any
|
||||||
|
when != IS_ERR(...)
|
||||||
|
* PTR_ERR@j1@p(
|
||||||
|
y
|
||||||
|
)
|
||||||
|
... when any
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@script:python r1_org depends on org@
|
||||||
|
j0 << r1_context.j0;
|
||||||
|
j1 << r1_context.j1;
|
||||||
|
@@
|
||||||
|
|
||||||
|
msg = "inconsistent IS_ERR and PTR_ERR"
|
||||||
|
coccilib.org.print_todo(j0[0], msg)
|
||||||
|
coccilib.org.print_link(j1[0], "")
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@script:python r1_report depends on report@
|
||||||
|
j0 << r1_context.j0;
|
||||||
|
j1 << r1_context.j1;
|
||||||
|
@@
|
||||||
|
|
||||||
|
msg = "inconsistent IS_ERR and PTR_ERR on line %s." % (j1[0].line)
|
||||||
|
coccilib.report.print_report(j0[0], msg)
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,16 @@ set_debarch() {
|
||||||
arm64)
|
arm64)
|
||||||
debarch=arm64 ;;
|
debarch=arm64 ;;
|
||||||
arm*)
|
arm*)
|
||||||
debarch=arm$(grep -q CONFIG_AEABI=y $KCONFIG_CONFIG && echo el || true) ;;
|
if grep -q CONFIG_AEABI=y $KCONFIG_CONFIG; then
|
||||||
|
if grep -q CONFIG_VFP=y $KCONFIG_CONFIG; then
|
||||||
|
debarch=armhf
|
||||||
|
else
|
||||||
|
debarch=armel
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
debarch=arm
|
||||||
|
fi
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
debarch=$(dpkg --print-architecture)
|
debarch=$(dpkg --print-architecture)
|
||||||
echo "" >&2
|
echo "" >&2
|
||||||
|
|
|
@ -198,6 +198,8 @@ exuberant()
|
||||||
--regex-c++='/TASK_PFA_TEST\([^,]*,\s*([^)]*)\)/task_\1/' \
|
--regex-c++='/TASK_PFA_TEST\([^,]*,\s*([^)]*)\)/task_\1/' \
|
||||||
--regex-c++='/TASK_PFA_SET\([^,]*,\s*([^)]*)\)/task_set_\1/' \
|
--regex-c++='/TASK_PFA_SET\([^,]*,\s*([^)]*)\)/task_set_\1/' \
|
||||||
--regex-c++='/TASK_PFA_CLEAR\([^,]*,\s*([^)]*)\)/task_clear_\1/'\
|
--regex-c++='/TASK_PFA_CLEAR\([^,]*,\s*([^)]*)\)/task_clear_\1/'\
|
||||||
|
--regex-c++='/DEF_MMIO_(IN|OUT)_(X|D)\(([^,]*),\s*[^)]*\)/\3/' \
|
||||||
|
--regex-c++='/DEBUGGER_BOILERPLATE\(([^,]*)\)/\1/' \
|
||||||
--regex-c='/PCI_OP_READ\((\w*).*[1-4]\)/pci_bus_read_config_\1/' \
|
--regex-c='/PCI_OP_READ\((\w*).*[1-4]\)/pci_bus_read_config_\1/' \
|
||||||
--regex-c='/PCI_OP_WRITE\((\w*).*[1-4]\)/pci_bus_write_config_\1/' \
|
--regex-c='/PCI_OP_WRITE\((\w*).*[1-4]\)/pci_bus_write_config_\1/' \
|
||||||
--regex-c='/DEFINE_(MUTEX|SEMAPHORE|SPINLOCK)\((\w*)/\2/v/' \
|
--regex-c='/DEFINE_(MUTEX|SEMAPHORE|SPINLOCK)\((\w*)/\2/v/' \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue