lkml.org 
[lkml]   [2020]   [Aug]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC PATCH] coccinelle: misc: add uninitialized_var.cocci script


    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
    >
    >

    \
     
     \ /
      Last update: 2020-08-29 21:37    [W:3.331 / U:0.632 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site