1*7f904d7eSThomas Gleixner// SPDX-License-Identifier: GPL-2.0-only 299fcec30SHimangi Saraogi/// Remove casting the values returned by memory allocation functions 399fcec30SHimangi Saraogi/// like kmalloc, kzalloc, kmem_cache_alloc, kmem_cache_zalloc etc. 499fcec30SHimangi Saraogi/// 599fcec30SHimangi Saraogi//# This makes an effort to find cases of casting of values returned by 699fcec30SHimangi Saraogi//# kmalloc, kzalloc, kcalloc, kmem_cache_alloc, kmem_cache_zalloc, 799fcec30SHimangi Saraogi//# kmem_cache_alloc_node, kmalloc_node and kzalloc_node and removes 899fcec30SHimangi Saraogi//# the casting as it is not required. The result in the patch case may 999fcec30SHimangi Saraogi//# need some reformatting. 1099fcec30SHimangi Saraogi// 1199fcec30SHimangi Saraogi// Confidence: High 12*7f904d7eSThomas Gleixner// Copyright: (C) 2014 Himangi Saraogi 13*7f904d7eSThomas Gleixner// Copyright: (C) 2017 Himanshu Jha 1499fcec30SHimangi Saraogi// Comments: 1599fcec30SHimangi Saraogi// Options: --no-includes --include-headers 1699fcec30SHimangi Saraogi// 1799fcec30SHimangi Saraogi 1899fcec30SHimangi Saraogivirtual context 1999fcec30SHimangi Saraogivirtual patch 2099fcec30SHimangi Saraogivirtual org 2199fcec30SHimangi Saraogivirtual report 2299fcec30SHimangi Saraogi 23d8e7eb51SHimanshu Jha@initialize:python@ 24d8e7eb51SHimanshu Jha@@ 25d8e7eb51SHimanshu Jhaimport re 26d8e7eb51SHimanshu Jhapattern = '__' 27d8e7eb51SHimanshu Jham = re.compile(pattern) 28d8e7eb51SHimanshu Jha 29d8e7eb51SHimanshu Jha@r1 depends on context || patch@ 30d8e7eb51SHimanshu Jhatype T; 31d8e7eb51SHimanshu Jha@@ 32d8e7eb51SHimanshu Jha 33d8e7eb51SHimanshu Jha (T *) 34d8e7eb51SHimanshu Jha \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| 35d8e7eb51SHimanshu Jha kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\| 36dfd32cadSLuis Chamberlain dma_alloc_coherent\|devm_kmalloc\|devm_kzalloc\| 37d8e7eb51SHimanshu Jha kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\| 38d8e7eb51SHimanshu Jha pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\| 39d8e7eb51SHimanshu Jha kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...) 40d8e7eb51SHimanshu Jha 4199fcec30SHimangi Saraogi//---------------------------------------------------------- 4299fcec30SHimangi Saraogi// For context mode 4399fcec30SHimangi Saraogi//---------------------------------------------------------- 4499fcec30SHimangi Saraogi 45d8e7eb51SHimanshu Jha@script:python depends on context@ 46d8e7eb51SHimanshu Jhat << r1.T; 47d8e7eb51SHimanshu Jha@@ 48d8e7eb51SHimanshu Jha 49d8e7eb51SHimanshu Jhaif m.search(t) != None: 50d8e7eb51SHimanshu Jha cocci.include_match(False) 51d8e7eb51SHimanshu Jha 52d8e7eb51SHimanshu Jha@depends on context && r1@ 53d8e7eb51SHimanshu Jhatype r1.T; 5499fcec30SHimangi Saraogi@@ 5599fcec30SHimangi Saraogi 5699fcec30SHimangi Saraogi* (T *) 5799fcec30SHimangi Saraogi \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| 58d8e7eb51SHimanshu Jha kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\| 59dfd32cadSLuis Chamberlain dma_alloc_coherent\|devm_kmalloc\|devm_kzalloc\| 60d8e7eb51SHimanshu Jha kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\| 61d8e7eb51SHimanshu Jha pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\| 62d8e7eb51SHimanshu Jha kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...) 6399fcec30SHimangi Saraogi 6499fcec30SHimangi Saraogi//---------------------------------------------------------- 6599fcec30SHimangi Saraogi// For patch mode 6699fcec30SHimangi Saraogi//---------------------------------------------------------- 6799fcec30SHimangi Saraogi 68d8e7eb51SHimanshu Jha@script:python depends on patch@ 69d8e7eb51SHimanshu Jhat << r1.T; 70d8e7eb51SHimanshu Jha@@ 71d8e7eb51SHimanshu Jha 72d8e7eb51SHimanshu Jhaif m.search(t) != None: 73d8e7eb51SHimanshu Jha cocci.include_match(False) 74d8e7eb51SHimanshu Jha 75d8e7eb51SHimanshu Jha@depends on patch && r1@ 76d8e7eb51SHimanshu Jhatype r1.T; 7799fcec30SHimangi Saraogi@@ 7899fcec30SHimangi Saraogi 7999fcec30SHimangi Saraogi- (T *) 80d8e7eb51SHimanshu Jha \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| 81d8e7eb51SHimanshu Jha kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\| 82dfd32cadSLuis Chamberlain dma_alloc_coherent\|devm_kmalloc\|devm_kzalloc\| 83d8e7eb51SHimanshu Jha kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\| 84d8e7eb51SHimanshu Jha pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\| 85d8e7eb51SHimanshu Jha kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...) 8699fcec30SHimangi Saraogi 8799fcec30SHimangi Saraogi//---------------------------------------------------------- 8899fcec30SHimangi Saraogi// For org and report mode 8999fcec30SHimangi Saraogi//---------------------------------------------------------- 9099fcec30SHimangi Saraogi 91d8e7eb51SHimanshu Jha@r2 depends on org || report@ 9299fcec30SHimangi Saraogitype T; 9399fcec30SHimangi Saraogiposition p; 9499fcec30SHimangi Saraogi@@ 9599fcec30SHimangi Saraogi 96d8e7eb51SHimanshu Jha (T@p *) 97d8e7eb51SHimanshu Jha \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| 98d8e7eb51SHimanshu Jha kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\| 99dfd32cadSLuis Chamberlain dma_alloc_coherent\|devm_kmalloc\|devm_kzalloc\| 100d8e7eb51SHimanshu Jha kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|pci_alloc_consistent\| 101d8e7eb51SHimanshu Jha pci_zalloc_consistent\|kmem_alloc\|kmem_zalloc\|kmem_zone_alloc\| 102d8e7eb51SHimanshu Jha kmem_zone_zalloc\|vmalloc_node\|vzalloc_node\)(...) 10399fcec30SHimangi Saraogi 10499fcec30SHimangi Saraogi@script:python depends on org@ 105d8e7eb51SHimanshu Jhap << r2.p; 106d8e7eb51SHimanshu Jhat << r2.T; 10799fcec30SHimangi Saraogi@@ 10899fcec30SHimangi Saraogi 109d8e7eb51SHimanshu Jhaif m.search(t) != None: 110d8e7eb51SHimanshu Jha cocci.include_match(False) 111d8e7eb51SHimanshu Jhaelse: 11299fcec30SHimangi Saraogi coccilib.org.print_safe_todo(p[0], t) 11399fcec30SHimangi Saraogi 11499fcec30SHimangi Saraogi@script:python depends on report@ 115d8e7eb51SHimanshu Jhap << r2.p; 116d8e7eb51SHimanshu Jhat << r2.T; 11799fcec30SHimangi Saraogi@@ 11899fcec30SHimangi Saraogi 119d8e7eb51SHimanshu Jhaif m.search(t) != None: 120d8e7eb51SHimanshu Jha cocci.include_match(False) 121d8e7eb51SHimanshu Jhaelse: 12299fcec30SHimangi Saraogi msg="WARNING: casting value returned by memory allocation function to (%s *) is useless." % (t) 12399fcec30SHimangi Saraogi coccilib.report.print_report(p[0], msg) 124