GNU Linux-libre 5.19-rc6-gnu
[releases.git] / scripts / coccinelle / null / kmerr.cocci
1 // SPDX-License-Identifier: GPL-2.0-only
2 /// This semantic patch looks for kmalloc etc that are not followed by a
3 /// NULL check.  It only gives a report in the case where there is some
4 /// error handling code later in the function, which may be helpful
5 /// in determining what the error handling code for the call to kmalloc etc
6 /// should be.
7 ///
8 // Confidence: High
9 // Copyright: (C) 2010 Nicolas Palix, DIKU.
10 // Copyright: (C) 2010 Julia Lawall, DIKU.
11 // Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.
12 // URL: http://coccinelle.lip6.fr/
13 // Comments:
14 // Options: --no-includes --include-headers
15
16 virtual context
17 virtual org
18 virtual report
19
20 @withtest@
21 expression x;
22 position p;
23 identifier f,fld;
24 @@
25
26 x@p = f(...);
27 ... when != x->fld
28 \(x == NULL \| x != NULL\)
29
30 @fixed depends on context && !org && !report@
31 expression x,x1;
32 position p1 != withtest.p;
33 statement S;
34 position any withtest.p;
35 identifier f;
36 @@
37
38 *x@p1 = \(kmalloc\|kzalloc\|kcalloc\)(...);
39 ...
40 *x1@p = f(...);
41 if (!x1) S
42
43 // ------------------------------------------------------------------------
44
45 @rfixed depends on (org || report) && !context exists@
46 expression x,x1;
47 position p1 != withtest.p;
48 position p2;
49 statement S;
50 position any withtest.p;
51 identifier f;
52 @@
53
54 x@p1 = \(kmalloc\|kzalloc\|kcalloc\)(...);
55 ...
56 x1@p = f@p2(...);
57 if (!x1) S
58
59 @script:python depends on org@
60 p1 << rfixed.p1;
61 p2 << rfixed.p2;
62 @@
63
64 cocci.print_main("alloc call",p1)
65 cocci.print_secs("possible model",p2)
66
67 @script:python depends on report@
68 p1 << rfixed.p1;
69 p2 << rfixed.p2;
70 @@
71
72 msg = "alloc with no test, possible model on line %s" % (p2[0].line)
73 coccilib.report.print_report(p1[0],msg)