Skip to content
  1. Apr 08, 2020
    • Qiujun Huang's avatar
      kernel/kmod.c: fix a typo "assuems" -> "assumes" · 06d4f815
      Qiujun Huang authored
      
      
      There is a typo in comment.  Fix it.  s/assuems/assumes/
      
      Signed-off-by: default avatarQiujun Huang <hqjagain@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarLuis Chamberlain <mcgrof@kernel.org>
      Link: http://lkml.kernel.org/r/1585891029-6450-1-git-send-email-hqjagain@gmail.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      06d4f815
    • Colin Ian King's avatar
      reiserfs: clean up several indentation issues · 5404e7e0
      Colin Ian King authored
      
      
      There are several places where code is indented incorrectly. Fix these.
      
      Signed-off-by: default avatarColin Ian King <colin.king@canonical.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Link: http://lkml.kernel.org/r/20200325135018.113431-1-colin.king@canonical.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      5404e7e0
    • Will Deacon's avatar
      kallsyms: unexport kallsyms_lookup_name() and kallsyms_on_each_symbol() · 0bd476e6
      Will Deacon authored
      
      
      kallsyms_lookup_name() and kallsyms_on_each_symbol() are exported to
      modules despite having no in-tree users and being wide open to abuse by
      out-of-tree modules that can use them as a method to invoke arbitrary
      non-exported kernel functions.
      
      Unexport kallsyms_lookup_name() and kallsyms_on_each_symbol().
      
      Signed-off-by: default avatarWill Deacon <will@kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Reviewed-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Reviewed-by: default avatarQuentin Perret <qperret@google.com>
      Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Frederic Weisbecker <frederic@kernel.org>
      Cc: K.Prasad <prasad@linux.vnet.ibm.com>
      Cc: Miroslav Benes <mbenes@suse.cz>
      Cc: Petr Mladek <pmladek@suse.com>
      Cc: Joe Lawrence <joe.lawrence@redhat.com>
      Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
      Link: http://lkml.kernel.org/r/20200221114404.14641-4-will@kernel.org
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      0bd476e6
    • Will Deacon's avatar
      samples/hw_breakpoint: drop use of kallsyms_lookup_name() · d8a84d33
      Will Deacon authored
      The 'data_breakpoint' test code is the only modular user of
      kallsyms_lookup_name(), which was exported as part of fixing the test in
      f60d24d2
      
       ("hw-breakpoints: Fix broken hw-breakpoint sample module").
      
      In preparation for un-exporting this symbol, switch the test over to using
      __symbol_get(), which can be used to place breakpoints on exported
      symbols.
      
      Signed-off-by: default avatarWill Deacon <will@kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Reviewed-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Reviewed-by: default avatarQuentin Perret <qperret@google.com>
      Cc: K.Prasad <prasad@linux.vnet.ibm.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Frederic Weisbecker <frederic@kernel.org>
      Cc: Alexei Starovoitov <ast@kernel.org>
      Cc: Miroslav Benes <mbenes@suse.cz>
      Cc: Petr Mladek <pmladek@suse.com>
      Cc: Joe Lawrence <joe.lawrence@redhat.com>
      Link: http://lkml.kernel.org/r/20200221114404.14641-3-will@kernel.org
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      d8a84d33
    • Will Deacon's avatar
      samples/hw_breakpoint: drop HW_BREAKPOINT_R when reporting writes · 4800314e
      Will Deacon authored
      
      
      Patch series "Unexport kallsyms_lookup_name() and kallsyms_on_each_symbol()".
      
      Despite having just a single modular in-tree user that I could spot,
      kallsyms_lookup_name() is exported to modules and provides a mechanism
      for out-of-tree modules to access and invoke arbitrary, non-exported
      kernel symbols when kallsyms is enabled.
      
      This patch series fixes up that one user and unexports the symbol along
      with kallsyms_on_each_symbol(), since that could also be abused in a
      similar manner.
      
      I would like to avoid out-of-tree modules being easily able to call
      functions that are not exported.  kallsyms_lookup_name() makes this
      trivial to the point that there is very little incentive to rework these
      modules to either use upstream interfaces correctly or propose
      functionality which may be otherwise missing upstream.  Both of these
      latter solutions would be pre-requisites to upstreaming these modules, and
      the current state of things actively discourages that approach.
      
      The background here is that we are aiming for Android devices to be able
      to use a generic binary kernel image closely following upstream, with any
      vendor extensions coming in as kernel modules.  In this case, we (Google)
      end up maintaining the binary module ABI within the scope of a single LTS
      kernel.  Monitoring and managing the ABI surface is not feasible if it
      effectively includes all data and functions via kallsyms_lookup_name().
      Of course, we could just carry this patch in the Android kernel tree, but
      we're aiming to carry as little as possible (ideally nothing) and I think
      it's a sensible change in its own right.  I'm surprised you object to it,
      in all honesty.
      
      Now, you could turn around and say "that's not upstream's problem", but it
      still seems highly undesirable to me to have an upstream bypass for
      exported symbols that isn't even used by upstream modules.  It's ripe for
      abuse and encourages people to work outside of the upstream tree.  The
      usual rule is that we don't export symbols without a user in the tree and
      that seems especially relevant in this case.
      
      Joe Lawrence said:
      
      : FWIW, kallsyms was historically used by the out-of-tree kpatch support
      : module to resolve external symbols as well as call set_memory_r{w,o}()
      : API.  All of that support code has been merged upstream, so modern kpatch
      : modules* no longer leverage kallsyms by default.
      :
      : That said, there are still some users who still use the deprecated support
      : module with newer kernels, but that is not officially supported by the
      : project.
      
      This patch (of 3):
      
      Given the name of a kernel symbol, the 'data_breakpoint' test claims to
      "report any write operations on the kernel symbol".  However, it creates
      the breakpoint using both HW_BREAKPOINT_W and HW_BREAKPOINT_R, which menas
      it also fires for read access.
      
      Drop HW_BREAKPOINT_R from the breakpoint attributes.
      
      Signed-off-by: default avatarWill Deacon <will@kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Reviewed-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Reviewed-by: default avatarQuentin Perret <qperret@google.com>
      Cc: K.Prasad <prasad@linux.vnet.ibm.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Frederic Weisbecker <frederic@kernel.org>
      Cc: Alexei Starovoitov <ast@kernel.org>
      Cc: Miroslav Benes <mbenes@suse.cz>
      Cc: Petr Mladek <pmladek@suse.com>
      Cc: Joe Lawrence <joe.lawrence@redhat.com>
      Link: http://lkml.kernel.org/r/20200221114404.14641-2-will@kernel.org
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      4800314e
    • Alexey Dobriyan's avatar
      fs/binfmt_elf.c: don't free interpreter's ELF pheaders on common path · aa0d1564
      Alexey Dobriyan authored
      
      
      Static executables don't need to free NULL pointer.
      
      It doesn't matter really because static executable is not common scenario
      but do it anyway out of pedantry.
      
      Signed-off-by: default avatarAlexey Dobriyan <adobriyan@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Link: http://lkml.kernel.org/r/20200219185330.GA4933@avx2
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      aa0d1564
    • Alexey Dobriyan's avatar
      fs/binfmt_elf.c: allocate less for static executable · 0693ffeb
      Alexey Dobriyan authored
      
      
      PT_INTERP ELF header can be spared if executable is static.
      
      Signed-off-by: default avatarAlexey Dobriyan <adobriyan@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Link: http://lkml.kernel.org/r/20200219185012.GB4871@avx2
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      0693ffeb
    • Alexey Dobriyan's avatar
      fs/binfmt_elf.c: delete "loc" variable · c69bcc93
      Alexey Dobriyan authored
      
      
      "loc" variable became just a wrapper for PT_INTERP ELF header after main
      ELF header was moved to "bprm->buf".  Delete it.
      
      Signed-off-by: default avatarAlexey Dobriyan <adobriyan@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Link: http://lkml.kernel.org/r/20200219184847.GA4871@avx2
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      c69bcc93
    • Jason Baron's avatar
      fs/epoll: make nesting accounting safe for -rt kernel · efcdd350
      Jason Baron authored
      
      
      Davidlohr Bueso pointed out that when CONFIG_DEBUG_LOCK_ALLOC is set
      ep_poll_safewake() can take several non-raw spinlocks after disabling
      interrupts.  Since a spinlock can block in the -rt kernel, we can't take a
      spinlock after disabling interrupts.  So let's re-work how we determine
      the nesting level such that it plays nicely with the -rt kernel.
      
      Let's introduce a 'nests' field in struct eventpoll that records the
      current nesting level during ep_poll_callback().  Then, if we nest again
      we can find the previous struct eventpoll that we were called from and
      increase our count by 1.  The 'nests' field is protected by
      ep->poll_wait.lock.
      
      I've also moved the visited field to reduce the size of struct eventpoll
      from 184 bytes to 176 bytes on x86_64 for !CONFIG_DEBUG_LOCK_ALLOC, which
      is typical for a production config.
      
      Reported-by: default avatarDavidlohr Bueso <dbueso@suse.de>
      Signed-off-by: default avatarJason Baron <jbaron@akamai.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarDavidlohr Bueso <dbueso@suse.de>
      Cc: Roman Penyaev <rpenyaev@suse.de>
      Cc: Eric Wong <normalperson@yhbt.net>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Link: http://lkml.kernel.org/r/1582739816-13167-1-git-send-email-jbaron@akamai.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      efcdd350
    • Roman Penyaev's avatar
      kselftest: introduce new epoll test case · 282144e0
      Roman Penyaev authored
      
      
      This testcase repeats epollbug.c from the bug:
      
        https://bugzilla.kernel.org/show_bug.cgi?id=205933
      
      What it tests?  It tests the race between epoll_ctl() and epoll_wait().
      New event mask passed to epoll_ctl() triggers wake up, which can be missed
      because of the bug described in the link.  Reproduction is 100%, so easy
      to fix.  Kudos, Max, for wonderful test case.
      
      Signed-off-by: default avatarRoman Penyaev <rpenyaev@suse.de>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Max Neunhoeffer <max@arangodb.com>
      Cc: Jakub Kicinski <kuba@kernel.org>
      Cc: Christopher Kohlhoff <chris.kohlhoff@clearpool.io>
      Cc: Davidlohr Bueso <dbueso@suse.de>
      Cc: Jason Baron <jbaron@akamai.com>
      Cc: Jes Sorensen <jes.sorensen@gmail.com>
      Link: http://lkml.kernel.org/r/20200214170211.561524-2-rpenyaev@suse.de
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      282144e0
    • Joe Perches's avatar
      checkpatch: avoid warning about uninitialized_var() · 16b7f3c8
      Joe Perches authored
      
      
      WARNING: function definition argument 'flags' should also have an identifier name
      #26: FILE: drivers/tty/serial/sh-sci.c:1348:
      +       unsigned long uninitialized_var(flags);
      
      Special-case uninitialized_var() to prevent this.
      
      Signed-off-by: default avatarJoe Perches <joe@perches.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Tested-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Link: http://lkml.kernel.org/r/7db7944761b0bd88c70eb17d4b7f40fe589e14ed.camel@perches.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      16b7f3c8
    • Lubomir Rintel's avatar
      checkpatch: check proper licensing of Devicetree bindings · 50c92900
      Lubomir Rintel authored
      
      
      According to Devicetree maintainers (see Link: below), the Devicetree
      binding documents are preferrably licensed (GPL-2.0-only OR BSD-2-Clause).
      
      Let's check that.  The actual check is a bit more relaxed, to allow more
      liberal but compatible licensing (e.g.  GPL-2.0-or-later OR BSD-2-Clause).
      
      Signed-off-by: default avatarLubomir Rintel <lkundrak@v3.sk>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarJoe Perches <joe@perches.com>
      Acked-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
      Cc: Rob Herring <robh@kernel.org>
      Cc: Neil Armstrong <narmstrong@baylibre.com>
      Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>,
      Cc: Jonas Karlman <jonas@kwiboo.se>,
      Cc: Jernej Skrabec <jernej.skrabec@siol.net>,
      Cc: Mark Rutland <mark.rutland@arm.com>,
      Cc: David Airlie <airlied@linux.ie>
      Cc: Daniel Vetter <daniel@ffwll.ch>,
      Link: https://lore.kernel.org/lkml/20200108142132.GA4830@bogus/
      Link: http://lkml.kernel.org/r/20200309215153.38824-1-lkundrak@v3.sk
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      50c92900
    • Joe Perches's avatar
      checkpatch: improve Gerrit Change-Id: test · 44d303eb
      Joe Perches authored
      
      
      The Gerrit Change-Id: entry is sometimes placed after a Signed-off-by:
      line.  When this occurs, the Gerrit warning is not currently emitted as
      the first Signed-off-by: signature sets a flag to stop looking.
      
      Change the test to add a test for the --- patch separator and emit the
      warning before any before the --- and also before any diff file name.
      
      Signed-off-by: default avatarJoe Perches <joe@perches.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Tested-by: default avatarJohn Stultz <john.stultz@linaro.org>
      Link: http://lkml.kernel.org/r/2f6d5f8766fe7439a116c77ea8cc721a3f2d77a2.camel@perches.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      44d303eb
    • Antonio Borneo's avatar
      checkpatch: add command-line option for TAB size · 713a09de
      Antonio Borneo authored
      
      
      Linux kernel coding style requires a size of 8 characters for both TAB and
      indentation, and such value is embedded as magic value allover the
      checkpatch script.
      
      This makes hard to reuse the script by other projects with different
      requirements in their coding style (e.g.  OpenOCD [1] requires TAB size of
      4 characters [2]).
      
      Replace the magic value 8 with a variable.
      
      Add a command-line option "--tab-size" to let the user select a
      TAB size value other than 8.
      
      [1] http://openocd.org/
      [2] http://openocd.org/doc/doxygen/html/stylec.html#styleformat
      
      Signed-off-by: default avatarAntonio Borneo <borneo.antonio@gmail.com>
      Signed-off-by: default avatarErik Ahlén <erik.ahlen@avalonenterprise.com>
      Signed-off-by: default avatarSpencer Oliver <spen@spen-soft.co.uk>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Joe Perches <joe@perches.com>
      Link: http://lkml.kernel.org/r/20200122163852.124417-3-borneo.antonio@gmail.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      713a09de
    • Antonio Borneo's avatar
      checkpatch: fix multiple const * types · 7b18496c
      Antonio Borneo authored
      Commit 1574a29f ("checkpatch: allow multiple const * types") claims to
      support repetition of pattern "const *", but it actually allows only one
      extra instance.
      
      Check the following lines
      	int a(char const * const x[]);
      	int b(char const * const *x);
      	int c(char const * const * const x[]);
      	int d(char const * const * const *x);
      
      with command
      
      	./scripts/checkpatch.pl --show-types -f filename
      
      to find that only the first line passes the test, while a warning
      is triggered by the other 3 lines:
      
      	WARNING:FUNCTION_ARGUMENTS: function definition argument
      	'char const * const' should also have an identifier name
      
      The reason is that the pattern match halts at the second asterisk in the
      line, thus the remaining text starting with asterisk fails to match a
      valid name for a variable.
      
      Fixed by replacing "?" (Match 1 or 0 times) with "{0,4}" (Match no more
      than 4 times) in the regular expression.  Fix also the similar test for
      types in unusual order.
      
      Fixes: 1574a29f
      
       ("checkpatch: allow multiple const * types")
      Signed-off-by: default avatarAntonio Borneo <borneo.antonio@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Joe Perches <joe@perches.com>
      Link: http://lkml.kernel.org/r/20200122163852.124417-1-borneo.antonio@gmail.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      7b18496c
    • Antonio Borneo's avatar
      checkpatch: fix minor typo and mixed space+tab in indentation · 342d3d2f
      Antonio Borneo authored
      
      
      Fix spelling of "concatenation".
      Don't use tab after space in indentation.
      
      Signed-off-by: default avatarAntonio Borneo <borneo.antonio@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Joe Perches <joe@perches.com>
      Link: http://lkml.kernel.org/r/20200122163852.124417-2-borneo.antonio@gmail.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      342d3d2f
    • Joe Perches's avatar
      checkpatch: prefer fallthrough; over fallthrough comments · f36d3eb8
      Joe Perches authored
      commit 294f69e6
      
       ("compiler_attributes.h: Add 'fallthrough' pseudo
      keyword for switch/case use") added the pseudo keyword so add a test for
      it to checkpatch.
      
      Warn on a patch or use --strict for files.
      
      Signed-off-by: default avatarJoe Perches <joe@perches.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Link: http://lkml.kernel.org/r/8b6c1b9031ab9f3cdebada06b8d46467f1492d68.camel@perches.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      f36d3eb8
    • John Hubbard's avatar
      checkpatch: support "base-commit:" format · a8972573
      John Hubbard authored
      
      
      In order to support the get-lore-mbox.py tool described in [1], I ran:
      
          git format-patch --base=<commit> --cover-letter <revrange>
      
      ...  which generated a "base-commit: <commit-hash>" tag at the end of the
      cover letter.  However, checkpatch.pl generated an error upon encounting
      "base-commit:" in the cover letter:
      
          "ERROR: Please use git commit description style..."
      
      ...  because it found the "commit" keyword, and failed to recognize that
      it was part of the "base-commit" phrase, and as such, should not be
      subjected to the same commit description style rules.
      
      Update checkpatch.pl to include a special case for "base-commit:" (at the
      start of the line, possibly with some leading whitespace) so that that tag
      no longer generates a checkpatch error.
      
      [1] https://lwn.net/Articles/811528/ "Better tools for kernel
          developers"
      
      Suggested-by: default avatarJoe Perches <joe@perches.com>
      Signed-off-by: default avatarJohn Hubbard <jhubbard@nvidia.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarJoe Perches <joe@perches.com>
      Cc: Andy Whitcroft <apw@canonical.com>
      Cc: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
      Cc: Jonathan Corbet <corbet@lwn.net>
      Link: http://lkml.kernel.org/r/20200213055004.69235-2-jhubbard@nvidia.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      a8972573
    • Lubomir Rintel's avatar
      checkpatch: check SPDX tags in YAML files · c8df0ab6
      Lubomir Rintel authored
      
      
      This adds a warning when a YAML file is lacking a SPDX header on first
      line, or it uses incorrect commenting style.
      
      Currently the only YAML files in the tree are Devicetree binding
      documents.
      
      Signed-off-by: default avatarLubomir Rintel <lkundrak@v3.sk>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarJoe Perches <joe@perches.com>
      Cc: Rob Herring <robh@kernel.org>
      Link: http://lkml.kernel.org/r/20200129123356.388669-1-lkundrak@v3.sk
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      c8df0ab6
    • Joe Perches's avatar
      checkpatch: remove email address comment from email address comparisons · dfa05c28
      Joe Perches authored
      
      
      About 2% of the last 100K commits have email addresses that include an
      RFC2822 compliant comment like:
      
      	Peter Zijlstra (Intel) <peterz@infradead.org>
      
      checkpatch currently does a comparison of the complete name and address to
      the submitted author to determine if the author has signed-off and emits a
      warning if the exact email names and addresses do not match.
      
      Unfortunately, the author email address can be written without the comment
      like:
      
      	Peter Zijlstra <peterz@infradead.org>
      
      Add logic to compare the comment stripped email addresses to avoid this
      warning.
      
      Reported-by: default avatarPeter Zijlstra <peterz@infradead.org>
      Signed-off-by: default avatarJoe Perches <joe@perches.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/ebaa2f7c8f94e25520981945cddcc1982e70e072.camel@perches.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      dfa05c28
    • Nathan Chancellor's avatar
      lib/dynamic_debug.c: use address-of operator on section symbols · 8306b057
      Nathan Chancellor authored
      
      
      Clang warns:
      
      ../lib/dynamic_debug.c:1034:24: warning: array comparison always
      evaluates to false [-Wtautological-compare]
              if (__start___verbose == __stop___verbose) {
                                    ^
      1 warning generated.
      
      These are not true arrays, they are linker defined symbols, which are just
      addresses.  Using the address of operator silences the warning and does
      not change the resulting assembly with either clang/ld.lld or gcc/ld
      (tested with diff + objdump -Dr).
      
      Suggested-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Signed-off-by: default avatarNathan Chancellor <natechancellor@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarJason Baron <jbaron@akamai.com>
      Link: https://github.com/ClangBuiltLinux/linux/issues/894
      Link: http://lkml.kernel.org/r/20200220051320.10739-1-natechancellor@gmail.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      8306b057
    • Rikard Falkeborn's avatar
      linux/bits.h: add compile time sanity check of GENMASK inputs · 295bcca8
      Rikard Falkeborn authored
      GENMASK() and GENMASK_ULL() are supposed to be called with the high bit as
      the first argument and the low bit as the second argument.  Mixing them
      will return a mask with zero bits set.
      
      Recent commits show getting this wrong is not uncommon, see e.g.  commit
      aa4c0c90 ("net: stmmac: Fix misuses of GENMASK macro") and commit
      9bdd7bb3 ("clocksource/drivers/npcm: Fix misuse of GENMASK macro").
      
      To prevent such mistakes from appearing again, add compile time sanity
      checking to the arguments of GENMASK() and GENMASK_ULL().  If both
      arguments are known at compile time, and the low bit is higher than the
      high bit, break the build to detect the mistake immediately.
      
      Since GENMASK() is used in declarations, BUILD_BUG_ON_ZERO() must be used
      instead of BUILD_BUG_ON().
      
      __builtin_constant_p does not evaluate is argument, it only checks if it
      is a constant or not at compile time, and __builtin_choose_expr does not
      evaluate the expression that is not chosen.  Therefore, GENMASK(x++, 0)
      does only evaluate x++ once.
      
      Commit 95b980d6
      
       ("linux/bits.h: make BIT(), GENMASK(), and friends
      available in assembly") made the macros in linux/bits.h available in
      assembly.  Since BUILD_BUG_OR_ZERO() is not asm compatible, disable the
      checks if the file is included in an asm file.
      
      Due to bugs in GCC versions before 4.9 [0], disable the check if building
      with a too old GCC compiler.
      
      [0]: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=19449
      
      Signed-off-by: default avatarRikard Falkeborn <rikard.falkeborn@gmail.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      Reviewed-by: default avatarKees Cook <keescook@chromium.org>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Geert Uytterhoeven <geert@linux-m68k.org>
      Cc: Haren Myneni <haren@us.ibm.com>
      Cc: Joe Perches <joe@perches.com>
      Cc: Johannes Berg <johannes@sipsolutions.net>
      Cc: lkml <linux-kernel@vger.kernel.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Link: http://lkml.kernel.org/r/20200308193954.2372399-1-rikard.falkeborn@gmail.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      295bcca8
    • Dan Carpenter's avatar
      lib/test_kmod.c: remove a NULL test · 8f0259c2
      Dan Carpenter authored
      
      
      The "info" pointer has already been dereferenced so checking here is too
      late.  Fortunately, we never pass NULL pointers to the
      test_kmod_put_module() function so the test can simply be removed.
      
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarLuis Chamberlain <mcgrof@kernel.org>
      Link: http://lkml.kernel.org/r/20200228092452.vwkhthsn77nrxdy6@kili.mountain
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      8f0259c2
    • chenqiwu's avatar
      lib/rbtree: fix coding style of assignments · 8d994cad
      chenqiwu authored
      
      
      Leave blank space between the right-hand and left-hand side of the
      assignment to meet the kernel coding style better.
      
      Signed-off-by: default avatarchenqiwu <chenqiwu@xiaomi.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarMichel Lespinasse <walken@google.com>
      Link: http://lkml.kernel.org/r/1582621140-25850-1-git-send-email-qiwuchen55@gmail.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      8d994cad
    • Andy Shevchenko's avatar
      lib/test_bitmap.c: make use of EXP2_IN_BITS · caa7f776
      Andy Shevchenko authored
      Commit 30544ed5
      
       ("lib/bitmap: introduce bitmap_replace() helper")
      introduced some new test cases to the test_bitmap.c module.  Among these
      it also introduced an (unused) definition.  Let's make use of
      EXP2_IN_BITS.
      
      Reported-by: default avatarAlex Shi <alex.shi@linux.alibaba.com>
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarAlex Shi <alex.shi@linux.alibaba.com>
      Link: http://lkml.kernel.org/r/20200121151847.75223-1-andriy.shevchenko@linux.intel.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      caa7f776
    • Qian Cai's avatar
      percpu_counter: fix a data race at vm_committed_as · 7e234520
      Qian Cai authored
      
      
      "vm_committed_as.count" could be accessed concurrently as reported by
      KCSAN,
      
       BUG: KCSAN: data-race in __vm_enough_memory / percpu_counter_add_batch
      
       write to 0xffffffff9451c538 of 8 bytes by task 65879 on cpu 35:
        percpu_counter_add_batch+0x83/0xd0
        percpu_counter_add_batch at lib/percpu_counter.c:91
        __vm_enough_memory+0xb9/0x260
        dup_mm+0x3a4/0x8f0
        copy_process+0x2458/0x3240
        _do_fork+0xaa/0x9f0
        __do_sys_clone+0x125/0x160
        __x64_sys_clone+0x70/0x90
        do_syscall_64+0x91/0xb05
        entry_SYSCALL_64_after_hwframe+0x49/0xbe
      
       read to 0xffffffff9451c538 of 8 bytes by task 66773 on cpu 19:
        __vm_enough_memory+0x199/0x260
        percpu_counter_read_positive at include/linux/percpu_counter.h:81
        (inlined by) __vm_enough_memory at mm/util.c:839
        mmap_region+0x1b2/0xa10
        do_mmap+0x45c/0x700
        vm_mmap_pgoff+0xc0/0x130
        ksys_mmap_pgoff+0x6e/0x300
        __x64_sys_mmap+0x33/0x40
        do_syscall_64+0x91/0xb05
        entry_SYSCALL_64_after_hwframe+0x49/0xbe
      
      The read is outside percpu_counter::lock critical section which results in
      a data race.  Fix it by adding a READ_ONCE() in
      percpu_counter_read_positive() which could also service as the existing
      compiler memory barrier.
      
      Signed-off-by: default avatarQian Cai <cai@lca.pw>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarMarco Elver <elver@google.com>
      Link: http://lkml.kernel.org/r/1582302724-2804-1-git-send-email-cai@lca.pw
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      7e234520
    • Alexander Potapenko's avatar
      kasan: stackdepot: move filter_irq_stacks() to stackdepot.c · 505a0ef1
      Alexander Potapenko authored
      
      
      filter_irq_stacks() can be used by other tools (e.g.  KMSAN), so it needs
      to be moved to a common location.  lib/stackdepot.c seems a good place, as
      filter_irq_stacks() is usually applied to the output of
      stack_trace_save().
      
      This patch has been previously mailed as part of KMSAN RFC patch series.
      
      [glider@google.co: nds32: linker script: add SOFTIRQENTRY_TEXT\
        Link: http://lkml.kernel.org/r/20200311121002.241430-1-glider@google.com
      [glider@google.com: add IRQENTRY_TEXT and SOFTIRQENTRY_TEXT to linker script]
        Link: http://lkml.kernel.org/r/20200311121124.243352-1-glider@google.com
      Signed-off-by: default avatarAlexander Potapenko <glider@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Vegard Nossum <vegard.nossum@oracle.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Cc: Marco Elver <elver@google.com>
      Cc: Andrey Konovalov <andreyknvl@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
      Link: http://lkml.kernel.org/r/20200220141916.55455-3-glider@google.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      505a0ef1
    • Alexander Potapenko's avatar
      lib/stackdepot.c: build with -fno-builtin · 7b65942f
      Alexander Potapenko authored
      
      
      Clang may replace stackdepot_memcmp() with a call to instrumented bcmp(),
      which is exactly what we wanted to avoid creating stackdepot_memcmp().
      Building the file with -fno-builtin prevents such optimizations.
      
      This patch has been previously mailed as part of KMSAN RFC patch series.
      
      Signed-off-by: default avatarAlexander Potapenko <glider@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Vegard Nossum <vegard.nossum@oracle.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Cc: Marco Elver <elver@google.com>
      Cc: Andrey Konovalov <andreyknvl@google.com>
      Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Link: http://lkml.kernel.org/r/20200220141916.55455-2-glider@google.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      7b65942f
    • Alexander Potapenko's avatar
      lib/stackdepot.c: check depot_index before accessing the stack slab · 69866e15
      Alexander Potapenko authored
      
      
      Avoid crashes on corrupted stack ids.  Despite stack ID corruption may
      indicate other bugs in the program, we'd better fail gracefully on such
      IDs instead of crashing the kernel.
      
      This patch has been previously mailed as part of KMSAN RFC patch series.
      
      Link: http://lkml.kernel.org/r/20200220141916.55455-1-glider@google.com
      Signed-off-by: default avatarAlexander Potapenko <glider@google.com>
      Cc: Vegard Nossum <vegard.nossum@oracle.com>
      Cc: Dmitry Vyukov <dvyukov@google.com>
      Cc: Marco Elver <elver@google.com>
      Cc: Andrey Konovalov <andreyknvl@google.com>
      Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
      From: Dan Carpenter <dan.carpenter@oracle.com>
      Subject: lib/stackdepot.c: fix a condition in stack_depot_fetch()
      
      We should check for a NULL pointer first before adding the offset.
      Otherwise if the pointer is NULL and the offset is non-zero, it will lead
      to an Oops.
      
      Fixes: d45048e65a59 ("lib/stackdepot.c: check depot_index before accessing the stack slab")
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Acked-by: default avatarAlexander Potapenko <glider@google.com>
      Link: http://lkml.kernel.org/r/20200312113006.GA20562@mwanda
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      69866e15
    • Kees Cook's avatar
      lib: test_stackinit.c: XFAIL switch variable init tests · 9cf016e6
      Kees Cook authored
      
      
      The tests for initializing a variable defined between a switch statement's
      test and its first "case" statement are currently not initialized in
      Clang[1] nor the proposed auto-initialization feature in GCC.
      
      We should retain the test (so that we can evaluate compiler fixes), but
      mark it as an "expected fail".  The rest of the kernel source will be
      adjusted to avoid this corner case.
      
      Also disable -Wswitch-unreachable for the test so that the intentionally
      broken code won't trigger warnings for GCC (nor future Clang) when
      initialization happens this unhandled place.
      
      [1] https://bugs.llvm.org/show_bug.cgi?id=44916
      
      Suggested-by: default avatarAlexander Potapenko <glider@google.com>
      Signed-off-by: default avatarKees Cook <keescook@chromium.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Jann Horn <jannh@google.com>
      Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
      Link: http://lkml.kernel.org/r/202002191358.2897A07C6@keescook
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      9cf016e6
    • Geert Uytterhoeven's avatar
      lib/scatterlist: fix sg_copy_buffer() kerneldoc · 6e853185
      Geert Uytterhoeven authored
      
      
      Add the missing closing parenthesis to the description for the to_buffer
      parameter of sg_copy_buffer().
      
      Signed-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Akinobu Mita <akinobu.mita@gmail.com
      Link: http://lkml.kernel.org/r/20200212084241.8778-1-geert+renesas@glider.be
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      6e853185
    • Gustavo A. R. Silva's avatar
      lib/ts_kmp.c: replace zero-length array with flexible-array member · 51022f87
      Gustavo A. R. Silva authored
      The current codebase makes use of the zero-length array language extension
      to the C90 standard, but the preferred mechanism to declare
      variable-length types such as these ones is a flexible array member[1][2],
      introduced in C99:
      
      struct foo {
              int stuff;
              struct boo array[];
      };
      
      By making use of the mechanism above, we will get a compiler warning in
      case the flexible array does not occur last in the structure, which will
      help us prevent some kind of undefined behavior bugs from being
      inadvertenly introduced[3] to the codebase from now on.
      
      This issue was found with the help of Coccinelle.
      
      [1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
      [2] https://github.com/KSPP/linux/issues/21
      [3] commit 76497732
      
       ("cxgb3/l2t: Fix undefined behaviour")
      
      Signed-off-by: default avatarGustavo A. R. Silva <gustavo@embeddedor.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Link: http://lkml.kernel.org/r/20200211205948.GA26459@embeddedor
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      51022f87
    • Gustavo A. R. Silva's avatar
      lib/ts_fsm.c: replace zero-length array with flexible-array member · 842ae1f5
      Gustavo A. R. Silva authored
      The current codebase makes use of the zero-length array language extension
      to the C90 standard, but the preferred mechanism to declare
      variable-length types such as these ones is a flexible array member[1][2],
      introduced in C99:
      
      struct foo {
              int stuff;
              struct boo array[];
      };
      
      By making use of the mechanism above, we will get a compiler warning in
      case the flexible array does not occur last in the structure, which will
      help us prevent some kind of undefined behavior bugs from being
      inadvertenly introduced[3] to the codebase from now on.
      
      This issue was found with the help of Coccinelle.
      
      [1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
      [2] https://github.com/KSPP/linux/issues/21
      [3] commit 76497732
      
       ("cxgb3/l2t: Fix undefined behaviour")
      
      Signed-off-by: default avatarGustavo A. R. Silva <gustavo@embeddedor.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Link: http://lkml.kernel.org/r/20200211205813.GA25602@embeddedor
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      842ae1f5
    • Gustavo A. R. Silva's avatar
      lib/ts_bm.c: replace zero-length array with flexible-array member · c6e2ac3b
      Gustavo A. R. Silva authored
      The current codebase makes use of the zero-length array language extension
      to the C90 standard, but the preferred mechanism to declare
      variable-length types such as these ones is a flexible array member[1][2],
      introduced in C99:
      
      struct foo {
              int stuff;
              struct boo array[];
      };
      
      By making use of the mechanism above, we will get a compiler warning in
      case the flexible array does not occur last in the structure, which will
      help us prevent some kind of undefined behavior bugs from being
      inadvertenly introduced[3] to the codebase from now on.
      
      This issue was found with the help of Coccinelle.
      
      [1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
      [2] https://github.com/KSPP/linux/issues/21
      [3] commit 76497732
      
       ("cxgb3/l2t: Fix undefined behaviour")
      
      Signed-off-by: default avatarGustavo A. R. Silva <gustavo@embeddedor.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Link: http://lkml.kernel.org/r/20200211205620.GA24694@embeddedor
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      c6e2ac3b
    • Gustavo A. R. Silva's avatar
      lib/bch.c: replace zero-length array with flexible-array member · a44ce513
      Gustavo A. R. Silva authored
      The current codebase makes use of the zero-length array language extension
      to the C90 standard, but the preferred mechanism to declare
      variable-length types such as these ones is a flexible array member[1][2],
      introduced in C99:
      
      struct foo {
              int stuff;
              struct boo array[];
      };
      
      By making use of the mechanism above, we will get a compiler warning in
      case the flexible array does not occur last in the structure, which will
      help us prevent some kind of undefined behavior bugs from being
      inadvertenly introduced[3] to the codebase from now on.
      
      This issue was found with the help of Coccinelle.
      
      [1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
      [2] https://github.com/KSPP/linux/issues/21
      [3] commit 76497732
      
       ("cxgb3/l2t: Fix undefined behaviour")
      
      Signed-off-by: default avatarGustavo A. R. Silva <gustavo@embeddedor.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Link: http://lkml.kernel.org/r/20200211205119.GA21234@embeddedor
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      a44ce513
    • Konstantin Khlebnikov's avatar
      lib/test_lockup.c: add parameters for locking generic vfs locks · aecd42df
      Konstantin Khlebnikov authored
      
      
      file_path=<path>	defines file or directory to open
      lock_inode=Y		set lock_rwsem_ptr to inode->i_rwsem
      lock_mapping=Y		set lock_rwsem_ptr to mapping->i_mmap_rwsem
      lock_sb_umount=Y	set lock_rwsem_ptr to sb->s_umount
      
      This gives safe and simple way to see how system reacts to contention of
      common vfs locks and how syscalls depend on them directly or indirectly.
      
      For example to block s_umount for 60 seconds:
      # modprobe test_lockup file_path=. lock_sb_umount time_secs=60 state=S
      
      This is useful for checking/testing scalability issues like this:
      https://lore.kernel.org/lkml/158497590858.7371.9311902565121473436.stgit@buzz/
      
      Signed-off-by: default avatarKonstantin Khlebnikov <khlebnikov@yandex-team.ru>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Colin Ian King <colin.king@canonical.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Guenter Roeck <linux@roeck-us.net>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Petr Mladek <pmladek@suse.com>
      Cc: Sasha Levin <sashal@kernel.org>
      Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Link: http://lkml.kernel.org/r/158498153964.5621.83061779039255681.stgit@buzz
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      aecd42df
    • Colin Ian King's avatar
      lib/test_lockup.c: fix spelling mistake "iteraions" -> "iterations" · ad3f434b
      Colin Ian King authored
      
      
      There is a spelling mistake in a pr_notice message.  Fix it.
      
      Signed-off-by: default avatarColin Ian King <colin.king@canonical.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Guenter Roeck <linux@roeck-us.net>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Petr Mladek <pmladek@suse.com>
      Cc: Sasha Levin <sashal@kernel.org>
      Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Link: http://lkml.kernel.org/r/20200221155145.79522-1-colin.king@canonical.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      ad3f434b
    • Konstantin Khlebnikov's avatar
      lib/test_lockup: test module to generate lockups · 30428ef5
      Konstantin Khlebnikov authored
      
      
      CONFIG_TEST_LOCKUP=m adds module "test_lockup" that helps to make sure
      that watchdogs and lockup detectors are working properly.
      
      Depending on module parameters test_lockup could emulate soft or hard
      lockup, "hung task", hold arbitrary lock, allocate bunch of pages.
      
      Also it could generate series of lockups with cooling-down periods, in
      this way it could be used as "ping" for locks or page allocator.  Loop
      checks signals between iteration thus could be stopped by ^C.
      
      # modinfo test_lockup
      ...
      parm:           time_secs:lockup time in seconds, default 0 (uint)
      parm:           time_nsecs:nanoseconds part of lockup time, default 0 (uint)
      parm:           cooldown_secs:cooldown time between iterations in seconds, default 0 (uint)
      parm:           cooldown_nsecs:nanoseconds part of cooldown, default 0 (uint)
      parm:           iterations:lockup iterations, default 1 (uint)
      parm:           all_cpus:trigger lockup at all cpus at once (bool)
      parm:           state:wait in 'R' running (default), 'D' uninterruptible, 'K' killable, 'S' interruptible state (charp)
      parm:           use_hrtimer:use high-resolution timer for sleeping (bool)
      parm:           iowait:account sleep time as iowait (bool)
      parm:           lock_read:lock read-write locks for read (bool)
      parm:           lock_single:acquire locks only at one cpu (bool)
      parm:           reacquire_locks:release and reacquire locks/irq/preempt between iterations (bool)
      parm:           touch_softlockup:touch soft-lockup watchdog between iterations (bool)
      parm:           touch_hardlockup:touch hard-lockup watchdog between iterations (bool)
      parm:           call_cond_resched:call cond_resched() between iterations (bool)
      parm:           measure_lock_wait:measure lock wait time (bool)
      parm:           lock_wait_threshold:print lock wait time longer than this in nanoseconds, default off (ulong)
      parm:           disable_irq:disable interrupts: generate hard-lockups (bool)
      parm:           disable_softirq:disable bottom-half irq handlers (bool)
      parm:           disable_preempt:disable preemption: generate soft-lockups (bool)
      parm:           lock_rcu:grab rcu_read_lock: generate rcu stalls (bool)
      parm:           lock_mmap_sem:lock mm->mmap_sem: block procfs interfaces (bool)
      parm:           lock_rwsem_ptr:lock rw_semaphore at address (ulong)
      parm:           lock_mutex_ptr:lock mutex at address (ulong)
      parm:           lock_spinlock_ptr:lock spinlock at address (ulong)
      parm:           lock_rwlock_ptr:lock rwlock at address (ulong)
      parm:           alloc_pages_nr:allocate and free pages under locks (uint)
      parm:           alloc_pages_order:page order to allocate (uint)
      parm:           alloc_pages_gfp:allocate pages with this gfp_mask, default GFP_KERNEL (uint)
      parm:           alloc_pages_atomic:allocate pages with GFP_ATOMIC (bool)
      parm:           reallocate_pages:free and allocate pages between iterations (bool)
      
      Parameters for locking by address are unsafe and taints kernel. With
      CONFIG_DEBUG_SPINLOCK=y they at least check magics for embedded spinlocks.
      
      Examples:
      
      task hang in D-state:
      modprobe test_lockup time_secs=1 iterations=60 state=D
      
      task hang in io-wait D-state:
      modprobe test_lockup time_secs=1 iterations=60 state=D iowait
      
      softlockup:
      modprobe test_lockup time_secs=1 iterations=60 state=R
      
      hardlockup:
      modprobe test_lockup time_secs=1 iterations=60 state=R disable_irq
      
      system-wide hardlockup:
      modprobe test_lockup time_secs=1 iterations=60 state=R \
       disable_irq all_cpus
      
      rcu stall:
      modprobe test_lockup time_secs=1 iterations=60 state=R \
       lock_rcu touch_softlockup
      
      lock mmap_sem / block procfs interfaces:
      modprobe test_lockup time_secs=1 iterations=60 state=S lock_mmap_sem
      
      lock tasklist_lock for read / block forks:
      TASKLIST_LOCK=$(awk '$3 == "tasklist_lock" {print "0x"$1}' /proc/kallsyms)
      modprobe test_lockup time_secs=1 iterations=60 state=R \
       disable_irq lock_read lock_rwlock_ptr=$TASKLIST_LOCK
      
      lock namespace_sem / block vfs mount operations:
      NAMESPACE_SEM=$(awk '$3 == "namespace_sem" {print "0x"$1}' /proc/kallsyms)
      modprobe test_lockup time_secs=1 iterations=60 state=S \
       lock_rwsem_ptr=$NAMESPACE_SEM
      
      lock cgroup mutex / block cgroup operations:
      CGROUP_MUTEX=$(awk '$3 == "cgroup_mutex" {print "0x"$1}' /proc/kallsyms)
      modprobe test_lockup time_secs=1 iterations=60 state=S \
       lock_mutex_ptr=$CGROUP_MUTEX
      
      ping cgroup_mutex every second and measure maximum lock wait time:
      modprobe test_lockup cooldown_secs=1 iterations=60 state=S \
       lock_mutex_ptr=$CGROUP_MUTEX reacquire_locks measure_lock_wait
      
      [linux@roeck-us.net: rename disable_irq to fix build error]
        Link: http://lkml.kernel.org/r/20200317133614.23152-1-linux@roeck-us.net
      Signed-off-by: default avatarKonstantin Khlebnikov <khlebnikov@yandex-team.ru>
      Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Sasha Levin <sashal@kernel.org>
      Cc: Petr Mladek <pmladek@suse.com>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
      Cc: Dmitry Monakhov <dmtrmonakhov@yandex-team.ru
      Cc: Colin Ian King <colin.king@canonical.com>
      Cc: Guenter Roeck <linux@roeck-us.net>
      Link: http://lkml.kernel.org/r/158132859146.2797.525923171323227836.stgit@buzz
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      30428ef5
    • Josh Poimboeuf's avatar
      bitops: always inline sign extension helpers · f80ac98a
      Josh Poimboeuf authored
      
      
      With CONFIG_CC_OPTIMIZE_FOR_SIZE, objtool reports:
      
        drivers/gpu/drm/i915/gem/i915_gem_execbuffer.o: warning: objtool: i915_gem_execbuffer2_ioctl()+0x5b7: call to gen8_canonical_addr() with UACCESS enabled
      
      This means i915_gem_execbuffer2_ioctl() is calling gen8_canonical_addr()
      from the user_access_begin/end critical region (i.e, with SMAP disabled).
      
      While it's probably harmless in this case, in general we like to avoid
      extra function calls in SMAP-disabled regions because it can open up
      inadvertent security holes.
      
      Fix the warning by changing the sign extension helpers to __always_inline.
      This convinces GCC to inline gen8_canonical_addr().
      
      The sign extension functions are trivial anyway, so it makes sense to
      always inline them.  With my test optimize-for-size-based config, this
      actually shrinks the text size of i915_gem_execbuffer.o by 45 bytes -- and
      no change for vmlinux.
      
      Reported-by: default avatarRandy Dunlap <rdunlap@infradead.org>
      Signed-off-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Link: http://lkml.kernel.org/r/740179324b2b18b750b16295c48357f00b5fa9ed.1582982020.git.jpoimboe@redhat.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      f80ac98a
    • Joe Perches's avatar
      MAINTAINERS: list the section entries in the preferred order · 6680125e
      Joe Perches authored
      The MAINTAINERS file header has never shown a preferred order for the
      section entries but scripts/parse-maintainers.pl added a preferred order
      with commit 61f74164 ("parse-maintainers: Add section pattern
      sorting")
      
      Commit 5cdbec10
      
       ("parse-maintainers: Do not sort section content by
      default") changed the preferred order to be a bit more sensible.
      
      Update the MAINTAINERS section description block to use this preferred
      section entry ordering.
      
      Add a slightly better description for the N: entry too.
      
      Signed-off-by: default avatarJoe Perches <joe@perches.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
      Link: http://lkml.kernel.org/r/5aa5aad6fb1678230c260337dc066cd449a2bf32.camel@perches.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      6680125e