* 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
* [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 related [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
* 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-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: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 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
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;
as well as URLs for NNTP newsgroup(s).