Changelog in Linux kernel 6.1.106

 
ASoC: topology: Clean up route loading [+ + +]
Author: Amadeusz Sławiński <[email protected]>
Date:   Mon Jun 3 12:28:18 2024 +0200

    ASoC: topology: Clean up route loading
    
    commit e0e7bc2cbee93778c4ad7d9a792d425ffb5af6f7 upstream.
    
    Instead of using very long macro name, assign it to shorter variable
    and use it instead. While doing that, we can reduce multiple if checks
    using this define to one.
    
    Reviewed-by: Cezary Rojewski <[email protected]>
    Signed-off-by: Amadeusz Sławiński <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: topology: Fix route memory corruption [+ + +]
Author: Amadeusz Sławiński <[email protected]>
Date:   Thu Jun 13 11:01:26 2024 +0200

    ASoC: topology: Fix route memory corruption
    
    commit 0298f51652be47b79780833e0b63194e1231fa34 upstream.
    
    It was reported that recent fix for memory corruption during topology
    load, causes corruption in other cases. Instead of being overeager with
    checking topology, assume that it is properly formatted and just
    duplicate strings.
    
    Reported-by: Pierre-Louis Bossart <[email protected]>
    Closes: https://lore.kernel.org/linux-sound/[email protected]/T/#m8c4bd5abf453960fde6f826c4b7f84881da63e9d
    Suggested-by: Péter Ujfalusi <[email protected]>
    Signed-off-by: Amadeusz Sławiński <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
binfmt_flat: Fix corruption when not offsetting data start [+ + +]
Author: Kees Cook <[email protected]>
Date:   Wed Aug 7 12:51:23 2024 -0700

    binfmt_flat: Fix corruption when not offsetting data start
    
    [ Upstream commit 3eb3cd5992f7a0c37edc8d05b4c38c98758d8671 ]
    
    Commit 04d82a6d0881 ("binfmt_flat: allow not offsetting data start")
    introduced a RISC-V specific variant of the FLAT format which does
    not allocate any space for the (obsolete) array of shared library
    pointers. However, it did not disable the code which initializes the
    array, resulting in the corruption of sizeof(long) bytes before the DATA
    segment, generally the end of the TEXT segment.
    
    Introduce MAX_SHARED_LIBS_UPDATE which depends on the state of
    CONFIG_BINFMT_FLAT_NO_DATA_START_OFFSET to guard the initialization of
    the shared library pointer region so that it will only be initialized
    if space is reserved for it.
    
    Fixes: 04d82a6d0881 ("binfmt_flat: allow not offsetting data start")
    Co-developed-by: Stefan O'Rear <[email protected]>
    Signed-off-by: Stefan O'Rear <[email protected]>
    Reviewed-by: Damien Le Moal <[email protected]>
    Acked-by: Greg Ungerer <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Kees Cook <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
cgroup: Make operations on the cgroup root_list RCU safe [+ + +]
Author: Yafang Shao <[email protected]>
Date:   Sun Oct 29 06:14:29 2023 +0000

    cgroup: Make operations on the cgroup root_list RCU safe
    
    commit d23b5c577715892c87533b13923306acc6243f93 upstream.
    
    At present, when we perform operations on the cgroup root_list, we must
    hold the cgroup_mutex, which is a relatively heavyweight lock. In reality,
    we can make operations on this list RCU-safe, eliminating the need to hold
    the cgroup_mutex during traversal. Modifications to the list only occur in
    the cgroup root setup and destroy paths, which should be infrequent in a
    production environment. In contrast, traversal may occur frequently.
    Therefore, making it RCU-safe would be beneficial.
    
    Signed-off-by: Yafang Shao <[email protected]>
    Signed-off-by: Tejun Heo <[email protected]>
    Cc: Michal Koutný <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

cgroup: Move rcu_head up near the top of cgroup_root [+ + +]
Author: Waiman Long <[email protected]>
Date:   Thu Dec 7 08:46:14 2023 -0500

    cgroup: Move rcu_head up near the top of cgroup_root
    
    commit a7fb0423c201ba12815877a0b5a68a6a1710b23a upstream.
    
    Commit d23b5c577715 ("cgroup: Make operations on the cgroup root_list RCU
    safe") adds a new rcu_head to the cgroup_root structure and kvfree_rcu()
    for freeing the cgroup_root.
    
    The current implementation of kvfree_rcu(), however, has the limitation
    that the offset of the rcu_head structure within the larger data
    structure must be less than 4096 or the compilation will fail. See the
    macro definition of __is_kvfree_rcu_offset() in include/linux/rcupdate.h
    for more information.
    
    By putting rcu_head below the large cgroup structure, any change to the
    cgroup structure that makes it larger run the risk of causing build
    failure under certain configurations. Commit 77070eeb8821 ("cgroup:
    Avoid false cacheline sharing of read mostly rstat_cpu") happens to be
    the last straw that breaks it. Fix this problem by moving the rcu_head
    structure up before the cgroup structure.
    
    Fixes: d23b5c577715 ("cgroup: Make operations on the cgroup root_list RCU safe")
    Reported-by: Stephen Rothwell <[email protected]>
    Closes: https://lore.kernel.org/lkml/[email protected]/
    Signed-off-by: Waiman Long <[email protected]>
    Acked-by: Yafang Shao <[email protected]>
    Reviewed-by: Yosry Ahmed <[email protected]>
    Reviewed-by: Michal Koutný <[email protected]>
    Signed-off-by: Tejun Heo <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/i915/gem: Adjust vma offset for framebuffer mmap offset [+ + +]
Author: Andi Shyti <[email protected]>
Date:   Fri Aug 2 10:38:49 2024 +0200

    drm/i915/gem: Adjust vma offset for framebuffer mmap offset
    
    [ Upstream commit 1ac5167b3a90c9820daa64cc65e319b2d958d686 ]
    
    When mapping a framebuffer object, the virtual memory area (VMA)
    offset ('vm_pgoff') should be adjusted by the start of the
    'vma_node' associated with the object. This ensures that the VMA
    offset is correctly aligned with the corresponding offset within
    the GGTT aperture.
    
    Increment vm_pgoff by the start of the vma_node with the offset=
    provided by the user.
    
    Suggested-by: Chris Wilson <[email protected]>
    Signed-off-by: Andi Shyti <[email protected]>
    Reviewed-by: Jonathan Cavitt <[email protected]>
    Reviewed-by: Rodrigo Vivi <[email protected]>
    Cc: <[email protected]> # v4.9+
    [Joonas: Add Cc: stable]
    Signed-off-by: Joonas Lahtinen <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    (cherry picked from commit 60a2066c50058086510c91f404eb582029650970)
    Signed-off-by: Joonas Lahtinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/i915/gem: Fix Virtual Memory mapping boundaries calculation [+ + +]
Author: Andi Shyti <[email protected]>
Date:   Fri Aug 2 10:38:50 2024 +0200

    drm/i915/gem: Fix Virtual Memory mapping boundaries calculation
    
    commit 8bdd9ef7e9b1b2a73e394712b72b22055e0e26c3 upstream.
    
    Calculating the size of the mapped area as the lesser value
    between the requested size and the actual size does not consider
    the partial mapping offset. This can cause page fault access.
    
    Fix the calculation of the starting and ending addresses, the
    total size is now deduced from the difference between the end and
    start addresses.
    
    Additionally, the calculations have been rewritten in a clearer
    and more understandable form.
    
    Fixes: c58305af1835 ("drm/i915: Use remap_io_mapping() to prefault all PTE in a single pass")
    Reported-by: Jann Horn <[email protected]>
    Co-developed-by: Chris Wilson <[email protected]>
    Signed-off-by: Chris Wilson <[email protected]>
    Signed-off-by: Andi Shyti <[email protected]>
    Cc: Joonas Lahtinen <[email protected]>
    Cc: Matthew Auld <[email protected]>
    Cc: Rodrigo Vivi <[email protected]>
    Cc: <[email protected]> # v4.9+
    Reviewed-by: Jann Horn <[email protected]>
    Reviewed-by: Jonathan Cavitt <[email protected]>
    [Joonas: Add Requires: tag]
    Requires: 60a2066c5005 ("drm/i915/gem: Adjust vma offset for framebuffer mmap offset")
    Signed-off-by: Joonas Lahtinen <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    (cherry picked from commit 97b6784753da06d9d40232328efc5c5367e53417)
    Signed-off-by: Joonas Lahtinen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/i915: Add a function to mmap framebuffer obj [+ + +]
Author: Nirmoy Das <[email protected]>
Date:   Tue Apr 4 16:30:58 2023 +0200

    drm/i915: Add a function to mmap framebuffer obj
    
    [ Upstream commit eaee1c08586395182e0004b3512a2f83570ea461 ]
    
    Implement i915_gem_fb_mmap() to enable fb_ops.fb_mmap()
    callback for i915's framebuffer objects.
    
    v2: add a comment why i915_gem_object_get() needed(Andi).
    v3: mmap also ttm objects.
    
    Cc: Matthew Auld <[email protected]>
    Cc: Andi Shyti <[email protected]>
    Cc: Ville Syrjälä <[email protected]>
    Cc: Jani Nikula <[email protected]>
    Cc: Imre Deak <[email protected]>
    Signed-off-by: Nirmoy Das <[email protected]>
    Reviewed-by: Andi Shyti <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Stable-dep-of: 1ac5167b3a90 ("drm/i915/gem: Adjust vma offset for framebuffer mmap offset")
    Signed-off-by: Sasha Levin <[email protected]>

drm/i915: Fix a NULL vs IS_ERR() bug [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Tue Jun 6 11:23:56 2023 +0300

    drm/i915: Fix a NULL vs IS_ERR() bug
    
    [ Upstream commit 3a89311387cde27da8e290458b2d037133c1f7b5 ]
    
    The mmap_offset_attach() function returns error pointers, it doesn't
    return NULL.
    
    Fixes: eaee1c085863 ("drm/i915: Add a function to mmap framebuffer obj")
    Signed-off-by: Dan Carpenter <[email protected]>
    Reviewed-by: Nirmoy Das <[email protected]>
    Reviewed-by: Andi Shyti <[email protected]>
    Signed-off-by: Nirmoy Das <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/ZH7tHLRZ9oBjedjN@moroto
    Stable-dep-of: 1ac5167b3a90 ("drm/i915/gem: Adjust vma offset for framebuffer mmap offset")
    Signed-off-by: Sasha Levin <[email protected]>

 
exec: Fix ToCToU between perm check and set-uid/gid usage [+ + +]
Author: Kees Cook <[email protected]>
Date:   Thu Aug 8 11:39:08 2024 -0700

    exec: Fix ToCToU between perm check and set-uid/gid usage
    
    commit f50733b45d865f91db90919f8311e2127ce5a0cb upstream.
    
    When opening a file for exec via do_filp_open(), permission checking is
    done against the file's metadata at that moment, and on success, a file
    pointer is passed back. Much later in the execve() code path, the file
    metadata (specifically mode, uid, and gid) is used to determine if/how
    to set the uid and gid. However, those values may have changed since the
    permissions check, meaning the execution may gain unintended privileges.
    
    For example, if a file could change permissions from executable and not
    set-id:
    
    ---------x 1 root root 16048 Aug  7 13:16 target
    
    to set-id and non-executable:
    
    ---S------ 1 root root 16048 Aug  7 13:16 target
    
    it is possible to gain root privileges when execution should have been
    disallowed.
    
    While this race condition is rare in real-world scenarios, it has been
    observed (and proven exploitable) when package managers are updating
    the setuid bits of installed programs. Such files start with being
    world-executable but then are adjusted to be group-exec with a set-uid
    bit. For example, "chmod o-x,u+s target" makes "target" executable only
    by uid "root" and gid "cdrom", while also becoming setuid-root:
    
    -rwxr-xr-x 1 root cdrom 16048 Aug  7 13:16 target
    
    becomes:
    
    -rwsr-xr-- 1 root cdrom 16048 Aug  7 13:16 target
    
    But racing the chmod means users without group "cdrom" membership can
    get the permission to execute "target" just before the chmod, and when
    the chmod finishes, the exec reaches brpm_fill_uid(), and performs the
    setuid to root, violating the expressed authorization of "only cdrom
    group members can setuid to root".
    
    Re-check that we still have execute permissions in case the metadata
    has changed. It would be better to keep a copy from the perm-check time,
    but until we can do that refactoring, the least-bad option is to do a
    full inode_permission() call (under inode lock). It is understood that
    this is safe against dead-locks, but hardly optimal.
    
    Reported-by: Marco Vanotti <[email protected]>
    Tested-by: Marco Vanotti <[email protected]>
    Suggested-by: Linus Torvalds <[email protected]>
    Cc: [email protected]
    Cc: Eric Biederman <[email protected]>
    Cc: Alexander Viro <[email protected]>
    Cc: Christian Brauner <[email protected]>
    Signed-off-by: Kees Cook <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
KVM: arm64: Don't pass a TLBI level hint when zapping table entries [+ + +]
Author: Will Deacon <[email protected]>
Date:   Thu Aug 15 13:50:03 2024 +0100

    KVM: arm64: Don't pass a TLBI level hint when zapping table entries
    
    commit 36e008323926036650299cfbb2dca704c7aba849 upstream.
    
    The TLBI level hints are for leaf entries only, so take care not to pass
    them incorrectly after clearing a table entry.
    
    Cc: Gavin Shan <[email protected]>
    Cc: Marc Zyngier <[email protected]>
    Cc: Quentin Perret <[email protected]>
    Fixes: 82bb02445de5 ("KVM: arm64: Implement kvm_pgtable_hyp_unmap() at EL2")
    Fixes: 6d9d2115c480 ("KVM: arm64: Add support for stage-2 map()/unmap() in generic page-table")
    Reviewed-by: Shaoqin Huang <[email protected]>
    Reviewed-by: Marc Zyngier <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Oliver Upton <[email protected]>
    Cc: <[email protected]> # 6.1.y only
    [will@: Use '0' instead of TLBI_TTL_UNKNOWN_to indicate "no level". Force
            level to 0 in stage2_put_pte() if we're clearing a table entry.]
    Signed-off-by: Will Deacon <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: Linux 6.1.106 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Mon Aug 19 06:00:07 2024 +0200

    Linux 6.1.106
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Pavel Machek (CIP) <[email protected]>
    Tested-by: Peter Schneider <[email protected]>
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Salvatore Bonaccorso <[email protected]>
    Tested-by: Linux Kernel Functional Testing <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Tested-by: Ron Economos <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
LoongArch: Define __ARCH_WANT_NEW_STAT in unistd.h [+ + +]
Author: Huacai Chen <[email protected]>
Date:   Sat Jul 20 22:40:58 2024 +0800

    LoongArch: Define __ARCH_WANT_NEW_STAT in unistd.h
    
    commit 7697a0fe0154468f5df35c23ebd7aa48994c2cdc upstream.
    
    Chromium sandbox apparently wants to deny statx [1] so it could properly
    inspect arguments after the sandboxed process later falls back to fstat.
    Because there's currently not a "fd-only" version of statx, so that the
    sandbox has no way to ensure the path argument is empty without being
    able to peek into the sandboxed process's memory. For architectures able
    to do newfstatat though, glibc falls back to newfstatat after getting
    -ENOSYS for statx, then the respective SIGSYS handler [2] takes care of
    inspecting the path argument, transforming allowed newfstatat's into
    fstat instead which is allowed and has the same type of return value.
    
    But, as LoongArch is the first architecture to not have fstat nor
    newfstatat, the LoongArch glibc does not attempt falling back at all
    when it gets -ENOSYS for statx -- and you see the problem there!
    
    Actually, back when the LoongArch port was under review, people were
    aware of the same problem with sandboxing clone3 [3], so clone was
    eventually kept. Unfortunately it seemed at that time no one had noticed
    statx, so besides restoring fstat/newfstatat to LoongArch uapi (and
    postponing the problem further), it seems inevitable that we would need
    to tackle seccomp deep argument inspection.
    
    However, this is obviously a decision that shouldn't be taken lightly,
    so we just restore fstat/newfstatat by defining __ARCH_WANT_NEW_STAT
    in unistd.h. This is the simplest solution for now, and so we hope the
    community will tackle the long-standing problem of seccomp deep argument
    inspection in the future [4][5].
    
    Also add "newstat" to syscall_abis_64 in Makefile.syscalls due to
    upstream asm-generic changes.
    
    More infomation please reading this thread [6].
    
    [1] https://chromium-review.googlesource.com/c/chromium/src/+/2823150
    [2] https://chromium.googlesource.com/chromium/src/sandbox/+/c085b51940bd/linux/seccomp-bpf-helpers/sigsys_handlers.cc#355
    [3] https://lore.kernel.org/linux-arch/[email protected]/
    [4] https://lwn.net/Articles/799557/
    [5] https://lpc.events/event/4/contributions/560/attachments/397/640/deep-arg-inspection.pdf
    [6] https://lore.kernel.org/loongarch/20240226-granit-seilschaft-eccc2433014d@brauner/T/#t
    
    Cc: [email protected]
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
media: Revert "media: dvb-usb: Fix unexpected infinite loop in dvb_usb_read_remote_control()" [+ + +]
Author: Sean Young <[email protected]>
Date:   Thu Aug 8 10:35:19 2024 +0200

    media: Revert "media: dvb-usb: Fix unexpected infinite loop in dvb_usb_read_remote_control()"
    
    commit 0c84bde4f37ba27d50e4c70ecacd33fe4a57030d upstream.
    
    This reverts commit 2052138b7da52ad5ccaf74f736d00f39a1c9198c.
    
    This breaks the TeVii s480 dual DVB-S2 S660. The device has a bulk in
    endpoint but no corresponding out endpoint, so the device does not pass
    the "has both receive and send bulk endpoint" test.
    
    Seemingly this device does not use dvb_usb_generic_rw() so I have tried
    removing the generic_bulk_ctrl_endpoint entry, but this resulted in
    different problems.
    
    As we have no explanation yet, revert.
    
    $ dmesg | grep -i -e dvb -e dw21 -e usb\ 4
    [    0.999122] usb 1-1: new high-speed USB device number 2 using ehci-pci
    [    1.023123] usb 4-1: new high-speed USB device number 2 using ehci-pci
    [    1.130247] usb 1-1: New USB device found, idVendor=9022, idProduct=d482,
    +bcdDevice= 0.01
    [    1.130257] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
    [    1.152323] usb 4-1: New USB device found, idVendor=9022, idProduct=d481,
    +bcdDevice= 0.01
    [    1.152329] usb 4-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
    [    6.701033] dvb-usb: found a 'TeVii S480.2 USB' in cold state, will try to
    +load a firmware
    [    6.701178] dvb-usb: downloading firmware from file 'dvb-usb-s660.fw'
    [    6.701179] dw2102: start downloading DW210X firmware
    [    6.703715] dvb-usb: found a 'Microsoft Xbox One Digital TV Tuner' in cold
    +state, will try to load a firmware
    [    6.703974] dvb-usb: downloading firmware from file 'dvb-usb-dib0700-1.20.fw'
    [    6.756432] usb 1-1: USB disconnect, device number 2
    [    6.862119] dvb-usb: found a 'TeVii S480.2 USB' in warm state.
    [    6.862194] dvb-usb: TeVii S480.2 USB error while loading driver (-22)
    [    6.862209] dvb-usb: found a 'TeVii S480.1 USB' in cold state, will try to
    +load a firmware
    [    6.862244] dvb-usb: downloading firmware from file 'dvb-usb-s660.fw'
    [    6.862245] dw2102: start downloading DW210X firmware
    [    6.914811] usb 4-1: USB disconnect, device number 2
    [    7.014131] dvb-usb: found a 'TeVii S480.1 USB' in warm state.
    [    7.014487] dvb-usb: TeVii S480.1 USB error while loading driver (-22)
    [    7.014538] usbcore: registered new interface driver dw2102
    
    Closes: https://lore.kernel.org/stable/20240801165146.38991f60@mir/
    
    Fixes: 2052138b7da5 ("media: dvb-usb: Fix unexpected infinite loop in dvb_usb_read_remote_control()")
    Reported-by: Stefan Lippers-Hollmann <[email protected]>
    Cc: [email protected]
    Signed-off-by: Sean Young <[email protected]>
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mptcp: fully established after ADD_ADDR echo on MPJ [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Tue Aug 13 11:06:07 2024 +0200

    mptcp: fully established after ADD_ADDR echo on MPJ
    
    commit d67c5649c1541dc93f202eeffc6f49220a4ed71d upstream.
    
    Before this patch, receiving an ADD_ADDR echo on the just connected
    MP_JOIN subflow -- initiator side, after the MP_JOIN 3WHS -- was
    resulting in an MP_RESET. That's because only ACKs with a DSS or
    ADD_ADDRs without the echo bit were allowed.
    
    Not allowing the ADD_ADDR echo after an MP_CAPABLE 3WHS makes sense, as
    we are not supposed to send an ADD_ADDR before because it requires to be
    in full established mode first. For the MP_JOIN 3WHS, that's different:
    the ADD_ADDR can be sent on a previous subflow, and the ADD_ADDR echo
    can be received on the recently created one. The other peer will already
    be in fully established, so it is allowed to send that.
    
    We can then relax the conditions here to accept the ADD_ADDR echo for
    MPJ subflows.
    
    Fixes: 67b12f792d5e ("mptcp: full fully established support after ADD_ADDR")
    Cc: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/20240731-upstream-net-20240731-mptcp-endp-subflow-signal-v1-1-c8a9b036493b@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ Conflicts in options.c, because the context has changed in commit
      b3ea6b272d79 ("mptcp: consolidate initial ack seq generation"), which
      is not in this version. This commit is unrelated to this
      modification. ]
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: pass addr to mptcp_pm_alloc_anno_list [+ + +]
Author: Geliang Tang <[email protected]>
Date:   Tue Aug 13 11:28:17 2024 +0200

    mptcp: pass addr to mptcp_pm_alloc_anno_list
    
    commit 528cb5f2a1e859522f36f091f29f5c81ec6d4a4c upstream.
    
    Pass addr parameter to mptcp_pm_alloc_anno_list() instead of entry. We
    can reduce the scope, e.g. in mptcp_pm_alloc_anno_list(), we only access
    "entry->addr", we can then restrict to the pointer to "addr" then.
    
    Signed-off-by: Geliang Tang <[email protected]>
    Reviewed-by: Matthieu Baerts <[email protected]>
    Signed-off-by: Matthieu Baerts <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: c95eb32ced82 ("mptcp: pm: reduce indentation blocks")
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
mptcp: pm: do not ignore 'subflow' if 'signal' flag is also set [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Tue Aug 13 11:28:20 2024 +0200

    mptcp: pm: do not ignore 'subflow' if 'signal' flag is also set
    
    commit 85df533a787bf07bf4367ce2a02b822ff1fba1a3 upstream.
    
    Up to the 'Fixes' commit, having an endpoint with both the 'signal' and
    'subflow' flags, resulted in the creation of a subflow and an address
    announcement using the address linked to this endpoint. After this
    commit, only the address announcement was done, ignoring the 'subflow'
    flag.
    
    That's because the same bitmap is used for the two flags. It is OK to
    keep this single bitmap, the already selected local endpoint simply have
    to be re-used, but not via select_local_address() not to look at the
    just modified bitmap.
    
    Note that it is unusual to set the two flags together: creating a new
    subflow using a new local address will implicitly advertise it to the
    other peer. So in theory, no need to advertise it explicitly as well.
    Maybe there are use-cases -- the subflow might not reach the other peer
    that way, we can ask the other peer to try initiating the new subflow
    without delay -- or very likely the user is confused, and put both flags
    "just to be sure at least the right one is set". Still, if it is
    allowed, the kernel should do what has been asked: using this endpoint
    to announce the address and to create a new subflow from it.
    
    An alternative is to forbid the use of the two flags together, but
    that's probably too late, there are maybe use-cases, and it was working
    before. This patch will avoid people complaining subflows are not
    created using the endpoint they added with the 'subflow' and 'signal'
    flag.
    
    Note that with the current patch, the subflow might not be created in
    some corner cases, e.g. if the 'subflows' limit was reached when sending
    the ADD_ADDR, but changed later on. It is probably not worth splitting
    id_avail_bitmap per target ('signal', 'subflow'), which will add another
    large field to the msk "just" to track (again) endpoints. Anyway,
    currently when the limits are changed, the kernel doesn't check if new
    subflows can be created or removed, because we would need to keep track
    of the received ADD_ADDR, and more. It sounds OK to assume that the
    limits should be properly configured before establishing new
    connections.
    
    Fixes: 86e39e04482b ("mptcp: keep track of local endpoint still available for each msk")
    Cc: [email protected]
    Suggested-by: Paolo Abeni <[email protected]>
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/20240731-upstream-net-20240731-mptcp-endp-subflow-signal-v1-5-c8a9b036493b@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: pm: don't try to create sf if alloc failed [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Tue Aug 13 11:28:19 2024 +0200

    mptcp: pm: don't try to create sf if alloc failed
    
    commit cd7c957f936f8cb80d03e5152f4013aae65bd986 upstream.
    
    It sounds better to avoid wasting cycles and / or put extreme memory
    pressure on the system by trying to create new subflows if it was not
    possible to add a new item in the announce list.
    
    While at it, a warning is now printed if the entry was already in the
    list as it should not happen with the in-kernel path-manager. With this
    PM, mptcp_pm_alloc_anno_list() should only fail in case of memory
    pressure.
    
    Fixes: b6c08380860b ("mptcp: remove addr and subflow in PM netlink")
    Cc: [email protected]
    Suggested-by: Paolo Abeni <[email protected]>
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/20240731-upstream-net-20240731-mptcp-endp-subflow-signal-v1-4-c8a9b036493b@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: pm: reduce indentation blocks [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Tue Aug 13 11:28:18 2024 +0200

    mptcp: pm: reduce indentation blocks
    
    commit c95eb32ced823a00be62202b43966b07b2f20b7f upstream.
    
    That will simplify the following commits.
    
    No functional changes intended.
    
    Suggested-by: Paolo Abeni <[email protected]>
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/20240731-upstream-net-20240731-mptcp-endp-subflow-signal-v1-3-c8a9b036493b@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: cd7c957f936f ("mptcp: pm: don't try to create sf if alloc failed")
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nfsd: expose /proc/net/sunrpc/nfsd in net namespaces [+ + +]
Author: Josef Bacik <[email protected]>
Date:   Sat Aug 10 16:00:06 2024 -0400

    nfsd: expose /proc/net/sunrpc/nfsd in net namespaces
    
    [ Upstream commit 93483ac5fec62cc1de166051b219d953bb5e4ef4 ]
    
    We are running nfsd servers inside of containers with their own network
    namespace, and we want to monitor these services using the stats found
    in /proc.  However these are not exposed in the proc inside of the
    container, so we have to bind mount the host /proc into our containers
    to get at this information.
    
    Separate out the stat counters init and the proc registration, and move
    the proc registration into the pernet operations entry and exit points
    so that these stats can be exposed inside of network namespaces.
    
    This is an intermediate step, this just exposes the global counters in
    the network namespace.  Subsequent patches will move these counters into
    the per-network namespace container.
    
    Signed-off-by: Josef Bacik <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
NFSD: Fix frame size warning in svc_export_parse() [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Sat Aug 10 15:59:59 2024 -0400

    NFSD: Fix frame size warning in svc_export_parse()
    
    [ Upstream commit 6939ace1f22681fface7841cdbf34d3204cc94b5 ]
    
    fs/nfsd/export.c: In function 'svc_export_parse':
    fs/nfsd/export.c:737:1: warning: the frame size of 1040 bytes is larger than 1024 bytes [-Wframe-larger-than=]
        737 | }
    
    On my systems, svc_export_parse() has a stack frame of over 800
    bytes, not 1040, but nonetheless, it could do with some reduction.
    
    When a struct svc_export is on the stack, it's a temporary structure
    used as an argument, and not visible as an actual exported FS. No
    need to reserve space for export_stats in such cases.
    
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Cc: Amir Goldstein <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Stable-dep-of: 4b14885411f7 ("nfsd: make all of the nfsd stats per-network namespace")
    [ cel: adjusted to apply to v6.1.y ]
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nfsd: make all of the nfsd stats per-network namespace [+ + +]
Author: Josef Bacik <[email protected]>
Date:   Sat Aug 10 16:00:07 2024 -0400

    nfsd: make all of the nfsd stats per-network namespace
    
    [ Upstream commit 4b14885411f74b2b0ce0eb2b39d0fffe54e5ca0d ]
    
    We have a global set of counters that we modify for all of the nfsd
    operations, but now that we're exposing these stats across all network
    namespaces we need to make the stats also be per-network namespace.  We
    already have some caching stats that are per-network namespace, so move
    these definitions into the same counter and then adjust all the helpers
    and users of these stats to provide the appropriate nfsd_net struct so
    that the stats are maintained for the per-network namespace objects.
    
    Signed-off-by: Josef Bacik <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    [ cel: adjusted to apply to v6.1.y ]
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

nfsd: make svc_stat per-network namespace instead of global [+ + +]
Author: Josef Bacik <[email protected]>
Date:   Sat Aug 10 16:00:09 2024 -0400

    nfsd: make svc_stat per-network namespace instead of global
    
    [ Upstream commit 16fb9808ab2c99979f081987752abcbc5b092eac ]
    
    The final bit of stats that is global is the rpc svc_stat.  Move this
    into the nfsd_net struct and use that everywhere instead of the global
    struct.  Remove the unused global struct.
    
    Signed-off-by: Josef Bacik <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

nfsd: move init of percpu reply_cache_stats counters back to nfsd_init_net [+ + +]
Author: Jeff Layton <[email protected]>
Date:   Sat Aug 10 15:59:53 2024 -0400

    nfsd: move init of percpu reply_cache_stats counters back to nfsd_init_net
    
    [ Upstream commit ed9ab7346e908496816cffdecd46932035f66e2e ]
    
    Commit f5f9d4a314da ("nfsd: move reply cache initialization into nfsd
    startup") moved the initialization of the reply cache into nfsd startup,
    but didn't account for the stats counters, which can be accessed before
    nfsd is ever started. The result can be a NULL pointer dereference when
    someone accesses /proc/fs/nfsd/reply_cache_stats while nfsd is still
    shut down.
    
    This is a regression and a user-triggerable oops in the right situation:
    
    - non-x86_64 arch
    - /proc/fs/nfsd is mounted in the namespace
    - nfsd is not started in the namespace
    - unprivileged user calls "cat /proc/fs/nfsd/reply_cache_stats"
    
    Although this is easy to trigger on some arches (like aarch64), on
    x86_64, calling this_cpu_ptr(NULL) evidently returns a pointer to the
    fixed_percpu_data. That struct looks just enough like a newly
    initialized percpu var to allow nfsd_reply_cache_stats_show to access
    it without Oopsing.
    
    Move the initialization of the per-net+per-cpu reply-cache counters
    back into nfsd_init_net, while leaving the rest of the reply cache
    allocations to be done at nfsd startup time.
    
    Kudos to Eirik who did most of the legwork to track this down.
    
    Cc: [email protected] # v6.3+
    Fixes: f5f9d4a314da ("nfsd: move reply cache initialization into nfsd startup")
    Reported-and-tested-by: Eirik Fuller <[email protected]>
    Closes: https://bugzilla.redhat.com/show_bug.cgi?id=2215429
    Signed-off-by: Jeff Layton <[email protected]>
    Stable-dep-of: 4b14885411f7 ("nfsd: make all of the nfsd stats per-network namespace")
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

nfsd: move reply cache initialization into nfsd startup [+ + +]
Author: Jeff Layton <[email protected]>
Date:   Sat Aug 10 15:59:52 2024 -0400

    nfsd: move reply cache initialization into nfsd startup
    
    [ Upstream commit f5f9d4a314da88c0a5faa6d168bf69081b7a25ae ]
    
    There's no need to start the reply cache before nfsd is up and running,
    and doing so means that we register a shrinker for every net namespace
    instead of just the ones where nfsd is running.
    
    Move it to the per-net nfsd startup instead.
    
    Reported-by: Dai Ngo <[email protected]>
    Signed-off-by: Jeff Layton <[email protected]>
    Stable-dep-of: ed9ab7346e90 ("nfsd: move init of percpu reply_cache_stats counters back to nfsd_init_net")
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
NFSD: Refactor nfsd_reply_cache_free_locked() [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Sat Aug 10 15:59:54 2024 -0400

    NFSD: Refactor nfsd_reply_cache_free_locked()
    
    [ Upstream commit 35308e7f0fc3942edc87d9c6dc78c4a096428957 ]
    
    To reduce contention on the bucket locks, we must avoid calling
    kfree() while each bucket lock is held.
    
    Start by refactoring nfsd_reply_cache_free_locked() into a helper
    that removes an entry from the bucket (and must therefore run under
    the lock) and a second helper that frees the entry (which does not
    need to hold the lock).
    
    For readability, rename the helpers nfsd_cacherep_<verb>.
    
    Reviewed-by: Jeff Layton <[email protected]>
    Stable-dep-of: a9507f6af145 ("NFSD: Replace nfsd_prune_bucket()")
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

NFSD: Refactor the duplicate reply cache shrinker [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Sat Aug 10 15:59:57 2024 -0400

    NFSD: Refactor the duplicate reply cache shrinker
    
    [ Upstream commit c135e1269f34dfdea4bd94c11060c83a3c0b3c12 ]
    
    Avoid holding the bucket lock while freeing cache entries. This
    change also caps the number of entries that are freed when the
    shrinker calls to reduce the shrinker's impact on the cache's
    effectiveness.
    
    Reviewed-by: Jeff Layton <[email protected]>
    [ cel: adjusted to apply to v6.1.y -- this one might not be necessary ]
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nfsd: remove nfsd_stats, make th_cnt a global counter [+ + +]
Author: Josef Bacik <[email protected]>
Date:   Sat Aug 10 16:00:08 2024 -0400

    nfsd: remove nfsd_stats, make th_cnt a global counter
    
    [ Upstream commit e41ee44cc6a473b1f414031782c3b4283d7f3e5f ]
    
    This is the last global stat, take it out of the nfsd_stats struct and
    make it a global part of nfsd, report it the same as always.
    
    Signed-off-by: Josef Bacik <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

nfsd: rename NFSD_NET_* to NFSD_STATS_* [+ + +]
Author: Josef Bacik <[email protected]>
Date:   Sat Aug 10 16:00:05 2024 -0400

    nfsd: rename NFSD_NET_* to NFSD_STATS_*
    
    [ Upstream commit d98416cc2154053950610bb6880911e3dcbdf8c5 ]
    
    We're going to merge the stats all into per network namespace in
    subsequent patches, rename these nn counters to be consistent with the
    rest of the stats.
    
    Signed-off-by: Josef Bacik <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
NFSD: Rename nfsd_reply_cache_alloc() [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Sat Aug 10 15:59:55 2024 -0400

    NFSD: Rename nfsd_reply_cache_alloc()
    
    [ Upstream commit ff0d169329768c1102b7b07eebe5a9839aa1c143 ]
    
    For readability, rename to match the other helpers.
    
    Reviewed-by: Jeff Layton <[email protected]>
    Stable-dep-of: 4b14885411f7 ("nfsd: make all of the nfsd stats per-network namespace")
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

NFSD: Replace nfsd_prune_bucket() [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Sat Aug 10 15:59:56 2024 -0400

    NFSD: Replace nfsd_prune_bucket()
    
    [ Upstream commit a9507f6af1450ed26a4a36d979af518f5bb21e5d ]
    
    Enable nfsd_prune_bucket() to drop the bucket lock while calling
    kfree(). Use the same pattern that Jeff recently introduced in the
    NFSD filecache.
    
    A few percpu operations are moved outside the lock since they
    temporarily disable local IRQs which is expensive and does not
    need to be done while the lock is held.
    
    Reviewed-by: Jeff Layton <[email protected]>
    Stable-dep-of: c135e1269f34 ("NFSD: Refactor the duplicate reply cache shrinker")
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

NFSD: Rewrite synopsis of nfsd_percpu_counters_init() [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Sat Aug 10 15:59:58 2024 -0400

    NFSD: Rewrite synopsis of nfsd_percpu_counters_init()
    
    [ Upstream commit 5ec39944f874e1ecc09f624a70dfaa8ac3bf9d08 ]
    
    In function ‘export_stats_init’,
        inlined from ‘svc_export_alloc’ at fs/nfsd/export.c:866:6:
    fs/nfsd/export.c:337:16: warning: ‘nfsd_percpu_counters_init’ accessing 40 bytes in a region of size 0 [-Wstringop-overflow=]
      337 |         return nfsd_percpu_counters_init(&stats->counter, EXP_STATS_COUNTERS_NUM);
          |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    fs/nfsd/export.c:337:16: note: referencing argument 1 of type ‘struct percpu_counter[0]’
    fs/nfsd/stats.h: In function ‘svc_export_alloc’:
    fs/nfsd/stats.h:40:5: note: in a call to function ‘nfsd_percpu_counters_init’
       40 | int nfsd_percpu_counters_init(struct percpu_counter counters[], int num);
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~
    
    Cc: Amir Goldstein <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Stable-dep-of: 93483ac5fec6 ("nfsd: expose /proc/net/sunrpc/nfsd in net namespaces")
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nfsd: stop setting ->pg_stats for unused stats [+ + +]
Author: Josef Bacik <[email protected]>
Date:   Sat Aug 10 16:00:01 2024 -0400

    nfsd: stop setting ->pg_stats for unused stats
    
    [ Upstream commit a2214ed588fb3c5b9824a21cff870482510372bb ]
    
    A lot of places are setting a blank svc_stats in ->pg_stats and never
    utilizing these stats.  Remove all of these extra structs as we're not
    reporting these stats anywhere.
    
    Signed-off-by: Josef Bacik <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nvme/pci: Add APST quirk for Lenovo N60z laptop [+ + +]
Author: WangYuli <[email protected]>
Date:   Mon Jul 15 17:31:44 2024 +0800

    nvme/pci: Add APST quirk for Lenovo N60z laptop
    
    commit ab091ec536cb7b271983c0c063b17f62f3591583 upstream.
    
    There is a hardware power-saving problem with the Lenovo N60z
    board. When turn it on and leave it for 10 hours, there is a
    20% chance that a nvme disk will not wake up until reboot.
    
    Link: https://lore.kernel.org/all/2B5581C46AC6E335+9c7a81f1-05fb-4fd0-9fbb-108757c21628@uniontech.com
    Signed-off-by: hmy <[email protected]>
    Signed-off-by: Wentao Guan <[email protected]>
    Signed-off-by: WangYuli <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "ata: libata-scsi: Honor the D_SENSE bit for CK_COND=1 and no error" [+ + +]
Author: Niklas Cassel <[email protected]>
Date:   Tue Aug 13 15:19:01 2024 +0200

    Revert "ata: libata-scsi: Honor the D_SENSE bit for CK_COND=1 and no error"
    
    commit fa0db8e568787c665384430eaf2221b299b85367 upstream.
    
    This reverts commit 28ab9769117ca944cb6eb537af5599aa436287a4.
    
    Sense data can be in either fixed format or descriptor format.
    
    SAT-6 revision 1, "10.4.6 Control mode page", defines the D_SENSE bit:
    "The SATL shall support this bit as defined in SPC-5 with the following
    exception: if the D_ SENSE bit is set to zero (i.e., fixed format sense
    data), then the SATL should return fixed format sense data for ATA
    PASS-THROUGH commands."
    
    The libata SATL has always kept D_SENSE set to zero by default. (It is
    however possible to change the value using a MODE SELECT SG_IO command.)
    
    Failed ATA PASS-THROUGH commands correctly respected the D_SENSE bit,
    however, successful ATA PASS-THROUGH commands incorrectly returned the
    sense data in descriptor format (regardless of the D_SENSE bit).
    
    Commit 28ab9769117c ("ata: libata-scsi: Honor the D_SENSE bit for
    CK_COND=1 and no error") fixed this bug for successful ATA PASS-THROUGH
    commands.
    
    However, after commit 28ab9769117c ("ata: libata-scsi: Honor the D_SENSE
    bit for CK_COND=1 and no error"), there were bug reports that hdparm,
    hddtemp, and udisks were no longer working as expected.
    
    These applications incorrectly assume the returned sense data is in
    descriptor format, without even looking at the RESPONSE CODE field in the
    returned sense data (to see which format the returned sense data is in).
    
    Considering that there will be broken versions of these applications around
    roughly forever, we are stuck with being bug compatible with older kernels.
    
    Cc: [email protected] # 4.19+
    Reported-by: Stephan Eisvogel <[email protected]>
    Reported-by: Christian Heusel <[email protected]>
    Closes: https://lore.kernel.org/linux-ide/[email protected]/
    Fixes: 28ab9769117c ("ata: libata-scsi: Honor the D_SENSE bit for CK_COND=1 and no error")
    Reviewed-by: Hannes Reinecke <[email protected]>
    Reviewed-by: Martin K. Petersen <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Niklas Cassel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
selftests: mptcp: join: test both signal & subflow [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Tue Aug 13 11:28:21 2024 +0200

    selftests: mptcp: join: test both signal & subflow
    
    commit 4d2868b5d191c74262f7407972d68d1bf3245d6a upstream.
    
    It should be quite uncommon to set both the subflow and the signal
    flags: the initiator of the connection is typically the one creating new
    subflows, not the other peer, then no need to announce additional local
    addresses, and use it to create subflows.
    
    But some people might be confused about the flags, and set both "just to
    be sure at least the right one is set". To verify the previous fix, and
    avoid future regressions, this specific case is now validated: the
    client announces a new address, and initiates a new subflow from the
    same address.
    
    While working on this, another bug has been noticed, where the client
    reset the new subflow because an ADD_ADDR echo got received as the 3rd
    ACK: this new test also explicitly checks that no RST have been sent by
    the client and server.
    
    The 'Fixes' tag here below is the same as the one from the previous
    commit: this patch here is not fixing anything wrong in the selftests,
    but it validates the previous fix for an issue introduced by this commit
    ID.
    
    Fixes: 86e39e04482b ("mptcp: keep track of local endpoint still available for each msk")
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/20240731-upstream-net-20240731-mptcp-endp-subflow-signal-v1-7-c8a9b036493b@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ No conflicts, but not using 'chk_add_nr 1 1 0 invert': in this
      version, 'chk_add_nr' cannot be used with 'invert': d73bb9d3957b
      ("selftests: mptcp: join: ability to invert ADD_ADDR check") is not in
      this version, and backporting it causes a lot of conflicts. That's
      fine, checking that there is an additional subflow should be enough. ]
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sunrpc: don't change ->sv_stats if it doesn't exist [+ + +]
Author: Josef Bacik <[email protected]>
Date:   Sat Aug 10 16:00:00 2024 -0400

    sunrpc: don't change ->sv_stats if it doesn't exist
    
    [ Upstream commit ab42f4d9a26f1723dcfd6c93fcf768032b2bb5e7 ]
    
    We check for the existence of ->sv_stats elsewhere except in the core
    processing code.  It appears that only nfsd actual exports these values
    anywhere, everybody else just has a write only copy of sv_stats in their
    svc_program.  Add a check for ->sv_stats before every adjustment to
    allow us to eliminate the stats struct from all the users who don't
    report the stats.
    
    Signed-off-by: Josef Bacik <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    [ cel: adjusted to apply to v6.1.y ]
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

sunrpc: pass in the sv_stats struct through svc_create_pooled [+ + +]
Author: Josef Bacik <[email protected]>
Date:   Sat Aug 10 16:00:02 2024 -0400

    sunrpc: pass in the sv_stats struct through svc_create_pooled
    
    [ Upstream commit f094323867668d50124886ad884b665de7319537 ]
    
    Since only one service actually reports the rpc stats there's not much
    of a reason to have a pointer to it in the svc_program struct.  Adjust
    the svc_create_pooled function to take the sv_stats as an argument and
    pass the struct through there as desired instead of getting it from the
    svc_program->pg_stats.
    
    Signed-off-by: Josef Bacik <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    [ cel: adjusted to apply to v6.1.y ]
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

sunrpc: remove ->pg_stats from svc_program [+ + +]
Author: Josef Bacik <[email protected]>
Date:   Sat Aug 10 16:00:03 2024 -0400

    sunrpc: remove ->pg_stats from svc_program
    
    [ Upstream commit 3f6ef182f144dcc9a4d942f97b6a8ed969f13c95 ]
    
    Now that this isn't used anywhere, remove it.
    
    Signed-off-by: Josef Bacik <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    [ cel: adjusted to apply to v6.1.y ]
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

sunrpc: use the struct net as the svc proc private [+ + +]
Author: Josef Bacik <[email protected]>
Date:   Sat Aug 10 16:00:04 2024 -0400

    sunrpc: use the struct net as the svc proc private
    
    [ Upstream commit 418b9687dece5bd763c09b5c27a801a7e3387be9 ]
    
    nfsd is the only thing using this helper, and it doesn't use the private
    currently.  When we switch to per-network namespace stats we will need
    the struct net * in order to get to the nfsd_net.  Use the net as the
    proc private so we can utilize this when we make the switch over.
    
    Signed-off-by: Josef Bacik <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
wifi: cfg80211: restrict NL80211_ATTR_TXQ_QUANTUM values [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Sat Jun 15 16:08:00 2024 +0000

    wifi: cfg80211: restrict NL80211_ATTR_TXQ_QUANTUM values
    
    [ Upstream commit d1cba2ea8121e7fdbe1328cea782876b1dd80993 ]
    
    syzbot is able to trigger softlockups, setting NL80211_ATTR_TXQ_QUANTUM
    to 2^31.
    
    We had a similar issue in sch_fq, fixed with commit
    d9e15a273306 ("pkt_sched: fq: do not accept silly TCA_FQ_QUANTUM")
    
    watchdog: BUG: soft lockup - CPU#1 stuck for 26s! [kworker/1:0:24]
    Modules linked in:
    irq event stamp: 131135
     hardirqs last  enabled at (131134): [<ffff80008ae8778c>] __exit_to_kernel_mode arch/arm64/kernel/entry-common.c:85 [inline]
     hardirqs last  enabled at (131134): [<ffff80008ae8778c>] exit_to_kernel_mode+0xdc/0x10c arch/arm64/kernel/entry-common.c:95
     hardirqs last disabled at (131135): [<ffff80008ae85378>] __el1_irq arch/arm64/kernel/entry-common.c:533 [inline]
     hardirqs last disabled at (131135): [<ffff80008ae85378>] el1_interrupt+0x24/0x68 arch/arm64/kernel/entry-common.c:551
     softirqs last  enabled at (125892): [<ffff80008907e82c>] neigh_hh_init net/core/neighbour.c:1538 [inline]
     softirqs last  enabled at (125892): [<ffff80008907e82c>] neigh_resolve_output+0x268/0x658 net/core/neighbour.c:1553
     softirqs last disabled at (125896): [<ffff80008904166c>] local_bh_disable+0x10/0x34 include/linux/bottom_half.h:19
    CPU: 1 PID: 24 Comm: kworker/1:0 Not tainted 6.9.0-rc7-syzkaller-gfda5695d692c #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/27/2024
    Workqueue: mld mld_ifc_work
    pstate: 80400005 (Nzcv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
     pc : __list_del include/linux/list.h:195 [inline]
     pc : __list_del_entry include/linux/list.h:218 [inline]
     pc : list_move_tail include/linux/list.h:310 [inline]
     pc : fq_tin_dequeue include/net/fq_impl.h:112 [inline]
     pc : ieee80211_tx_dequeue+0x6b8/0x3b4c net/mac80211/tx.c:3854
     lr : __list_del_entry include/linux/list.h:218 [inline]
     lr : list_move_tail include/linux/list.h:310 [inline]
     lr : fq_tin_dequeue include/net/fq_impl.h:112 [inline]
     lr : ieee80211_tx_dequeue+0x67c/0x3b4c net/mac80211/tx.c:3854
    sp : ffff800093d36700
    x29: ffff800093d36a60 x28: ffff800093d36960 x27: dfff800000000000
    x26: ffff0000d800ad50 x25: ffff0000d800abe0 x24: ffff0000d800abf0
    x23: ffff0000e0032468 x22: ffff0000e00324d4 x21: ffff0000d800abf0
    x20: ffff0000d800abf8 x19: ffff0000d800abf0 x18: ffff800093d363c0
    x17: 000000000000d476 x16: ffff8000805519dc x15: ffff7000127a6cc8
    x14: 1ffff000127a6cc8 x13: 0000000000000004 x12: ffffffffffffffff
    x11: ffff7000127a6cc8 x10: 0000000000ff0100 x9 : 0000000000000000
    x8 : 0000000000000000 x7 : 0000000000000000 x6 : 0000000000000000
    x5 : ffff80009287aa08 x4 : 0000000000000008 x3 : ffff80008034c7fc
    x2 : ffff0000e0032468 x1 : 00000000da0e46b8 x0 : ffff0000e0032470
    Call trace:
      __list_del include/linux/list.h:195 [inline]
      __list_del_entry include/linux/list.h:218 [inline]
      list_move_tail include/linux/list.h:310 [inline]
      fq_tin_dequeue include/net/fq_impl.h:112 [inline]
      ieee80211_tx_dequeue+0x6b8/0x3b4c net/mac80211/tx.c:3854
      wake_tx_push_queue net/mac80211/util.c:294 [inline]
      ieee80211_handle_wake_tx_queue+0x118/0x274 net/mac80211/util.c:315
      drv_wake_tx_queue net/mac80211/driver-ops.h:1350 [inline]
      schedule_and_wake_txq net/mac80211/driver-ops.h:1357 [inline]
      ieee80211_queue_skb+0x18e8/0x2244 net/mac80211/tx.c:1664
      ieee80211_tx+0x260/0x400 net/mac80211/tx.c:1966
      ieee80211_xmit+0x278/0x354 net/mac80211/tx.c:2062
      __ieee80211_subif_start_xmit+0xab8/0x122c net/mac80211/tx.c:4338
      ieee80211_subif_start_xmit+0xe0/0x438 net/mac80211/tx.c:4532
      __netdev_start_xmit include/linux/netdevice.h:4903 [inline]
      netdev_start_xmit include/linux/netdevice.h:4917 [inline]
      xmit_one net/core/dev.c:3531 [inline]
      dev_hard_start_xmit+0x27c/0x938 net/core/dev.c:3547
      __dev_queue_xmit+0x1678/0x33fc net/core/dev.c:4341
      dev_queue_xmit include/linux/netdevice.h:3091 [inline]
      neigh_resolve_output+0x558/0x658 net/core/neighbour.c:1563
      neigh_output include/net/neighbour.h:542 [inline]
      ip6_finish_output2+0x104c/0x1ee8 net/ipv6/ip6_output.c:137
      ip6_finish_output+0x428/0x7a0 net/ipv6/ip6_output.c:222
      NF_HOOK_COND include/linux/netfilter.h:303 [inline]
      ip6_output+0x270/0x594 net/ipv6/ip6_output.c:243
      dst_output include/net/dst.h:450 [inline]
      NF_HOOK+0x160/0x4f0 include/linux/netfilter.h:314
      mld_sendpack+0x7b4/0x10f4 net/ipv6/mcast.c:1818
      mld_send_cr net/ipv6/mcast.c:2119 [inline]
      mld_ifc_work+0x840/0xd0c net/ipv6/mcast.c:2650
      process_one_work+0x7b8/0x15d4 kernel/workqueue.c:3267
      process_scheduled_works kernel/workqueue.c:3348 [inline]
      worker_thread+0x938/0xef4 kernel/workqueue.c:3429
      kthread+0x288/0x310 kernel/kthread.c:388
      ret_from_fork+0x10/0x20 arch/arm64/kernel/entry.S:860
    
    Fixes: 52539ca89f36 ("cfg80211: Expose TXQ stats and parameters to userspace")
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>