Merge tag 'block-5.11-2021-01-10' of git://git.kernel.dk/linux-block
[linux/fpc-iii.git] / scripts / coccinelle / null / kmerr.cocci
blobd0e004d4e130760c326c44338448d80ea9059fef
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
16 virtual context
17 virtual org
18 virtual report
20 @withtest@
21 expression x;
22 position p;
23 identifier f,fld;
26 x@p = f(...);
27 ... when != x->fld
28 \(x == NULL \| x != NULL\)
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;
38 *x@p1 = \(kmalloc\|kzalloc\|kcalloc\)(...);
39 ...
40 *x1@p = f(...);
41 if (!x1) S
43 // ------------------------------------------------------------------------
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;
54 x@p1 = \(kmalloc\|kzalloc\|kcalloc\)(...);
55 ...
56 x1@p = f@p2(...);
57 if (!x1) S
59 @script:python depends on org@
60 p1 << rfixed.p1;
61 p2 << rfixed.p2;
64 cocci.print_main("alloc call",p1)
65 cocci.print_secs("possible model",p2)
67 @script:python depends on report@
68 p1 << rfixed.p1;
69 p2 << rfixed.p2;
72 msg = "alloc with no test, possible model on line %s" % (p2[0].line)
73 coccilib.report.print_report(p1[0],msg)