mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Julia Lawall <julia.lawall@lip6.fr>
To: Kees Cook <keescook@chromium.org>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Gilles Muller <Gilles.Muller@lip6.fr>,
	Nicolas Palix <nicolas.palix@imag.fr>,
	Michal Marek <mmarek@suse.com>,
	cocci@systeme.lip6.fr, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 01/31] coccinelle: Improve setup_timer.cocci matching
Date: Sat, 23 Sep 2017 22:43:52 +0200 (CEST)	[thread overview]
Message-ID: <alpine.DEB.2.20.1709232235500.5987@hadrien> (raw)
In-Reply-To: <1505950075-50223-2-git-send-email-keescook@chromium.org>



On Wed, 20 Sep 2017, Kees Cook wrote:

> This improves the patch mode of setup_timer.cocci. Several patterns
> were missing:
>  - assignments-before-init_timer() cases
>  - limit the .data case removal to the specific struct timer_list instance
>  - handling calls by dereference (timer->field vs timer.field)
>
> Cc: Julia Lawall <Julia.Lawall@lip6.fr>
> Cc: Gilles Muller <Gilles.Muller@lip6.fr>
> Cc: Nicolas Palix <nicolas.palix@imag.fr>
> Cc: Michal Marek <mmarek@suse.com>
> Cc: cocci@systeme.lip6.fr
> Signed-off-by: Kees Cook <keescook@chromium.org>

Acked-by: Julia Lawall <julia.lawall@lip6.fr>

Note that I proposed some changes on this rule as well, on August 23
(https://systeme.lip6.fr/pipermail/cocci/2017-August/004386.html).  My
changes are still orthogonal to the ones proposed here.

Actually, my changes are in the part about matching, and this patch on
covers the -D patch case (transformation).  The matching rules should be
extended in the same way that the patch rules are extended below, but it
would be better to apply my patch first.

julia

> ---
>  scripts/coccinelle/api/setup_timer.cocci | 129 +++++++++++++++++++++++++------
>  1 file changed, 105 insertions(+), 24 deletions(-)
>
> diff --git a/scripts/coccinelle/api/setup_timer.cocci b/scripts/coccinelle/api/setup_timer.cocci
> index eb6bd9e4ab1a..279767f3bbef 100644
> --- a/scripts/coccinelle/api/setup_timer.cocci
> +++ b/scripts/coccinelle/api/setup_timer.cocci
> @@ -2,6 +2,7 @@
>  /// and data fields
>  // Confidence: High
>  // Copyright: (C) 2016 Vaishali Thakkar, Oracle. GPLv2
> +// Copyright: (C) 2017 Kees Cook, Google. GPLv2
>  // Options: --no-includes --include-headers
>  // Keywords: init_timer, setup_timer
>
> @@ -10,60 +11,123 @@ virtual context
>  virtual org
>  virtual report
>
> +// Match the common cases first to avoid Coccinelle parsing loops with
> +// "... when" clauses.
> +
>  @match_immediate_function_data_after_init_timer
>  depends on patch && !context && !org && !report@
>  expression e, func, da;
>  @@
>
> --init_timer (&e);
> -+setup_timer (&e, func, da);
> +-init_timer
> ++setup_timer
> + ( \(&e\|e\)
> ++, func, da
> + );
> +(
> +-\(e.function\|e->function\) = func;
> +-\(e.data\|e->data\) = da;
> +|
> +-\(e.data\|e->data\) = da;
> +-\(e.function\|e->function\) = func;
> +)
> +
> +@match_immediate_function_data_before_init_timer
> +depends on patch && !context && !org && !report@
> +expression e, func, da;
> +@@
>
>  (
> +-\(e.function\|e->function\) = func;
> +-\(e.data\|e->data\) = da;
> +|
> +-\(e.data\|e->data\) = da;
> +-\(e.function\|e->function\) = func;
> +)
> +-init_timer
> ++setup_timer
> + ( \(&e\|e\)
> ++, func, da
> + );
> +
> +@match_function_and_data_after_init_timer
> +depends on patch && !context && !org && !report@
> +expression e, e2, e3, e4, e5, func, da;
> +@@
> +
> +-init_timer
> ++setup_timer
> + ( \(&e\|e\)
> ++, func, da
> + );
> + ... when != func = e2
> +     when != da = e3
> +(
>  -e.function = func;
> +... when != da = e4
>  -e.data = da;
>  |
> +-e->function = func;
> +... when != da = e4
> +-e->data = da;
> +|
>  -e.data = da;
> +... when != func = e5
>  -e.function = func;
> +|
> +-e->data = da;
> +... when != func = e5
> +-e->function = func;
>  )
>
> -@match_function_and_data_after_init_timer
> +@match_function_and_data_before_init_timer
>  depends on patch && !context && !org && !report@
> -expression e1, e2, e3, e4, e5, a, b;
> +expression e, e2, e3, e4, e5, func, da;
>  @@
> -
> --init_timer (&e1);
> -+setup_timer (&e1, a, b);
> -
> -... when != a = e2
> -    when != b = e3
>  (
> --e1.function = a;
> -... when != b = e4
> --e1.data = b;
> +-e.function = func;
> +... when != da = e4
> +-e.data = da;
>  |
> --e1.data = b;
> -... when != a = e5
> --e1.function = a;
> +-e->function = func;
> +... when != da = e4
> +-e->data = da;
> +|
> +-e.data = da;
> +... when != func = e5
> +-e.function = func;
> +|
> +-e->data = da;
> +... when != func = e5
> +-e->function = func;
>  )
> +... when != func = e2
> +    when != da = e3
> +-init_timer
> ++setup_timer
> + ( \(&e\|e\)
> ++, func, da
> + );
>
>  @r1 exists@
> +expression t;
>  identifier f;
>  position p;
>  @@
>
>  f(...) { ... when any
> -  init_timer@p(...)
> +  init_timer@p(\(&t\|t\))
>    ... when any
>  }
>
>  @r2 exists@
> +expression r1.t;
>  identifier g != r1.f;
> -struct timer_list t;
>  expression e8;
>  @@
>
>  g(...) { ... when any
> -  t.data = e8
> +  \(t.data\|t->data\) = e8
>    ... when any
>  }
>
> @@ -77,14 +141,31 @@ p << r1.p;
>  cocci.include_match(False)
>
>  @r3 depends on patch && !context && !org && !report@
> -expression e6, e7, c;
> +expression r1.t, func, e7;
>  position r1.p;
>  @@
>
> --init_timer@p (&e6);
> -+setup_timer (&e6, c, 0UL);
> -... when != c = e7
> --e6.function = c;
> +(
> +-init_timer@p(&t);
> ++setup_timer(&t, func, 0UL);
> +... when != func = e7
> +-t.function = func;
> +|
> +-t.function = func;
> +... when != func = e7
> +-init_timer@p(&t);
> ++setup_timer(&t, func, 0UL);
> +|
> +-init_timer@p(t);
> ++setup_timer(t, func, 0UL);
> +... when != func = e7
> +-t->function = func;
> +|
> +-t->function = func;
> +... when != func = e7
> +-init_timer@p(t);
> ++setup_timer(t, func, 0UL);
> +)
>
>  // ----------------------------------------------------------------------------
>
> --
> 2.7.4
>
>

  reply	other threads:[~2017-09-23 20:43 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-20 23:27 [PATCH v2 00/31] struct timer_list callback argument conversion, step 1 Kees Cook
2017-09-20 23:27 ` [PATCH v2 01/31] coccinelle: Improve setup_timer.cocci matching Kees Cook
2017-09-23 20:43   ` Julia Lawall [this message]
2017-11-07  0:18     ` Masahiro Yamada
2017-09-20 23:27 ` [PATCH v2 02/31] timer: Convert open-coded init_timer() to setup_timer() Kees Cook
2017-09-20 23:27 ` [PATCH v2 03/31] timer: Remove init_timer_pinned_deferrable() in favor of setup_pinned_deferrable_timer() Kees Cook
2017-09-26 11:12   ` Gautham R Shenoy
2017-09-20 23:27 ` [PATCH v2 04/31] timer: Remove init_timer_on_stack() in favor of setup_timer_on_stack() Kees Cook
2017-09-20 23:27 ` [PATCH v2 05/31] timer: Remove init_timer_pinned() in favor of setup_pinned_timer() Kees Cook
2017-09-20 23:27 ` [PATCH v2 06/31] timer: Remove init_timer_deferrable() in favor of setup_deferrable_timer() Kees Cook
2017-09-20 23:27 ` [PATCH v2 07/31] timer: Remove users of TIMER_DEFERRED_INITIALIZER Kees Cook
2017-09-20 23:27 ` [PATCH v2 08/31] timer: Remove users of TIMER_INITIALIZER Kees Cook
2017-09-20 23:27 ` [PATCH v2 09/31] timer: Remove unused static initializer macros Kees Cook
2017-09-20 23:27 ` [PATCH v2 10/31] timer: Remove users of expire and data arguments to DEFINE_TIMER Kees Cook
2017-09-20 23:27 ` [PATCH v2 11/31] timer: Remove expires and data arguments from DEFINE_TIMER Kees Cook
2017-09-20 23:27 ` [PATCH v2 12/31] timer: Remove expires argument from __TIMER_INITIALIZER() Kees Cook
2017-09-20 23:27 ` [PATCH v2 13/31] timer: Remove meaningless .data/.function assignments Kees Cook
2017-09-20 23:27 ` [PATCH v2 14/31] timer: Collapse cross-function single-assignment .data into setup_timer() Kees Cook
2017-09-20 23:27 ` [PATCH v2 15/31] timer: Additional init_timer() -> setup_timer() conversions Kees Cook
2017-09-20 23:27 ` [PATCH v2 16/31] usb/phy-isp1301-omap: Remove .data assignment Kees Cook
2017-09-28  9:36   ` Felipe Balbi
2017-09-20 23:27 ` [PATCH v2 17/31] media/i2c/tc358743: Initialize timer Kees Cook
2017-09-20 23:27 ` [PATCH v2 18/31] scsi/aic7xxx: Clean up timer usage Kees Cook
2017-09-21  7:35   ` Hannes Reinecke
2017-09-20 23:27 ` [PATCH v2 19/31] timer: Remove open-coded casts for .data and .function Kees Cook
2017-09-20 23:27 ` [PATCH v2 20/31] net/core: Collapse redundant sk_timer callback data assignments Kees Cook
2017-09-20 23:27 ` [PATCH v2 21/31] s390/char/sclp: Use separate static data field with with static timer Kees Cook
2017-09-20 23:27 ` [PATCH v2 22/31] sparc/led: " Kees Cook
2017-09-20 23:27 ` [PATCH v2 23/31] mips/sgi-ip32: " Kees Cook
2017-09-20 23:27 ` [PATCH v2 24/31] mips/sgi-ip22: " Kees Cook
2017-09-20 23:27 ` [PATCH v2 25/31] net/atm/mpc: " Kees Cook
2017-09-20 23:27 ` [PATCH v2 26/31] staging/comedi/das16: Make timer initialization unconditional Kees Cook
2017-09-21 10:33   ` Ian Abbott
2017-09-20 23:27 ` [PATCH v2 27/31] usb/gadget/snps_udc_core: Remove struct timer_list.data use Kees Cook
2017-09-21 14:06   ` Michal Nazarewicz
2017-09-28  9:36   ` Felipe Balbi
2017-09-20 23:27 ` [PATCH v2 28/31] infiniband/rdmavt: Remove redundant timer initialization Kees Cook
2017-09-20 23:27 ` [PATCH v2 29/31] scsi/bnx2i: Initialize timer Kees Cook
2017-09-20 23:27 ` [PATCH v2 30/31] appletalk: Remove unneeded synchronization Kees Cook
2017-09-20 23:27 ` [PATCH v2 31/31] timer: Switch to testing for .function instead of .data Kees Cook

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.DEB.2.20.1709232235500.5987@hadrien \
    --to=julia.lawall@lip6.fr \
    --cc=Gilles.Muller@lip6.fr \
    --cc=cocci@systeme.lip6.fr \
    --cc=keescook@chromium.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mmarek@suse.com \
    --cc=nicolas.palix@imag.fr \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome