138 lines · 3.3 KB · Text
RawDownload
// SPDX-License-Identifier: GPL-2.0-only/// Remove casting the values returned by memory allocation functions/// like kmalloc, kzalloc, kmem_cache_alloc, kmem_cache_zalloc etc./////# This makes an effort to find cases of casting of values returned by//# kmalloc, kzalloc, kcalloc, kmem_cache_alloc, kmem_cache_zalloc,//# kmem_cache_alloc_node, kmalloc_node and kzalloc_node and removes//# the casting as it is not required. The result in the patch case may//# need some reformatting.//// Confidence: High// Copyright: (C) 2014 Himangi Saraogi// Copyright: (C) 2017 Himanshu Jha// Comments:// Options: --no-includes --include-headers// virtual contextvirtual patchvirtual orgvirtual report @m1@identifier i;expression e;type T;position p1;@@ #define i (T@p1 *)e @m2@identifier i;expression e;type T;position p2;@@ #define i(...) (T@p2 *)e @initialize:python@@@import repattern = '__'m = re.compile(pattern) @r1 depends on context || patch@type T;position p != {m1.p1,m2.p2};@@   (T@p *)  \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|   kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\|   dma_alloc_coherent\|devm_kmalloc\|devm_kzalloc\|   kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|   vmalloc_node\|vzalloc_node\)(...) //----------------------------------------------------------//  For context mode//---------------------------------------------------------- @script:python depends on context@t << r1.T;@@ if m.search(t) != None:        cocci.include_match(False) @depends on context && r1@type r1.T;@@ * (T *)  \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|   kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\|   dma_alloc_coherent\|devm_kmalloc\|devm_kzalloc\|   kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|   vmalloc_node\|vzalloc_node\)(...) //----------------------------------------------------------//  For patch mode//---------------------------------------------------------- @script:python depends on patch@t << r1.T;@@ if m.search(t) != None:        cocci.include_match(False) @depends on patch && r1@type r1.T;@@ - (T *)  \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|   kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\|   dma_alloc_coherent\|devm_kmalloc\|devm_kzalloc\|   kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|   vmalloc_node\|vzalloc_node\)(...) //----------------------------------------------------------//  For org and report mode//---------------------------------------------------------- @r2 depends on org || report@type T;position p != {m1.p1,m2.p2};@@  (T@p *)  \(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\|   kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\|vmalloc\|vzalloc\|   dma_alloc_coherent\|devm_kmalloc\|devm_kzalloc\|   kvmalloc\|kvzalloc\|kvmalloc_node\|kvzalloc_node\|   vmalloc_node\|vzalloc_node\)(...) @script:python depends on org@p << r2.p;t << r2.T;@@ if m.search(t) != None:	cocci.include_match(False)else:	coccilib.org.print_safe_todo(p[0], t) @script:python depends on report@p << r2.p;t << r2.T;@@ if m.search(t) != None:	cocci.include_match(False)else:	msg="WARNING: casting value returned by memory allocation function to (%s *) is useless." % (t)	coccilib.report.print_report(p[0], msg)