Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp1406500ybg; Thu, 4 Jun 2020 08:56:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw2Zg2L4kV52yHpf/1Papnkhpv2AZmgoNv0hrmY1v1Tiqea2UpFfqS4mSV/bB19AiAbF1yo X-Received: by 2002:a17:906:3bd8:: with SMTP id v24mr4088915ejf.231.1591286184481; Thu, 04 Jun 2020 08:56:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591286184; cv=none; d=google.com; s=arc-20160816; b=rv2VhoiXhTjc6CI0830maxSAMm4Optl05mJcBw2gyOTuwshVDp7jAcEoTX+Pw1VOni N1Q/fNSWIP/aJqCRHSNL2YoXlhNI52mB18L9TXLayw4u7zT41gq8DIp+HR9VY7LAUso8 J3GhdrX5JrT9a/qXJx5gDnv+UnVB6KRpk6cltaQl9aqDA3s6/gRZ69721lXGasuHvOpW aV+jiV6huO5JGRi+DtjOyeLgd6gMK5YPk8er6kXPuB1KCFYYUgNQoSxcvXb4Q8pOVK2o j3ntKCZmwKKQUPjlHNcbUU3akhJpXNaliPbI4WQbzxNkSNunF5EqOz9qd5ZYbKlrArf5 1KuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :message-id:in-reply-to:subject:cc:to:from:date; bh=wbHqqNASeLDgyt7cW7oUTiy+Ts08pacPgMddK7InfPM=; b=yYiBpOzA/82kKdfMA7rKTNoJE0R6vGj0gST8SlM42ucQLPK8lHxgGqiLg+LrNDesPH ptT901Gp1pF8GumdSKYqiF9uMGQFRcRWM2g9yZfI8GlxKnER5ghCEaMU1BNG+fbR3JPv cNFD4NI/LA92Usn4PRgyCK6BJlqCpemTLcv5IZoGzV8f41801dla9f4CTtuJkkjh/+ko 9NAlDAJqzG9U/9xgYAVpcq7hXh3h/+uvq3AZYgPXsl4rUGZarqlApbs1tHDL/UHJodi1 pHt5mb83CiQpRFMDGAu6nk5zAwN+rJR1ihQqpvMdSE09qkX0Shrh8rMCHzn/j7Zn26tb thsQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id jz21si1834489ejb.635.2020.06.04.08.56.01; Thu, 04 Jun 2020 08:56:24 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729562AbgFDPvq (ORCPT + 99 others); Thu, 4 Jun 2020 11:51:46 -0400 Received: from mail3-relais-sop.national.inria.fr ([192.134.164.104]:37213 "EHLO mail3-relais-sop.national.inria.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729302AbgFDPvq (ORCPT ); Thu, 4 Jun 2020 11:51:46 -0400 X-IronPort-AV: E=Sophos;i="5.73,472,1583190000"; d="scan'208";a="350605555" Received: from abo-173-121-68.mrs.modulonet.fr (HELO hadrien) ([85.68.121.173]) by mail3-relais-sop.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 04 Jun 2020 17:51:20 +0200 Date: Thu, 4 Jun 2020 17:51:19 +0200 (CEST) From: Julia Lawall X-X-Sender: jll@hadrien To: Denis Efremov cc: Julia Lawall , cocci@systeme.lip6.fr, linux-kernel@vger.kernel.org Subject: Re: [PATCH] coccinelle: api: add kzfree script In-Reply-To: Message-ID: References: <20200604140805.111613-1-efremov@linux.com> User-Agent: Alpine 2.21 (DEB 202 2017-01-01) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 4 Jun 2020, Denis Efremov wrote: > > > On 6/4/20 5:15 PM, Julia Lawall wrote: > > Did you try ... here but find that some subexpressions of E could be > > modified in between? > > Yes, I tried to use "... when != E = E1 when != &E" and results were bad. > Now, I've tried forall and when strict. Here are examples: > > // forall added > // Works well, suitable for v2. One additional catch in w1 driver. > @r depends on !patch && !(file in "lib/test_kasan.c") && !(file in "mm/slab_common.c") forall@ > expression *E; // pointer. Results are equal as if we use E. > position p; > @@ > > * memset(E, 0, ...); > ... when != E // Is it enough to match &E, E = E1? Yes. > * kfree(E)@p; > > //no forall, when strict > //results are bad, too many false positives > @r depends on !patch && !(file in "lib/test_kasan.c") && !(file in "mm/slab_common.c")@ > expression *E; > position p; > @@ > > * memset(E, 0, ...); > ... when != E // E is not enough here > when strict OK, it's reassonable. > * kfree(E)@p; > > I guess that the difference is that "forall" requires that whole pattern should occur on > every path, "when strict" states that kfree should be called on every path after memset. > This results in missed uses of E in loops and under conditions. How can I state in this > case that E should not occur at all (in all paths) in between memset, kfree even as a > subexpression? > > // Doesn't work well > ... when != E > when != if (...) { ... E ... } > when != for(...;...;...) { ... E ... } Could you send an example of some C code on which the result is not suitable? julia