diff options
Diffstat (limited to 'scripts/coccinelle/api/alloc/kzalloc-simple.cocci')
-rw-r--r-- | scripts/coccinelle/api/alloc/kzalloc-simple.cocci | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/scripts/coccinelle/api/alloc/kzalloc-simple.cocci b/scripts/coccinelle/api/alloc/kzalloc-simple.cocci new file mode 100644 index 000000000000..046b9b16f8f9 --- /dev/null +++ b/scripts/coccinelle/api/alloc/kzalloc-simple.cocci | |||
@@ -0,0 +1,86 @@ | |||
1 | /// | ||
2 | /// Use kzalloc rather than kmalloc followed by memset with 0 | ||
3 | /// | ||
4 | /// This considers some simple cases that are common and easy to validate | ||
5 | /// Note in particular that there are no ...s in the rule, so all of the | ||
6 | /// matched code has to be contiguous | ||
7 | /// | ||
8 | // Confidence: High | ||
9 | // Copyright: (C) 2009-2010 Julia Lawall, Nicolas Palix, DIKU. GPLv2. | ||
10 | // Copyright: (C) 2009-2010 Gilles Muller, INRIA/LiP6. GPLv2. | ||
11 | // URL: http://coccinelle.lip6.fr/rules/kzalloc.html | ||
12 | // Options: -no_includes -include_headers | ||
13 | // | ||
14 | // Keywords: kmalloc, kzalloc | ||
15 | // Version min: < 2.6.12 kmalloc | ||
16 | // Version min: 2.6.14 kzalloc | ||
17 | // | ||
18 | |||
19 | virtual context | ||
20 | virtual patch | ||
21 | virtual org | ||
22 | virtual report | ||
23 | |||
24 | //---------------------------------------------------------- | ||
25 | // For context mode | ||
26 | //---------------------------------------------------------- | ||
27 | |||
28 | @depends on context@ | ||
29 | type T, T2; | ||
30 | expression x; | ||
31 | expression E1,E2; | ||
32 | statement S; | ||
33 | @@ | ||
34 | |||
35 | * x = (T)kmalloc(E1,E2); | ||
36 | if ((x==NULL) || ...) S | ||
37 | * memset((T2)x,0,E1); | ||
38 | |||
39 | //---------------------------------------------------------- | ||
40 | // For patch mode | ||
41 | //---------------------------------------------------------- | ||
42 | |||
43 | @depends on patch@ | ||
44 | type T, T2; | ||
45 | expression x; | ||
46 | expression E1,E2; | ||
47 | statement S; | ||
48 | @@ | ||
49 | |||
50 | - x = (T)kmalloc(E1,E2); | ||
51 | + x = kzalloc(E1,E2); | ||
52 | if ((x==NULL) || ...) S | ||
53 | - memset((T2)x,0,E1); | ||
54 | |||
55 | //---------------------------------------------------------- | ||
56 | // For org mode | ||
57 | //---------------------------------------------------------- | ||
58 | |||
59 | @r depends on org || report@ | ||
60 | type T, T2; | ||
61 | expression x; | ||
62 | expression E1,E2; | ||
63 | statement S; | ||
64 | position p; | ||
65 | @@ | ||
66 | |||
67 | x = (T)kmalloc@p(E1,E2); | ||
68 | if ((x==NULL) || ...) S | ||
69 | memset((T2)x,0,E1); | ||
70 | |||
71 | @script:python depends on org@ | ||
72 | p << r.p; | ||
73 | x << r.x; | ||
74 | @@ | ||
75 | |||
76 | msg="%s" % (x) | ||
77 | msg_safe=msg.replace("[","@(").replace("]",")") | ||
78 | coccilib.org.print_todo(p[0], msg_safe) | ||
79 | |||
80 | @script:python depends on report@ | ||
81 | p << r.p; | ||
82 | x << r.x; | ||
83 | @@ | ||
84 | |||
85 | msg="WARNING: kzalloc should be used for %s, instead of kmalloc/memset" % (x) | ||
86 | coccilib.report.print_report(p[0], msg) | ||