11 Aug, 2020

1 commit

  • commit 55c7549819e438f40a3ef1d8ac5c38b73390bcb7 upstream.

    When running `make coccicheck` in report mode using the
    add_namespace.cocci file, it will fail for files that contain
    MODULE_LICENSE. Those match the replacement precondition, but spatch
    errors out as virtual.ns is not set.

    In order to fix that, add the virtual rule nsdeps and only do search and
    replace if that rule has been explicitly requested.

    In order to make spatch happy in report mode, we also need a dummy rule,
    as otherwise it errors out with "No rules apply". Using a script:python
    rule appears unrelated and odd, but this is the shortest I could come up
    with.

    Adjust scripts/nsdeps accordingly to set the nsdeps rule when run trough
    `make nsdeps`.

    Suggested-by: Julia Lawall
    Fixes: c7c4e29fb5a4 ("scripts: add_namespace: Fix coccicheck failed")
    Cc: YueHaibing
    Cc: jeyu@kernel.org
    Cc: cocci@systeme.lip6.fr
    Cc: stable@vger.kernel.org
    Signed-off-by: Matthias Maennich
    Reported-by: Shuah Khan
    Acked-by: Julia Lawall
    Link: https://lore.kernel.org/r/20200604164145.173925-1-maennich@google.com
    Signed-off-by: Greg Kroah-Hartman

    Matthias Maennich
     

18 Oct, 2019

1 commit

  • While it is useful for new drivers to use devm_platform_ioremap_resource,
    this script is currently used to spam maintainers, often updating very
    old drivers. The net benefit is the removal of 2 lines of code in the
    driver but the review load for the maintainers is huge. As of now, more
    that 560 patches have been sent, some of them obviously broken, as in:

    https://lore.kernel.org/lkml/9bbcce19c777583815c92ce3c2ff2586@www.loen.fr/

    Remove the script to reduce the spam.

    Signed-off-by: Alexandre Belloni
    Acked-by: Julia Lawall
    Signed-off-by: Linus Torvalds

    Alexandre Belloni
     

07 Oct, 2019

1 commit

  • Now all scripts in scripts/coccinelle to be automatically called
    by coccicheck. However new adding add_namespace.cocci does not
    support report mode, which make coccicheck failed.
    This add "virtual report" to make the coccicheck go ahead smoothly.

    Fixes: eb8305aecb95 ("scripts: Coccinelle script for namespace dependencies.")
    Acked-by: Julia Lawall
    Acked-by: Matthias Maennich
    Signed-off-by: YueHaibing
    Signed-off-by: Jessica Yu

    YueHaibing
     

23 Sep, 2019

1 commit

  • Pull modules updates from Jessica Yu:
    "The main bulk of this pull request introduces a new exported symbol
    namespaces feature. The number of exported symbols is increasingly
    growing with each release (we're at about 31k exports as of 5.3-rc7)
    and we currently have no way of visualizing how these symbols are
    "clustered" or making sense of this huge export surface.

    Namespacing exported symbols allows kernel developers to more
    explicitly partition and categorize exported symbols, as well as more
    easily limiting the availability of namespaced symbols to other parts
    of the kernel. For starters, we have introduced the USB_STORAGE
    namespace to demonstrate the API's usage. I have briefly summarized
    the feature and its main motivations in the tag below.

    Summary:

    - Introduce exported symbol namespaces.

    This new feature allows subsystem maintainers to partition and
    categorize their exported symbols into explicit namespaces. Module
    authors are now required to import the namespaces they need.

    Some of the main motivations of this feature include: allowing
    kernel developers to better manage the export surface, allow
    subsystem maintainers to explicitly state that usage of some
    exported symbols should only be limited to certain users (think:
    inter-module or inter-driver symbols, debugging symbols, etc), as
    well as more easily limiting the availability of namespaced symbols
    to other parts of the kernel.

    With the module import requirement, it is also easier to spot the
    misuse of exported symbols during patch review.

    Two new macros are introduced: EXPORT_SYMBOL_NS() and
    EXPORT_SYMBOL_NS_GPL(). The API is thoroughly documented in
    Documentation/kbuild/namespaces.rst.

    - Some small code and kbuild cleanups here and there"

    * tag 'modules-for-v5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/jeyu/linux:
    module: Remove leftover '#undef' from export header
    module: remove unneeded casts in cmp_name()
    module: move CONFIG_UNUSED_SYMBOLS to the sub-menu of MODULES
    module: remove redundant 'depends on MODULES'
    module: Fix link failure due to invalid relocation on namespace offset
    usb-storage: export symbols in USB_STORAGE namespace
    usb-storage: remove single-use define for debugging
    docs: Add documentation for Symbol Namespaces
    scripts: Coccinelle script for namespace dependencies.
    modpost: add support for generating namespace dependencies
    export: allow definition default namespaces in Makefiles or sources
    module: add config option MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS
    modpost: add support for symbol namespaces
    module: add support for symbol namespaces.
    export: explicitly align struct kernel_symbol
    module: support reading multiple values per modinfo tag

    Linus Torvalds
     

19 Sep, 2019

1 commit

  • Pull driver core updates from Greg Kroah-Hartman:
    "Here is the big driver core update for 5.4-rc1.

    There was a bit of a churn in here, with a number of core and OF
    platform patches being added to the tree, and then after much
    discussion and review and a day-long in-person meeting, they were
    decided to be reverted and a new set of patches is currently being
    reviewed on the mailing list.

    Other than that churn, there are two "persistent" branches in here
    that other trees will be pulling in as well during the merge window.
    One branch to add support for drivers to have the driver core
    automatically add sysfs attribute files when a driver is bound to a
    device so that the driver doesn't have to manually do it (and then
    clean it up, as it always gets it wrong).

    There's another branch in here for generic lookup helpers for the
    driver core that lots of busses are starting to use. That's the
    majority of the non-driver-core changes in this patch series.

    There's also some on-going debugfs file creation cleanup that has been
    slowly happening over the past few releases, with the goal to
    hopefully get that done sometime next year.

    All of these have been in linux-next for a while now with no reported
    issues"

    [ Note that the above-mentioned generic lookup helpers branch was
    already brought in by the LED merge (commit 4feaab05dc1e) that had
    shared it.

    Also note that that common branch introduced an i2c bug due to a bad
    conversion, which got fixed here. - Linus ]

    * tag 'driver-core-5.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (49 commits)
    coccinelle: platform_get_irq: Fix parse error
    driver-core: add include guard to linux/container.h
    sysfs: add BIN_ATTR_WO() macro
    driver core: platform: Export platform_get_irq_optional()
    hwmon: pwm-fan: Use platform_get_irq_optional()
    driver core: platform: Introduce platform_get_irq_optional()
    Revert "driver core: Add support for linking devices during device addition"
    Revert "driver core: Add edit_links() callback for drivers"
    Revert "of/platform: Add functional dependency link from DT bindings"
    Revert "driver core: Add sync_state driver/bus callback"
    Revert "of/platform: Pause/resume sync state during init and of_platform_populate()"
    Revert "of/platform: Create device links for all child-supplier depencencies"
    Revert "of/platform: Don't create device links for default busses"
    Revert "of/platform: Fix fn definitons for of_link_is_valid() and of_link_property()"
    Revert "of/platform: Fix device_links_supplier_sync_state_resume() warning"
    Revert "of/platform: Disable generic device linking code for PowerPC"
    devcoredump: fix typo in comment
    devcoredump: use memory_read_from_buffer
    of/platform: Disable generic device linking code for PowerPC
    device.h: Fix warnings for mismatched parameter names in comments
    ...

    Linus Torvalds
     

10 Sep, 2019

1 commit

  • A script that uses the '.ns_deps' files generated by modpost to
    automatically add the required symbol namespace dependencies to each
    module.

    Usage:
    1) Move some symbols to a namespace with EXPORT_SYMBOL_NS() or define
    DEFAULT_SYMBOL_NAMESPACE
    2) Run 'make' (or 'make modules') and get warnings about modules not
    importing that namespace.
    3) Run 'make nsdeps' to automatically add required import statements
    to said modules.

    This makes it easer for subsystem maintainers to introduce and maintain
    symbol namespaces into their codebase.

    Co-developed-by: Martijn Coenen
    Signed-off-by: Martijn Coenen
    Acked-by: Julia Lawall
    Reviewed-by: Greg Kroah-Hartman
    Signed-off-by: Matthias Maennich
    Signed-off-by: Jessica Yu

    Matthias Maennich
     

06 Sep, 2019

1 commit

  • When do coccicheck, I get this error:

    spatch -D report --no-show-diff --very-quiet --cocci-file
    ./scripts/coccinelle/api/platform_get_irq.cocci --include-headers
    --dir . -I ./arch/x86/include -I ./arch/x86/include/generated -I ./include
    -I ./arch/x86/include/uapi -I ./arch/x86/include/generated/uapi
    -I ./include/uapi -I ./include/generated/uapi
    --include ./include/linux/kconfig.h --jobs 192 --chunksize 1
    minus: parse error:
    File "./scripts/coccinelle/api/platform_get_irq.cocci", line 24, column 9, charpos = 355
    around = '\(',
    whole content = if ( ret \( < \|
    Reviewed-by: Stephen Boyd
    Acked-by: Julia Lawall
    Link: https://lore.kernel.org/r/20190906033006.17616-1-yuehaibing@huawei.com
    Signed-off-by: Greg Kroah-Hartman

    YueHaibing
     

31 Jul, 2019

1 commit

  • Add the missing GPLv2 SPDX license identifier.

    It appears this single file was missing from 7f904d7e1f3e ("treewide:
    Replace GPLv2 boilerplate/reference with SPDX - rule 505"), which
    addressed all other files in scripts/coccinelle. Hence I added
    GPL-2.0-only consitently with the mentioned patch.

    Cc: linux-spdx@vger.kernel.org
    Cc: Elena Reshetova
    Signed-off-by: Matthias Maennich
    Acked-by: Julia Lawall
    Signed-off-by: Greg Kroah-Hartman

    Matthias Maennich
     

30 Jul, 2019

1 commit

  • Add a coccinelle script to check for the usage of dev_err() after a call
    to platform_get_irq{,_byname}() as it's redundant now that the function
    already prints an error when it fails.

    Cc: Greg Kroah-Hartman
    Cc: Rob Herring
    Cc: Bartlomiej Zolnierkiewicz
    Cc: Javier Martinez Canillas
    Cc: Andrzej Hajda
    Cc: Mark Brown
    Cc: Russell King - ARM Linux
    Cc: Marek Szyprowski
    Cc: Rafael J. Wysocki
    Cc: Andy Shevchenko
    Cc: Markus Elfring
    Signed-off-by: Stephen Boyd
    Link: https://lore.kernel.org/r/20190730053845.126834-4-swboyd@chromium.org
    Signed-off-by: Greg Kroah-Hartman

    Stephen Boyd
     

21 Jul, 2019

1 commit

  • Pull more Kbuild updates from Masahiro Yamada:

    - match the directory structure of the linux-libc-dev package to that
    of Debian-based distributions

    - fix incorrect include/config/auto.conf generation when Kconfig
    creates it along with the .config file

    - remove misleading $(AS) from documents

    - clean up precious tag files by distclean instead of mrproper

    - add a new coccinelle patch for devm_platform_ioremap_resource
    migration

    - refactor module-related scripts to read modules.order instead of
    $(MODVERDIR)/*.mod files to get the list of created modules

    - remove MODVERDIR

    - update list of header compile-test

    - add -fcf-protection=none flag to avoid conflict with the retpoline
    flags when CONFIG_RETPOLINE=y

    - misc cleanups

    * tag 'kbuild-v5.3-2' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (25 commits)
    kbuild: add -fcf-protection=none when using retpoline flags
    kbuild: update compile-test header list for v5.3-rc1
    kbuild: split out *.mod out of {single,multi}-used-m rules
    kbuild: remove 'prepare1' target
    kbuild: remove the first line of *.mod files
    kbuild: create *.mod with full directory path and remove MODVERDIR
    kbuild: export_report: read modules.order instead of .tmp_versions/*.mod
    kbuild: modpost: read modules.order instead of $(MODVERDIR)/*.mod
    kbuild: modsign: read modules.order instead of $(MODVERDIR)/*.mod
    kbuild: modinst: read modules.order instead of $(MODVERDIR)/*.mod
    scsi: remove pointless $(MODVERDIR)/$(obj)/53c700.ver
    kbuild: remove duplication from modules.order in sub-directories
    kbuild: get rid of kernel/ prefix from in-tree modules.{order,builtin}
    kbuild: do not create empty modules.order in the prepare stage
    coccinelle: api: add devm_platform_ioremap_resource script
    kbuild: compile-test headers listed in header-test-m as well
    kbuild: remove unused hostcc-option
    kbuild: remove tag files by distclean instead of mrproper
    kbuild: add --hash-style= and --build-id unconditionally
    kbuild: get rid of misleading $(AS) from documents
    ...

    Linus Torvalds
     

17 Jul, 2019

1 commit


15 Jul, 2019

2 commits

  • The audience for the Kernel driver-model is clearly Kernel hackers.

    Signed-off-by: Mauro Carvalho Chehab
    Acked-by: Jeff Kirsher # ice driver changes

    Mauro Carvalho Chehab
     
  • Pull stream_open() updates from Kirill Smelkov:
    "This time on stream_open front it is only two small changes:

    - the first one converts stream_open.cocci to treat all functions
    that start with wait_.* as blocking. Previously it was only
    wait_event_.* functions that were considered as blocking, but this
    was falsely reporting several deadlock cases as only warning.

    This was picked by linux-kbuild and entered mainline as commit
    0c4ab18fc33b ("coccinelle: api/stream_open: treat all wait_.*()
    calls as blocking"), and already merged earlier.

    - the second one teaches stream_open.cocci to consider files as being
    stream-like even if they use noop_llseek. It results in two more
    drivers being converted to stream_open() (mousedev.c and
    hid-sensor-custom.c)"

    * tag 'stream_open-5.3' of https://lab.nexedi.com/kirr/linux:
    *: convert stream-like files -> stream_open, even if they use noop_llseek

    Linus Torvalds
     

14 Jul, 2019

1 commit

  • This patch continues 10dce8af3422 (fs: stream_open - opener for
    stream-like files so that read and write can run simultaneously without
    deadlock) and c5bf68fe0c86 (*: convert stream-like files from
    nonseekable_open -> stream_open) and teaches steam_open.cocci to
    consider files as being stream-like not only if they have
    .llseek=no_llseek, but also if they have .llseek=noop_llseek.

    This is safe to do: the comment about noop_llseek says

    This is an implementation of ->llseek useable for the rare special case when
    userspace expects the seek to succeed but the (device) file is actually not
    able to perform the seek. In this case you use noop_llseek() instead of
    falling back to the default implementation of ->llseek.

    and in general noop_llseek was massively added to drivers in 6038f373a3dc
    (llseek: automatically add .llseek fop) when changing default for NULL .llseek
    from NOP to no_llseek with the idea to avoid breaking compatibility, if
    maybe some user-space program was using lseek on a device without caring
    about the result, but caring if it was an error or not.

    Amended semantic patch produces two changes when applied tree-wide:

    drivers/hid/hid-sensor-custom.c:690:8-24: WARNING: hid_sensor_custom_fops: .read() has stream semantic; safe to change nonseekable_open -> stream_open.
    drivers/input/mousedev.c:564:1-17: ERROR: mousedev_fops: .read() can deadlock .write(); change nonseekable_open -> stream_open to fix.

    Cc: Julia Lawall
    Cc: Jan Blunck
    Cc: Arnd Bergmann
    Cc: Jiri Kosina
    Cc: Jonathan Cameron
    Cc: Srinivas Pandruvada
    Cc: Benjamin Tissoires
    Cc: Dmitry Torokhov
    Signed-off-by: Kirill Smelkov

    Kirill Smelkov
     

13 Jul, 2019

2 commits

  • Pull Kbuild updates from Masahiro Yamada:

    - remove headers_{install,check}_all targets

    - remove unreasonable 'depends on !UML' from CONFIG_SAMPLES

    - re-implement 'make headers_install' more cleanly

    - add new header-test-y syntax to compile-test headers

    - compile-test exported headers to ensure they are compilable in
    user-space

    - compile-test headers under include/ to ensure they are self-contained

    - remove -Waggregate-return, -Wno-uninitialized, -Wno-unused-value
    flags

    - add -Werror=unknown-warning-option for Clang

    - add 128-bit built-in types support to genksyms

    - fix missed rebuild of modules.builtin

    - propagate 'No space left on device' error in fixdep to Make

    - allow Clang to use its integrated assembler

    - improve some coccinelle scripts

    - add a new flag KBUILD_ABS_SRCTREE to request Kbuild to use absolute
    path for $(srctree).

    - do not ignore errors when compression utility is missing

    - misc cleanups

    * tag 'kbuild-v5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (49 commits)
    kbuild: use -- separater intead of $(filter-out ...) for cc-cross-prefix
    kbuild: Inform user to pass ARCH= for make mrproper
    kbuild: fix compression errors getting ignored
    kbuild: add a flag to force absolute path for srctree
    kbuild: replace KBUILD_SRCTREE with boolean building_out_of_srctree
    kbuild: remove src and obj from the top Makefile
    scripts/tags.sh: remove unused environment variables from comments
    scripts/tags.sh: drop SUBARCH support for ARM
    kbuild: compile-test kernel headers to ensure they are self-contained
    kheaders: include only headers into kheaders_data.tar.xz
    kheaders: remove meaningless -R option of 'ls'
    kbuild: support header-test-pattern-y
    kbuild: do not create wrappers for header-test-y
    kbuild: compile-test exported headers to ensure they are self-contained
    init/Kconfig: add CONFIG_CC_CAN_LINK
    kallsyms: exclude kasan local symbols on s390
    kbuild: add more hints about SUBDIRS replacement
    coccinelle: api/stream_open: treat all wait_.*() calls as blocking
    coccinelle: put_device: Add a cast to an expression for an assignment
    coccinelle: put_device: Adjust a message construction
    ...

    Linus Torvalds
     
  • Pull driver core and debugfs updates from Greg KH:
    "Here is the "big" driver core and debugfs changes for 5.3-rc1

    It's a lot of different patches, all across the tree due to some api
    changes and lots of debugfs cleanups.

    Other than the debugfs cleanups, in this set of changes we have:

    - bus iteration function cleanups

    - scripts/get_abi.pl tool to display and parse Documentation/ABI
    entries in a simple way

    - cleanups to Documenatation/ABI/ entries to make them parse easier
    due to typos and other minor things

    - default_attrs use for some ktype users

    - driver model documentation file conversions to .rst

    - compressed firmware file loading

    - deferred probe fixes

    All of these have been in linux-next for a while, with a bunch of
    merge issues that Stephen has been patient with me for"

    * tag 'driver-core-5.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (102 commits)
    debugfs: make error message a bit more verbose
    orangefs: fix build warning from debugfs cleanup patch
    ubifs: fix build warning after debugfs cleanup patch
    driver: core: Allow subsystems to continue deferring probe
    drivers: base: cacheinfo: Ensure cpu hotplug work is done before Intel RDT
    arch_topology: Remove error messages on out-of-memory conditions
    lib: notifier-error-inject: no need to check return value of debugfs_create functions
    swiotlb: no need to check return value of debugfs_create functions
    ceph: no need to check return value of debugfs_create functions
    sunrpc: no need to check return value of debugfs_create functions
    ubifs: no need to check return value of debugfs_create functions
    orangefs: no need to check return value of debugfs_create functions
    nfsd: no need to check return value of debugfs_create functions
    lib: 842: no need to check return value of debugfs_create functions
    debugfs: provide pr_fmt() macro
    debugfs: log errors when something goes wrong
    drivers: s390/cio: Fix compilation warning about const qualifiers
    drivers: Add generic helper to match by of_node
    driver_find_device: Unify the match function with class_find_device()
    bus_find_device: Unify the match callback with class_find_device
    ...

    Linus Torvalds
     

08 Jul, 2019

4 commits

  • Previously steam_open.cocci was treating only wait_event_.* - e.g.
    wait_event_interruptible - as a blocking operation. However e.g.
    wait_for_completion_interruptible is also blocking, and so from this
    point of view it would be more logical to treat all wait_.* as a
    blocking point.

    The logic of this change actually came up for real when
    drivers/pci/switch/switchtec.c changed from using
    wait_event_interruptible to wait_for_completion_interruptible:

    https://lore.kernel.org/linux-pci/20190413170056.GA11293@deco.navytux.spb.ru/
    https://lore.kernel.org/linux-pci/20190415145456.GA15280@deco.navytux.spb.ru/
    https://lore.kernel.org/linux-pci/20190415154102.GB17661@deco.navytux.spb.ru/

    For a driver that uses nonseekable_open with read/write having stream
    semantic and read also calling e.g. wait_for_completion_interruptible,
    running stream_open.cocci before this patch would produce:

    WARNING: _fops: .read() and .write() have stream semantic; safe to change nonseekable_open -> stream_open.

    while after this patch it will report:

    ERROR: _fops: .read() can deadlock .write(); change nonseekable_open -> stream_open to fix.

    Signed-off-by: Kirill Smelkov
    Acked-by: Julia Lawall
    Signed-off-by: Masahiro Yamada

    Kirill Smelkov
     
  • Extend a when constraint in a SmPL rule so that an additional cast
    is optionally excluded from source code searches for an expression
    in assignments.

    Signed-off-by: Markus Elfring
    Suggested-by: Julia Lawall
    Link: https://lore.kernel.org/lkml/alpine.DEB.2.21.1902160934400.3212@hadrien/
    Link: https://systeme.lip6.fr/pipermail/cocci/2019-February/005592.html
    Acked-by: Julia Lawall
    Signed-off-by: Masahiro Yamada

    Markus Elfring
     
  • The Linux coding style tolerates long string literals so that
    the provided information can be easier found also by search tools
    like grep.
    Thus simplify a message construction in a SmPL rule by concatenating text
    with two plus operators less.

    Signed-off-by: Markus Elfring
    Signed-off-by: Masahiro Yamada

    Markus Elfring
     
  • Replace 'kstrdep' with 'kstrdup' in warning messages.

    Signed-off-by: Rikard Falkeborn
    Acked-by: Julia Lawall
    Signed-off-by: Masahiro Yamada

    Rikard Falkeborn
     

21 Jun, 2019

1 commit

  • Convert the various documents at the driver-model, preparing
    them to be part of the driver-api book.

    The conversion is actually:
    - add blank lines and identation in order to identify paragraphs;
    - fix tables markups;
    - add some lists markups;
    - mark literal blocks;
    - adjust title markups.

    At its new index.rst, let's add a :orphan: while this is not linked to
    the main index.rst file, in order to avoid build warnings.

    Signed-off-by: Mauro Carvalho Chehab
    Acked-by: Jeff Kirsher # ice
    Signed-off-by: Greg Kroah-Hartman

    Mauro Carvalho Chehab
     

19 Jun, 2019

1 commit

  • Based on 1 normalized pattern(s):

    gplv2

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-only

    has been chosen to replace the boilerplate/reference in 58 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Enrico Weigelt
    Reviewed-by: Allison Randal
    Reviewed-by: Kate Stewart
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190604081207.556988620@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

05 Jun, 2019

1 commit

  • Based on 1 normalized pattern(s):

    gpl v2

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-only

    has been chosen to replace the boilerplate/reference in 19 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Allison Randal
    Reviewed-by: Richard Fontana
    Reviewed-by: Steve Winslow
    Reviewed-by: Kate Stewart
    Reviewed-by: Alexios Zavras
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190529141333.108140152@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

07 Apr, 2019

1 commit

  • …multaneously without deadlock

    Commit 9c225f2655e3 ("vfs: atomic f_pos accesses as per POSIX") added
    locking for file.f_pos access and in particular made concurrent read and
    write not possible - now both those functions take f_pos lock for the
    whole run, and so if e.g. a read is blocked waiting for data, write will
    deadlock waiting for that read to complete.

    This caused regression for stream-like files where previously read and
    write could run simultaneously, but after that patch could not do so
    anymore. See e.g. commit 581d21a2d02a ("xenbus: fix deadlock on writes
    to /proc/xen/xenbus") which fixes such regression for particular case of
    /proc/xen/xenbus.

    The patch that added f_pos lock in 2014 did so to guarantee POSIX thread
    safety for read/write/lseek and added the locking to file descriptors of
    all regular files. In 2014 that thread-safety problem was not new as it
    was already discussed earlier in 2006.

    However even though 2006'th version of Linus's patch was adding f_pos
    locking "only for files that are marked seekable with FMODE_LSEEK (thus
    avoiding the stream-like objects like pipes and sockets)", the 2014
    version - the one that actually made it into the tree as 9c225f2655e3 -
    is doing so irregardless of whether a file is seekable or not.

    See

    https://lore.kernel.org/lkml/53022DB1.4070805@gmail.com/
    https://lwn.net/Articles/180387
    https://lwn.net/Articles/180396

    for historic context.

    The reason that it did so is, probably, that there are many files that
    are marked non-seekable, but e.g. their read implementation actually
    depends on knowing current position to correctly handle the read. Some
    examples:

    kernel/power/user.c snapshot_read
    fs/debugfs/file.c u32_array_read
    fs/fuse/control.c fuse_conn_waiting_read + ...
    drivers/hwmon/asus_atk0110.c atk_debugfs_ggrp_read
    arch/s390/hypfs/inode.c hypfs_read_iter
    ...

    Despite that, many nonseekable_open users implement read and write with
    pure stream semantics - they don't depend on passed ppos at all. And for
    those cases where read could wait for something inside, it creates a
    situation similar to xenbus - the write could be never made to go until
    read is done, and read is waiting for some, potentially external, event,
    for potentially unbounded time -> deadlock.

    Besides xenbus, there are 14 such places in the kernel that I've found
    with semantic patch (see below):

    drivers/xen/evtchn.c:667:8-24: ERROR: evtchn_fops: .read() can deadlock .write()
    drivers/isdn/capi/capi.c:963:8-24: ERROR: capi_fops: .read() can deadlock .write()
    drivers/input/evdev.c:527:1-17: ERROR: evdev_fops: .read() can deadlock .write()
    drivers/char/pcmcia/cm4000_cs.c:1685:7-23: ERROR: cm4000_fops: .read() can deadlock .write()
    net/rfkill/core.c:1146:8-24: ERROR: rfkill_fops: .read() can deadlock .write()
    drivers/s390/char/fs3270.c:488:1-17: ERROR: fs3270_fops: .read() can deadlock .write()
    drivers/usb/misc/ldusb.c:310:1-17: ERROR: ld_usb_fops: .read() can deadlock .write()
    drivers/hid/uhid.c:635:1-17: ERROR: uhid_fops: .read() can deadlock .write()
    net/batman-adv/icmp_socket.c:80:1-17: ERROR: batadv_fops: .read() can deadlock .write()
    drivers/media/rc/lirc_dev.c:198:1-17: ERROR: lirc_fops: .read() can deadlock .write()
    drivers/leds/uleds.c:77:1-17: ERROR: uleds_fops: .read() can deadlock .write()
    drivers/input/misc/uinput.c:400:1-17: ERROR: uinput_fops: .read() can deadlock .write()
    drivers/infiniband/core/user_mad.c:985:7-23: ERROR: umad_fops: .read() can deadlock .write()
    drivers/gnss/core.c:45:1-17: ERROR: gnss_fops: .read() can deadlock .write()

    In addition to the cases above another regression caused by f_pos
    locking is that now FUSE filesystems that implement open with
    FOPEN_NONSEEKABLE flag, can no longer implement bidirectional
    stream-like files - for the same reason as above e.g. read can deadlock
    write locking on file.f_pos in the kernel.

    FUSE's FOPEN_NONSEEKABLE was added in 2008 in a7c1b990f715 ("fuse:
    implement nonseekable open") to support OSSPD. OSSPD implements /dev/dsp
    in userspace with FOPEN_NONSEEKABLE flag, with corresponding read and
    write routines not depending on current position at all, and with both
    read and write being potentially blocking operations:

    See

    https://github.com/libfuse/osspd
    https://lwn.net/Articles/308445

    https://github.com/libfuse/osspd/blob/14a9cff0/osspd.c#L1406
    https://github.com/libfuse/osspd/blob/14a9cff0/osspd.c#L1438-L1477
    https://github.com/libfuse/osspd/blob/14a9cff0/osspd.c#L1479-L1510

    Corresponding libfuse example/test also describes FOPEN_NONSEEKABLE as
    "somewhat pipe-like files ..." with read handler not using offset.
    However that test implements only read without write and cannot exercise
    the deadlock scenario:

    https://github.com/libfuse/libfuse/blob/fuse-3.4.2-3-ga1bff7d/example/poll.c#L124-L131
    https://github.com/libfuse/libfuse/blob/fuse-3.4.2-3-ga1bff7d/example/poll.c#L146-L163
    https://github.com/libfuse/libfuse/blob/fuse-3.4.2-3-ga1bff7d/example/poll.c#L209-L216

    I've actually hit the read vs write deadlock for real while implementing
    my FUSE filesystem where there is /head/watch file, for which open
    creates separate bidirectional socket-like stream in between filesystem
    and its user with both read and write being later performed
    simultaneously. And there it is semantically not easy to split the
    stream into two separate read-only and write-only channels:

    https://lab.nexedi.com/kirr/wendelin.core/blob/f13aa600/wcfs/wcfs.go#L88-169

    Let's fix this regression. The plan is:

    1. We can't change nonseekable_open to include &~FMODE_ATOMIC_POS -
    doing so would break many in-kernel nonseekable_open users which
    actually use ppos in read/write handlers.

    2. Add stream_open() to kernel to open stream-like non-seekable file
    descriptors. Read and write on such file descriptors would never use
    nor change ppos. And with that property on stream-like files read and
    write will be running without taking f_pos lock - i.e. read and write
    could be running simultaneously.

    3. With semantic patch search and convert to stream_open all in-kernel
    nonseekable_open users for which read and write actually do not
    depend on ppos and where there is no other methods in file_operations
    which assume @offset access.

    4. Add FOPEN_STREAM to fs/fuse/ and open in-kernel file-descriptors via
    steam_open if that bit is present in filesystem open reply.

    It was tempting to change fs/fuse/ open handler to use stream_open
    instead of nonseekable_open on just FOPEN_NONSEEKABLE flags, but
    grepping through Debian codesearch shows users of FOPEN_NONSEEKABLE,
    and in particular GVFS which actually uses offset in its read and
    write handlers

    https://codesearch.debian.net/search?q=-%3Enonseekable+%3D
    https://gitlab.gnome.org/GNOME/gvfs/blob/1.40.0-6-gcbc54396/client/gvfsfusedaemon.c#L1080
    https://gitlab.gnome.org/GNOME/gvfs/blob/1.40.0-6-gcbc54396/client/gvfsfusedaemon.c#L1247-1346
    https://gitlab.gnome.org/GNOME/gvfs/blob/1.40.0-6-gcbc54396/client/gvfsfusedaemon.c#L1399-1481

    so if we would do such a change it will break a real user.

    5. Add stream_open and FOPEN_STREAM handling to stable kernels starting
    from v3.14+ (the kernel where 9c225f2655 first appeared).

    This will allow to patch OSSPD and other FUSE filesystems that
    provide stream-like files to return FOPEN_STREAM | FOPEN_NONSEEKABLE
    in their open handler and this way avoid the deadlock on all kernel
    versions. This should work because fs/fuse/ ignores unknown open
    flags returned from a filesystem and so passing FOPEN_STREAM to a
    kernel that is not aware of this flag cannot hurt. In turn the kernel
    that is not aware of FOPEN_STREAM will be < v3.14 where just
    FOPEN_NONSEEKABLE is sufficient to implement streams without read vs
    write deadlock.

    This patch adds stream_open, converts /proc/xen/xenbus to it and adds
    semantic patch to automatically locate in-kernel places that are either
    required to be converted due to read vs write deadlock, or that are just
    safe to be converted because read and write do not use ppos and there
    are no other funky methods in file_operations.

    Regarding semantic patch I've verified each generated change manually -
    that it is correct to convert - and each other nonseekable_open instance
    left - that it is either not correct to convert there, or that it is not
    converted due to current stream_open.cocci limitations.

    The script also does not convert files that should be valid to convert,
    but that currently have .llseek = noop_llseek or generic_file_llseek for
    unknown reason despite file being opened with nonseekable_open (e.g.
    drivers/input/mousedev.c)

    Cc: Michael Kerrisk <mtk.manpages@gmail.com>
    Cc: Yongzhi Pan <panyongzhi@gmail.com>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: David Vrabel <david.vrabel@citrix.com>
    Cc: Juergen Gross <jgross@suse.com>
    Cc: Miklos Szeredi <miklos@szeredi.hu>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Kirill Tkhai <ktkhai@virtuozzo.com>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Julia Lawall <Julia.Lawall@lip6.fr>
    Cc: Nikolaus Rath <Nikolaus@rath.org>
    Cc: Han-Wen Nienhuys <hanwen@google.com>
    Signed-off-by: Kirill Smelkov <kirr@nexedi.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

    Kirill Smelkov
     

28 Mar, 2019

2 commits


17 Mar, 2019

1 commit

  • The of_find_device_by_node() takes a reference to the underlying device
    structure, we should release that reference.
    The implementation of this semantic code search is:
    In a function, for a local variable returned by calling
    of_find_device_by_node(),
    a, if it is released by a function such as
    put_device()/of_dev_put()/platform_device_put() after the last use,
    it is considered that there is no reference leak;
    b, if it is passed back to the caller via
    dev_get_drvdata()/platform_get_drvdata()/get_device(), etc., the
    reference will be released in other functions, and the current function
    also considers that there is no reference leak;
    c, for the rest of the situation, the current function should release the
    reference by calling put_device, this code search will report the
    corresponding error message.

    By using this semantic code search, we have found some object reference leaks,
    such as:
    commit 11907e9d3533 ("ASoC: fsl-asoc-card: fix object reference leaks in
    fsl_asoc_card_probe")
    commit a12085d13997 ("mtd: rawnand: atmel: fix possible object reference leak")
    commit 11493f26856a ("mtd: rawnand: jz4780: fix possible object reference leak")

    There are still dozens of reference leaks in the current kernel code.

    Further, for the case of b, the object returned to other functions may also
    have a reference leak, we will continue to develop other cocci scripts to
    further check the reference leak.

    Signed-off-by: Wen Yang
    Reviewed-by: Julia Lawall
    Reviewed-by: Markus Elfring
    Signed-off-by: Masahiro Yamada

    Wen Yang
     

08 Jan, 2019

1 commit

  • dma_zalloc_coherent() is no longer needed as it has no users because
    dma_alloc_coherent() already zeroes out memory for us.

    The Coccinelle grammar rule that used to check for dma_alloc_coherent()
    + memset() is modified so that it just tells the user that the memset is
    not needed anymore.

    Suggested-by: Christoph Hellwig
    Signed-off-by: Luis Chamberlain
    Signed-off-by: Christoph Hellwig

    Luis Chamberlain
     

06 Jan, 2019

2 commits


30 Dec, 2018

1 commit

  • Pull Kbuild updates from Masahiro Yamada:
    "Kbuild core:
    - remove unneeded $(call cc-option,...) switches
    - consolidate Clang compiler flags into CLANG_FLAGS
    - announce the deprecation of SUBDIRS
    - fix single target build for external module
    - simplify the dependencies of 'prepare' stage targets
    - allow fixdep to directly write to .*.cmd files
    - simplify dependency generation for CONFIG_TRIM_UNUSED_KSYMS
    - change if_changed_rule to accept multi-line recipe
    - move .SECONDARY special target to scripts/Kbuild.include
    - remove redundant 'set -e'
    - improve parallel execution for CONFIG_HEADERS_CHECK
    - misc cleanups

    Treewide fixes and cleanups
    - set Clang flags correctly for PowerPC boot images
    - fix UML build error with CONFIG_GCC_PLUGINS
    - remove unneeded patterns from .gitignore files
    - refactor firmware/Makefile
    - remove unneeded rules for *offsets.s
    - avoid unneeded regeneration of intermediate .s files
    - clean up ./Kbuild

    Modpost:
    - remove unused -M, -K options
    - fix false positive warnings about section mismatch
    - use simple devtable lookup instead of linker magic
    - misc cleanups

    Coccinelle:
    - relax boolinit.cocci checks for overall consistency
    - fix warning messages of boolinit.cocci

    Other tools:
    - improve -dirty check of scripts/setlocalversion
    - add a tool to generate compile_commands.json from .*.cmd files"

    * tag 'kbuild-v4.21' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (51 commits)
    kbuild: remove unused cmd_gentimeconst
    kbuild: remove $(obj)/ prefixes in ./Kbuild
    treewide: add intermediate .s files to targets
    treewide: remove explicit rules for *offsets.s
    firmware: refactor firmware/Makefile
    firmware: remove unnecessary patterns from .gitignore
    scripts: remove unnecessary ihex2fw and check-lc_ctypes from .gitignore
    um: remove unused filechk_gen_header in Makefile
    scripts: add a tool to produce a compile_commands.json file
    kbuild: add -Werror=implicit-int flag unconditionally
    kbuild: add -Werror=strict-prototypes flag unconditionally
    kbuild: add -fno-PIE flag unconditionally
    scripts: coccinelle: Correct warning message
    scripts: coccinelle: only suggest true/false in files that already use them
    kbuild: handle part-of-module correctly for *.ll and *.symtypes
    kbuild: refactor part-of-module
    kbuild: refactor quiet_modtag
    kbuild: remove redundant quiet_modtag for $(obj-m)
    kbuild: refactor Makefile.asm-generic
    user/Makefile: Fix typo and capitalization in comment section
    ...

    Linus Torvalds
     

16 Dec, 2018

2 commits


25 Nov, 2018

1 commit


22 Aug, 2018

1 commit


14 Aug, 2018

1 commit


18 Jul, 2018

1 commit


07 Jun, 2018

1 commit

  • Pull Kbuild updates from Masahiro Yamada:

    - improve fixdep to coalesce consecutive slashes in dep-files

    - fix some issues of the maintainer string generation in deb-pkg script

    - remove unused CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX and clean-up
    several tools and linker scripts

    - clean-up modpost

    - allow to enable the dead code/data elimination for PowerPC in EXPERT
    mode

    - improve two coccinelle scripts for better performance

    - pass endianness and machine size flags to sparse for all architecture

    - misc fixes

    * tag 'kbuild-v4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (25 commits)
    kbuild: add machine size to CHECKFLAGS
    kbuild: add endianness flag to CHEKCFLAGS
    kbuild: $(CHECK) doesnt need NOSTDINC_FLAGS twice
    scripts: Fixed printf format mismatch
    scripts/tags.sh: use `find` for $ALLSOURCE_ARCHS generation
    coccinelle: deref_null: improve performance
    coccinelle: mini_lock: improve performance
    powerpc: Allow LD_DEAD_CODE_DATA_ELIMINATION to be selected
    kbuild: Allow LD_DEAD_CODE_DATA_ELIMINATION to be selectable if enabled
    kbuild: LD_DEAD_CODE_DATA_ELIMINATION no -ffunction-sections/-fdata-sections for module build
    kbuild: Fix asm-generic/vmlinux.lds.h for LD_DEAD_CODE_DATA_ELIMINATION
    modpost: constify *modname function argument where possible
    modpost: remove redundant is_vmlinux() test
    modpost: use strstarts() helper more widely
    modpost: pass struct elf_info pointer to get_modinfo()
    checkpatch: remove VMLINUX_SYMBOL() check
    vmlinux.lds.h: remove no-op macro VMLINUX_SYMBOL()
    kbuild: remove CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX
    export.h: remove code for prefixing symbols with underscore
    depmod.sh: remove symbol prefix support
    ...

    Linus Torvalds
     

22 May, 2018

2 commits

  • Move rules looking for some special cases of safe dereferences before
    the collection of NULL-tested values. The special cases are fairly
    rare, but somewhat costly to find, because isomorphisms create many
    variants of the rules. There is thus no need to search for them over
    and over for each NULL tested expression. Collecting them just once
    is sufficient and more efficient.

    Signed-off-by: Julia Lawall
    Signed-off-by: Masahiro Yamada

    Julia Lawall
     
  • Replace by ... when any. is slow, and in some
    obscure cases involving backward jumps it doesn't force the unlock to
    actually come after the end of the if.

    Signed-off-by: Julia Lawall
    Signed-off-by: Masahiro Yamada

    Julia Lawall