mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* Re: [RFC PATCH] coccinelle: misc: add uninitialized_var.cocci script
       [not found] <1b8537dd-8bf3-d3b6-4c10-af2fa623f1fe@web.de>
@ 2020-08-12  9:27 ` Julia Lawall
  0 siblings, 0 replies; 7+ messages in thread
From: Julia Lawall @ 2020-08-12  9:27 UTC (permalink / raw)
  To: Markus Elfring
  Cc: Denis Efremov, Coccinelle, Gilles Muller, Masahiro Yamada,
	Michal Marek, Nicolas Palix, linux-kernel, kernel-janitors,
	Gustavo A. R. Silva, Kees Cook



On Wed, 12 Aug 2020, Markus Elfring wrote:

> > +@r@
> > +identifier var;
> > +type T;
> > +position p;
> > +@@
> > +
> > +(
> > +* T var@p = var;
> > +|
> > +* T var@p = *(&(var));
>
> I suggest to simplify such code for the semantic patch language a bit.
> Can an other variant be more succinct for the application of a SmPL disjunction?
>
> +*T var@p = \( var \| *(&(var)) \);

It's fine as is.

julia

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [RFC PATCH] coccinelle: misc: add uninitialized_var.cocci script
  2020-08-29 20:13       ` Denis Efremov
@ 2020-08-29 20:26         ` Julia Lawall
  0 siblings, 0 replies; 7+ messages in thread
From: Julia Lawall @ 2020-08-29 20:26 UTC (permalink / raw)
  To: Denis Efremov
  Cc: Julia Lawall, Joe Perches, cocci, linux-kernel, Kees Cook,
	Gustavo A . R . Silva



On Sat, 29 Aug 2020, Denis Efremov wrote:

>
>
> On 8/29/20 10:48 PM, Julia Lawall wrote:
> >
> >
> > On Sat, 29 Aug 2020, Joe Perches wrote:
> >
> >> On Sat, 2020-08-29 at 21:36 +0200, Julia Lawall wrote:
> >>>
> >>> On Wed, 12 Aug 2020, Denis Efremov wrote:
> >>>
> >>>> Commit 63a0895d960a ("compiler: Remove uninitialized_var() macro") and
> >>>> commit 4b19bec97c88 ("docs: deprecated.rst: Add uninitialized_var()")
> >>>> removed uninitialized_var() and deprecated it.
> >>>>
> >>>> The purpose of this script is to prevent new occurrences of open-coded
> >>>> variants of uninitialized_var().
> >>
> >>>> Cc: Kees Cook <keescook@chromium.org>
> >>>> Cc: Gustavo A. R. Silva <gustavoars@kernel.org>
> >>>> Signed-off-by: Denis Efremov <efremov@linux.com>
> >>>
> >>> Applied, without the commented out part.
> >>>
> >>> I only got three warnings, though.  Perhaps the others have been fixed?
> >>
> >> uninitialized_var does not exist in -next
>
> Yes, and this rule checks for not introducing these initializations once again.
>
> i.e, checks for:
>
> int a = a;
>
> int a = *(&a);
>
> >
> > OK, if it seems better, I can remove it.  Out of the threee reported, one
> > was a completely unnecessary initialization.
> >
>
> I would like send v2 with better description and link to the documentation because it's
> now available online:
> https://www.kernel.org/doc/html/latest/process/deprecated.html#uninitialized-var

OK, thanks.

julia

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [RFC PATCH] coccinelle: misc: add uninitialized_var.cocci script
  2020-08-29 19:48     ` Julia Lawall
@ 2020-08-29 20:13       ` Denis Efremov
  2020-08-29 20:26         ` Julia Lawall
  0 siblings, 1 reply; 7+ messages in thread
From: Denis Efremov @ 2020-08-29 20:13 UTC (permalink / raw)
  To: Julia Lawall, Joe Perches
  Cc: cocci, linux-kernel, Kees Cook, Gustavo A . R . Silva



On 8/29/20 10:48 PM, Julia Lawall wrote:
> 
> 
> On Sat, 29 Aug 2020, Joe Perches wrote:
> 
>> On Sat, 2020-08-29 at 21:36 +0200, Julia Lawall wrote:
>>>
>>> On Wed, 12 Aug 2020, Denis Efremov wrote:
>>>
>>>> Commit 63a0895d960a ("compiler: Remove uninitialized_var() macro") and
>>>> commit 4b19bec97c88 ("docs: deprecated.rst: Add uninitialized_var()")
>>>> removed uninitialized_var() and deprecated it.
>>>>
>>>> The purpose of this script is to prevent new occurrences of open-coded
>>>> variants of uninitialized_var().
>>
>>>> Cc: Kees Cook <keescook@chromium.org>
>>>> Cc: Gustavo A. R. Silva <gustavoars@kernel.org>
>>>> Signed-off-by: Denis Efremov <efremov@linux.com>
>>>
>>> Applied, without the commented out part.
>>>
>>> I only got three warnings, though.  Perhaps the others have been fixed?
>>
>> uninitialized_var does not exist in -next

Yes, and this rule checks for not introducing these initializations once again.

i.e, checks for: 

int a = a;

int a = *(&a);

> 
> OK, if it seems better, I can remove it.  Out of the threee reported, one
> was a completely unnecessary initialization.
> 

I would like send v2 with better description and link to the documentation because it's
now available online:
https://www.kernel.org/doc/html/latest/process/deprecated.html#uninitialized-var

Thanks,
Denis

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [RFC PATCH] coccinelle: misc: add uninitialized_var.cocci script
  2020-08-29 19:38   ` Joe Perches
@ 2020-08-29 19:48     ` Julia Lawall
  2020-08-29 20:13       ` Denis Efremov
  0 siblings, 1 reply; 7+ messages in thread
From: Julia Lawall @ 2020-08-29 19:48 UTC (permalink / raw)
  To: Joe Perches
  Cc: Denis Efremov, cocci, linux-kernel, Kees Cook, Gustavo A . R . Silva



On Sat, 29 Aug 2020, Joe Perches wrote:

> On Sat, 2020-08-29 at 21:36 +0200, Julia Lawall wrote:
> >
> > On Wed, 12 Aug 2020, Denis Efremov wrote:
> >
> > > Commit 63a0895d960a ("compiler: Remove uninitialized_var() macro") and
> > > commit 4b19bec97c88 ("docs: deprecated.rst: Add uninitialized_var()")
> > > removed uninitialized_var() and deprecated it.
> > >
> > > The purpose of this script is to prevent new occurrences of open-coded
> > > variants of uninitialized_var().
>
> > > Cc: Kees Cook <keescook@chromium.org>
> > > Cc: Gustavo A. R. Silva <gustavoars@kernel.org>
> > > Signed-off-by: Denis Efremov <efremov@linux.com>
> >
> > Applied, without the commented out part.
> >
> > I only got three warnings, though.  Perhaps the others have been fixed?
>
> uninitialized_var does not exist in -next

OK, if it seems better, I can remove it.  Out of the threee reported, one
was a completely unnecessary initialization.

julia

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [RFC PATCH] coccinelle: misc: add uninitialized_var.cocci script
  2020-08-29 19:36 ` Julia Lawall
@ 2020-08-29 19:38   ` Joe Perches
  2020-08-29 19:48     ` Julia Lawall
  0 siblings, 1 reply; 7+ messages in thread
From: Joe Perches @ 2020-08-29 19:38 UTC (permalink / raw)
  To: Julia Lawall, Denis Efremov
  Cc: cocci, linux-kernel, Kees Cook, Gustavo A . R . Silva

On Sat, 2020-08-29 at 21:36 +0200, Julia Lawall wrote:
> 
> On Wed, 12 Aug 2020, Denis Efremov wrote:
> 
> > Commit 63a0895d960a ("compiler: Remove uninitialized_var() macro") and
> > commit 4b19bec97c88 ("docs: deprecated.rst: Add uninitialized_var()")
> > removed uninitialized_var() and deprecated it.
> > 
> > The purpose of this script is to prevent new occurrences of open-coded
> > variants of uninitialized_var().

> > Cc: Kees Cook <keescook@chromium.org>
> > Cc: Gustavo A. R. Silva <gustavoars@kernel.org>
> > Signed-off-by: Denis Efremov <efremov@linux.com>
> 
> Applied, without the commented out part.
> 
> I only got three warnings, though.  Perhaps the others have been fixed?

uninitialized_var does not exist in -next



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [RFC PATCH] coccinelle: misc: add uninitialized_var.cocci script
  2020-08-11 21:01 Denis Efremov
@ 2020-08-29 19:36 ` Julia Lawall
  2020-08-29 19:38   ` Joe Perches
  0 siblings, 1 reply; 7+ messages in thread
From: Julia Lawall @ 2020-08-29 19:36 UTC (permalink / raw)
  To: Denis Efremov; +Cc: cocci, linux-kernel, Kees Cook, Gustavo A . R . Silva



On Wed, 12 Aug 2020, Denis Efremov wrote:

> Commit 63a0895d960a ("compiler: Remove uninitialized_var() macro") and
> commit 4b19bec97c88 ("docs: deprecated.rst: Add uninitialized_var()")
> removed uninitialized_var() and deprecated it.
>
> The purpose of this script is to prevent new occurrences of open-coded
> variants of uninitialized_var().
>
> Cc: Kees Cook <keescook@chromium.org>
> Cc: Gustavo A. R. Silva <gustavoars@kernel.org>
> Signed-off-by: Denis Efremov <efremov@linux.com>

Applied, without the commented out part.

I only got three warnings, though.  Perhaps the others have been fixed?

lib/glob.c:48:31-39: WARNING: this kind of initialization is deprecated
drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c:316:7-10: WARNING: this kind of initialization is deprecated
tools/testing/selftests/vm/userfaultfd.c:349:15-22: WARNING: this kind of initialization is deprecated

julia

> ---
> List of warnings:
> ./lib/glob.c:48:31-39: WARNING: this kind of initialization is deprecated
> ./tools/testing/selftests/vm/userfaultfd.c:349:15-22: WARNING: this kind of initialization is deprecated
> ./drivers/block/drbd/drbd_vli.h:330:5-9: WARNING: this kind of initialization is deprecated
> ./drivers/char/hw_random/intel-rng.c:333:15-18: WARNING: this kind of initialization is deprecated
> ./drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c:316:7-10: WARNING: this kind of initialization is deprecated
> ./arch/x86/include/asm/paravirt_types.h:455:15-20: WARNING: this kind of initialization is deprecated
> ./arch/x86/include/asm/paravirt_types.h:455:30-35: WARNING: this kind of initialization is deprecated
> ./arch/x86/include/asm/paravirt_types.h:455:45-50: WARNING: this kind of initialization is deprecated
> ./arch/x86/include/asm/paravirt_types.h:475:15-20: WARNING: this kind of initialization is deprecated
> ./arch/x86/include/asm/paravirt_types.h:475:30-35: WARNING: this kind of initialization is deprecated
> ./arch/x86/include/asm/paravirt_types.h:476:2-7: WARNING: this kind of initialization isdeprecated
> ./arch/x86/include/asm/paravirt_types.h:476:17-22: WARNING: this kind of initialization is deprecated
> ./arch/x86/include/asm/paravirt_types.h:476:32-37: WARNING: this kind of initialization is deprecated
>
>  .../coccinelle/misc/uninitialized_var.cocci   | 51 +++++++++++++++++++
>  1 file changed, 51 insertions(+)
>  create mode 100644 scripts/coccinelle/misc/uninitialized_var.cocci
>
> diff --git a/scripts/coccinelle/misc/uninitialized_var.cocci b/scripts/coccinelle/misc/uninitialized_var.cocci
> new file mode 100644
> index 000000000000..e4787bc6ab9c
> --- /dev/null
> +++ b/scripts/coccinelle/misc/uninitialized_var.cocci
> @@ -0,0 +1,51 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +///
> +/// uninitialized_var() and its open-coded variations are
> +/// deprecated. For details, see:
> +/// Documentation/process/deprecated.rst
> +///
> +// Confidence: High
> +// Copyright: (C) 2020 Denis Efremov ISPRAS
> +// Options: --no-includes --include-headers
> +//
> +
> +virtual context
> +virtual report
> +virtual org
> +
> +@r@
> +identifier var;
> +type T;
> +position p;
> +@@
> +
> +(
> +* T var@p = var;
> +|
> +* T var@p = *(&(var));
> +//|
> +// TODO: Actually, I'm not sure about this pattern.
> +// Looks like it's used in wireless drivers to determine
> +// whether data belongs to the driver or not.
> +// Here are all matches:
> +// https://elixir.bootlin.com/linux/latest/source/net/mac802154/util.c#L14
> +// https://elixir.bootlin.com/linux/latest/source/drivers/staging/wlan-ng/cfg80211.c#L48
> +// https://elixir.bootlin.com/linux/latest/source/drivers/net/wireless/intersil/orinoco/cfg.c#L21
> +// https://elixir.bootlin.com/linux/latest/source/net/mac80211/util.c#L37
> +// https://elixir.bootlin.com/linux/latest/source/drivers/net/wireless/rndis_wlan.c#L544
> +// * T *var@p = &var;
> +)
> +
> +@script:python depends on report@
> +p << r.p;
> +@@
> +
> +coccilib.report.print_report(p[0],
> +  "WARNING: this kind of initialization is deprecated")
> +
> +@script:python depends on org@
> +p << r.p;
> +@@
> +
> +coccilib.org.print_todo(p[0],
> +  "WARNING: this kind of initialization is deprecated")
> --
> 2.26.2
>
>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [RFC PATCH] coccinelle: misc: add uninitialized_var.cocci script
@ 2020-08-11 21:01 Denis Efremov
  2020-08-29 19:36 ` Julia Lawall
  0 siblings, 1 reply; 7+ messages in thread
From: Denis Efremov @ 2020-08-11 21:01 UTC (permalink / raw)
  To: Julia Lawall
  Cc: Denis Efremov, cocci, linux-kernel, Kees Cook, Gustavo A . R . Silva

Commit 63a0895d960a ("compiler: Remove uninitialized_var() macro") and
commit 4b19bec97c88 ("docs: deprecated.rst: Add uninitialized_var()")
removed uninitialized_var() and deprecated it.

The purpose of this script is to prevent new occurrences of open-coded
variants of uninitialized_var().

Cc: Kees Cook <keescook@chromium.org>
Cc: Gustavo A. R. Silva <gustavoars@kernel.org>
Signed-off-by: Denis Efremov <efremov@linux.com>
---
List of warnings:
./lib/glob.c:48:31-39: WARNING: this kind of initialization is deprecated
./tools/testing/selftests/vm/userfaultfd.c:349:15-22: WARNING: this kind of initialization is deprecated
./drivers/block/drbd/drbd_vli.h:330:5-9: WARNING: this kind of initialization is deprecated
./drivers/char/hw_random/intel-rng.c:333:15-18: WARNING: this kind of initialization is deprecated
./drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c:316:7-10: WARNING: this kind of initialization is deprecated
./arch/x86/include/asm/paravirt_types.h:455:15-20: WARNING: this kind of initialization is deprecated
./arch/x86/include/asm/paravirt_types.h:455:30-35: WARNING: this kind of initialization is deprecated
./arch/x86/include/asm/paravirt_types.h:455:45-50: WARNING: this kind of initialization is deprecated
./arch/x86/include/asm/paravirt_types.h:475:15-20: WARNING: this kind of initialization is deprecated
./arch/x86/include/asm/paravirt_types.h:475:30-35: WARNING: this kind of initialization is deprecated
./arch/x86/include/asm/paravirt_types.h:476:2-7: WARNING: this kind of initialization isdeprecated
./arch/x86/include/asm/paravirt_types.h:476:17-22: WARNING: this kind of initialization is deprecated
./arch/x86/include/asm/paravirt_types.h:476:32-37: WARNING: this kind of initialization is deprecated

 .../coccinelle/misc/uninitialized_var.cocci   | 51 +++++++++++++++++++
 1 file changed, 51 insertions(+)
 create mode 100644 scripts/coccinelle/misc/uninitialized_var.cocci

diff --git a/scripts/coccinelle/misc/uninitialized_var.cocci b/scripts/coccinelle/misc/uninitialized_var.cocci
new file mode 100644
index 000000000000..e4787bc6ab9c
--- /dev/null
+++ b/scripts/coccinelle/misc/uninitialized_var.cocci
@@ -0,0 +1,51 @@
+// SPDX-License-Identifier: GPL-2.0-only
+///
+/// uninitialized_var() and its open-coded variations are
+/// deprecated. For details, see:
+/// Documentation/process/deprecated.rst
+///
+// Confidence: High
+// Copyright: (C) 2020 Denis Efremov ISPRAS
+// Options: --no-includes --include-headers
+//
+
+virtual context
+virtual report
+virtual org
+
+@r@
+identifier var;
+type T;
+position p;
+@@
+
+(
+* T var@p = var;
+|
+* T var@p = *(&(var));
+//|
+// TODO: Actually, I'm not sure about this pattern.
+// Looks like it's used in wireless drivers to determine
+// whether data belongs to the driver or not.
+// Here are all matches:
+// https://elixir.bootlin.com/linux/latest/source/net/mac802154/util.c#L14
+// https://elixir.bootlin.com/linux/latest/source/drivers/staging/wlan-ng/cfg80211.c#L48
+// https://elixir.bootlin.com/linux/latest/source/drivers/net/wireless/intersil/orinoco/cfg.c#L21
+// https://elixir.bootlin.com/linux/latest/source/net/mac80211/util.c#L37
+// https://elixir.bootlin.com/linux/latest/source/drivers/net/wireless/rndis_wlan.c#L544
+// * T *var@p = &var;
+)
+
+@script:python depends on report@
+p << r.p;
+@@
+
+coccilib.report.print_report(p[0],
+  "WARNING: this kind of initialization is deprecated")
+
+@script:python depends on org@
+p << r.p;
+@@
+
+coccilib.org.print_todo(p[0],
+  "WARNING: this kind of initialization is deprecated")
-- 
2.26.2


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2020-08-29 20:26 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <1b8537dd-8bf3-d3b6-4c10-af2fa623f1fe@web.de>
2020-08-12  9:27 ` [RFC PATCH] coccinelle: misc: add uninitialized_var.cocci script Julia Lawall
2020-08-11 21:01 Denis Efremov
2020-08-29 19:36 ` Julia Lawall
2020-08-29 19:38   ` Joe Perches
2020-08-29 19:48     ` Julia Lawall
2020-08-29 20:13       ` Denis Efremov
2020-08-29 20:26         ` Julia Lawall

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®