]>
Commit | Line | Data |
---|---|---|
c75b81bf NP |
1 | /// The various basic memory allocation functions don't return ERR_PTR |
2 | /// | |
3 | // Confidence: High | |
29a36d4d JL |
4 | // Copyright: (C) 2010-2012 Nicolas Palix. GPLv2. |
5 | // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6. GPLv2. | |
6 | // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6. GPLv2. | |
c75b81bf NP |
7 | // URL: http://coccinelle.lip6.fr/ |
8 | // Comments: | |
9 | // Options: -no_includes -include_headers | |
10 | ||
11 | virtual patch | |
29a36d4d JL |
12 | virtual context |
13 | virtual org | |
14 | virtual report | |
c75b81bf | 15 | |
29a36d4d | 16 | @depends on patch@ |
c75b81bf NP |
17 | expression x,E; |
18 | @@ | |
19 | ||
20 | x = \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\)(...) | |
21 | ... when != x = E | |
22 | - IS_ERR(x) | |
23 | + !x | |
29a36d4d JL |
24 | |
25 | @r depends on !patch exists@ | |
26 | expression x,E; | |
27 | position p1,p2; | |
28 | @@ | |
29 | ||
30 | *x = \(kmalloc@p1\|kzalloc@p1\|kcalloc@p1\|kmem_cache_alloc@p1\|kmem_cache_zalloc@p1\|kmem_cache_alloc_node@p1\|kmalloc_node@p1\|kzalloc_node@p1\)(...) | |
31 | ... when != x = E | |
32 | * IS_ERR@p2(x) | |
33 | ||
34 | @script:python depends on org@ | |
35 | p1 << r.p1; | |
36 | p2 << r.p2; | |
37 | @@ | |
38 | ||
39 | cocci.print_main("alloc call",p1) | |
40 | cocci.print_secs("IS_ERR that should be NULL tests",p2) | |
41 | ||
42 | @script:python depends on report@ | |
43 | p1 << r.p1; | |
44 | p2 << r.p2; | |
45 | @@ | |
46 | ||
47 | msg = "ERROR: allocation function on line %s returns NULL not ERR_PTR on failure" % (p1[0].line) | |
48 | coccilib.report.print_report(p2[0], msg) |