commit 9746c25334cb364ab6651ee6dfd4cab3218d0c06
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Wed Aug 4 12:46:45 2021 +0200

    Linux 5.10.56
    
    Link: https://lore.kernel.org/r/20210802134339.023067817@linuxfoundation.org
    Tested-by: Fox Chen <foxhlchen@gmail.com>
    Tested-by: Pavel Machek (CIP) <pavel@denx.de>
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Tested-by: Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
    Tested-by: Rudi Heitbaum <rudi@heitbaum.com>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Guenter Roeck <linux@roeck-us.net>
    Tested-by: Hulk Robot <hulkrobot@huawei.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 55dd22c5d029423f513fd849e633adf0e9c10d0c
Author: Oleksij Rempel <linux@rempel-privat.de>
Date:   Wed Jul 14 13:16:02 2021 +0200

    can: j1939: j1939_session_deactivate(): clarify lifetime of session object
    
    commit 0c71437dd50dd687c15d8ca80b3b68f10bb21d63 upstream.
    
    The j1939_session_deactivate() is decrementing the session ref-count and
    potentially can free() the session. This would cause use-after-free
    situation.
    
    However, the code calling j1939_session_deactivate() does always hold
    another reference to the session, so that it would not be free()ed in
    this code path.
    
    This patch adds a comment to make this clear and a WARN_ON, to ensure
    that future changes will not violate this requirement. Further this
    patch avoids dereferencing the session pointer as a precaution to avoid
    use-after-free if the session is actually free()ed.
    
    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Link: https://lore.kernel.org/r/20210714111602.24021-1-o.rempel@pengutronix.de
    Reported-by: Xiaochen Zou <xzou017@ucr.edu>
    Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 75ebe1d355b5b179568009ef35042d3c7be7ee00
Author: Lukasz Cieplicki <lukaszx.cieplicki@intel.com>
Date:   Mon May 31 16:55:49 2021 +0000

    i40e: Add additional info to PHY type error
    
    commit dc614c46178b0b89bde86ac54fc687a28580d2b7 upstream.
    
    In case of PHY type error occurs, the message was too generic.
    Add additional info to PHY type error indicating that it can be
    wrong cable connected.
    
    Fixes: 124ed15bf126 ("i40e: Add dual speed module support")
    Signed-off-by: Lukasz Cieplicki <lukaszx.cieplicki@intel.com>
    Signed-off-by: Michal Maloszewski <michal.maloszewski@intel.com>
    Tested-by: Tony Brelinski <tonyx.brelinski@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2ca5ec188b2097f5b93299638e0b74e2126031a8
Author: Arnaldo Carvalho de Melo <acme@redhat.com>
Date:   Fri Jul 30 18:26:22 2021 -0300

    Revert "perf map: Fix dso->nsinfo refcounting"
    
    commit 9bac1bd6e6d36459087a728a968e79e37ebcea1a upstream.
    
    This makes 'perf top' abort in some cases, and the right fix will
    involve surgery that is too much to do at this stage, so revert for now
    and fix it in the next merge window.
    
    This reverts commit 2d6b74baa7147251c30a46c4996e8cc224aa2dc5.
    
    Cc: Riccardo Mancini <rickyman7@gmail.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Krister Johansen <kjlx@templeofstupid.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c14cee5bc466dd09918e2b749bcf2ba9babfb7d5
Author: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Date:   Thu Jul 29 11:34:49 2021 +0530

    powerpc/pseries: Fix regression while building external modules
    
    commit 333cf507465fbebb3727f5b53e77538467df312a upstream.
    
    With commit c9f3401313a5 ("powerpc: Always enable queued spinlocks for
    64s, disable for others") CONFIG_PPC_QUEUED_SPINLOCKS is always
    enabled on ppc64le, external modules that use spinlock APIs are
    failing.
    
      ERROR: modpost: GPL-incompatible module XXX.ko uses GPL-only symbol 'shared_processor'
    
    Before the above commit, modules were able to build without any
    issues. Also this problem is not seen on other architectures. This
    problem can be workaround if CONFIG_UNINLINE_SPIN_UNLOCK is enabled in
    the config. However CONFIG_UNINLINE_SPIN_UNLOCK is not enabled by
    default and only enabled in certain conditions like
    CONFIG_DEBUG_SPINLOCKS is set in the kernel config.
    
      #include <linux/module.h>
      spinlock_t spLock;
    
      static int __init spinlock_test_init(void)
      {
              spin_lock_init(&spLock);
              spin_lock(&spLock);
              spin_unlock(&spLock);
              return 0;
      }
    
      static void __exit spinlock_test_exit(void)
      {
            printk("spinlock_test unloaded\n");
      }
      module_init(spinlock_test_init);
      module_exit(spinlock_test_exit);
    
      MODULE_DESCRIPTION ("spinlock_test");
      MODULE_LICENSE ("non-GPL");
      MODULE_AUTHOR ("Srikar Dronamraju");
    
    Given that spin locks are one of the basic facilities for module code,
    this effectively makes it impossible to build/load almost any non GPL
    modules on ppc64le.
    
    This was first reported at https://github.com/openzfs/zfs/issues/11172
    
    Currently shared_processor is exported as GPL only symbol.
    Fix this for parity with other architectures by exposing
    shared_processor to non-GPL modules too.
    
    Fixes: 14c73bd344da ("powerpc/vcpu: Assume dedicated processors as non-preempt")
    Cc: stable@vger.kernel.org # v5.5+
    Reported-by: marc.c.dionne@gmail.com
    Signed-off-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20210729060449.292780-1-srikar@linux.vnet.ibm.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bfc8e67c60b911ee5605c1234fcb58239e5c20de
Author: Steve French <stfrench@microsoft.com>
Date:   Fri Jul 23 18:35:15 2021 -0500

    SMB3: fix readpage for large swap cache
    
    commit f2a26a3cff27dfa456fef386fe5df56dcb4b47b6 upstream.
    
    readpage was calculating the offset of the page incorrectly
    for the case of large swapcaches.
    
        loff_t offset = (loff_t)page->index << PAGE_SHIFT;
    
    As pointed out by Matthew Wilcox, this needs to use
    page_file_offset() to calculate the offset instead.
    Pages coming from the swap cache have page->index set
    to their index within the swapcache, not within the backing
    file.  For a sufficiently large swapcache, we could have
    overlapping values of page->index within the same backing file.
    
    Suggested by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: <stable@vger.kernel.org> # v5.7+
    Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit be561c0154dca82c3e399648bfe1b21b717af144
Author: Daniel Borkmann <daniel@iogearbox.net>
Date:   Fri Jul 16 09:18:21 2021 +0000

    bpf: Fix pointer arithmetic mask tightening under state pruning
    
    commit e042aa532c84d18ff13291d00620502ce7a38dda upstream.
    
    In 7fedb63a8307 ("bpf: Tighten speculative pointer arithmetic mask") we
    narrowed the offset mask for unprivileged pointer arithmetic in order to
    mitigate a corner case where in the speculative domain it is possible to
    advance, for example, the map value pointer by up to value_size-1 out-of-
    bounds in order to leak kernel memory via side-channel to user space.
    
    The verifier's state pruning for scalars leaves one corner case open
    where in the first verification path R_x holds an unknown scalar with an
    aux->alu_limit of e.g. 7, and in a second verification path that same
    register R_x, here denoted as R_x', holds an unknown scalar which has
    tighter bounds and would thus satisfy range_within(R_x, R_x') as well as
    tnum_in(R_x, R_x') for state pruning, yielding an aux->alu_limit of 3:
    Given the second path fits the register constraints for pruning, the final
    generated mask from aux->alu_limit will remain at 7. While technically
    not wrong for the non-speculative domain, it would however be possible
    to craft similar cases where the mask would be too wide as in 7fedb63a8307.
    
    One way to fix it is to detect the presence of unknown scalar map pointer
    arithmetic and force a deeper search on unknown scalars to ensure that
    we do not run into a masking mismatch.
    
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ffb9d5c48b4bba47cf926530de45187ecdfd31b5
Author: Lorenz Bauer <lmb@cloudflare.com>
Date:   Thu Apr 29 14:46:56 2021 +0100

    bpf: verifier: Allocate idmap scratch in verifier env
    
    commit c9e73e3d2b1eb1ea7ff068e05007eec3bd8ef1c9 upstream.
    
    func_states_equal makes a very short lived allocation for idmap,
    probably because it's too large to fit on the stack. However the
    function is called quite often, leading to a lot of alloc / free
    churn. Replace the temporary allocation with dedicated scratch
    space in struct bpf_verifier_env.
    
    Signed-off-by: Lorenz Bauer <lmb@cloudflare.com>
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Acked-by: Edward Cree <ecree.xilinx@gmail.com>
    Link: https://lore.kernel.org/bpf/20210429134656.122225-4-lmb@cloudflare.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a11ca29c65c147c9d52896304e9761e2c4ed70dc
Author: Daniel Borkmann <daniel@iogearbox.net>
Date:   Tue Jun 29 09:39:15 2021 +0000

    bpf: Remove superfluous aux sanitation on subprog rejection
    
    commit 59089a189e3adde4cf85f2ce479738d1ae4c514d upstream.
    
    Follow-up to fe9a5ca7e370 ("bpf: Do not mark insn as seen under speculative
    path verification"). The sanitize_insn_aux_data() helper does not serve a
    particular purpose in today's code. The original intention for the helper
    was that if function-by-function verification fails, a given program would
    be cleared from temporary insn_aux_data[], and then its verification would
    be re-attempted in the context of the main program a second time.
    
    However, a failure in do_check_subprogs() will skip do_check_main() and
    propagate the error to the user instead, thus such situation can never occur.
    Given its interaction is not compatible to the Spectre v1 mitigation (due to
    comparing aux->seen with env->pass_cnt), just remove sanitize_insn_aux_data()
    to avoid future bugs in this area.
    
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0e9280654aa482088ee6ef3deadef331f5ac5fb0
Author: Daniel Borkmann <daniel@iogearbox.net>
Date:   Tue Jul 13 08:18:31 2021 +0000

    bpf: Fix leakage due to insufficient speculative store bypass mitigation
    
    [ Upstream commit 2039f26f3aca5b0e419b98f65dd36481337b86ee ]
    
    Spectre v4 gadgets make use of memory disambiguation, which is a set of
    techniques that execute memory access instructions, that is, loads and
    stores, out of program order; Intel's optimization manual, section 2.4.4.5:
    
      A load instruction micro-op may depend on a preceding store. Many
      microarchitectures block loads until all preceding store addresses are
      known. The memory disambiguator predicts which loads will not depend on
      any previous stores. When the disambiguator predicts that a load does
      not have such a dependency, the load takes its data from the L1 data
      cache. Eventually, the prediction is verified. If an actual conflict is
      detected, the load and all succeeding instructions are re-executed.
    
    af86ca4e3088 ("bpf: Prevent memory disambiguation attack") tried to mitigate
    this attack by sanitizing the memory locations through preemptive "fast"
    (low latency) stores of zero prior to the actual "slow" (high latency) store
    of a pointer value such that upon dependency misprediction the CPU then
    speculatively executes the load of the pointer value and retrieves the zero
    value instead of the attacker controlled scalar value previously stored at
    that location, meaning, subsequent access in the speculative domain is then
    redirected to the "zero page".
    
    The sanitized preemptive store of zero prior to the actual "slow" store is
    done through a simple ST instruction based on r10 (frame pointer) with
    relative offset to the stack location that the verifier has been tracking
    on the original used register for STX, which does not have to be r10. Thus,
    there are no memory dependencies for this store, since it's only using r10
    and immediate constant of zero; hence af86ca4e3088 /assumed/ a low latency
    operation.
    
    However, a recent attack demonstrated that this mitigation is not sufficient
    since the preemptive store of zero could also be turned into a "slow" store
    and is thus bypassed as well:
    
      [...]
      // r2 = oob address (e.g. scalar)
      // r7 = pointer to map value
      31: (7b) *(u64 *)(r10 -16) = r2
      // r9 will remain "fast" register, r10 will become "slow" register below
      32: (bf) r9 = r10
      // JIT maps BPF reg to x86 reg:
      //  r9  -> r15 (callee saved)
      //  r10 -> rbp
      // train store forward prediction to break dependency link between both r9
      // and r10 by evicting them from the predictor's LRU table.
      33: (61) r0 = *(u32 *)(r7 +24576)
      34: (63) *(u32 *)(r7 +29696) = r0
      35: (61) r0 = *(u32 *)(r7 +24580)
      36: (63) *(u32 *)(r7 +29700) = r0
      37: (61) r0 = *(u32 *)(r7 +24584)
      38: (63) *(u32 *)(r7 +29704) = r0
      39: (61) r0 = *(u32 *)(r7 +24588)
      40: (63) *(u32 *)(r7 +29708) = r0
      [...]
      543: (61) r0 = *(u32 *)(r7 +25596)
      544: (63) *(u32 *)(r7 +30716) = r0
      // prepare call to bpf_ringbuf_output() helper. the latter will cause rbp
      // to spill to stack memory while r13/r14/r15 (all callee saved regs) remain
      // in hardware registers. rbp becomes slow due to push/pop latency. below is
      // disasm of bpf_ringbuf_output() helper for better visual context:
      //
      // ffffffff8117ee20: 41 54                 push   r12
      // ffffffff8117ee22: 55                    push   rbp
      // ffffffff8117ee23: 53                    push   rbx
      // ffffffff8117ee24: 48 f7 c1 fc ff ff ff  test   rcx,0xfffffffffffffffc
      // ffffffff8117ee2b: 0f 85 af 00 00 00     jne    ffffffff8117eee0 <-- jump taken
      // [...]
      // ffffffff8117eee0: 49 c7 c4 ea ff ff ff  mov    r12,0xffffffffffffffea
      // ffffffff8117eee7: 5b                    pop    rbx
      // ffffffff8117eee8: 5d                    pop    rbp
      // ffffffff8117eee9: 4c 89 e0              mov    rax,r12
      // ffffffff8117eeec: 41 5c                 pop    r12
      // ffffffff8117eeee: c3                    ret
      545: (18) r1 = map[id:4]
      547: (bf) r2 = r7
      548: (b7) r3 = 0
      549: (b7) r4 = 4
      550: (85) call bpf_ringbuf_output#194288
      // instruction 551 inserted by verifier    \
      551: (7a) *(u64 *)(r10 -16) = 0            | /both/ are now slow stores here
      // storing map value pointer r7 at fp-16   | since value of r10 is "slow".
      552: (7b) *(u64 *)(r10 -16) = r7           /
      // following "fast" read to the same memory location, but due to dependency
      // misprediction it will speculatively execute before insn 551/552 completes.
      553: (79) r2 = *(u64 *)(r9 -16)
      // in speculative domain contains attacker controlled r2. in non-speculative
      // domain this contains r7, and thus accesses r7 +0 below.
      554: (71) r3 = *(u8 *)(r2 +0)
      // leak r3
    
    As can be seen, the current speculative store bypass mitigation which the
    verifier inserts at line 551 is insufficient since /both/, the write of
    the zero sanitation as well as the map value pointer are a high latency
    instruction due to prior memory access via push/pop of r10 (rbp) in contrast
    to the low latency read in line 553 as r9 (r15) which stays in hardware
    registers. Thus, architecturally, fp-16 is r7, however, microarchitecturally,
    fp-16 can still be r2.
    
    Initial thoughts to address this issue was to track spilled pointer loads
    from stack and enforce their load via LDX through r10 as well so that /both/
    the preemptive store of zero /as well as/ the load use the /same/ register
    such that a dependency is created between the store and load. However, this
    option is not sufficient either since it can be bypassed as well under
    speculation. An updated attack with pointer spill/fills now _all_ based on
    r10 would look as follows:
    
      [...]
      // r2 = oob address (e.g. scalar)
      // r7 = pointer to map value
      [...]
      // longer store forward prediction training sequence than before.
      2062: (61) r0 = *(u32 *)(r7 +25588)
      2063: (63) *(u32 *)(r7 +30708) = r0
      2064: (61) r0 = *(u32 *)(r7 +25592)
      2065: (63) *(u32 *)(r7 +30712) = r0
      2066: (61) r0 = *(u32 *)(r7 +25596)
      2067: (63) *(u32 *)(r7 +30716) = r0
      // store the speculative load address (scalar) this time after the store
      // forward prediction training.
      2068: (7b) *(u64 *)(r10 -16) = r2
      // preoccupy the CPU store port by running sequence of dummy stores.
      2069: (63) *(u32 *)(r7 +29696) = r0
      2070: (63) *(u32 *)(r7 +29700) = r0
      2071: (63) *(u32 *)(r7 +29704) = r0
      2072: (63) *(u32 *)(r7 +29708) = r0
      2073: (63) *(u32 *)(r7 +29712) = r0
      2074: (63) *(u32 *)(r7 +29716) = r0
      2075: (63) *(u32 *)(r7 +29720) = r0
      2076: (63) *(u32 *)(r7 +29724) = r0
      2077: (63) *(u32 *)(r7 +29728) = r0
      2078: (63) *(u32 *)(r7 +29732) = r0
      2079: (63) *(u32 *)(r7 +29736) = r0
      2080: (63) *(u32 *)(r7 +29740) = r0
      2081: (63) *(u32 *)(r7 +29744) = r0
      2082: (63) *(u32 *)(r7 +29748) = r0
      2083: (63) *(u32 *)(r7 +29752) = r0
      2084: (63) *(u32 *)(r7 +29756) = r0
      2085: (63) *(u32 *)(r7 +29760) = r0
      2086: (63) *(u32 *)(r7 +29764) = r0
      2087: (63) *(u32 *)(r7 +29768) = r0
      2088: (63) *(u32 *)(r7 +29772) = r0
      2089: (63) *(u32 *)(r7 +29776) = r0
      2090: (63) *(u32 *)(r7 +29780) = r0
      2091: (63) *(u32 *)(r7 +29784) = r0
      2092: (63) *(u32 *)(r7 +29788) = r0
      2093: (63) *(u32 *)(r7 +29792) = r0
      2094: (63) *(u32 *)(r7 +29796) = r0
      2095: (63) *(u32 *)(r7 +29800) = r0
      2096: (63) *(u32 *)(r7 +29804) = r0
      2097: (63) *(u32 *)(r7 +29808) = r0
      2098: (63) *(u32 *)(r7 +29812) = r0
      // overwrite scalar with dummy pointer; same as before, also including the
      // sanitation store with 0 from the current mitigation by the verifier.
      2099: (7a) *(u64 *)(r10 -16) = 0         | /both/ are now slow stores here
      2100: (7b) *(u64 *)(r10 -16) = r7        | since store unit is still busy.
      // load from stack intended to bypass stores.
      2101: (79) r2 = *(u64 *)(r10 -16)
      2102: (71) r3 = *(u8 *)(r2 +0)
      // leak r3
      [...]
    
    Looking at the CPU microarchitecture, the scheduler might issue loads (such
    as seen in line 2101) before stores (line 2099,2100) because the load execution
    units become available while the store execution unit is still busy with the
    sequence of dummy stores (line 2069-2098). And so the load may use the prior
    stored scalar from r2 at address r10 -16 for speculation. The updated attack
    may work less reliable on CPU microarchitectures where loads and stores share
    execution resources.
    
    This concludes that the sanitizing with zero stores from af86ca4e3088 ("bpf:
    Prevent memory disambiguation attack") is insufficient. Moreover, the detection
    of stack reuse from af86ca4e3088 where previously data (STACK_MISC) has been
    written to a given stack slot where a pointer value is now to be stored does
    not have sufficient coverage as precondition for the mitigation either; for
    several reasons outlined as follows:
    
     1) Stack content from prior program runs could still be preserved and is
        therefore not "random", best example is to split a speculative store
        bypass attack between tail calls, program A would prepare and store the
        oob address at a given stack slot and then tail call into program B which
        does the "slow" store of a pointer to the stack with subsequent "fast"
        read. From program B PoV such stack slot type is STACK_INVALID, and
        therefore also must be subject to mitigation.
    
     2) The STACK_SPILL must not be coupled to register_is_const(&stack->spilled_ptr)
        condition, for example, the previous content of that memory location could
        also be a pointer to map or map value. Without the fix, a speculative
        store bypass is not mitigated in such precondition and can then lead to
        a type confusion in the speculative domain leaking kernel memory near
        these pointer types.
    
    While brainstorming on various alternative mitigation possibilities, we also
    stumbled upon a retrospective from Chrome developers [0]:
    
      [...] For variant 4, we implemented a mitigation to zero the unused memory
      of the heap prior to allocation, which cost about 1% when done concurrently
      and 4% for scavenging. Variant 4 defeats everything we could think of. We
      explored more mitigations for variant 4 but the threat proved to be more
      pervasive and dangerous than we anticipated. For example, stack slots used
      by the register allocator in the optimizing compiler could be subject to
      type confusion, leading to pointer crafting. Mitigating type confusion for
      stack slots alone would have required a complete redesign of the backend of
      the optimizing compiler, perhaps man years of work, without a guarantee of
      completeness. [...]
    
    From BPF side, the problem space is reduced, however, options are rather
    limited. One idea that has been explored was to xor-obfuscate pointer spills
    to the BPF stack:
    
      [...]
      // preoccupy the CPU store port by running sequence of dummy stores.
      [...]
      2106: (63) *(u32 *)(r7 +29796) = r0
      2107: (63) *(u32 *)(r7 +29800) = r0
      2108: (63) *(u32 *)(r7 +29804) = r0
      2109: (63) *(u32 *)(r7 +29808) = r0
      2110: (63) *(u32 *)(r7 +29812) = r0
      // overwrite scalar with dummy pointer; xored with random 'secret' value
      // of 943576462 before store ...
      2111: (b4) w11 = 943576462
      2112: (af) r11 ^= r7
      2113: (7b) *(u64 *)(r10 -16) = r11
      2114: (79) r11 = *(u64 *)(r10 -16)
      2115: (b4) w2 = 943576462
      2116: (af) r2 ^= r11
      // ... and restored with the same 'secret' value with the help of AX reg.
      2117: (71) r3 = *(u8 *)(r2 +0)
      [...]
    
    While the above would not prevent speculation, it would make data leakage
    infeasible by directing it to random locations. In order to be effective
    and prevent type confusion under speculation, such random secret would have
    to be regenerated for each store. The additional complexity involved for a
    tracking mechanism that prevents jumps such that restoring spilled pointers
    would not get corrupted is not worth the gain for unprivileged. Hence, the
    fix in here eventually opted for emitting a non-public BPF_ST | BPF_NOSPEC
    instruction which the x86 JIT translates into a lfence opcode. Inserting the
    latter in between the store and load instruction is one of the mitigations
    options [1]. The x86 instruction manual notes:
    
      [...] An LFENCE that follows an instruction that stores to memory might
      complete before the data being stored have become globally visible. [...]
    
    The latter meaning that the preceding store instruction finished execution
    and the store is at minimum guaranteed to be in the CPU's store queue, but
    it's not guaranteed to be in that CPU's L1 cache at that point (globally
    visible). The latter would only be guaranteed via sfence. So the load which
    is guaranteed to execute after the lfence for that local CPU would have to
    rely on store-to-load forwarding. [2], in section 2.3 on store buffers says:
    
      [...] For every store operation that is added to the ROB, an entry is
      allocated in the store buffer. This entry requires both the virtual and
      physical address of the target. Only if there is no free entry in the store
      buffer, the frontend stalls until there is an empty slot available in the
      store buffer again. Otherwise, the CPU can immediately continue adding
      subsequent instructions to the ROB and execute them out of order. On Intel
      CPUs, the store buffer has up to 56 entries. [...]
    
    One small upside on the fix is that it lifts constraints from af86ca4e3088
    where the sanitize_stack_off relative to r10 must be the same when coming
    from different paths. The BPF_ST | BPF_NOSPEC gets emitted after a BPF_STX
    or BPF_ST instruction. This happens either when we store a pointer or data
    value to the BPF stack for the first time, or upon later pointer spills.
    The former needs to be enforced since otherwise stale stack data could be
    leaked under speculation as outlined earlier. For non-x86 JITs the BPF_ST |
    BPF_NOSPEC mapping is currently optimized away, but others could emit a
    speculation barrier as well if necessary. For real-world unprivileged
    programs e.g. generated by LLVM, pointer spill/fill is only generated upon
    register pressure and LLVM only tries to do that for pointers which are not
    used often. The program main impact will be the initial BPF_ST | BPF_NOSPEC
    sanitation for the STACK_INVALID case when the first write to a stack slot
    occurs e.g. upon map lookup. In future we might refine ways to mitigate
    the latter cost.
    
      [0] https://arxiv.org/pdf/1902.05178.pdf
      [1] https://msrc-blog.microsoft.com/2018/05/21/analysis-and-mitigation-of-speculative-store-bypass-cve-2018-3639/
      [2] https://arxiv.org/pdf/1905.05725.pdf
    
    Fixes: af86ca4e3088 ("bpf: Prevent memory disambiguation attack")
    Fixes: f7cf25b2026d ("bpf: track spill/fill of constants")
    Co-developed-by: Piotr Krysiuk <piotras@gmail.com>
    Co-developed-by: Benedict Schlueter <benedict.schlueter@rub.de>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: Piotr Krysiuk <piotras@gmail.com>
    Signed-off-by: Benedict Schlueter <benedict.schlueter@rub.de>
    Acked-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit bea9e2fd180892eba2574711b05b794f1d0e7b73
Author: Daniel Borkmann <daniel@iogearbox.net>
Date:   Tue Jul 13 08:18:31 2021 +0000

    bpf: Introduce BPF nospec instruction for mitigating Spectre v4
    
    [ Upstream commit f5e81d1117501546b7be050c5fbafa6efd2c722c ]
    
    In case of JITs, each of the JIT backends compiles the BPF nospec instruction
    /either/ to a machine instruction which emits a speculation barrier /or/ to
    /no/ machine instruction in case the underlying architecture is not affected
    by Speculative Store Bypass or has different mitigations in place already.
    
    This covers both x86 and (implicitly) arm64: In case of x86, we use 'lfence'
    instruction for mitigation. In case of arm64, we rely on the firmware mitigation
    as controlled via the ssbd kernel parameter. Whenever the mitigation is enabled,
    it works for all of the kernel code with no need to provide any additional
    instructions here (hence only comment in arm64 JIT). Other archs can follow
    as needed. The BPF nospec instruction is specifically targeting Spectre v4
    since i) we don't use a serialization barrier for the Spectre v1 case, and
    ii) mitigation instructions for v1 and v4 might be different on some archs.
    
    The BPF nospec is required for a future commit, where the BPF verifier does
    annotate intermediate BPF programs with speculation barriers.
    
    Co-developed-by: Piotr Krysiuk <piotras@gmail.com>
    Co-developed-by: Benedict Schlueter <benedict.schlueter@rub.de>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: Piotr Krysiuk <piotras@gmail.com>
    Signed-off-by: Benedict Schlueter <benedict.schlueter@rub.de>
    Acked-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit cd61e665a16615a00257d2974ba3db14bea33446
Author: Dan Carpenter <dan.carpenter@oracle.com>
Date:   Thu Jul 29 17:12:46 2021 +0300

    can: hi311x: fix a signedness bug in hi3110_cmd()
    
    [ Upstream commit f6b3c7848e66e9046c8a79a5b88fd03461cc252b ]
    
    The hi3110_cmd() is supposed to return zero on success and negative
    error codes on failure, but it was accidentally declared as a u8 when
    it needs to be an int type.
    
    Fixes: 57e83fb9b746 ("can: hi311x: Add Holt HI-311x CAN driver")
    Link: https://lore.kernel.org/r/20210729141246.GA1267@kili
    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 65dfa6cb22337d21cc8a441e4e324c86eb886c72
Author: Wang Hai <wanghai38@huawei.com>
Date:   Wed Jul 28 20:11:07 2021 +0800

    sis900: Fix missing pci_disable_device() in probe and remove
    
    [ Upstream commit 89fb62fde3b226f99b7015280cf132e2a7438edf ]
    
    Replace pci_enable_device() with pcim_enable_device(),
    pci_disable_device() and pci_release_regions() will be
    called in release automatically.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: Hulk Robot <hulkci@huawei.com>
    Signed-off-by: Wang Hai <wanghai38@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 93e5bf4b2925cfec5299791913a118adb3f62846
Author: Wang Hai <wanghai38@huawei.com>
Date:   Wed Jul 28 15:43:13 2021 +0800

    tulip: windbond-840: Fix missing pci_disable_device() in probe and remove
    
    [ Upstream commit 76a16be07b209a3f507c72abe823bd3af1c8661a ]
    
    Replace pci_enable_device() with pcim_enable_device(),
    pci_disable_device() and pci_release_regions() will be
    called in release automatically.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: Hulk Robot <hulkci@huawei.com>
    Signed-off-by: Wang Hai <wanghai38@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 58b8c812c7641d9d9bfd1663f42dac2dbba3a560
Author: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Date:   Tue Jul 27 23:40:54 2021 -0300

    sctp: fix return value check in __sctp_rcv_asconf_lookup
    
    [ Upstream commit 557fb5862c9272ad9b21407afe1da8acfd9b53eb ]
    
    As Ben Hutchings noticed, this check should have been inverted: the call
    returns true in case of success.
    
    Reported-by: Ben Hutchings <ben@decadent.org.uk>
    Fixes: 0c5dc070ff3d ("sctp: validate from_addr_param return")
    Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
    Reviewed-by: Xin Long <lucien.xin@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 362e9d23cf70896c65a436667449cb2d277b930f
Author: Dima Chumak <dchumak@nvidia.com>
Date:   Mon Apr 26 15:16:26 2021 +0300

    net/mlx5e: Fix nullptr in mlx5e_hairpin_get_mdev()
    
    [ Upstream commit b1c2f6312c5005c928a72e668bf305a589d828d4 ]
    
    The result of __dev_get_by_index() is not checked for NULL and then gets
    dereferenced immediately.
    
    Also, __dev_get_by_index() must be called while holding either RTNL lock
    or @dev_base_lock, which isn't satisfied by mlx5e_hairpin_get_mdev() or
    its callers. This makes the underlying hlist_for_each_entry() loop not
    safe, and can have adverse effects in itself.
    
    Fix by using dev_get_by_index() and handling nullptr return value when
    ifindex device is not found. Update mlx5e_hairpin_get_mdev() callers to
    check for possible PTR_ERR() result.
    
    Fixes: 77ab67b7f0f9 ("net/mlx5e: Basic setup of hairpin object")
    Addresses-Coverity: ("Dereference null return value")
    Signed-off-by: Dima Chumak <dchumak@nvidia.com>
    Reviewed-by: Vlad Buslov <vladbu@nvidia.com>
    Reviewed-by: Roi Dayan <roid@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit bd744f2a275573f29811ebf4f0716b120c0036fd
Author: Maor Gottlieb <maorg@nvidia.com>
Date:   Mon Jul 26 09:20:14 2021 +0300

    net/mlx5: Fix flow table chaining
    
    [ Upstream commit 8b54874ef1617185048029a3083d510569e93751 ]
    
    Fix a bug when flow table is created in priority that already
    has other flow tables as shown in the below diagram.
    If the new flow table (FT-B) has the lowest level in the priority,
    we need to connect the flow tables from the previous priority (p0)
    to this new table. In addition when this flow table is destroyed
    (FT-B), we need to connect the flow tables from the previous
    priority (p0) to the next level flow table (FT-C) in the same
    priority of the destroyed table (if exists).
    
                           ---------
                           |root_ns|
                           ---------
                                |
                --------------------------------
                |               |              |
           ----------      ----------      ---------
           |p(prio)-x|     |   p-y  |      |   p-n |
           ----------      ----------      ---------
                |               |
         ----------------  ------------------
         |ns(e.g bypass)|  |ns(e.g. kernel) |
         ----------------  ------------------
                |            |           |
            -------        ------       ----
            |  p0 |        | p1 |       |p2|
            -------        ------       ----
               |             |    \
            --------       ------- ------
            | FT-A |       |FT-B | |FT-C|
            --------       ------- ------
    
    Fixes: f90edfd279f3 ("net/mlx5_core: Connect flow tables")
    Signed-off-by: Maor Gottlieb <maorg@nvidia.com>
    Reviewed-by: Mark Bloch <mbloch@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 1b148bd72e507543c4cac5689a204053bf877337
Author: Cong Wang <cong.wang@bytedance.com>
Date:   Wed Jan 27 14:15:01 2021 -0800

    skmsg: Make sk_psock_destroy() static
    
    [ Upstream commit 8063e184e49011f6f3f34f6c358dc8a83890bb5b ]
    
    sk_psock_destroy() is a RCU callback, I can't see any reason why
    it could be used outside.
    
    Signed-off-by: Cong Wang <cong.wang@bytedance.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Cc: John Fastabend <john.fastabend@gmail.com>
    Cc: Jakub Sitnicki <jakub@cloudflare.com>
    Cc: Lorenz Bauer <lmb@cloudflare.com>
    Link: https://lore.kernel.org/bpf/20210127221501.46866-1-xiyou.wangcong@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 645a1d3bef5f149f853a5815c437b16b290583e0
Author: Bjorn Andersson <bjorn.andersson@linaro.org>
Date:   Wed Jul 21 19:44:34 2021 -0700

    drm/msm/dp: Initialize the INTF_CONFIG register
    
    [ Upstream commit f9a39932fa54b6421e751ada7a285da809146421 ]
    
    Some bootloaders set the widebus enable bit in the INTF_CONFIG register,
    but configuration of widebus isn't yet supported ensure that the
    register has a known value, with widebus disabled.
    
    Fixes: c943b4948b58 ("drm/msm/dp: add displayPort driver support")
    Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
    Reviewed-by: Stephen Boyd <swboyd@chromium.org>
    Link: https://lore.kernel.org/r/20210722024434.3313167-1-bjorn.andersson@linaro.org
    Signed-off-by: Rob Clark <robdclark@chromium.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 4a6841921cc818ebaa10a74b799867d149de2d1e
Author: Robert Foss <robert.foss@linaro.org>
Date:   Mon Jun 28 10:50:33 2021 +0200

    drm/msm/dpu: Fix sm8250_mdp register length
    
    [ Upstream commit b910a0206b59eb90ea8ff76d146f4c3156da61e9 ]
    
    The downstream dts lists this value as 0x494, and not
    0x45c.
    
    Fixes: af776a3e1c30 ("drm/msm/dpu: add SM8250 to hw catalog")
    Signed-off-by: Robert Foss <robert.foss@linaro.org>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@somainline.org>
    Link: https://lore.kernel.org/r/20210628085033.9905-1-robert.foss@linaro.org
    Signed-off-by: Rob Clark <robdclark@chromium.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit e6097071a4ff4b9543adb1c041a3708d5606c35c
Author: Pavel Skripkin <paskripkin@gmail.com>
Date:   Sun Jul 25 00:11:59 2021 +0300

    net: llc: fix skb_over_panic
    
    [ Upstream commit c7c9d2102c9c098916ab9e0ab248006107d00d6c ]
    
    Syzbot reported skb_over_panic() in llc_pdu_init_as_xid_cmd(). The
    problem was in wrong LCC header manipulations.
    
    Syzbot's reproducer tries to send XID packet. llc_ui_sendmsg() is
    doing following steps:
    
            1. skb allocation with size = len + header size
                    len is passed from userpace and header size
                    is 3 since addr->sllc_xid is set.
    
            2. skb_reserve() for header_len = 3
            3. filling all other space with memcpy_from_msg()
    
    Ok, at this moment we have fully loaded skb, only headers needs to be
    filled.
    
    Then code comes to llc_sap_action_send_xid_c(). This function pushes 3
    bytes for LLC PDU header and initializes it. Then comes
    llc_pdu_init_as_xid_cmd(). It initalizes next 3 bytes *AFTER* LLC PDU
    header and call skb_push(skb, 3). This looks wrong for 2 reasons:
    
            1. Bytes rigth after LLC header are user data, so this function
               was overwriting payload.
    
            2. skb_push(skb, 3) call can cause skb_over_panic() since
               all free space was filled in llc_ui_sendmsg(). (This can
               happen is user passed 686 len: 686 + 14 (eth header) + 3 (LLC
               header) = 703. SKB_DATA_ALIGN(703) = 704)
    
    So, in this patch I added 2 new private constansts: LLC_PDU_TYPE_U_XID
    and LLC_PDU_LEN_U_XID. LLC_PDU_LEN_U_XID is used to correctly reserve
    header size to handle LLC + XID case. LLC_PDU_TYPE_U_XID is used by
    llc_pdu_header_init() function to push 6 bytes instead of 3. And finally
    I removed skb_push() call from llc_pdu_init_as_xid_cmd().
    
    This changes should not affect other parts of LLC, since after
    all steps we just transmit buffer.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-and-tested-by: syzbot+5e5a981ad7cc54c4b2b4@syzkaller.appspotmail.com
    Signed-off-by: Pavel Skripkin <paskripkin@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 01f3581d4400f6586403409c5c3a3128fbb3e336
Author: Vitaly Kuznetsov <vkuznets@redhat.com>
Date:   Thu Jul 22 14:30:18 2021 +0200

    KVM: x86: Check the right feature bit for MSR_KVM_ASYNC_PF_ACK access
    
    [ Upstream commit 0a31df6823232516f61f174907e444f710941dfe ]
    
    MSR_KVM_ASYNC_PF_ACK MSR is part of interrupt based asynchronous page fault
    interface and not the original (deprecated) KVM_FEATURE_ASYNC_PF. This is
    stated in Documentation/virt/kvm/msr.rst.
    
    Fixes: 66570e966dd9 ("kvm: x86: only provide PV features if enabled in guest's CPUID")
    Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
    Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
    Reviewed-by: Oliver Upton <oupton@google.com>
    Message-Id: <20210722123018.260035-1-vkuznets@redhat.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit f5f78ae5f1bed58742cfe07b10c8233ec163f2ce
Author: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>
Date:   Fri Jul 23 18:36:09 2021 +0800

    mlx4: Fix missing error code in mlx4_load_one()
    
    [ Upstream commit 7e4960b3d66d7248b23de3251118147812b42da2 ]
    
    The error code is missing in this code scenario, add the error code
    '-EINVAL' to the return value 'err'.
    
    Eliminate the follow smatch warning:
    
    drivers/net/ethernet/mellanox/mlx4/main.c:3538 mlx4_load_one() warn:
    missing error code 'err'.
    
    Reported-by: Abaci Robot <abaci@linux.alibaba.com>
    Fixes: 7ae0e400cd93 ("net/mlx4_core: Flexible (asymmetric) allocation of EQs and MSI-X vectors for PF/VFs")
    Signed-off-by: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>
    Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 51b751fc06b8dd4fd787586eed373a563e3bd991
Author: Geetha sowjanya <gakula@marvell.com>
Date:   Sun Jul 25 13:29:03 2021 +0530

    octeontx2-pf: Fix interface down flag on error
    
    [ Upstream commit 69f0aeb13bb548e2d5710a350116e03f0273302e ]
    
    In the existing code while changing the number of TX/RX
    queues using ethtool the PF/VF interface resources are
    freed and reallocated (otx2_stop and otx2_open is called)
    if the device is in running state. If any resource allocation
    fails in otx2_open, driver free already allocated resources
    and return. But again, when the number of queues changes
    as the device state still running oxt2_stop is called.
    In which we try to free already freed resources leading
    to driver crash.
    This patch fixes the issue by setting the INTF_DOWN flag on
    error and free the resources in otx2_stop only if the flag is
    not set.
    
    Fixes: 50fe6c02e5ad ("octeontx2-pf: Register and handle link notifications")
    Signed-off-by: Geetha sowjanya <gakula@marvell.com>
    Signed-off-by: Sunil Kovvuri Goutham <Sunil.Goutham@cavium.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 4951ffa3fac8892949a09b630191ff12f35f4b72
Author: Xin Long <lucien.xin@gmail.com>
Date:   Fri Jul 23 18:46:01 2021 -0400

    tipc: do not write skb_shinfo frags when doing decrytion
    
    [ Upstream commit 3cf4375a090473d240281a0d2b04a3a5aaeac34b ]
    
    One skb's skb_shinfo frags are not writable, and they can be shared with
    other skbs' like by pskb_copy(). To write the frags may cause other skb's
    data crash.
    
    So before doing en/decryption, skb_cow_data() should always be called for
    a cloned or nonlinear skb if req dst is using the same sg as req src.
    While at it, the likely branch can be removed, as it will be covered
    by skb_cow_data().
    
    Note that esp_input() has the same issue, and I will fix it in another
    patch. tipc_aead_encrypt() doesn't have this issue, as it only processes
    linear data in the unlikely branch.
    
    Fixes: fc1b6d6de220 ("tipc: introduce TIPC encryption & authentication")
    Reported-by: Shuang Li <shuali@redhat.com>
    Signed-off-by: Xin Long <lucien.xin@gmail.com>
    Acked-by: Jon Maloy <jmaloy@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 7eefa0b74f3e55dec85edfe5f5270c6f8b598155
Author: Shannon Nelson <snelson@pensando.io>
Date:   Fri Jul 23 11:02:49 2021 -0700

    ionic: count csum_none when offload enabled
    
    [ Upstream commit f07f9815b7046e25cc32bf8542c9c0bbc5eb6e0e ]
    
    Be sure to count the csum_none cases when csum offload is
    enabled.
    
    Fixes: 0f3154e6bcb3 ("ionic: Add Tx and Rx handling")
    Signed-off-by: Shannon Nelson <snelson@pensando.io>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 60decbe01d7d711d4626a855213350ea02bfd41c
Author: Shannon Nelson <snelson@pensando.io>
Date:   Fri Jul 23 11:02:48 2021 -0700

    ionic: fix up dim accounting for tx and rx
    
    [ Upstream commit 76ed8a4a00b484dcccef819ef2618bcf8e46f560 ]
    
    We need to count the correct Tx and/or Rx packets for dynamic
    interrupt moderation, depending on which we're processing on
    the queue interrupt.
    
    Fixes: 04a834592bf5 ("ionic: dynamic interrupt moderation")
    Signed-off-by: Shannon Nelson <snelson@pensando.io>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit a7c85a516cd0e7dc73912311f8b1ab40b6b53cad
Author: Shannon Nelson <snelson@pensando.io>
Date:   Fri Jul 23 11:02:47 2021 -0700

    ionic: remove intr coalesce update from napi
    
    [ Upstream commit a6ff85e0a2d9d074a4b4c291ba9ec1e5b0aba22b ]
    
    Move the interrupt coalesce value update out of the napi
    thread and into the dim_work thread and set it only when it
    has actually changed.
    
    Fixes: 04a834592bf5 ("ionic: dynamic interrupt moderation")
    Signed-off-by: Shannon Nelson <snelson@pensando.io>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 6961323eed46d6aee7b87ec758580d334579438c
Author: Pavel Skripkin <paskripkin@gmail.com>
Date:   Fri Jul 23 18:31:32 2021 +0300

    net: qrtr: fix memory leaks
    
    [ Upstream commit 52f3456a96c06760b9bfae460e39596fec7af22e ]
    
    Syzbot reported memory leak in qrtr. The problem was in unputted
    struct sock. qrtr_local_enqueue() function calls qrtr_port_lookup()
    which takes sock reference if port was found. Then there is the following
    check:
    
    if (!ipc || &ipc->sk == skb->sk) {
            ...
            return -ENODEV;
    }
    
    Since we should drop the reference before returning from this function and
    ipc can be non-NULL inside this if, we should add qrtr_port_put() inside
    this if.
    
    The similar corner case is in qrtr_endpoint_post() as Manivannan
    reported. In case of sock_queue_rcv_skb() failure we need to put
    port reference to avoid leaking struct sock pointer.
    
    Fixes: e04df98adf7d ("net: qrtr: Remove receive worker")
    Fixes: bdabad3e363d ("net: Add Qualcomm IPC router")
    Reported-and-tested-by: syzbot+35a511c72ea7356cdcf3@syzkaller.appspotmail.com
    Signed-off-by: Pavel Skripkin <paskripkin@gmail.com>
    Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 91350564ea8c0d72b9d60d1bace5adb090c97193
Author: Gilad Naaman <gnaaman@drivenets.com>
Date:   Thu Jul 22 20:01:28 2021 +0300

    net: Set true network header for ECN decapsulation
    
    [ Upstream commit 227adfb2b1dfbc53dfc53b9dd7a93a6298ff7c56 ]
    
    In cases where the header straight after the tunnel header was
    another ethernet header (TEB), instead of the network header,
    the ECN decapsulation code would treat the ethernet header as if
    it was an IP header, resulting in mishandling and possible
    wrong drops or corruption of the IP header.
    
    In this case, ECT(1) is sent, so IP_ECN_decapsulate tries to copy it to the
    inner IPv4 header, and correct its checksum.
    
    The offset of the ECT bits in an IPv4 header corresponds to the
    lower 2 bits of the second octet of the destination MAC address
    in the ethernet header.
    The IPv4 checksum corresponds to end of the source address.
    
    In order to reproduce:
    
        $ ip netns add A
        $ ip netns add B
        $ ip -n A link add _v0 type veth peer name _v1 netns B
        $ ip -n A link set _v0 up
        $ ip -n A addr add dev _v0 10.254.3.1/24
        $ ip -n A route add default dev _v0 scope global
        $ ip -n B link set _v1 up
        $ ip -n B addr add dev _v1 10.254.1.6/24
        $ ip -n B route add default dev _v1 scope global
        $ ip -n B link add gre1 type gretap local 10.254.1.6 remote 10.254.3.1 key 0x49000000
        $ ip -n B link set gre1 up
    
        # Now send an IPv4/GRE/Eth/IPv4 frame where the outer header has ECT(1),
        # and the inner header has no ECT bits set:
    
        $ cat send_pkt.py
            #!/usr/bin/env python3
            from scapy.all import *
    
            pkt = IP(b'E\x01\x00\xa7\x00\x00\x00\x00@/`%\n\xfe\x03\x01\n\xfe\x01\x06 \x00eXI\x00'
                     b'\x00\x00\x18\xbe\x92\xa0\xee&\x18\xb0\x92\xa0l&\x08\x00E\x00\x00}\x8b\x85'
                     b'@\x00\x01\x01\xe4\xf2\x82\x82\x82\x01\x82\x82\x82\x02\x08\x00d\x11\xa6\xeb'
                     b'3\x1e\x1e\\xf3\\xf7`\x00\x00\x00\x00ZN\x00\x00\x00\x00\x00\x00\x10\x11\x12'
                     b'\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./01234'
                     b'56789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ')
    
            send(pkt)
        $ sudo ip netns exec B tcpdump -neqlllvi gre1 icmp & ; sleep 1
        $ sudo ip netns exec A python3 send_pkt.py
    
    In the original packet, the source/destinatio MAC addresses are
    dst=18:be:92:a0:ee:26 src=18:b0:92:a0:6c:26
    
    In the received packet, they are
    dst=18:bd:92:a0:ee:26 src=18:b0:92:a0:6c:27
    
    Thanks to Lahav Schlesinger <lschlesinger@drivenets.com> and Isaac Garzon <isaac@speed.io>
    for helping me pinpoint the origin.
    
    Fixes: b723748750ec ("tunnel: Propagate ECT(1) when decapsulating as recommended by RFC6040")
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
    Cc: David Ahern <dsahern@kernel.org>
    Cc: Jakub Kicinski <kuba@kernel.org>
    Cc: Toke Høiland-Jørgensen <toke@redhat.com>
    Signed-off-by: Gilad Naaman <gnaaman@drivenets.com>
    Acked-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit a41282e82a1d13ad2cca0f07879d7042780d8e78
Author: Hoang Le <hoang.h.le@dektech.com.au>
Date:   Fri Jul 23 09:25:34 2021 +0700

    tipc: fix sleeping in tipc accept routine
    
    [ Upstream commit d237a7f11719ff9320721be5818352e48071aab6 ]
    
    The release_sock() is blocking function, it would change the state
    after sleeping. In order to evaluate the stated condition outside
    the socket lock context, switch to use wait_woken() instead.
    
    Fixes: 6398e23cdb1d8 ("tipc: standardize accept routine")
    Acked-by: Jon Maloy <jmaloy@redhat.com>
    Signed-off-by: Hoang Le <hoang.h.le@dektech.com.au>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 10f585740cf0bf5b037a70a4d4eb3096fd713490
Author: Xin Long <lucien.xin@gmail.com>
Date:   Thu Jul 22 12:05:41 2021 -0400

    tipc: fix implicit-connect for SYN+
    
    [ Upstream commit f8dd60de194817c86bf812700980762bb5a8d9a4 ]
    
    For implicit-connect, when it's either SYN- or SYN+, an ACK should
    be sent back to the client immediately. It's not appropriate for
    the client to enter established state only after receiving data
    from the server.
    
    On client side, after the SYN is sent out, tipc_wait_for_connect()
    should be called to wait for the ACK if timeout is set.
    
    This patch also restricts __tipc_sendstream() to call __sendmsg()
    only when it's in TIPC_OPEN state, so that the client can program
    in a single loop doing both connecting and data sending like:
    
      for (...)
          sendmsg(dest, buf);
    
    This makes the implicit-connect more implicit.
    
    Fixes: b97bf3fd8f6a ("[TIPC] Initial merge")
    Signed-off-by: Xin Long <lucien.xin@gmail.com>
    Acked-by: Jon Maloy <jmaloy@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit bb60616162113653d181fe7490354ef57e520fa9
Author: Jedrzej Jagielski <jedrzej.jagielski@intel.com>
Date:   Fri Jun 18 08:49:49 2021 +0000

    i40e: Fix log TC creation failure when max num of queues is exceeded
    
    [ Upstream commit ea52faae1d17cd3048681d86d2e8641f44de484d ]
    
    Fix missing failed message if driver does not have enough queues to
    complete TC command. Without this fix no message is displayed in dmesg.
    
    Fixes: a9ce82f744dc ("i40e: Enable 'channel' mode in mqprio for TC configs")
    Signed-off-by: Grzegorz Szczurek <grzegorzx.szczurek@intel.com>
    Signed-off-by: Jedrzej Jagielski <jedrzej.jagielski@intel.com>
    Tested-by: Imam Hassan Reza Biswas <imam.hassan.reza.biswas@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit c1cc6bce1afd096b2a3a482de6278e4d181e33ff
Author: Jedrzej Jagielski <jedrzej.jagielski@intel.com>
Date:   Wed Jun 2 00:47:03 2021 +0000

    i40e: Fix queue-to-TC mapping on Tx
    
    [ Upstream commit 89ec1f0886c127c7e41ac61a6b6d539f4fb2510b ]
    
    In SW DCB mode the packets sent receive incorrect UP tags. They are
    constructed correctly and put into tx_ring, but UP is later remapped by
    HW on the basis of TCTUPR register contents according to Tx queue
    selected, and BW used is consistent with the new UP values. This is
    caused by Tx queue selection in kernel not taking into account DCB
    configuration. This patch fixes the issue by implementing the
    ndo_select_queue NDO callback.
    
    Fixes: fd0a05ce74ef ("i40e: transmit, receive, and NAPI")
    Signed-off-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
    Signed-off-by: Jedrzej Jagielski <jedrzej.jagielski@intel.com>
    Tested-by: Imam Hassan Reza Biswas <imam.hassan.reza.biswas@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 4382cca179153d08e0a938d4e97514e5d31e08e2
Author: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
Date:   Fri May 21 18:41:26 2021 +0200

    i40e: Fix firmware LLDP agent related warning
    
    [ Upstream commit 71d6fdba4b2d82fdd883fec31dee77fbcf59773a ]
    
    Make warning meaningful for the user.
    
    Previously the trace:
    "Starting FW LLDP agent failed: error: I40E_ERR_ADMIN_QUEUE_ERROR, I40E_AQ_RC_EAGAIN"
    was produced when user tried to start Firmware LLDP agent,
    just after it was stopped with sequence:
    ethtool --set-priv-flags <dev> disable-fw-lldp on
    ethtool --set-priv-flags <dev> disable-fw-lldp off
    (without any delay between the commands)
    At that point the firmware is still processing stop command, the behavior
    is expected.
    
    Fixes: c1041d070437 ("i40e: Missing response checks in driver when starting/stopping FW LLDP")
    Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Signed-off-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
    Tested-by: Imam Hassan Reza Biswas <imam.hassan.reza.biswas@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit e090ffdf056361230797fc170b226bd6ab81b4aa
Author: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
Date:   Thu Apr 29 19:49:47 2021 +0200

    i40e: Fix logic of disabling queues
    
    [ Upstream commit 65662a8dcdd01342b71ee44234bcfd0162e195af ]
    
    Correct the message flow between driver and firmware when disabling
    queues.
    
    Previously in case of PF reset (due to required reinit after reconfig),
    the error like: "VSI seid 397 Tx ring 60 disable timeout" could show up
    occasionally. The error was not a real issue of hardware or firmware,
    it was caused by wrong sequence of messages invoked by the driver.
    
    Fixes: 41c445ff0f48 ("i40e: main driver core")
    Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Signed-off-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
    Tested-by: Tony Brelinski <tonyx.brelinski@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit cbc8012902b34516cae039f12435b78be80493a3
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Tue Jul 20 18:22:50 2021 +0200

    netfilter: nft_nat: allow to specify layer 4 protocol NAT only
    
    [ Upstream commit a33f387ecd5aafae514095c2c4a8c24f7aea7e8b ]
    
    nft_nat reports a bogus EAFNOSUPPORT if no layer 3 information is specified.
    
    Fixes: d07db9884a5f ("netfilter: nf_tables: introduce nft_validate_register_load()")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 3dbda8483f4256530a926dcb6063656a17fe62d9
Author: Florian Westphal <fw@strlen.de>
Date:   Sun Jul 18 18:36:00 2021 +0200

    netfilter: conntrack: adjust stop timestamp to real expiry value
    
    [ Upstream commit 30a56a2b881821625f79837d4d968c679852444e ]
    
    In case the entry is evicted via garbage collection there is
    delay between the timeout value and the eviction event.
    
    This adjusts the stop value based on how much time has passed.
    
    Fixes: b87a2f9199ea82 ("netfilter: conntrack: add gc worker to remove timed-out entries")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit ac038f4152efd8b4ad86e50df913bd318dc6daa8
Author: Felix Fietkau <nbd@nbd.name>
Date:   Fri Jul 2 07:01:11 2021 +0200

    mac80211: fix enabling 4-address mode on a sta vif after assoc
    
    [ Upstream commit a5d3cbdb09ff1f52cbe040932e06c8b9915c6dad ]
    
    Notify the driver about the 4-address mode change and also send a nulldata
    packet to the AP to notify it about the change
    
    Fixes: 1ff4e8f2dec8 ("mac80211: notify the driver when a sta uses 4-address mode")
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Link: https://lore.kernel.org/r/20210702050111.47546-1-nbd@nbd.name
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 076bc6ebce48e8144ba9d73c4f37f3a7b7ea66bf
Author: Lorenz Bauer <lmb@cloudflare.com>
Date:   Mon Jul 19 09:51:34 2021 +0100

    bpf: Fix OOB read when printing XDP link fdinfo
    
    [ Upstream commit d6371c76e20d7d3f61b05fd67b596af4d14a8886 ]
    
    We got the following UBSAN report on one of our testing machines:
    
        ================================================================================
        UBSAN: array-index-out-of-bounds in kernel/bpf/syscall.c:2389:24
        index 6 is out of range for type 'char *[6]'
        CPU: 43 PID: 930921 Comm: systemd-coredum Tainted: G           O      5.10.48-cloudflare-kasan-2021.7.0 #1
        Hardware name: <snip>
        Call Trace:
         dump_stack+0x7d/0xa3
         ubsan_epilogue+0x5/0x40
         __ubsan_handle_out_of_bounds.cold+0x43/0x48
         ? seq_printf+0x17d/0x250
         bpf_link_show_fdinfo+0x329/0x380
         ? bpf_map_value_size+0xe0/0xe0
         ? put_files_struct+0x20/0x2d0
         ? __kasan_kmalloc.constprop.0+0xc2/0xd0
         seq_show+0x3f7/0x540
         seq_read_iter+0x3f8/0x1040
         seq_read+0x329/0x500
         ? seq_read_iter+0x1040/0x1040
         ? __fsnotify_parent+0x80/0x820
         ? __fsnotify_update_child_dentry_flags+0x380/0x380
         vfs_read+0x123/0x460
         ksys_read+0xed/0x1c0
         ? __x64_sys_pwrite64+0x1f0/0x1f0
         do_syscall_64+0x33/0x40
         entry_SYSCALL_64_after_hwframe+0x44/0xa9
        <snip>
        ================================================================================
        ================================================================================
        UBSAN: object-size-mismatch in kernel/bpf/syscall.c:2384:2
    
    From the report, we can infer that some array access in bpf_link_show_fdinfo at index 6
    is out of bounds. The obvious candidate is bpf_link_type_strs[BPF_LINK_TYPE_XDP] with
    BPF_LINK_TYPE_XDP == 6. It turns out that BPF_LINK_TYPE_XDP is missing from bpf_types.h
    and therefore doesn't have an entry in bpf_link_type_strs:
    
        pos:        0
        flags:      02000000
        mnt_id:     13
        link_type:  (null)
        link_id:    4
        prog_tag:   bcf7977d3b93787c
        prog_id:    4
        ifindex:    1
    
    Fixes: aa8d3a716b59 ("bpf, xdp: Add bpf_link-based XDP attachment API")
    Signed-off-by: Lorenz Bauer <lmb@cloudflare.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20210719085134.43325-2-lmb@cloudflare.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit e6a06a13ec6f6a9b88d5fdc11e3ea0cc8860890e
Author: Naresh Kumar PBS <nareshkumar.pbs@broadcom.com>
Date:   Sun Jul 11 06:31:36 2021 -0700

    RDMA/bnxt_re: Fix stats counters
    
    [ Upstream commit 0c23af52ccd1605926480b5dfd1dd857ef604611 ]
    
    Statistical counters are not incrementing in some adapter versions with
    newer FW. This is due to the stats context length mismatch between FW and
    driver. Since the L2 driver updates the length correctly, use the stats
    length from L2 driver while allocating the DMA'able memory and creating
    the stats context.
    
    Fixes: 9d6b648c3112 ("bnxt_en: Update firmware interface spec to 1.10.1.65.")
    Link: https://lore.kernel.org/r/1626010296-6076-1-git-send-email-selvin.xavier@broadcom.com
    Signed-off-by: Naresh Kumar PBS <nareshkumar.pbs@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit c8667cb406fdae6718e7dbd4d0b2c85ad1eb9d9d
Author: Nguyen Dinh Phi <phind.uet@gmail.com>
Date:   Mon Jun 28 21:23:34 2021 +0800

    cfg80211: Fix possible memory leak in function cfg80211_bss_update
    
    commit f9a5c358c8d26fed0cc45f2afc64633d4ba21dff upstream.
    
    When we exceed the limit of BSS entries, this function will free the
    new entry, however, at this time, it is the last door to access the
    inputed ies, so these ies will be unreferenced objects and cause memory
    leak.
    Therefore we should free its ies before deallocating the new entry, beside
    of dropping it from hidden_list.
    
    Signed-off-by: Nguyen Dinh Phi <phind.uet@gmail.com>
    Link: https://lore.kernel.org/r/20210628132334.851095-1-phind.uet@gmail.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9ab284bc35307ffde4f385dd8f3cf853fd9bb264
Author: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
Date:   Wed Jul 28 08:49:09 2021 +0200

    nfc: nfcsim: fix use after free during module unload
    
    commit 5e7b30d24a5b8cb691c173b45b50e3ca0191be19 upstream.
    
    There is a use after free memory corruption during module exit:
     - nfcsim_exit()
      - nfcsim_device_free(dev0)
        - nfc_digital_unregister_device()
          This iterates over command queue and frees all commands,
        - dev->up = false
        - nfcsim_link_shutdown()
          - nfcsim_link_recv_wake()
            This wakes the sleeping thread nfcsim_link_recv_skb().
    
     - nfcsim_link_recv_skb()
       Wake from wait_event_interruptible_timeout(),
       call directly the deb->cb callback even though (dev->up == false),
       - digital_send_cmd_complete()
         Dereference of "struct digital_cmd" cmd which was freed earlier by
         nfc_digital_unregister_device().
    
    This causes memory corruption shortly after (with unrelated stack
    trace):
    
      nfc nfc0: NFC: nfcsim_recv_wq: Device is down
      llcp: nfc_llcp_recv: err -19
      nfc nfc1: NFC: nfcsim_recv_wq: Device is down
      BUG: unable to handle page fault for address: ffffffffffffffed
      Call Trace:
       fsnotify+0x54b/0x5c0
       __fsnotify_parent+0x1fe/0x300
       ? vfs_write+0x27c/0x390
       vfs_write+0x27c/0x390
       ksys_write+0x63/0xe0
       do_syscall_64+0x3b/0x90
       entry_SYSCALL_64_after_hwframe+0x44/0xae
    
    KASAN report:
    
      BUG: KASAN: use-after-free in digital_send_cmd_complete+0x16/0x50
      Write of size 8 at addr ffff88800a05f720 by task kworker/0:2/71
      Workqueue: events nfcsim_recv_wq [nfcsim]
      Call Trace:
       dump_stack_lvl+0x45/0x59
       print_address_description.constprop.0+0x21/0x140
       ? digital_send_cmd_complete+0x16/0x50
       ? digital_send_cmd_complete+0x16/0x50
       kasan_report.cold+0x7f/0x11b
       ? digital_send_cmd_complete+0x16/0x50
       ? digital_dep_link_down+0x60/0x60
       digital_send_cmd_complete+0x16/0x50
       nfcsim_recv_wq+0x38f/0x3d5 [nfcsim]
       ? nfcsim_in_send_cmd+0x4a/0x4a [nfcsim]
       ? lock_is_held_type+0x98/0x110
       ? finish_wait+0x110/0x110
       ? rcu_read_lock_sched_held+0x9c/0xd0
       ? rcu_read_lock_bh_held+0xb0/0xb0
       ? lockdep_hardirqs_on_prepare+0x12e/0x1f0
    
    This flow of calling digital_send_cmd_complete() callback on driver exit
    is specific to nfcsim which implements reading and sending work queues.
    Since the NFC digital device was unregistered, the callback should not
    be called.
    
    Fixes: 204bddcb508f ("NFC: nfcsim: Make use of the Digital layer")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ea04a3b5727e571f628e59b907db9f0c8bdd0d5d
Author: Tejun Heo <tj@kernel.org>
Date:   Tue Jul 27 14:38:09 2021 -1000

    blk-iocost: fix operation ordering in iocg_wake_fn()
    
    commit 5ab189cf3abbc9994bae3be524c5b88589ed56e2 upstream.
    
    iocg_wake_fn() open-codes wait_queue_entry removal and wakeup because it
    wants the wq_entry to be always removed whether it ended up waking the
    task or not. finish_wait() tests whether wq_entry needs removal without
    grabbing the wait_queue lock and expects the waker to use
    list_del_init_careful() after all waking operations are complete, which
    iocg_wake_fn() didn't do. The operation order was wrong and the regular
    list_del_init() was used.
    
    The result is that if a waiter wakes up racing the waker, it can free pop
    the wq_entry off stack before the waker is still looking at it, which can
    lead to a backtrace like the following.
    
      [7312084.588951] general protection fault, probably for non-canonical address 0x586bf4005b2b88: 0000 [#1] SMP
      ...
      [7312084.647079] RIP: 0010:queued_spin_lock_slowpath+0x171/0x1b0
      ...
      [7312084.858314] Call Trace:
      [7312084.863548]  _raw_spin_lock_irqsave+0x22/0x30
      [7312084.872605]  try_to_wake_up+0x4c/0x4f0
      [7312084.880444]  iocg_wake_fn+0x71/0x80
      [7312084.887763]  __wake_up_common+0x71/0x140
      [7312084.895951]  iocg_kick_waitq+0xe8/0x2b0
      [7312084.903964]  ioc_rqos_throttle+0x275/0x650
      [7312084.922423]  __rq_qos_throttle+0x20/0x30
      [7312084.930608]  blk_mq_make_request+0x120/0x650
      [7312084.939490]  generic_make_request+0xca/0x310
      [7312084.957600]  submit_bio+0x173/0x200
      [7312084.981806]  swap_readpage+0x15c/0x240
      [7312084.989646]  read_swap_cache_async+0x58/0x60
      [7312084.998527]  swap_cluster_readahead+0x201/0x320
      [7312085.023432]  swapin_readahead+0x2df/0x450
      [7312085.040672]  do_swap_page+0x52f/0x820
      [7312085.058259]  handle_mm_fault+0xa16/0x1420
      [7312085.066620]  do_page_fault+0x2c6/0x5c0
      [7312085.074459]  page_fault+0x2f/0x40
    
    Fix it by switching to list_del_init_careful() and putting it at the end.
    
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Reported-by: Rik van Riel <riel@surriel.com>
    Fixes: 7caa47151ab2 ("blkcg: implement blk-iocost")
    Cc: stable@vger.kernel.org # v5.4+
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fc2756cce06f9833ebabd309b5b5080ed5c56897
Author: Jiri Kosina <jkosina@suse.cz>
Date:   Thu Jun 24 13:20:21 2021 +0200

    drm/amdgpu: Fix resource leak on probe error path
    
    commit d47255d3f87338164762ac56df1f28d751e27246 upstream.
    
    This reverts commit 4192f7b5768912ceda82be2f83c87ea7181f9980.
    
    It is not true (as stated in the reverted commit changelog) that we never
    unmap the BAR on failure; it actually does happen properly on
    amdgpu_driver_load_kms() -> amdgpu_driver_unload_kms() ->
    amdgpu_device_fini() error path.
    
    What's worse, this commit actually completely breaks resource freeing on
    probe failure (like e.g. failure to load microcode), as
    amdgpu_driver_unload_kms() notices adev->rmmio being NULL and bails too
    early, leaving all the resources that'd normally be freed in
    amdgpu_acpi_fini() and amdgpu_device_fini() still hanging around, leading
    to all sorts of oopses when someone tries to, for example, access the
    sysfs and procfs resources which are still around while the driver is
    gone.
    
    Fixes: 4192f7b57689 ("drm/amdgpu: unmap register bar on device init failure")
    Reported-by: Vojtech Pavlik <vojtech@ucw.cz>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ccc7a1bb322e4169b738aa3fc8b5dfcfefdacb37
Author: Jiri Kosina <jkosina@suse.cz>
Date:   Thu Jun 24 13:11:36 2021 +0200

    drm/amdgpu: Avoid printing of stack contents on firmware load error
    
    commit 6aade587d329ebe88319dfdb8e8c7b6aede80417 upstream.
    
    In case when psp_init_asd_microcode() fails to load ASD microcode file,
    psp_v12_0_init_microcode() tries to print the firmware filename that
    failed to load before bailing out.
    
    This is wrong because:
    
    - the firmware filename it would want it print is an incorrect one as
      psp_init_asd_microcode() and psp_v12_0_init_microcode() are loading
      different filenames
    - it tries to print fw_name, but that's not yet been initialized by that
      time, so it prints random stack contents, e.g.
    
        amdgpu 0000:04:00.0: Direct firmware load for amdgpu/renoir_asd.bin failed with error -2
        amdgpu 0000:04:00.0: amdgpu: fail to initialize asd microcode
        amdgpu 0000:04:00.0: amdgpu: psp v12.0: Failed to load firmware "\xfeTO\x8e\xff\xff"
    
    Fix that by bailing out immediately, instead of priting the bogus error
    message.
    
    Reported-by: Vojtech Pavlik <vojtech@ucw.cz>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 63570e578094b4f0b6b8c6ac4a68195455733e31
Author: Dale Zhao <dale.zhao@amd.com>
Date:   Fri Jul 16 09:38:17 2021 +0800

    drm/amd/display: ensure dentist display clock update finished in DCN20
    
    commit b53e041d8e4308f7324999398aec092dbcb130f5 upstream.
    
    [Why]
    We don't check DENTIST_DISPCLK_CHG_DONE to ensure dentist
    display clockis updated to target value. In some scenarios with large
    display clock margin, it will deliver unfinished display clock and cause
    issues like display black screen.
    
    [How]
    Checking DENTIST_DISPCLK_CHG_DONE to ensure display clock
    has been update to target value before driver do other clock related
    actions.
    
    Reviewed-by: Cyr Aric <aric.cyr@amd.com>
    Acked-by: Solomon Chiu <solomon.chiu@amd.com>
    Signed-off-by: Dale Zhao <dale.zhao@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2eab387507fd449e08014cca0de79a37b2d27744
Author: Paul Jakma <paul@jakma.org>
Date:   Fri Jul 23 16:13:04 2021 +0100

    NIU: fix incorrect error return, missed in previous revert
    
    commit 15bbf8bb4d4ab87108ecf5f4155ec8ffa3c141d6 upstream.
    
    Commit 7930742d6, reverting 26fd962, missed out on reverting an incorrect
    change to a return value.  The niu_pci_vpd_scan_props(..) == 1 case appears
    to be a normal path - treating it as an error and return -EINVAL was
    breaking VPD_SCAN and causing the driver to fail to load.
    
    Fix, so my Neptune card works again.
    
    Cc: Kangjie Lu <kjlu@umn.edu>
    Cc: Shannon Nelson <shannon.lee.nelson@gmail.com>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: stable <stable@vger.kernel.org>
    Fixes: 7930742d ('Revert "niu: fix missing checks of niu_pci_eeprom_read"')
    Signed-off-by: Paul Jakma <paul@jakma.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit cb71730a6312ae363f31350976cb378e53be7433
Author: Jason Gerecke <killertofu@gmail.com>
Date:   Mon Jul 19 13:55:28 2021 -0700

    HID: wacom: Re-enable touch by default for Cintiq 24HDT / 27QHDT
    
    commit 6ca2350e11f09d5d3e53777d1eff8ff6d300ed93 upstream.
    
    Commit 670e90924bfe ("HID: wacom: support named keys on older devices")
    added support for sending named events from the soft buttons on the
    24HDT and 27QHDT. In the process, however, it inadvertantly disabled the
    touchscreen of the 24HDT and 27QHDT by default. The
    `wacom_set_shared_values` function would normally enable touch by default
    but because it checks the state of the non-shared `has_mute_touch_switch`
    flag and `wacom_setup_touch_input_capabilities` sets the state of the
    /shared/ version, touch ends up being disabled by default.
    
    This patch sets the non-shared flag, letting `wacom_set_shared_values`
    take care of copying the value over to the shared version and setting
    the default touch state to "on".
    
    Fixes: 670e90924bfe ("HID: wacom: support named keys on older devices")
    CC: stable@vger.kernel.org # 5.4+
    Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
    Reviewed-by: Ping Cheng <ping.cheng@wacom.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7bca5da0053941131ba30479b22ac7091a2da91b
Author: Mike Rapoport <rppt@kernel.org>
Date:   Tue Jul 27 23:38:24 2021 +0300

    alpha: register early reserved memory in memblock
    
    commit 640b7ea5f888b521dcf28e2564ce75d08a783fd7 upstream.
    
    The memory reserved by console/PALcode or non-volatile memory is not added
    to memblock.memory.
    
    Since commit fa3354e4ea39 (mm: free_area_init: use maximal zone PFNs rather
    than zone sizes) the initialization of the memory map relies on the
    accuracy of memblock.memory to properly calculate zone sizes. The holes in
    memblock.memory caused by absent regions reserved by the firmware cause
    incorrect initialization of struct pages which leads to BUG() during the
    initial page freeing:
    
    BUG: Bad page state in process swapper  pfn:2ffc53
    page:fffffc000ecf14c0 refcount:0 mapcount:1 mapping:0000000000000000 index:0x0
    flags: 0x0()
    raw: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
    raw: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
    page dumped because: nonzero mapcount
    Modules linked in:
    CPU: 0 PID: 0 Comm: swapper Not tainted 5.7.0-03841-gfa3354e4ea39-dirty #26
           fffffc0001b5bd68 fffffc0001b5be80 fffffc00011cd148 fffffc000ecf14c0
           fffffc00019803df fffffc0001b5be80 fffffc00011ce340 fffffc000ecf14c0
           0000000000000000 fffffc0001b5be80 fffffc0001b482c0 fffffc00027d6618
           fffffc00027da7d0 00000000002ff97a 0000000000000000 fffffc0001b5be80
           fffffc00011d1abc fffffc000ecf14c0 fffffc0002d00000 fffffc0001b5be80
           fffffc0001b2350c 0000000000300000 fffffc0001b48298 fffffc0001b482c0
    Trace:
    [<fffffc00011cd148>] bad_page+0x168/0x1b0
    [<fffffc00011ce340>] free_pcp_prepare+0x1e0/0x290
    [<fffffc00011d1abc>] free_unref_page+0x2c/0xa0
    [<fffffc00014ee5f0>] cmp_ex_sort+0x0/0x30
    [<fffffc00014ee5f0>] cmp_ex_sort+0x0/0x30
    [<fffffc000101001c>] _stext+0x1c/0x20
    
    Fix this by registering the reserved ranges in memblock.memory.
    
    Link: https://lore.kernel.org/lkml/20210726192311.uffqnanxw3ac5wwi@ivybridge
    Fixes: fa3354e4ea39 ("mm: free_area_init: use maximal zone PFNs rather than zone sizes")
    Reported-by: Matt Turner <mattst88@gmail.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Mike Rapoport <rppt@linux.ibm.com>
    Signed-off-by: Matt Turner <mattst88@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 30e19d072ea08766adcb280f4562b05fba88d37d
Author: Pavel Skripkin <paskripkin@gmail.com>
Date:   Tue Jul 27 20:00:46 2021 +0300

    can: esd_usb2: fix memory leak
    
    commit 928150fad41ba16df7fcc9f7f945747d0f56cbb6 upstream.
    
    In esd_usb2_setup_rx_urbs() MAX_RX_URBS coherent buffers are allocated
    and there is nothing, that frees them:
    
    1) In callback function the urb is resubmitted and that's all
    2) In disconnect function urbs are simply killed, but URB_FREE_BUFFER
       is not set (see esd_usb2_setup_rx_urbs) and this flag cannot be used
       with coherent buffers.
    
    So, all allocated buffers should be freed with usb_free_coherent()
    explicitly.
    
    Side note: This code looks like a copy-paste of other can drivers. The
    same patch was applied to mcba_usb driver and it works nice with real
    hardware. There is no change in functionality, only clean-up code for
    coherent buffers.
    
    Fixes: 96d8e90382dc ("can: Add driver for esd CAN-USB/2 device")
    Link: https://lore.kernel.org/r/b31b096926dcb35998ad0271aac4b51770ca7cc8.1627404470.git.paskripkin@gmail.com
    Cc: linux-stable <stable@vger.kernel.org>
    Signed-off-by: Pavel Skripkin <paskripkin@gmail.com>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 88b40258162b277016bbec2a9679418c223dca25
Author: Pavel Skripkin <paskripkin@gmail.com>
Date:   Tue Jul 27 20:00:33 2021 +0300

    can: ems_usb: fix memory leak
    
    commit 9969e3c5f40c166e3396acc36c34f9de502929f6 upstream.
    
    In ems_usb_start() MAX_RX_URBS coherent buffers are allocated and
    there is nothing, that frees them:
    
    1) In callback function the urb is resubmitted and that's all
    2) In disconnect function urbs are simply killed, but URB_FREE_BUFFER
       is not set (see ems_usb_start) and this flag cannot be used with
       coherent buffers.
    
    So, all allocated buffers should be freed with usb_free_coherent()
    explicitly.
    
    Side note: This code looks like a copy-paste of other can drivers. The
    same patch was applied to mcba_usb driver and it works nice with real
    hardware. There is no change in functionality, only clean-up code for
    coherent buffers.
    
    Fixes: 702171adeed3 ("ems_usb: Added support for EMS CPC-USB/ARM7 CAN/USB interface")
    Link: https://lore.kernel.org/r/59aa9fbc9a8cbf9af2bbd2f61a659c480b415800.1627404470.git.paskripkin@gmail.com
    Cc: linux-stable <stable@vger.kernel.org>
    Signed-off-by: Pavel Skripkin <paskripkin@gmail.com>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f58ac91ff87daf7362b1acd6445d14f7cc90c6ad
Author: Pavel Skripkin <paskripkin@gmail.com>
Date:   Tue Jul 27 19:59:57 2021 +0300

    can: usb_8dev: fix memory leak
    
    commit 0e865f0c31928d6a313269ef624907eec55287c4 upstream.
    
    In usb_8dev_start() MAX_RX_URBS coherent buffers are allocated and
    there is nothing, that frees them:
    
    1) In callback function the urb is resubmitted and that's all
    2) In disconnect function urbs are simply killed, but URB_FREE_BUFFER
       is not set (see usb_8dev_start) and this flag cannot be used with
       coherent buffers.
    
    So, all allocated buffers should be freed with usb_free_coherent()
    explicitly.
    
    Side note: This code looks like a copy-paste of other can drivers. The
    same patch was applied to mcba_usb driver and it works nice with real
    hardware. There is no change in functionality, only clean-up code for
    coherent buffers.
    
    Fixes: 0024d8ad1639 ("can: usb_8dev: Add support for USB2CAN interface from 8 devices")
    Link: https://lore.kernel.org/r/d39b458cd425a1cf7f512f340224e6e9563b07bd.1627404470.git.paskripkin@gmail.com
    Cc: linux-stable <stable@vger.kernel.org>
    Signed-off-by: Pavel Skripkin <paskripkin@gmail.com>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a6ebfbdaca3da6ba66c68fbe6636217bcb98b06a
Author: Pavel Skripkin <paskripkin@gmail.com>
Date:   Sun Jul 25 13:36:30 2021 +0300

    can: mcba_usb_start(): add missing urb->transfer_dma initialization
    
    commit fc43fb69a7af92839551f99c1a96a37b77b3ae7a upstream.
    
    Yasushi reported, that his Microchip CAN Analyzer stopped working
    since commit 91c02557174b ("can: mcba_usb: fix memory leak in
    mcba_usb"). The problem was in missing urb->transfer_dma
    initialization.
    
    In my previous patch to this driver I refactored mcba_usb_start() code
    to avoid leaking usb coherent buffers. To archive it, I passed local
    stack variable to usb_alloc_coherent() and then saved it to private
    array to correctly free all coherent buffers on ->close() call. But I
    forgot to initialize urb->transfer_dma with variable passed to
    usb_alloc_coherent().
    
    All of this was causing device to not work, since dma addr 0 is not
    valid and following log can be found on bug report page, which points
    exactly to problem described above.
    
    | DMAR: [DMA Write] Request device [00:14.0] PASID ffffffff fault addr 0 [fault reason 05] PTE Write access is not set
    
    Fixes: 91c02557174b ("can: mcba_usb: fix memory leak in mcba_usb")
    Link: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=990850
    Link: https://lore.kernel.org/r/20210725103630.23864-1-paskripkin@gmail.com
    Cc: linux-stable <stable@vger.kernel.org>
    Reported-by: Yasushi SHOJI <yasushi.shoji@gmail.com>
    Signed-off-by: Pavel Skripkin <paskripkin@gmail.com>
    Tested-by: Yasushi SHOJI <yashi@spacecubics.com>
    [mkl: fixed typos in commit message - thanks Yasushi SHOJI]
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2fc2c2816cb76fd39bf446f12a72e3bd20b52018
Author: Stephane Grosjean <s.grosjean@peak-system.com>
Date:   Fri Jun 25 15:09:29 2021 +0200

    can: peak_usb: pcan_usb_handle_bus_evt(): fix reading rxerr/txerr values
    
    commit 590eb2b7d8cfafb27e8108d52d4bf4850626d31d upstream.
    
    This patch fixes an incorrect way of reading error counters in messages
    received for this purpose from the PCAN-USB interface. These messages
    inform about the increase or decrease of the error counters, whose values
    are placed in bytes 1 and 2 of the message data (not 0 and 1).
    
    Fixes: ea8b33bde76c ("can: pcan_usb: add support of rxerr/txerr counters")
    Link: https://lore.kernel.org/r/20210625130931.27438-4-s.grosjean@peak-system.com
    Cc: linux-stable <stable@vger.kernel.org>
    Signed-off-by: Stephane Grosjean <s.grosjean@peak-system.com>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit afe2ffd920615fb50d2f6d94588110b0cdcf5470
Author: Ziyang Xuan <william.xuanziyang@huawei.com>
Date:   Thu Jul 22 15:08:19 2021 +0800

    can: raw: raw_setsockopt(): fix raw_rcv panic for sock UAF
    
    commit 54f93336d000229f72c26d8a3f69dd256b744528 upstream.
    
    We get a bug during ltp can_filter test as following.
    
    ===========================================
    [60919.264984] BUG: unable to handle kernel NULL pointer dereference at 0000000000000010
    [60919.265223] PGD 8000003dda726067 P4D 8000003dda726067 PUD 3dda727067 PMD 0
    [60919.265443] Oops: 0000 [#1] SMP PTI
    [60919.265550] CPU: 30 PID: 3638365 Comm: can_filter Kdump: loaded Tainted: G        W         4.19.90+ #1
    [60919.266068] RIP: 0010:selinux_socket_sock_rcv_skb+0x3e/0x200
    [60919.293289] RSP: 0018:ffff8d53bfc03cf8 EFLAGS: 00010246
    [60919.307140] RAX: 0000000000000000 RBX: 000000000000001d RCX: 0000000000000007
    [60919.320756] RDX: 0000000000000001 RSI: ffff8d5104a8ed00 RDI: ffff8d53bfc03d30
    [60919.334319] RBP: ffff8d9338056800 R08: ffff8d53bfc29d80 R09: 0000000000000001
    [60919.347969] R10: ffff8d53bfc03ec0 R11: ffffb8526ef47c98 R12: ffff8d53bfc03d30
    [60919.350320] perf: interrupt took too long (3063 > 2500), lowering kernel.perf_event_max_sample_rate to 65000
    [60919.361148] R13: 0000000000000001 R14: ffff8d53bcf90000 R15: 0000000000000000
    [60919.361151] FS:  00007fb78b6b3600(0000) GS:ffff8d53bfc00000(0000) knlGS:0000000000000000
    [60919.400812] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [60919.413730] CR2: 0000000000000010 CR3: 0000003e3f784006 CR4: 00000000007606e0
    [60919.426479] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [60919.439339] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    [60919.451608] PKRU: 55555554
    [60919.463622] Call Trace:
    [60919.475617]  <IRQ>
    [60919.487122]  ? update_load_avg+0x89/0x5d0
    [60919.498478]  ? update_load_avg+0x89/0x5d0
    [60919.509822]  ? account_entity_enqueue+0xc5/0xf0
    [60919.520709]  security_sock_rcv_skb+0x2a/0x40
    [60919.531413]  sk_filter_trim_cap+0x47/0x1b0
    [60919.542178]  ? kmem_cache_alloc+0x38/0x1b0
    [60919.552444]  sock_queue_rcv_skb+0x17/0x30
    [60919.562477]  raw_rcv+0x110/0x190 [can_raw]
    [60919.572539]  can_rcv_filter+0xbc/0x1b0 [can]
    [60919.582173]  can_receive+0x6b/0xb0 [can]
    [60919.591595]  can_rcv+0x31/0x70 [can]
    [60919.600783]  __netif_receive_skb_one_core+0x5a/0x80
    [60919.609864]  process_backlog+0x9b/0x150
    [60919.618691]  net_rx_action+0x156/0x400
    [60919.627310]  ? sched_clock_cpu+0xc/0xa0
    [60919.635714]  __do_softirq+0xe8/0x2e9
    [60919.644161]  do_softirq_own_stack+0x2a/0x40
    [60919.652154]  </IRQ>
    [60919.659899]  do_softirq.part.17+0x4f/0x60
    [60919.667475]  __local_bh_enable_ip+0x60/0x70
    [60919.675089]  __dev_queue_xmit+0x539/0x920
    [60919.682267]  ? finish_wait+0x80/0x80
    [60919.689218]  ? finish_wait+0x80/0x80
    [60919.695886]  ? sock_alloc_send_pskb+0x211/0x230
    [60919.702395]  ? can_send+0xe5/0x1f0 [can]
    [60919.708882]  can_send+0xe5/0x1f0 [can]
    [60919.715037]  raw_sendmsg+0x16d/0x268 [can_raw]
    
    It's because raw_setsockopt() concurrently with
    unregister_netdevice_many(). Concurrent scenario as following.
    
            cpu0                                            cpu1
    raw_bind
    raw_setsockopt                                  unregister_netdevice_many
                                                    unlist_netdevice
    dev_get_by_index                                raw_notifier
    raw_enable_filters                              ......
    can_rx_register
    can_rcv_list_find(..., net->can.rx_alldev_list)
    
    ......
    
    sock_close
    raw_release(sock_a)
    
    ......
    
    can_receive
    can_rcv_filter(net->can.rx_alldev_list, ...)
    raw_rcv(skb, sock_a)
    BUG
    
    After unlist_netdevice(), dev_get_by_index() return NULL in
    raw_setsockopt(). Function raw_enable_filters() will add sock
    and can_filter to net->can.rx_alldev_list. Then the sock is closed.
    Followed by, we sock_sendmsg() to a new vcan device use the same
    can_filter. Protocol stack match the old receiver whose sock has
    been released on net->can.rx_alldev_list in can_rcv_filter().
    Function raw_rcv() uses the freed sock. UAF BUG is triggered.
    
    We can find that the key issue is that net_device has not been
    protected in raw_setsockopt(). Use rtnl_lock to protect net_device
    in raw_setsockopt().
    
    Fixes: c18ce101f2e4 ("[CAN]: Add raw protocol")
    Link: https://lore.kernel.org/r/20210722070819.1048263-1-william.xuanziyang@huawei.com
    Cc: linux-stable <stable@vger.kernel.org>
    Signed-off-by: Ziyang Xuan <william.xuanziyang@huawei.com>
    Acked-by: Oliver Hartkopp <socketcan@hartkopp.net>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a9c02d0e1513df9b6124599ed2c05695d1d7ff0c
Author: Zhang Changzhong <zhangchangzhong@huawei.com>
Date:   Tue Jul 6 19:00:08 2021 +0800

    can: j1939: j1939_xtp_rx_dat_one(): fix rxtimer value between consecutive TP.DT to 750ms
    
    commit c6eea1c8bda56737752465a298dc6ce07d6b8ce3 upstream.
    
    For receive side, the max time interval between two consecutive TP.DT
    should be 750ms.
    
    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Link: https://lore.kernel.org/r/1625569210-47506-1-git-send-email-zhangchangzhong@huawei.com
    Cc: linux-stable <stable@vger.kernel.org>
    Signed-off-by: Zhang Changzhong <zhangchangzhong@huawei.com>
    Acked-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit da4f4916dab2b55cd38eec2f9a33800a7abc6bb9
Author: Junxiao Bi <junxiao.bi@oracle.com>
Date:   Thu Jul 29 14:53:41 2021 -0700

    ocfs2: issue zeroout to EOF blocks
    
    commit 9449ad33be8480f538b11a593e2dda2fb33ca06d upstream.
    
    For punch holes in EOF blocks, fallocate used buffer write to zero the
    EOF blocks in last cluster.  But since ->writepage will ignore EOF
    pages, those zeros will not be flushed.
    
    This "looks" ok as commit 6bba4471f0cc ("ocfs2: fix data corruption by
    fallocate") will zero the EOF blocks when extend the file size, but it
    isn't.  The problem happened on those EOF pages, before writeback, those
    pages had DIRTY flag set and all buffer_head in them also had DIRTY flag
    set, when writeback run by write_cache_pages(), DIRTY flag on the page
    was cleared, but DIRTY flag on the buffer_head not.
    
    When next write happened to those EOF pages, since buffer_head already
    had DIRTY flag set, it would not mark page DIRTY again.  That made
    writeback ignore them forever.  That will cause data corruption.  Even
    directio write can't work because it will fail when trying to drop pages
    caches before direct io, as it found the buffer_head for those pages
    still had DIRTY flag set, then it will fall back to buffer io mode.
    
    To make a summary of the issue, as writeback ingores EOF pages, once any
    EOF page is generated, any write to it will only go to the page cache,
    it will never be flushed to disk even file size extends and that page is
    not EOF page any more.  The fix is to avoid zero EOF blocks with buffer
    write.
    
    The following code snippet from qemu-img could trigger the corruption.
    
      656   open("6b3711ae-3306-4bdd-823c-cf1c0060a095.conv.2", O_RDWR|O_DIRECT|O_CLOEXEC) = 11
      ...
      660   fallocate(11, FALLOC_FL_KEEP_SIZE|FALLOC_FL_PUNCH_HOLE, 2275868672, 327680 <unfinished ...>
      660   fallocate(11, 0, 2275868672, 327680) = 0
      658   pwrite64(11, "
    
    Link: https://lkml.kernel.org/r/20210722054923.24389-2-junxiao.bi@oracle.com
    Signed-off-by: Junxiao Bi <junxiao.bi@oracle.com>
    Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Gang He <ghe@suse.com>
    Cc: Jun Piao <piaojun@huawei.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 94301459306115e007966bd607638232423d15d9
Author: Junxiao Bi <junxiao.bi@oracle.com>
Date:   Thu Jul 29 14:53:38 2021 -0700

    ocfs2: fix zero out valid data
    
    commit f267aeb6dea5e468793e5b8eb6a9c72c0020d418 upstream.
    
    If append-dio feature is enabled, direct-io write and fallocate could
    run in parallel to extend file size, fallocate used "orig_isize" to
    record i_size before taking "ip_alloc_sem", when
    ocfs2_zeroout_partial_cluster() zeroout EOF blocks, i_size maybe already
    extended by ocfs2_dio_end_io_write(), that will cause valid data zeroed
    out.
    
    Link: https://lkml.kernel.org/r/20210722054923.24389-1-junxiao.bi@oracle.com
    Fixes: 6bba4471f0cc ("ocfs2: fix data corruption by fallocate")
    Signed-off-by: Junxiao Bi <junxiao.bi@oracle.com>
    Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Gang He <ghe@suse.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Jun Piao <piaojun@huawei.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 52acb6c147b30aef1e178249620c81b41da4ae8b
Author: Paolo Bonzini <pbonzini@redhat.com>
Date:   Tue Jul 27 08:43:10 2021 -0400

    KVM: add missing compat KVM_CLEAR_DIRTY_LOG
    
    commit 8750f9bbda115f3f79bfe43be85551ee5e12b6ff upstream.
    
    The arguments to the KVM_CLEAR_DIRTY_LOG ioctl include a pointer,
    therefore it needs a compat ioctl implementation.  Otherwise,
    32-bit userspace fails to invoke it on 64-bit kernels; for x86
    it might work fine by chance if the padding is zero, but not
    on big-endian architectures.
    
    Reported-by: Thomas Sattler
    Cc: stable@vger.kernel.org
    Fixes: 2a31b9db1535 ("kvm: introduce manual dirty log reprotect")
    Reviewed-by: Peter Xu <peterx@redhat.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7d67d4ab28e3c7daa6151d64e1be8da478b77f3d
Author: Juergen Gross <jgross@suse.com>
Date:   Thu Jul 1 17:41:00 2021 +0200

    x86/kvm: fix vcpu-id indexed array sizes
    
    commit 76b4f357d0e7d8f6f0013c733e6cba1773c266d3 upstream.
    
    KVM_MAX_VCPU_ID is the maximum vcpu-id of a guest, and not the number
    of vcpu-ids. Fix array indexed by vcpu-id to have KVM_MAX_VCPU_ID+1
    elements.
    
    Note that this is currently no real problem, as KVM_MAX_VCPU_ID is
    an odd number, resulting in always enough padding being available at
    the end of those arrays.
    
    Nevertheless this should be fixed in order to avoid rare problems in
    case someone is using an even number for KVM_MAX_VCPU_ID.
    
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Message-Id: <20210701154105.23215-2-jgross@suse.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2388c7674fbdb9d8944caee768e599b02a21b33e
Author: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Date:   Tue Jul 27 09:18:24 2021 -0700

    ACPI: DPTF: Fix reading of attributes
    
    commit 41a8457f3f6f829be1f8f8fa7577a46b9b7223ef upstream.
    
    The current assumption that methods to read PCH FIVR attributes will
    return integer, is not correct. There is no good way to return integer
    as negative numbers are also valid.
    
    These read methods return a package of integers. The first integer returns
    status, which is 0 on success and any other value for failure. When the
    returned status is zero, then the second integer returns the actual value.
    
    This change fixes this issue by replacing acpi_evaluate_integer() with
    acpi_evaluate_object() and use acpi_extract_package() to extract results.
    
    Fixes: 2ce6324eadb01 ("ACPI: DPTF: Add PCH FIVR participant driver")
    Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Cc: 5.10+ <stable@vger.kernel.org> # 5.10+
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0d6afa25975e73fef3537678e98386020661eed0
Author: Hui Wang <hui.wang@canonical.com>
Date:   Wed Jul 28 23:19:58 2021 +0800

    Revert "ACPI: resources: Add checks for ACPI IRQ override"
    
    commit e0eef3690dc66b3ecc6e0f1267f332403eb22bea upstream.
    
    The commit 0ec4e55e9f57 ("ACPI: resources: Add checks for ACPI IRQ
    override") introduces regression on some platforms, at least it makes
    the UART can't get correct irq setting on two different platforms,
    and it makes the kernel can't bootup on these two platforms.
    
    This reverts commit 0ec4e55e9f571f08970ed115ec0addc691eda613.
    
    Regression-discuss: https://bugzilla.kernel.org/show_bug.cgi?id=213031
    Reported-by: PGNd <pgnet.dev@gmail.com>
    Cc: 5.4+ <stable@vger.kernel.org> # 5.4+
    Signed-off-by: Hui Wang <hui.wang@canonical.com>
    Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0a421a2fc516f39caf3d253c04b76a12fe632011
Author: Goldwyn Rodrigues <rgoldwyn@suse.de>
Date:   Fri Jul 9 11:29:22 2021 -0500

    btrfs: mark compressed range uptodate only if all bio succeed
    
    commit 240246f6b913b0c23733cfd2def1d283f8cc9bbe upstream.
    
    In compression write endio sequence, the range which the compressed_bio
    writes is marked as uptodate if the last bio of the compressed (sub)bios
    is completed successfully. There could be previous bio which may
    have failed which is recorded in cb->errors.
    
    Set the writeback range as uptodate only if cb->errors is zero, as opposed
    to checking only the last bio's status.
    
    Backporting notes: in all versions up to 4.4 the last argument is always
    replaced by "!cb->errors".
    
    CC: stable@vger.kernel.org # 4.4+
    Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4e1a57d75264dd4f10f3497c35dda521947368df
Author: Desmond Cheong Zhi Xi <desmondcheongzx@gmail.com>
Date:   Tue Jul 27 15:13:03 2021 +0800

    btrfs: fix rw device counting in __btrfs_free_extra_devids
    
    commit b2a616676839e2a6b02c8e40be7f886f882ed194 upstream.
    
    When removing a writeable device in __btrfs_free_extra_devids, the rw
    device count should be decremented.
    
    This error was caught by Syzbot which reported a warning in
    close_fs_devices:
    
      WARNING: CPU: 1 PID: 9355 at fs/btrfs/volumes.c:1168 close_fs_devices+0x763/0x880 fs/btrfs/volumes.c:1168
      Modules linked in:
      CPU: 0 PID: 9355 Comm: syz-executor552 Not tainted 5.13.0-rc1-syzkaller #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      RIP: 0010:close_fs_devices+0x763/0x880 fs/btrfs/volumes.c:1168
      RSP: 0018:ffffc9000333f2f0 EFLAGS: 00010293
      RAX: ffffffff8365f5c3 RBX: 0000000000000001 RCX: ffff888029afd4c0
      RDX: 0000000000000000 RSI: 0000000000000001 RDI: 0000000000000000
      RBP: ffff88802846f508 R08: ffffffff8365f525 R09: ffffed100337d128
      R10: ffffed100337d128 R11: 0000000000000000 R12: dffffc0000000000
      R13: ffff888019be8868 R14: 1ffff1100337d10d R15: 1ffff1100337d10a
      FS:  00007f6f53828700(0000) GS:ffff8880b9a00000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 000000000047c410 CR3: 00000000302a6000 CR4: 00000000001506f0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      Call Trace:
       btrfs_close_devices+0xc9/0x450 fs/btrfs/volumes.c:1180
       open_ctree+0x8e1/0x3968 fs/btrfs/disk-io.c:3693
       btrfs_fill_super fs/btrfs/super.c:1382 [inline]
       btrfs_mount_root+0xac5/0xc60 fs/btrfs/super.c:1749
       legacy_get_tree+0xea/0x180 fs/fs_context.c:592
       vfs_get_tree+0x86/0x270 fs/super.c:1498
       fc_mount fs/namespace.c:993 [inline]
       vfs_kern_mount+0xc9/0x160 fs/namespace.c:1023
       btrfs_mount+0x3d3/0xb50 fs/btrfs/super.c:1809
       legacy_get_tree+0xea/0x180 fs/fs_context.c:592
       vfs_get_tree+0x86/0x270 fs/super.c:1498
       do_new_mount fs/namespace.c:2905 [inline]
       path_mount+0x196f/0x2be0 fs/namespace.c:3235
       do_mount fs/namespace.c:3248 [inline]
       __do_sys_mount fs/namespace.c:3456 [inline]
       __se_sys_mount+0x2f9/0x3b0 fs/namespace.c:3433
       do_syscall_64+0x3f/0xb0 arch/x86/entry/common.c:47
       entry_SYSCALL_64_after_hwframe+0x44/0xae
    
    Because fs_devices->rw_devices was not 0 after
    closing all devices. Here is the call trace that was observed:
    
      btrfs_mount_root():
        btrfs_scan_one_device():
          device_list_add();   <---------------- device added
        btrfs_open_devices():
          open_fs_devices():
            btrfs_open_one_device();   <-------- writable device opened,
                                                 rw device count ++
        btrfs_fill_super():
          open_ctree():
            btrfs_free_extra_devids():
              __btrfs_free_extra_devids();  <--- writable device removed,
                                          rw device count not decremented
              fail_tree_roots:
                btrfs_close_devices():
                  close_fs_devices();   <------- rw device count off by 1
    
    As a note, prior to commit cf89af146b7e ("btrfs: dev-replace: fail
    mount if we don't have replace item with target device"), rw_devices
    was decremented on removing a writable device in
    __btrfs_free_extra_devids only if the BTRFS_DEV_STATE_REPLACE_TGT bit
    was not set for the device. However, this check does not need to be
    reinstated as it is now redundant and incorrect.
    
    In __btrfs_free_extra_devids, we skip removing the device if it is the
    target for replacement. This is done by checking whether device->devid
    == BTRFS_DEV_REPLACE_DEVID. Since BTRFS_DEV_STATE_REPLACE_TGT is set
    only on the device with devid BTRFS_DEV_REPLACE_DEVID, no devices
    should have the BTRFS_DEV_STATE_REPLACE_TGT bit set after the check,
    and so it's redundant to test for that bit.
    
    Additionally, following commit 82372bc816d7 ("Btrfs: make
    the logic of source device removing more clear"), rw_devices is
    incremented whenever a writeable device is added to the alloc
    list (including the target device in btrfs_dev_replace_finishing), so
    all removals of writable devices from the alloc list should also be
    accompanied by a decrement to rw_devices.
    
    Reported-by: syzbot+a70e2ad0879f160b9217@syzkaller.appspotmail.com
    Fixes: cf89af146b7e ("btrfs: dev-replace: fail mount if we don't have replace item with target device")
    CC: stable@vger.kernel.org # 5.10+
    Tested-by: syzbot+a70e2ad0879f160b9217@syzkaller.appspotmail.com
    Reviewed-by: Anand Jain <anand.jain@oracle.com>
    Signed-off-by: Desmond Cheong Zhi Xi <desmondcheongzx@gmail.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 27aa7171fe2b00c3de01e8e3a3298a3639f37fa3
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Fri Jul 30 15:42:34 2021 -0700

    pipe: make pipe writes always wake up readers
    
    commit 3a34b13a88caeb2800ab44a4918f230041b37dd9 upstream.
    
    Since commit 1b6b26ae7053 ("pipe: fix and clarify pipe write wakeup
    logic") we have sanitized the pipe write logic, and would only try to
    wake up readers if they needed it.
    
    In particular, if the pipe already had data in it before the write,
    there was no point in trying to wake up a reader, since any existing
    readers must have been aware of the pre-existing data already.  Doing
    extraneous wakeups will only cause potential thundering herd problems.
    
    However, it turns out that some Android libraries have misused the EPOLL
    interface, and expected "edge triggered" be to "any new write will
    trigger it".  Even if there was no edge in sight.
    
    Quoting Sandeep Patil:
     "The commit 1b6b26ae7053 ('pipe: fix and clarify pipe write wakeup
      logic') changed pipe write logic to wakeup readers only if the pipe
      was empty at the time of write. However, there are libraries that
      relied upon the older behavior for notification scheme similar to
      what's described in [1]
    
      One such library 'realm-core'[2] is used by numerous Android
      applications. The library uses a similar notification mechanism as GNU
      Make but it never drains the pipe until it is full. When Android moved
      to v5.10 kernel, all applications using this library stopped working.
    
      The library has since been fixed[3] but it will be a while before all
      applications incorporate the updated library"
    
    Our regression rule for the kernel is that if applications break from
    new behavior, it's a regression, even if it was because the application
    did something patently wrong.  Also note the original report [4] by
    Michal Kerrisk about a test for this epoll behavior - but at that point
    we didn't know of any actual broken use case.
    
    So add the extraneous wakeup, to approximate the old behavior.
    
    [ I say "approximate", because the exact old behavior was to do a wakeup
      not for each write(), but for each pipe buffer chunk that was filled
      in. The behavior introduced by this change is not that - this is just
      "every write will cause a wakeup, whether necessary or not", which
      seems to be sufficient for the broken library use. ]
    
    It's worth noting that this adds the extraneous wakeup only for the
    write side, while the read side still considers the "edge" to be purely
    about reading enough from the pipe to allow further writes.
    
    See commit f467a6a66419 ("pipe: fix and clarify pipe read wakeup logic")
    for the pipe read case, which remains that "only wake up if the pipe was
    full, and we read something from it".
    
    Link: https://lore.kernel.org/lkml/CAHk-=wjeG0q1vgzu4iJhW5juPkTsjTYmiqiMUYAebWW+0bam6w@mail.gmail.com/ [1]
    Link: https://github.com/realm/realm-core [2]
    Link: https://github.com/realm/realm-core/issues/4666 [3]
    Link: https://lore.kernel.org/lkml/CAKgNAkjMBGeAwF=2MKK758BhxvW58wYTgYKB2V-gY1PwXxrH+Q@mail.gmail.com/ [4]
    Link: https://lore.kernel.org/lkml/20210729222635.2937453-1-sspatil@android.com/
    Reported-by: Sandeep Patil <sspatil@android.com>
    Cc: Michael Kerrisk <mtk.manpages@gmail.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 02210a5e1894d5da89fbc67f44a182b7739fbaa3
Author: Jan Kiszka <jan.kiszka@siemens.com>
Date:   Sun Apr 11 10:12:16 2021 +0200

    x86/asm: Ensure asm/proto.h can be included stand-alone
    
    [ Upstream commit f7b21a0e41171d22296b897dac6e4c41d2a3643c ]
    
    Fix:
    
      ../arch/x86/include/asm/proto.h:14:30: warning: ‘struct task_struct’ declared \
        inside parameter list will not be visible outside of this definition or declaration
      long do_arch_prctl_64(struct task_struct *task, int option, unsigned long arg2);
                                   ^~~~~~~~~~~
    
      .../arch/x86/include/asm/proto.h:40:34: warning: ‘struct task_struct’ declared \
        inside parameter list will not be visible outside of this definition or declaration
       long do_arch_prctl_common(struct task_struct *task, int option,
                                        ^~~~~~~~~~~
    
    if linux/sched.h hasn't be included previously. This fixes a build error
    when this header is used outside of the kernel tree.
    
     [ bp: Massage commit message. ]
    
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Link: https://lkml.kernel.org/r/b76b4be3-cf66-f6b2-9a6c-3e7ef54f9845@web.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 65b2658634fedc0a34fb04832a702834e77791e5
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Thu Jul 29 22:23:38 2021 +0800

    io_uring: fix null-ptr-deref in io_sq_offload_start()
    
    I met a null-ptr-deref when doing fault-inject test:
    
    [   65.441626][ T8299] general protection fault, probably for non-canonical address 0xdffffc0000000029: 0000 [#1] PREEMPT SMP KASAN
    [   65.443219][ T8299] KASAN: null-ptr-deref in range [0x0000000000000148-0x000000000000014f]
    [   65.444331][ T8299] CPU: 2 PID: 8299 Comm: test Not tainted 5.10.49+ #499
    [   65.445277][ T8299] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1ubuntu1.1 04/01/2014
    [   65.446614][ T8299] RIP: 0010:io_disable_sqo_submit+0x124/0x260
    [   65.447554][ T8299] Code: 7b 40 89 ee e8 2d b9 9a ff 85 ed 74 40 e8 04 b8 9a ff 49 8d be 48 01 00 00 48 b8 00 00 00 00 00 fc ff df 48 89 fa 48 c1 ea 03 <80> 3c 02 00 0f 85 22 01 00 00 49 8b ae 48 01 00 00 48 85 ed 74 0d
    [   65.450860][ T8299] RSP: 0018:ffffc9000122fd70 EFLAGS: 00010202
    [   65.451826][ T8299] RAX: dffffc0000000000 RBX: ffff88801b11f000 RCX: ffffffff81d5d783
    [   65.453166][ T8299] RDX: 0000000000000029 RSI: ffffffff81d5d78c RDI: 0000000000000148
    [   65.454606][ T8299] RBP: 0000000000000002 R08: ffff88810168c280 R09: ffffed1003623e79
    [   65.456063][ T8299] R10: ffffc9000122fd70 R11: ffffed1003623e78 R12: ffff88801b11f040
    [   65.457542][ T8299] R13: ffff88801b11f3c0 R14: 0000000000000000 R15: 000000000000001a
    [   65.458910][ T8299] FS:  00007ffb602e3500(0000) GS:ffff888064100000(0000) knlGS:0000000000000000
    [   65.460533][ T8299] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   65.461736][ T8299] CR2: 00007ffb5fe7eb24 CR3: 000000010a619000 CR4: 0000000000750ee0
    [   65.463146][ T8299] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [   65.464618][ T8299] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    [   65.466052][ T8299] PKRU: 55555554
    [   65.466708][ T8299] Call Trace:
    [   65.467304][ T8299]  io_uring_setup+0x2041/0x3ac0
    [   65.468169][ T8299]  ? io_iopoll_check+0x500/0x500
    [   65.469123][ T8299]  ? syscall_enter_from_user_mode+0x1c/0x50
    [   65.470241][ T8299]  do_syscall_64+0x2d/0x70
    [   65.471028][ T8299]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
    [   65.472099][ T8299] RIP: 0033:0x7ffb5fdec839
    [   65.472925][ T8299] Code: 00 f3 c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 1f f6 2c 00 f7 d8 64 89 01 48
    [   65.476465][ T8299] RSP: 002b:00007ffc33539ef8 EFLAGS: 00000206 ORIG_RAX: 00000000000001a9
    [   65.478026][ T8299] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007ffb5fdec839
    [   65.479503][ T8299] RDX: 0000000020ffd000 RSI: 0000000020000080 RDI: 0000000000100001
    [   65.480927][ T8299] RBP: 00007ffc33539f70 R08: 0000000000000000 R09: 0000000000000000
    [   65.482416][ T8299] R10: 0000000000000000 R11: 0000000000000206 R12: 0000555e85531320
    [   65.483845][ T8299] R13: 00007ffc3353a0a0 R14: 0000000000000000 R15: 0000000000000000
    [   65.485331][ T8299] Modules linked in:
    [   65.486000][ T8299] Dumping ftrace buffer:
    [   65.486772][ T8299]    (ftrace buffer empty)
    [   65.487595][ T8299] ---[ end trace a9a5fad3ebb303b7 ]---
    
    If io_allocate_scq_urings() fails in io_uring_create(), 'ctx->sq_data'
    is not set yet, when calling io_sq_offload_start() in io_disable_sqo_submit()
    in error path, it will lead a null-ptr-deref.
    
    The io_disable_sqo_submit() has been removed in mainline by commit
    70aacfe66136 ("io_uring: kill sqo_dead and sqo submission halting"),
    so the bug has been eliminated in mainline, it's a fix only for stable-5.10.
    
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Cc: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e44d22fdf75613503b31a38fa824a98c970ea119
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Wed Jul 28 13:51:58 2021 +0200

    selftest: fix build error in tools/testing/selftests/vm/userfaultfd.c
    
    When backporting 0db282ba2c12 ("selftest: use mmap instead of
    posix_memalign to allocate memory") to this stable branch, I forgot a {
    breaking the build.
    
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>