0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /// Remove casting the values returned by memory allocation functions
0003 /// like kmalloc, kzalloc, kmem_cache_alloc, kmem_cache_zalloc etc.
0004 ///
0005 //# This makes an effort to find cases of casting of values returned by
0006 //# kmalloc, kzalloc, kcalloc, kmem_cache_alloc, kmem_cache_zalloc,
0007 //# kmem_cache_alloc_node, kmalloc_node and kzalloc_node and removes
0008 //# the casting as it is not required. The result in the patch case may
0009 //# need some reformatting.
0010 //
0011 // Confidence: High
0012 // Copyright: (C) 2014 Himangi Saraogi
0013 // Copyright: (C) 2017 Himanshu Jha
0014 // Comments:
0015 // Options: --no-includes --include-headers
0016 //
0017
0018 virtual context
0019 virtual patch
0020 virtual org
0021 virtual report
0022
0023 @initialize:python@
0024 @@
0025 import re
0026 pattern = '__'
0027 m = re.compile(pattern)
0028
0029 @r1 depends on context || patch@
0030 type T;
0031 @@
0032
0033 (T *)
0034 \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|
0035 kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\|
0036 dma_alloc_coherent\|devm_kmalloc\|devm_kzalloc\|
0037 kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\|
0038 pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\|
0039 kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...)
0040
0041 //----------------------------------------------------------
0042 // For context mode
0043 //----------------------------------------------------------
0044
0045 @script:python depends on context@
0046 t << r1.T;
0047 @@
0048
0049 if m.search(t) != None:
0050 cocci.include_match(False)
0051
0052 @depends on context && r1@
0053 type r1.T;
0054 @@
0055
0056 * (T *)
0057 \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|
0058 kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\|
0059 dma_alloc_coherent\|devm_kmalloc\|devm_kzalloc\|
0060 kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\|
0061 pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\|
0062 kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...)
0063
0064 //----------------------------------------------------------
0065 // For patch mode
0066 //----------------------------------------------------------
0067
0068 @script:python depends on patch@
0069 t << r1.T;
0070 @@
0071
0072 if m.search(t) != None:
0073 cocci.include_match(False)
0074
0075 @depends on patch && r1@
0076 type r1.T;
0077 @@
0078
0079 - (T *)
0080 \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|
0081 kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\|
0082 dma_alloc_coherent\|devm_kmalloc\|devm_kzalloc\|
0083 kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\|
0084 pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\|
0085 kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...)
0086
0087 //----------------------------------------------------------
0088 // For org and report mode
0089 //----------------------------------------------------------
0090
0091 @r2 depends on org || report@
0092 type T;
0093 position p;
0094 @@
0095
0096 (T@p *)
0097 \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|
0098 kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\|
0099 dma_alloc_coherent\|devm_kmalloc\|devm_kzalloc\|
0100 kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\|
0101 pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\|
0102 kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...)
0103
0104 @script:python depends on org@
0105 p << r2.p;
0106 t << r2.T;
0107 @@
0108
0109 if m.search(t) != None:
0110 cocci.include_match(False)
0111 else:
0112 coccilib.org.print_safe_todo(p[0], t)
0113
0114 @script:python depends on report@
0115 p << r2.p;
0116 t << r2.T;
0117 @@
0118
0119 if m.search(t) != None:
0120 cocci.include_match(False)
0121 else:
0122 msg="WARNING: casting value returned by memory allocation function to (%s *) is useless." % (t)
0123 coccilib.report.print_report(p[0], msg)