1. 22 Nov, 2022 2 commits
  2. 18 Nov, 2022 13 commits
    • Jason A. Donenfeld's avatar
      random: reseed in delayed work rather than on-demand · 9148de31
      Jason A. Donenfeld authored
      Currently, we reseed when random bytes are requested, if the current
      seed is too old. Since random bytes can be requested from all contexts,
      including hard IRQ, this means sometimes we wind up adding a bit of
      latency to hard IRQ. This was so much of a problem on s390x that now
      s390x just doesn't provide its architectural RNG from hard IRQ context,
      so we miss out in that case.
      
      Instead, let's just schedule a persistent delayed work, so that the
      reseeding and potentially expensive operations will always happen from
      process context, reducing unexpected latencies from hard IRQ.
      
      This also has the nice effect of accumulating a transcript of random
      inputs over time, since it means that we amass more input values. And it
      should make future vDSO integration a bit easier.
      
      Cc: Harald Freudenberger <freude@linux.ibm.com>
      Cc: Juergen Christ <jchrist@linux.ibm.com>
      Cc: Alexander Gordeev <agordeev@linux.ibm.com>
      Cc: Dominik Brodowski <linux@dominikbrodowski.net>
      Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
      Cc: Tejun Heo <tj@kernel.org>
      Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
      9148de31
    • Jason A. Donenfeld's avatar
      random: always mix cycle counter in add_latent_entropy() · d7bf7f3b
      Jason A. Donenfeld authored
      add_latent_entropy() is called every time a process forks, in
      kernel_clone(). This in turn calls add_device_randomness() using the
      latent entropy global state. add_device_randomness() does two things:
      
         2) Mixes into the input pool the latent entropy argument passed; and
         1) Mixes in a cycle counter, a sort of measurement of when the event
            took place, the high precision bits of which are presumably
            difficult to predict.
      
      (2) is impossible without CONFIG_GCC_PLUGIN_LATENT_ENTROPY=y. But (1) is
      always possible. However, currently CONFIG_GCC_PLUGIN_LATENT_ENTROPY=n
      disables both (1) and (2), instead of just (2).
      
      This commit causes the CONFIG_GCC_PLUGIN_LATENT_ENTROPY=n case to still
      do (1) by passing NULL (len 0) to add_device_randomness() when add_latent_
      entropy() is called.
      
      Cc: Dominik Brodowski <linux@dominikbrodowski.net>
      Cc: PaX Team <pageexec@freemail.hu>
      Cc: Emese Revfy <re.emese@gmail.com>
      Fixes: 38addce8 ("gcc-plugins: Add latent_entropy plugin")
      Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
      d7bf7f3b
    • Jason A. Donenfeld's avatar
      hw_random: use add_hwgenerator_randomness() for early entropy · db516da9
      Jason A. Donenfeld authored
      Rather than calling add_device_randomness(), the add_early_randomness()
      function should use add_hwgenerator_randomness(), so that the early
      entropy can be potentially credited, which allows for the RNG to
      initialize earlier without having to wait for the kthread to come up.
      
      This requires some minor API refactoring, by adding a `sleep_after`
      parameter to add_hwgenerator_randomness(), so that we don't hit a
      blocking sleep from add_early_randomness().
      Tested-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
      Tested-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
      Reviewed-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
      Reviewed-by: default avatarDominik Brodowski <linux@dominikbrodowski.net>
      Acked-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
      db516da9
    • Jason A. Donenfeld's avatar
      random: modernize documentation comment on get_random_bytes() · 19258d05
      Jason A. Donenfeld authored
      The prior text was very old and made outdated references to TCP sequence
      numbers, which should use one of the integer functions instead, since
      batched entropy was introduced. The current way of describing the
      quality of functions is just to say that it's as good as /dev/urandom,
      which now all the functions are.
      
      Fixes: f5b98461 ("random: use chacha20 for get_random_int/long")
      Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
      19258d05
    • Jason A. Donenfeld's avatar
      random: adjust comment to account for removed function · b240bab5
      Jason A. Donenfeld authored
      Since de492c83 ("prandom: remove unused functions"),
      get_random_int() no longer exists, so remove its reference from this
      comment.
      
      Fixes: de492c83 ("prandom: remove unused functions")
      Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
      b240bab5
    • Jason A. Donenfeld's avatar
      random: remove early archrandom abstraction · 2c03e16f
      Jason A. Donenfeld authored
      The arch_get_random*_early() abstraction is not completely useful and
      adds complexity, because it's not a given that there will be no calls to
      arch_get_random*() between random_init_early(), which uses
      arch_get_random*_early(), and init_cpu_features(). During that gap,
      crng_reseed() might be called, which uses arch_get_random*(), since it's
      mostly not init code.
      
      Instead we can test whether we're in the early phase in
      arch_get_random*() itself, and in doing so avoid all ambiguity about
      where we are. Fortunately, the only architecture that currently
      implements arch_get_random*_early() also has an alternatives-based cpu
      feature system, one flag of which determines whether the other flags
      have been initialized. This makes it possible to do the early check with
      zero cost once the system is initialized.
      Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Cc: Will Deacon <will@kernel.org>
      Cc: Ard Biesheuvel <ardb@kernel.org>
      Cc: Jean-Philippe Brucker <jean-philippe@linaro.org>
      Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
      2c03e16f
    • Jason A. Donenfeld's avatar
      random: use random.trust_{bootloader,cpu} command line option only · b9b01a56
      Jason A. Donenfeld authored
      It's very unusual to have both a command line option and a compile time
      option, and apparently that's confusing to people. Also, basically
      everybody enables the compile time option now, which means people who
      want to disable this wind up having to use the command line option to
      ensure that anyway. So just reduce the number of moving pieces and nix
      the compile time option in favor of the more versatile command line
      option.
      Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
      b9b01a56
    • Jason A. Donenfeld's avatar
      stackprotector: actually use get_random_canary() · 622754e8
      Jason A. Donenfeld authored
      The RNG always mixes in the Linux version extremely early in boot. It
      also always includes a cycle counter, not only during early boot, but
      each and every time it is invoked prior to being fully initialized.
      Together, this means that the use of additional xors inside of the
      various stackprotector.h files is superfluous and over-complicated.
      Instead, we can get exactly the same thing, but better, by just calling
      `get_random_canary()`.
      
      Acked-by: Guo Ren <guoren@kernel.org> # for csky
      Acked-by: Catalin Marinas <catalin.marinas@arm.com> # for arm64
      Acked-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
      622754e8
    • Jason A. Donenfeld's avatar
      stackprotector: move get_random_canary() into stackprotector.h · b3883a9a
      Jason A. Donenfeld authored
      This has nothing to do with random.c and everything to do with stack
      protectors. Yes, it uses randomness. But many things use randomness.
      random.h and random.c are concerned with the generation of randomness,
      not with each and every use. So move this function into the more
      specific stackprotector.h file where it belongs.
      Acked-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
      b3883a9a
    • Jason A. Donenfeld's avatar
      treewide: use get_random_u32_inclusive() when possible · e8a533cb
      Jason A. Donenfeld authored
      These cases were done with this Coccinelle:
      
      @@
      expression H;
      expression L;
      @@
      - (get_random_u32_below(H) + L)
      + get_random_u32_inclusive(L, H + L - 1)
      
      @@
      expression H;
      expression L;
      expression E;
      @@
        get_random_u32_inclusive(L,
        H
      - + E
      - - E
        )
      
      @@
      expression H;
      expression L;
      expression E;
      @@
        get_random_u32_inclusive(L,
        H
      - - E
      - + E
        )
      
      @@
      expression H;
      expression L;
      expression E;
      expression F;
      @@
        get_random_u32_inclusive(L,
        H
      - - E
        + F
      - + E
        )
      
      @@
      expression H;
      expression L;
      expression E;
      expression F;
      @@
        get_random_u32_inclusive(L,
        H
      - + E
        + F
      - - E
        )
      
      And then subsequently cleaned up by hand, with several automatic cases
      rejected if it didn't make sense contextually.
      Reviewed-by: default avatarKees Cook <keescook@chromium.org>
      Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> # for infiniband
      Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
      e8a533cb
    • Jason A. Donenfeld's avatar
      treewide: use get_random_u32_{above,below}() instead of manual loop · d247aabd
      Jason A. Donenfeld authored
      These cases were done with this Coccinelle:
      
      @@
      expression E;
      identifier I;
      @@
      -   do {
            ... when != I
      -     I = get_random_u32();
            ... when != I
      -   } while (I > E);
      +   I = get_random_u32_below(E + 1);
      
      @@
      expression E;
      identifier I;
      @@
      -   do {
            ... when != I
      -     I = get_random_u32();
            ... when != I
      -   } while (I >= E);
      +   I = get_random_u32_below(E);
      
      @@
      expression E;
      identifier I;
      @@
      -   do {
            ... when != I
      -     I = get_random_u32();
            ... when != I
      -   } while (I < E);
      +   I = get_random_u32_above(E - 1);
      
      @@
      expression E;
      identifier I;
      @@
      -   do {
            ... when != I
      -     I = get_random_u32();
            ... when != I
      -   } while (I <= E);
      +   I = get_random_u32_above(E);
      
      @@
      identifier I;
      @@
      -   do {
            ... when != I
      -     I = get_random_u32();
            ... when != I
      -   } while (!I);
      +   I = get_random_u32_above(0);
      
      @@
      identifier I;
      @@
      -   do {
            ... when != I
      -     I = get_random_u32();
            ... when != I
      -   } while (I == 0);
      +   I = get_random_u32_above(0);
      
      @@
      expression E;
      @@
      - E + 1 + get_random_u32_below(U32_MAX - E)
      + get_random_u32_above(E)
      Reviewed-by: default avatarKees Cook <keescook@chromium.org>
      Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
      d247aabd
    • Jason A. Donenfeld's avatar
      treewide: use get_random_u32_below() instead of deprecated function · 8032bf12
      Jason A. Donenfeld authored
      This is a simple mechanical transformation done by:
      
      @@
      expression E;
      @@
      - prandom_u32_max
      + get_random_u32_below
        (E)
      Reviewed-by: default avatarKees Cook <keescook@chromium.org>
      Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Acked-by: Darrick J. Wong <djwong@kernel.org> # for xfs
      Reviewed-by: SeongJae Park <sj@kernel.org> # for damon
      Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> # for infiniband
      Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> # for arm
      Acked-by: Ulf Hansson <ulf.hansson@linaro.org> # for mmc
      Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
      8032bf12
    • Jason A. Donenfeld's avatar
      random: add helpers for random numbers with given floor or range · 7f576b25
      Jason A. Donenfeld authored
      Now that we have get_random_u32_below(), it's nearly trivial to make
      inline helpers to compute get_random_u32_above() and
      get_random_u32_inclusive(), which will help clean up open coded loops
      and manual computations throughout the tree.
      
      One snag is that in order to make get_random_u32_inclusive() operate on
      closed intervals, we have to do some (unlikely) special case handling if
      get_random_u32_inclusive(0, U32_MAX) is called. The least expensive way
      of doing this is actually to adjust the slowpath of
      get_random_u32_below() to have its undefined 0 result just return the
      output of get_random_u32(). We can make this basically free by calling
      get_random_u32() before the branch, so that the branch latency gets
      interleaved.
      
      Cc: stable@vger.kernel.org # to ease future backports that use this api
      Reviewed-by: default avatarKees Cook <keescook@chromium.org>
      Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
      7f576b25
  3. 17 Nov, 2022 2 commits
    • Jason A. Donenfeld's avatar
      random: use rejection sampling for uniform bounded random integers · e9a688bc
      Jason A. Donenfeld authored
      Until the very recent commits, many bounded random integers were
      calculated using `get_random_u32() % max_plus_one`, which not only
      incurs the price of a division -- indicating performance mostly was not
      a real issue -- but also does not result in a uniformly distributed
      output if max_plus_one is not a power of two. Recent commits moved to
      using `prandom_u32_max(max_plus_one)`, which replaces the division with
      a faster multiplication, but still does not solve the issue with
      non-uniform output.
      
      For some users, maybe this isn't a problem, and for others, maybe it is,
      but for the majority of users, probably the question has never been
      posed and analyzed, and nobody thought much about it, probably assuming
      random is random is random. In other words, the unthinking expectation
      of most users is likely that the resultant numbers are uniform.
      
      So we implement here an efficient way of generating uniform bounded
      random integers. Through use of compile-time evaluation, and avoiding
      divisions as much as possible, this commit introduces no measurable
      overhead. At least for hot-path uses tested, any potential difference
      was lost in the noise. On both clang and gcc, code generation is pretty
      small.
      
      The new function, get_random_u32_below(), lives in random.h, rather than
      prandom.h, and has a "get_random_xxx" function name, because it is
      suitable for all uses, including cryptography.
      
      In order to be efficient, we implement a kernel-specific variant of
      Daniel Lemire's algorithm from "Fast Random Integer Generation in an
      Interval", linked below. The kernel's variant takes advantage of
      constant folding to avoid divisions entirely in the vast majority of
      cases, works on both 32-bit and 64-bit architectures, and requests a
      minimal amount of bytes from the RNG.
      
      Link: https://arxiv.org/pdf/1805.10941.pdf
      Cc: stable@vger.kernel.org # to ease future backports that use this api
      Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
      e9a688bc
    • Jason A. Donenfeld's avatar
      kcsan: remove rng selftest · 6ce62593
      Jason A. Donenfeld authored
      The first test of the kcsan selftest appears to test if get_random_u32()
      returns two zeros in a row, and requires that it doesn't. This seems
      like a bogus criteron. Remove it.
      Acked-by: default avatarMarco Elver <elver@google.com>
      Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
      6ce62593
  4. 13 Nov, 2022 3 commits
  5. 12 Nov, 2022 6 commits
    • Linus Torvalds's avatar
      Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi · fef7fd48
      Linus Torvalds authored
      Pull SCSI fixes from James Bottomley:
       "Three small fixes, all in drivers.
      
        The sas one is in an unlikely error leg, the debug one is to make it
        more standards conformant and the ibmvfc one is to fix a user visible
        bug where a failover could lose all paths to the device"
      
      * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
        scsi: scsi_debug: Make the READ CAPACITY response compliant with ZBC
        scsi: scsi_transport_sas: Fix error handling in sas_phy_add()
        scsi: ibmvfc: Avoid path failures during live migration
      fef7fd48
    • Linus Torvalds's avatar
      Merge tag 'sound-fix-6.1-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound · f95077ac
      Linus Torvalds authored
      Pull additional sound fix from Takashi Iwai:
       "A regression fix for the latest memalloc helper change"
      
      * tag 'sound-fix-6.1-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
        ALSA: memalloc: Try dma_alloc_noncontiguous() at first
      f95077ac
    • Takashi Iwai's avatar
      ALSA: memalloc: Try dma_alloc_noncontiguous() at first · 9d8e536d
      Takashi Iwai authored
      The latest fix for the non-contiguous memalloc helper changed the
      allocation method for a non-IOMMU system to use only the fallback
      allocator.  This should have worked, but it caused a problem sometimes
      when too many non-contiguous pages are allocated that can't be treated
      by HD-audio controller.
      
      As a quirk workaround, go back to the original strategy: use
      dma_alloc_noncontiguous() at first, and apply the fallback only when
      it fails, but only for non-IOMMU case.
      
      We'll need a better fix in the fallback code as well, but this
      workaround should paper over most cases.
      
      Fixes: 9736a325 ("ALSA: memalloc: Don't fall back for SG-buffer with IOMMU")
      Reported-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Link: https://lore.kernel.org/r/CAHk-=wgSH5ubdvt76gNwa004ooZAEJL_1Q-Fyw5M2FDdqL==dg@mail.gmail.com
      Link: https://lore.kernel.org/r/20221112084718.3305-1-tiwai@suse.deSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      9d8e536d
    • Linus Torvalds's avatar
      Merge tag 'ata-6.1-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/dlemoal/libata · 8f2975c2
      Linus Torvalds authored
      Pull ata fixes from Damien Le Moal:
       "Several libata generic code fixes for rc5:
      
         - Add missing translation of the SYNCHRONIZE CACHE 16 scsi command as
           this command is mandatory for host-managed ZBC drives.
      
           The lack of support for it in libata-scsi was causing issues with
           some passthrough applications using ZBC drives (from Shin'ichiro).
      
         - Fix the error path of libata-transport host, port, link and device
           attributes initialization (from Yingliang).
      
         - Prevent issuing new commands to a drive that is in the NCQ error
           state and undergoing recovery (From Niklas).
      
           This bug went unnoticed for a long time as commands issued to a
           drive in error state are aborted immediately and retried by the
           scsi layer, hiding the useless abort-and-retry sequence"
      
      * tag 'ata-6.1-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/dlemoal/libata:
        ata: libata-core: do not issue non-internal commands once EH is pending
        ata: libata-transport: fix error handling in ata_tdev_add()
        ata: libata-transport: fix error handling in ata_tlink_add()
        ata: libata-transport: fix error handling in ata_tport_add()
        ata: libata-transport: fix double ata_host_put() in ata_tport_add()
        ata: libata-scsi: fix SYNCHRONIZE CACHE (16) command failure
      8f2975c2
    • Linus Torvalds's avatar
      Merge tag 'mm-hotfixes-stable-2022-11-11' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm · d7c2b1f6
      Linus Torvalds authored
      Pull misc hotfixes from Andrew Morton:
       "22 hotfixes.
      
        Eight are cc:stable and the remainder address issues which were
        introduced post-6.0 or which aren't considered serious enough to
        justify a -stable backport"
      
      * tag 'mm-hotfixes-stable-2022-11-11' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm: (22 commits)
        docs: kmsan: fix formatting of "Example report"
        mm/damon/dbgfs: check if rm_contexts input is for a real context
        maple_tree: don't set a new maximum on the node when not reusing nodes
        maple_tree: fix depth tracking in maple_state
        arch/x86/mm/hugetlbpage.c: pud_huge() returns 0 when using 2-level paging
        fs: fix leaked psi pressure state
        nilfs2: fix use-after-free bug of ns_writer on remount
        x86/traps: avoid KMSAN bugs originating from handle_bug()
        kmsan: make sure PREEMPT_RT is off
        Kconfig.debug: ensure early check for KMSAN in CONFIG_KMSAN_WARN
        x86/uaccess: instrument copy_from_user_nmi()
        kmsan: core: kmsan_in_runtime() should return true in NMI context
        mm: hugetlb_vmemmap: include missing linux/moduleparam.h
        mm/shmem: use page_mapping() to detect page cache for uffd continue
        mm/memremap.c: map FS_DAX device memory as decrypted
        Partly revert "mm/thp: carry over dirty bit when thp splits on pmd"
        nilfs2: fix deadlock in nilfs_count_free_blocks()
        mm/mmap: fix memory leak in mmap_region()
        hugetlbfs: don't delete error page from pagecache
        maple_tree: reorganize testing to restore module testing
        ...
      d7c2b1f6
    • Linus Torvalds's avatar
      Merge tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux · 5ad6e7ba
      Linus Torvalds authored
      Pull arm64 fixes from Catalin Marinas:
      
       - Another fix for rodata=full. Since rodata= is not a simple boolean on
         arm64 (accepting 'full' as well), it got inadvertently broken by
         changes in the core code. If rodata=on is the default and rodata=off
         is passed on the kernel command line, rodata_full is never disabled
      
       - Fix gcc compiler warning of shifting 0xc0 into bits 31:24 without an
         explicit conversion to u32 (triggered by the AMPERE1 MIDR definition)
      
       - Include asm/ptrace.h in asm/syscall_wrapper.h to fix an incomplete
         struct pt_regs type causing the BPF verifier to refuse to load a
         tracing program which accesses pt_regs
      
      * tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux:
        arm64/syscall: Include asm/ptrace.h in syscall_wrapper header.
        arm64: Fix bit-shifting UB in the MIDR_CPU_MODEL() macro
        arm64: fix rodata=full again
      5ad6e7ba
  6. 11 Nov, 2022 14 commits
    • Niklas Cassel's avatar
      ata: libata-core: do not issue non-internal commands once EH is pending · e20e81a2
      Niklas Cassel authored
      While the ATA specification states that a device should return command
      aborted for all commands queued after the device has entered error state,
      since ATA only keeps the sense data for the latest command (in non-NCQ
      case), we really don't want to send block layer commands to the device
      after it has entered error state. (Only ATA EH commands should be sent,
      to read the sense data etc.)
      
      Currently, scsi_queue_rq() will check if scsi_host_in_recovery()
      (state is SHOST_RECOVERY), and if so, it will _not_ issue a command via:
      scsi_dispatch_cmd() -> host->hostt->queuecommand() (ata_scsi_queuecmd())
      -> __ata_scsi_queuecmd() -> ata_scsi_translate() -> ata_qc_issue()
      
      Before commit e494f6a7 ("[SCSI] improved eh timeout handler"),
      when receiving a TFES error IRQ, the call chain looked like this:
      ahci_error_intr() -> ata_port_abort() -> ata_do_link_abort() ->
      ata_qc_complete() -> ata_qc_schedule_eh() -> blk_abort_request() ->
      blk_rq_timed_out() -> q->rq_timed_out_fn() (scsi_times_out()) ->
      scsi_eh_scmd_add() -> scsi_host_set_state(shost, SHOST_RECOVERY)
      
      Which meant that as soon as an error IRQ was serviced, SHOST_RECOVERY
      would be set.
      
      However, after commit e494f6a7 ("[SCSI] improved eh timeout handler"),
      scsi_times_out() will instead call scsi_abort_command() which will queue
      delayed work, and the worker function scmd_eh_abort_handler() will call
      scsi_eh_scmd_add(), which calls scsi_host_set_state(shost, SHOST_RECOVERY).
      
      So now, after the TFES error IRQ has been serviced, we need to wait for
      the SCSI workqueue to run its work before SHOST_RECOVERY gets set.
      
      It is worth noting that, even before commit e494f6a7 ("[SCSI] improved
      eh timeout handler"), we could receive an error IRQ from the time when
      scsi_queue_rq() checks scsi_host_in_recovery(), to the time when
      ata_scsi_queuecmd() is actually called.
      
      In order to handle both the delayed setting of SHOST_RECOVERY and the
      window where we can receive an error IRQ, add a check against
      ATA_PFLAG_EH_PENDING (which gets set when servicing the error IRQ),
      inside ata_scsi_queuecmd() itself, while holding the ap->lock.
      (Since the ap->lock is held while servicing IRQs.)
      
      Fixes: e494f6a7 ("[SCSI] improved eh timeout handler")
      Signed-off-by: default avatarNiklas Cassel <niklas.cassel@wdc.com>
      Tested-by: default avatarJohn Garry <john.g.garry@oracle.com>
      Signed-off-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
      e20e81a2
    • Linus Torvalds's avatar
      Merge tag 'block-6.1-2022-11-11' of git://git.kernel.dk/linux · b0b6e2c9
      Linus Torvalds authored
      Pull block fixes from Jens Axboe:
      
       - NVMe pull request via Christoph:
              - Quiet user passthrough command errors (Keith Busch)
              - Fix memory leak in nvmet_subsys_attr_model_store_locked
              - Fix a memory leak in nvmet-auth (Sagi Grimberg)
      
       - Fix a potential NULL point deref in bfq (Yu)
      
       - Allocate command/response buffers separately for DMA for sed-opal,
         rather than rely on embedded alignment (Serge)
      
      * tag 'block-6.1-2022-11-11' of git://git.kernel.dk/linux:
        nvmet: fix a memory leak
        nvmet: fix memory leak in nvmet_subsys_attr_model_store_locked
        nvme: quiet user passthrough command errors
        block: sed-opal: kmalloc the cmd/resp buffers
        block, bfq: fix null pointer dereference in bfq_bio_bfqg()
      b0b6e2c9
    • Linus Torvalds's avatar
      Merge tag 'io_uring-6.1-2022-11-11' of git://git.kernel.dk/linux · 4e6b2b2e
      Linus Torvalds authored
      Pull io_uring fixes from Jens Axboe:
       "Nothing major, just a few minor tweaks:
      
         - Tweak for the TCP zero-copy io_uring self test (Pavel)
      
         - Rather than use our internal cached value of number of CQ events
           available, use what the user can see (Dylan)
      
         - Fix a typo in a comment, added in this release (me)
      
         - Don't allow wrapping while adding provided buffers (me)
      
         - Fix a double poll race, and add a lockdep assertion for it too
           (Pavel)"
      
      * tag 'io_uring-6.1-2022-11-11' of git://git.kernel.dk/linux:
        io_uring/poll: lockdep annote io_poll_req_insert_locked
        io_uring/poll: fix double poll req->flags races
        io_uring: check for rollover of buffer ID when providing buffers
        io_uring: calculate CQEs from the user visible value
        io_uring: fix typo in io_uring.h comment
        selftests/net: don't tests batched TCP io_uring zc
      4e6b2b2e
    • Linus Torvalds's avatar
      Merge tag 's390-6.1-4' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux · f5020a08
      Linus Torvalds authored
      Pull s390 fixes from Alexander Gordeev:
      
       - fix memcpy warning about field-spanning write in zcrypt driver
      
       - minor updates to defconfigs
      
       - remove CONFIG_DEBUG_INFO_BTF from all defconfigs and add btf.config
         addon config file. It significantly decreases compile time and allows
         quickly enabling that option into the current kernel config
      
       - add kasan.config addon config file which allows to easily enable
         KASAN into the current kernel config
      
       - binutils commit 906f69cf65da ("IBM zSystems: Issue error for *DBL
         relocs on misaligned symbols") caused several link errors. Always
         build relocatable kernel to avoid this problem
      
       - raise the minimum clang version to 15.0.0 to avoid silent generation
         of a corrupted code
      
      * tag 's390-6.1-4' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
        scripts/min-tool-version.sh: raise minimum clang version to 15.0.0 for s390
        s390: always build relocatable kernel
        s390/configs: add kasan.config addon config file
        s390/configs: move CONFIG_DEBUG_INFO_BTF into btf.config addon config
        s390: update defconfigs
        s390/zcrypt: fix warning about field-spanning write
      f5020a08
    • Linus Torvalds's avatar
      Merge tag 'hardening-v6.1-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux · df65494f
      Linus Torvalds authored
      Pull kernel hardening fix from Kees Cook:
      
       - Fix !SMP placement of '.data..decrypted' section (Nathan Chancellor)
      
      * tag 'hardening-v6.1-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux:
        vmlinux.lds.h: Fix placement of '.data..decrypted' section
      df65494f
    • Linus Torvalds's avatar
      Merge tag 'nfsd-6.1-4' of git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux · f9bbe0c9
      Linus Torvalds authored
      Pull nfsd fixes from Chuck Lever:
      
       - Fix an export leak
      
       - Fix a potential tracepoint crash
      
      * tag 'nfsd-6.1-4' of git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux:
        nfsd: put the export reference in nfsd4_verify_deleg_dentry
        nfsd: fix use-after-free in nfsd_file_do_acquire tracepoint
      f9bbe0c9
    • Linus Torvalds's avatar
      Merge tag 'fixes_for_v6.1-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs · e2559b79
      Linus Torvalds authored
      Pull UDF fix from Jan Kara:
       "Fix a possible memory corruption with UDF"
      
      * tag 'fixes_for_v6.1-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs:
        udf: Fix a slab-out-of-bounds write bug in udf_find_entry()
      e2559b79
    • Linus Torvalds's avatar
      Merge tag 'perf-tools-fixes-for-v6.1-2-2022-11-10' of... · eb037f16
      Linus Torvalds authored
      Merge tag 'perf-tools-fixes-for-v6.1-2-2022-11-10' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux
      
      Pull perf tools fixes from Arnaldo Carvalho de Melo:
      
       - Fix 'perf stat' crash with --per-node --metric-only in CSV mode, due
         to the AGGR_NODE slot in the 'aggr_header_csv' array not being set.
      
       - Fix printing prefix in CSV output of 'perf stat' metrics in interval
         mode (-I), where an extra separator was being added to the start of
         some lines.
      
       - Fix skipping branch stack sampling 'perf test' entry, that was using
         both --branch-any and --branch-filter, which can't be used together.
      
      * tag 'perf-tools-fixes-for-v6.1-2-2022-11-10' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux:
        perf tools: Add the include/perf/ directory to .gitignore
        perf test: Fix skipping branch stack sampling test
        perf stat: Fix printing os->prefix in CSV metrics output
        perf stat: Fix crash with --per-node --metric-only in CSV mode
      eb037f16
    • Linus Torvalds's avatar
      Merge tag 'riscv-for-linus-6.1-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux · 991f173c
      Linus Torvalds authored
      Pull RISC-V fixes from Palmer Dabbelt:
      
       - A fix to add the missing PWM LEDs into the SiFive HiFive Unleashed
         device tree.
      
       - A fix to fully clear a task's registers on creation, as they end up
         in userspace and thus leak kernel memory.
      
       - A pair of VDSO-related build fixes that manifest on recent LLVM-based
         toolchains.
      
       - A fix to our early init to ensure the DT is adequately processed
         before reserved memory nodes are processed.
      
      * tag 'riscv-for-linus-6.1-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux:
        RISC-V: vdso: Do not add missing symbols to version section in linker script
        riscv: fix reserved memory setup
        riscv: vdso: fix build with llvm
        riscv: process: fix kernel info leakage
        riscv: dts: sifive unleashed: Add PWM controlled LEDs
      991f173c
    • Linus Torvalds's avatar
      Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm · 74bd160f
      Linus Torvalds authored
      Pull kvm
       "This is a pretty large diffstat for this time of the release. The main
        culprit is a reorganization of the AMD assembly trampoline, allowing
        percpu variables to be accessed early.
      
        This is needed for the return stack depth tracking retbleed mitigation
        that will be in 6.2, but it also makes it possible to tighten the IBRS
        restore on vmexit. The latter change is a long tail of the
        spectrev2/retbleed patches (the corresponding Intel change was simpler
        and went in already last June), which is why I am including it right
        now instead of sharing a topic branch with tip.
      
        Being assembly and being rich in comments makes the line count balloon
        a bit, but I am pretty confident in the change (famous last words)
        because the reorganization actually makes everything simpler and more
        understandable than before. It has also had external review and has
        been tested on the aforementioned 6.2 changes, which explode quite
        brutally without the fix.
      
        Apart from this, things are pretty normal.
      
        s390:
      
         - PCI fix
      
         - PV clock fix
      
        x86:
      
         - Fix clash between PMU MSRs and other MSRs
      
         - Prepare SVM assembly trampoline for 6.2 retbleed mitigation and
           for...
      
         - ... tightening IBRS restore on vmexit, moving it before the first
           RET or indirect branch
      
         - Fix log level for VMSA dump
      
         - Block all page faults during kvm_zap_gfn_range()
      
        Tools:
      
         - kvm_stat: fix incorrect detection of debugfs
      
         - kvm_stat: update vmexit definitions"
      
      * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
        KVM: x86/mmu: Block all page faults during kvm_zap_gfn_range()
        KVM: x86/pmu: Limit the maximum number of supported AMD GP counters
        KVM: x86/pmu: Limit the maximum number of supported Intel GP counters
        KVM: x86/pmu: Do not speculatively query Intel GP PMCs that don't exist yet
        KVM: SVM: Only dump VMSA to klog at KERN_DEBUG level
        tools/kvm_stat: update exit reasons for vmx/svm/aarch64/userspace
        tools/kvm_stat: fix incorrect detection of debugfs
        x86, KVM: remove unnecessary argument to x86_virt_spec_ctrl and callers
        KVM: SVM: move MSR_IA32_SPEC_CTRL save/restore to assembly
        KVM: SVM: restore host save area from assembly
        KVM: SVM: move guest vmsave/vmload back to assembly
        KVM: SVM: do not allocate struct svm_cpu_data dynamically
        KVM: SVM: remove dead field from struct svm_cpu_data
        KVM: SVM: remove unused field from struct vcpu_svm
        KVM: SVM: retrieve VMCB from assembly
        KVM: SVM: adjust register allocation for __svm_vcpu_run()
        KVM: SVM: replace regs argument of __svm_vcpu_run() with vcpu_svm
        KVM: x86: use a separate asm-offsets.c file
        KVM: s390: pci: Fix allocation size of aift kzdev elements
        KVM: s390: pv: don't allow userspace to set the clock under PV
      74bd160f
    • Linus Torvalds's avatar
      Merge tag 'hyperv-fixes-signed-20221110' of... · 5be07b3f
      Linus Torvalds authored
      Merge tag 'hyperv-fixes-signed-20221110' of git://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux
      
      Pull hyperv fixes from Wei Liu:
      
       - Fix TSC MSR write for root partition (Anirudh Rayabharam)
      
       - Fix definition of vector in pci-hyperv driver (Dexuan Cui)
      
       - A few other misc patches
      
      * tag 'hyperv-fixes-signed-20221110' of git://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux:
        PCI: hv: Fix the definition of vector in hv_compose_msi_msg()
        MAINTAINERS: remove sthemmin
        x86/hyperv: fix invalid writes to MSRs during root partition kexec
        clocksource/drivers/hyperv: add data structure for reference TSC MSR
        Drivers: hv: fix repeated words in comments
        x86/hyperv: Remove BUG_ON() for kmap_local_page()
      5be07b3f
    • Linus Torvalds's avatar
      Merge tag 'dmaengine-fix-6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine · 91c77a6e
      Linus Torvalds authored
      Pull dmaengine fixes from Vinod Koul:
       "Misc minor driver fixes and a big pile of at_hdmac driver fixes. More
        work on this driver is done and sitting in next:
      
         - Pile of at_hdmac driver rework which fixes many long standing
           issues for this driver.
      
         - couple of stm32 driver fixes for clearing structure and race fix
      
         - idxd fixes for RO device state and batch size
      
         - ti driver mem leak fix
      
         - apple fix for grabbing channels in xlate
      
         - resource leak fix in mv xor"
      
      * tag 'dmaengine-fix-6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine: (24 commits)
        dmaengine: at_hdmac: Check return code of dma_async_device_register
        dmaengine: at_hdmac: Fix impossible condition
        dmaengine: at_hdmac: Don't allow CPU to reorder channel enable
        dmaengine: at_hdmac: Fix completion of unissued descriptor in case of errors
        dmaengine: at_hdmac: Fix descriptor handling when issuing it to hardware
        dmaengine: at_hdmac: Fix concurrency over the active list
        dmaengine: at_hdmac: Free the memset buf without holding the chan lock
        dmaengine: at_hdmac: Fix concurrency over descriptor
        dmaengine: at_hdmac: Fix concurrency problems by removing atc_complete_all()
        dmaengine: at_hdmac: Protect atchan->status with the channel lock
        dmaengine: at_hdmac: Do not call the complete callback on device_terminate_all
        dmaengine: at_hdmac: Fix premature completion of desc in issue_pending
        dmaengine: at_hdmac: Start transfer for cyclic channels in issue_pending
        dmaengine: at_hdmac: Don't start transactions at tx_submit level
        dmaengine: at_hdmac: Fix at_lli struct definition
        dmaengine: stm32-dma: fix potential race between pause and resume
        dmaengine: ti: k3-udma-glue: fix memory leak when register device fail
        dmaengine: mv_xor_v2: Fix a resource leak in mv_xor_v2_remove()
        dmaengine: apple-admac: Fix grabbing of channels in of_xlate
        dmaengine: idxd: fix RO device state error after been disabled/reset
        ...
      91c77a6e
    • Linus Torvalds's avatar
      Merge tag 'spi-fix-v6.1-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi · a83e18cc
      Linus Torvalds authored
      Pull spi fixes from Mark Brown:
       "A relatively large batch of fixes here but all device specific, plus
        an update to MAINTAINERS.
      
        The summary print change to the STM32 driver is fixing an issue where
        the driver could easily end up spamming the logs with something that
        should be a debug message"
      
      * tag 'spi-fix-v6.1-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi:
        spi: amd: Fix SPI_SPD7 value
        spi: stm32: fix stm32_spi_prepare_mbr() that halves spi clk for every run
        spi: meson-spicc: fix do_div build error on non-arm64
        spi: intel: Use correct mask for flash and protected regions
        spi: mediatek: Fix package division error
        spi: tegra210-quad: Don't initialise DMA if not supported
        MAINTAINERS: Update HiSilicon SFC Driver maintainer
        spi: meson-spicc: move wait completion in driver to take bursts delay in account
        spi: stm32: Print summary 'callbacks suppressed' message
      a83e18cc
    • Linus Torvalds's avatar
      Merge tag 'mmc-v6.1-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc · 7c42d6f5
      Linus Torvalds authored
      Pull MMC fixes from Ulf Hansson:
      
       - Provide helper for resetting both SDHCI and CQHCI
      
       - Fix reset for CQHCI (am654, brcmstb, esdhc-imx, of-arasan, tegra)
      
       - Fixup support for MMC_CAP_8_BIT_DATA (esdhc-imx)
      
      * tag 'mmc-v6.1-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc:
        mmc: sdhci-esdhc-imx: use the correct host caps for MMC_CAP_8_BIT_DATA
        mmc: sdhci_am654: Fix SDHCI_RESET_ALL for CQHCI
        mmc: sdhci-tegra: Fix SDHCI_RESET_ALL for CQHCI
        mms: sdhci-esdhc-imx: Fix SDHCI_RESET_ALL for CQHCI
        mmc: sdhci-brcmstb: Fix SDHCI_RESET_ALL for CQHCI
        mmc: sdhci-of-arasan: Fix SDHCI_RESET_ALL for CQHCI
        mmc: cqhci: Provide helper for resetting both SDHCI and CQHCI
      7c42d6f5