From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933150AbcBPRRB (ORCPT ); Tue, 16 Feb 2016 12:17:01 -0500 Received: from mail2-relais-roc.national.inria.fr ([192.134.164.83]:62048 "EHLO mail2-relais-roc.national.inria.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753536AbcBPRRA (ORCPT ); Tue, 16 Feb 2016 12:17:00 -0500 X-IronPort-AV: E=Sophos;i="5.22,456,1449529200"; d="scan'208";a="203382485" Date: Tue, 16 Feb 2016 18:16:53 +0100 (CET) From: Julia Lawall X-X-Sender: jll@hadrien To: Yann Droneaud cc: Gilles Muller , Nicolas Palix , Michal Marek , Tejun Heo , Greg Kroah-Hartman , cocci@systeme.lip6.fr, linux-kernel@vger.kernel.org, Johannes Weiner Subject: Re: [PATCH 1/3] coccinelle: also catch kzfree() issues In-Reply-To: <326298cef17f5109dc7b08094901aa1c69be83d5.1455638829.git.ydroneaud@opteya.com> Message-ID: References: <326298cef17f5109dc7b08094901aa1c69be83d5.1455638829.git.ydroneaud@opteya.com> User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 16 Feb 2016, Yann Droneaud wrote: > Since commit 3ef0e5ba4673 ('slab: introduce kzfree()'), > kfree() is no more the only function to be considered. > > Cc: Johannes Weiner > Signed-off-by: Yann Droneaud > --- > scripts/coccinelle/free/devm_free.cocci | 2 ++ > scripts/coccinelle/free/kfree.cocci | 3 +++ > scripts/coccinelle/free/kfreeaddr.cocci | 6 +++++- > 3 files changed, 10 insertions(+), 1 deletion(-) > > diff --git a/scripts/coccinelle/free/devm_free.cocci b/scripts/coccinelle/free/devm_free.cocci > index 3d9349012bb3..83c03adec1c5 100644 > --- a/scripts/coccinelle/free/devm_free.cocci > +++ b/scripts/coccinelle/free/devm_free.cocci > @@ -48,6 +48,8 @@ position p; > ( > * kfree@p(x) > | > +* kzfree@p(x) > +| > * free_irq@p(x) > | > * iounmap@p(x) > diff --git a/scripts/coccinelle/free/kfree.cocci b/scripts/coccinelle/free/kfree.cocci > index 577b78056990..c3246b47f51f 100644 > --- a/scripts/coccinelle/free/kfree.cocci > +++ b/scripts/coccinelle/free/kfree.cocci > @@ -16,6 +16,7 @@ virtual org > virtual report > > @free@ > +identifier kfree =~ "kz?free"; Thanks for the suggestions. However, the regular expression is not such a good idea. Coccinelle doesn't make any optimizations based on regulat expressions. It would be better to put a disjunction with kfree and kzfree explicitly, as in the other cases. julia > expression E; > position p1; > @@ > @@ -54,6 +55,7 @@ position p; > sizeof(<+...E@p...+>) > > @loop exists@ > +identifier kfree =~ "kz?free"; > expression E; > identifier l; > position ok; > @@ -67,6 +69,7 @@ while (1) { ... > } > > @r exists@ > +identifier kfree =~ "kz?free"; > expression free.E, subE<=free.E, E2; > expression E1; > iterator iter; > diff --git a/scripts/coccinelle/free/kfreeaddr.cocci b/scripts/coccinelle/free/kfreeaddr.cocci > index ce8aacc314cb..d46063b1db8b 100644 > --- a/scripts/coccinelle/free/kfreeaddr.cocci > +++ b/scripts/coccinelle/free/kfreeaddr.cocci > @@ -16,7 +16,11 @@ identifier f; > position p; > @@ > > +( > * kfree@p(&e->f) > +| > +* kzfree@p(&e->f) > +) > > @script:python depends on org@ > p << r.p; > @@ -28,5 +32,5 @@ cocci.print_main("kfree",p) > p << r.p; > @@ > > -msg = "ERROR: kfree of structure field" > +msg = "ERROR: invalid free of structure field" > coccilib.report.print_report(p[0],msg) > -- > 2.5.0 > >