History

Coccinelle: alloc_cast: Add more memory allocating functions to the list

Add more memory allocating functions that are frequently used in the kernel code to the existing list and remove the useless casts where it is unnecessary. But preserve those casts having __attribute__ such as __force, __iomem, etc. which are used by Sparse in the static analysis of the code. Also remove two blank lines at EOF.

Himanshu Jha committed 8 years ago

Commit d8e7eb51 parent cb00a4f1 file · +71 −21Browse files

Showing the changes to scripts (1 of 1 file). Show all

Unified · Split

scripts/coccinelle/api/alloc/alloc_cast.cocci+71−21
@@ -5,10 +5,11 @@ · 4 unmodified lines
5//# kmalloc, kzalloc, kcalloc, kmem_cache_alloc, kmem_cache_zalloc,5//# kmalloc, kzalloc, kcalloc, kmem_cache_alloc, kmem_cache_zalloc,
6//# kmem_cache_alloc_node, kmalloc_node and kzalloc_node and removes6//# kmem_cache_alloc_node, kmalloc_node and kzalloc_node and removes
7//# the casting as it is not required. The result in the patch case may7//# the casting as it is not required. The result in the patch case may
8//#need some reformatting.8//# need some reformatting.
9//9//
10// Confidence: High10// Confidence: High
11// Copyright: 2014, Himangi Saraogi GPLv2.11// Copyright: (C) 2014 Himangi Saraogi GPLv2.
12// Copyright: (C) 2017 Himanshu Jha GPLv2.
12// Comments:13// Comments:
13// Options: --no-includes --include-headers14// Options: --no-includes --include-headers
14//15//
@@ -18,55 +19,104 @@ virtual patch · 3 unmodified lines
18virtual org19virtual org
19virtual report20virtual report
20 21
22@initialize:python@
23@@
24import re
25pattern = '__'
26m = re.compile(pattern)
27
28@r1 depends on context || patch@
29type T;
30@@
31
32 (T *)
33 \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|
34 kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\|
35 dma_alloc_coherent\|dma_zalloc_coherent\|devm_kmalloc\|devm_kzalloc\|
36 kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\|
37 pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\|
38 kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...)
39
21//----------------------------------------------------------40//----------------------------------------------------------
22// For context mode41// For context mode
23//----------------------------------------------------------42//----------------------------------------------------------
24 43
25@depends on context@44@script:python depends on context@
26type T;45t << r1.T;
46@@
47
48if m.search(t) != None:
49 cocci.include_match(False)
50
51@depends on context && r1@
52type r1.T;
27@@53@@
28 54
29* (T *)55* (T *)
30 \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|56 \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|
31 kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\)(...)57 kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\|
58 dma_alloc_coherent\|dma_zalloc_coherent\|devm_kmalloc\|devm_kzalloc\|
59 kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\|
60 pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\|
61 kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...)
32 62
33//----------------------------------------------------------63//----------------------------------------------------------
34// For patch mode64// For patch mode
35//----------------------------------------------------------65//----------------------------------------------------------
36 66
37@depends on patch@67@script:python depends on patch@
38type T;68t << r1.T;
69@@
70
71if m.search(t) != None:
72 cocci.include_match(False)
73
74@depends on patch && r1@
75type r1.T;
39@@76@@
40 77
41- (T *)78- (T *)
42 (\(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|79 \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|
43 kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\)(...))80 kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\|
81 dma_alloc_coherent\|dma_zalloc_coherent\|devm_kmalloc\|devm_kzalloc\|
82 kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\|
83 pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\|
84 kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...)
44 85
45//----------------------------------------------------------86//----------------------------------------------------------
46// For org and report mode87// For org and report mode
47//----------------------------------------------------------88//----------------------------------------------------------
48 89
49@r depends on org || report@90@r2 depends on org || report@
50type T;91type T;
51position p;92position p;
52@@93@@
53 94
54 (T@p *)\(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|95 (T@p *)
55 kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\)(...)96 \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|
97 kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\|
98 dma_alloc_coherent\|dma_zalloc_coherent\|devm_kmalloc\|devm_kzalloc\|
99 kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\|
100 pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\|
101 kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...)
56 102
57@script:python depends on org@103@script:python depends on org@
58p << r.p;104p << r2.p;
59t << r.T;105t << r2.T;
60@@106@@
61 107
62coccilib.org.print_safe_todo(p[0], t)108if m.search(t) != None:
109 cocci.include_match(False)
110else:
111 coccilib.org.print_safe_todo(p[0], t)
63 112
64@script:python depends on report@113@script:python depends on report@
65p << r.p;114p << r2.p;
66t << r.T;115t << r2.T;
67@@116@@
68 117
69msg="WARNING: casting value returned by memory allocation function to (%s *) is useless." % (t)118if m.search(t) != None:
70coccilib.report.print_report(p[0], msg)119 cocci.include_match(False)
71 120else:
72 121 msg="WARNING: casting value returned by memory allocation function to (%s *) is useless." % (t)
122 coccilib.report.print_report(p[0], msg)