diff options
Diffstat (limited to 'scripts/coccinelle/free/ifnullfree.cocci')
-rw-r--r-- | scripts/coccinelle/free/ifnullfree.cocci | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/scripts/coccinelle/free/ifnullfree.cocci b/scripts/coccinelle/free/ifnullfree.cocci new file mode 100644 index 000000000..285b92d5c --- /dev/null +++ b/scripts/coccinelle/free/ifnullfree.cocci | |||
@@ -0,0 +1,67 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0-only | ||
2 | /// NULL check before some freeing functions is not needed. | ||
3 | /// | ||
4 | /// Based on checkpatch warning | ||
5 | /// "kfree(NULL) is safe this check is probably not required" | ||
6 | /// and kfreeaddr.cocci by Julia Lawall. | ||
7 | /// | ||
8 | // Copyright: (C) 2014 Fabian Frederick. | ||
9 | // Comments: - | ||
10 | // Options: --no-includes --include-headers | ||
11 | |||
12 | virtual patch | ||
13 | virtual org | ||
14 | virtual report | ||
15 | virtual context | ||
16 | |||
17 | @r2 depends on patch@ | ||
18 | expression E; | ||
19 | @@ | ||
20 | - if (E != NULL) | ||
21 | ( | ||
22 | kfree(E); | ||
23 | | | ||
24 | kvfree(E); | ||
25 | | | ||
26 | kfree_sensitive(E); | ||
27 | | | ||
28 | kvfree_sensitive(E, ...); | ||
29 | | | ||
30 | vfree(E); | ||
31 | | | ||
32 | debugfs_remove(E); | ||
33 | | | ||
34 | debugfs_remove_recursive(E); | ||
35 | | | ||
36 | usb_free_urb(E); | ||
37 | | | ||
38 | kmem_cache_destroy(E); | ||
39 | | | ||
40 | mempool_destroy(E); | ||
41 | | | ||
42 | dma_pool_destroy(E); | ||
43 | ) | ||
44 | |||
45 | @r depends on context || report || org @ | ||
46 | expression E; | ||
47 | position p; | ||
48 | @@ | ||
49 | |||
50 | * if (E != NULL) | ||
51 | * \(kfree@p\|kvfree@p\|kfree_sensitive@p\|kvfree_sensitive@p\|vfree@p\| | ||
52 | * debugfs_remove@p\|debugfs_remove_recursive@p\| | ||
53 | * usb_free_urb@p\|kmem_cache_destroy@p\|mempool_destroy@p\| | ||
54 | * dma_pool_destroy@p\)(E, ...); | ||
55 | |||
56 | @script:python depends on org@ | ||
57 | p << r.p; | ||
58 | @@ | ||
59 | |||
60 | cocci.print_main("NULL check before that freeing function is not needed", p) | ||
61 | |||
62 | @script:python depends on report@ | ||
63 | p << r.p; | ||
64 | @@ | ||
65 | |||
66 | msg = "WARNING: NULL check before some freeing functions is not needed." | ||
67 | coccilib.report.print_report(p[0], msg) | ||