162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/// Remove casting the values returned by memory allocation functions 362306a36Sopenharmony_ci/// like kmalloc, kzalloc, kmem_cache_alloc, kmem_cache_zalloc etc. 462306a36Sopenharmony_ci/// 562306a36Sopenharmony_ci//# This makes an effort to find cases of casting of values returned by 662306a36Sopenharmony_ci//# kmalloc, kzalloc, kcalloc, kmem_cache_alloc, kmem_cache_zalloc, 762306a36Sopenharmony_ci//# kmem_cache_alloc_node, kmalloc_node and kzalloc_node and removes 862306a36Sopenharmony_ci//# the casting as it is not required. The result in the patch case may 962306a36Sopenharmony_ci//# need some reformatting. 1062306a36Sopenharmony_ci// 1162306a36Sopenharmony_ci// Confidence: High 1262306a36Sopenharmony_ci// Copyright: (C) 2014 Himangi Saraogi 1362306a36Sopenharmony_ci// Copyright: (C) 2017 Himanshu Jha 1462306a36Sopenharmony_ci// Comments: 1562306a36Sopenharmony_ci// Options: --no-includes --include-headers 1662306a36Sopenharmony_ci// 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_civirtual context 1962306a36Sopenharmony_civirtual patch 2062306a36Sopenharmony_civirtual org 2162306a36Sopenharmony_civirtual report 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci@initialize:python@ 2462306a36Sopenharmony_ci@@ 2562306a36Sopenharmony_ciimport re 2662306a36Sopenharmony_cipattern = '__' 2762306a36Sopenharmony_cim = re.compile(pattern) 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci@r1 depends on context || patch@ 3062306a36Sopenharmony_citype T; 3162306a36Sopenharmony_ci@@ 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci (T *) 3462306a36Sopenharmony_ci \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| 3562306a36Sopenharmony_ci kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\| 3662306a36Sopenharmony_ci dma_alloc_coherent\|devm_kmalloc\|devm_kzalloc\| 3762306a36Sopenharmony_ci kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\| 3862306a36Sopenharmony_ci pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\| 3962306a36Sopenharmony_ci kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...) 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci//---------------------------------------------------------- 4262306a36Sopenharmony_ci// For context mode 4362306a36Sopenharmony_ci//---------------------------------------------------------- 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci@script:python depends on context@ 4662306a36Sopenharmony_cit << r1.T; 4762306a36Sopenharmony_ci@@ 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ciif m.search(t) != None: 5062306a36Sopenharmony_ci cocci.include_match(False) 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci@depends on context && r1@ 5362306a36Sopenharmony_citype r1.T; 5462306a36Sopenharmony_ci@@ 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci* (T *) 5762306a36Sopenharmony_ci \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| 5862306a36Sopenharmony_ci kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\| 5962306a36Sopenharmony_ci dma_alloc_coherent\|devm_kmalloc\|devm_kzalloc\| 6062306a36Sopenharmony_ci kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\| 6162306a36Sopenharmony_ci pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\| 6262306a36Sopenharmony_ci kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...) 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci//---------------------------------------------------------- 6562306a36Sopenharmony_ci// For patch mode 6662306a36Sopenharmony_ci//---------------------------------------------------------- 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci@script:python depends on patch@ 6962306a36Sopenharmony_cit << r1.T; 7062306a36Sopenharmony_ci@@ 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ciif m.search(t) != None: 7362306a36Sopenharmony_ci cocci.include_match(False) 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci@depends on patch && r1@ 7662306a36Sopenharmony_citype r1.T; 7762306a36Sopenharmony_ci@@ 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci- (T *) 8062306a36Sopenharmony_ci \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| 8162306a36Sopenharmony_ci kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\| 8262306a36Sopenharmony_ci dma_alloc_coherent\|devm_kmalloc\|devm_kzalloc\| 8362306a36Sopenharmony_ci kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\| 8462306a36Sopenharmony_ci pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\| 8562306a36Sopenharmony_ci kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...) 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci//---------------------------------------------------------- 8862306a36Sopenharmony_ci// For org and report mode 8962306a36Sopenharmony_ci//---------------------------------------------------------- 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci@r2 depends on org || report@ 9262306a36Sopenharmony_citype T; 9362306a36Sopenharmony_ciposition p; 9462306a36Sopenharmony_ci@@ 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ci (T@p *) 9762306a36Sopenharmony_ci \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| 9862306a36Sopenharmony_ci kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\| 9962306a36Sopenharmony_ci dma_alloc_coherent\|devm_kmalloc\|devm_kzalloc\| 10062306a36Sopenharmony_ci kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\| 10162306a36Sopenharmony_ci pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\| 10262306a36Sopenharmony_ci kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...) 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ci@script:python depends on org@ 10562306a36Sopenharmony_cip << r2.p; 10662306a36Sopenharmony_cit << r2.T; 10762306a36Sopenharmony_ci@@ 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ciif m.search(t) != None: 11062306a36Sopenharmony_ci cocci.include_match(False) 11162306a36Sopenharmony_cielse: 11262306a36Sopenharmony_ci coccilib.org.print_safe_todo(p[0], t) 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci@script:python depends on report@ 11562306a36Sopenharmony_cip << r2.p; 11662306a36Sopenharmony_cit << r2.T; 11762306a36Sopenharmony_ci@@ 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_ciif m.search(t) != None: 12062306a36Sopenharmony_ci cocci.include_match(False) 12162306a36Sopenharmony_cielse: 12262306a36Sopenharmony_ci msg="WARNING: casting value returned by memory allocation function to (%s *) is useless." % (t) 12362306a36Sopenharmony_ci coccilib.report.print_report(p[0], msg) 124