From patchwork Sun Apr 19 09:07:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heinrich Schuchardt X-Patchwork-Id: 238005 List-Id: U-Boot discussion From: xypron.glpk at gmx.de (Heinrich Schuchardt) Date: Sun, 19 Apr 2020 11:07:34 +0200 Subject: [PATCH] coccinelle: check for casting malloc output Message-ID: <20200419090734.15928-1-xypron.glpk@gmx.de> Casting the (void *) output of memory allocation functions before assignment like in sata->cmd_hdr_tbl_offset = (void *)malloc(length + align); is useless. Adopt the Linux kernel script scripts/coccinelle/api/alloc/alloc_cast.cocci. Now 'make coccicheck' generates warnings like: ./drivers/ata/fsl_sata.c:143:29-33: WARNING: casting value returned by memory allocation function to (void *) is useless. Signed-off-by: Heinrich Schuchardt --- scripts/coccinelle/api/alloc/alloc_cast.cocci | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 scripts/coccinelle/api/alloc/alloc_cast.cocci -- 2.25.1 diff --git a/scripts/coccinelle/api/alloc/alloc_cast.cocci b/scripts/coccinelle/api/alloc/alloc_cast.cocci new file mode 100644 index 0000000000..e336784a9f --- /dev/null +++ b/scripts/coccinelle/api/alloc/alloc_cast.cocci @@ -0,0 +1,102 @@ +// 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 +//# malloc, calloc, kmalloc, kmalloc_array, kmalloc_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 context +virtual patch +virtual org +virtual report + + at initialize:python@ +@@ +import re +pattern = '__' +m = re.compile(pattern) + + at r1 depends on context || patch@ +type T; +@@ + + (T *) + \(malloc\|calloc\|kmalloc\|kmalloc_array\|kmalloc_node\)(...) + +//---------------------------------------------------------- +// For context mode +//---------------------------------------------------------- + + at script:python depends on context@ +t << r1.T; +@@ + +if m.search(t) != None: + cocci.include_match(False) + + at depends on context && r1@ +type r1.T; +@@ + +* (T *) + \(malloc\|calloc\|kmalloc\|kmalloc_array\|kmalloc_node\)(...) + +//---------------------------------------------------------- +// For patch mode +//---------------------------------------------------------- + + at script:python depends on patch@ +t << r1.T; +@@ + +if m.search(t) != None: + cocci.include_match(False) + + at depends on patch && r1@ +type r1.T; +@@ + +- (T *) + \(malloc\|calloc\|kmalloc\|kmalloc_array\|kmalloc_node\)(...) + +//---------------------------------------------------------- +// For org and report mode +//---------------------------------------------------------- + + at r2 depends on org || report@ +type T; +position p; +@@ + + (T at p *) + \(malloc\|calloc\|kmalloc\|kmalloc_array\|kmalloc_node\)(...) + + at 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) + + at 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)