Changelog in Linux kernel 6.12.16

 
8250: microchip: pci1xxxx: Add workaround for RTS bit toggle [+ + +]
Author: Rengarajan S <rengarajan.s@microchip.com>
Date:   Wed Dec 18 15:10:17 2024 +0530

    8250: microchip: pci1xxxx: Add workaround for RTS bit toggle
    
    [ Upstream commit e95cb63e57381f00d9274533ea7fd0ac3bf4e5b0 ]
    
    In the B0 revision, the RTS pin remains high due to incorrect hardware
    mapping. To address this issue, enable auto-direction control with the
    RTS bit in ADCL_CFG_REG. This configuration ensures that the RTS pin
    goes low when the terminal is opened and high when the terminal is
    closed. Additionally, we reset the step counter for Rx and Tx engines
    by writing into FRAC_DIV_CFG_REG.
    
    Signed-off-by: Rengarajan S <rengarajan.s@microchip.com>
    Link: https://lore.kernel.org/r/20241218094017.18290-1-rengarajan.s@microchip.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ACPI: x86: Add skip i2c clients quirk for Vexia EDU ATLA 10 tablet 5V [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Thu Jan 23 14:22:02 2025 +0100

    ACPI: x86: Add skip i2c clients quirk for Vexia EDU ATLA 10 tablet 5V
    
    [ Upstream commit 8f62ca9c338aae4f73e9ce0221c3d4668359ddd8 ]
    
    The Vexia EDU ATLA 10 tablet comes in 2 different versions with
    significantly different mainboards. The only outward difference is that
    the charging barrel on one is marked 5V and the other is marked 9V.
    
    Both ship with Android 4.4 as factory OS and have the usual broken DSDT
    issues for x86 Android tablets.
    
    Add a quirk to skip ACPI I2C client enumeration for the 5V version to
    complement the existing quirk for the 9V version.
    
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://patch.msgid.link/20250123132202.18209-1-hdegoede@redhat.com
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
alpha: align stack for page fault and user unaligned trap handlers [+ + +]
Author: Ivan Kokshaysky <ink@unseen.parts>
Date:   Tue Feb 4 23:35:24 2025 +0100

    alpha: align stack for page fault and user unaligned trap handlers
    
    commit 3b35a171060f846b08b48646b38c30b5d57d17ff upstream.
    
    do_page_fault() and do_entUna() are special because they use
    non-standard stack frame layout. Fix them manually.
    
    Cc: stable@vger.kernel.org
    Tested-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Tested-by: Magnus Lindholm <linmag7@gmail.com>
    Tested-by: Matt Turner <mattst88@gmail.com>
    Reviewed-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Suggested-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Signed-off-by: Ivan Kokshaysky <ink@unseen.parts>
    Signed-off-by: Matt Turner <mattst88@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

alpha: make stack 16-byte aligned (most cases) [+ + +]
Author: Ivan Kokshaysky <ink@unseen.parts>
Date:   Tue Feb 4 23:35:23 2025 +0100

    alpha: make stack 16-byte aligned (most cases)
    
    commit 0a0f7362b0367634a2d5cb7c96226afc116f19c9 upstream.
    
    The problem is that GCC expects 16-byte alignment of the incoming stack
    since early 2004, as Maciej found out [1]:
      Having actually dug speculatively I can see that the psABI was changed in
     GCC 3.5 with commit e5e10fb4a350 ("re PR target/14539 (128-bit long double
     improperly aligned)") back in Mar 2004, when the stack pointer alignment
     was increased from 8 bytes to 16 bytes, and arch/alpha/kernel/entry.S has
     various suspicious stack pointer adjustments, starting with SP_OFF which
     is not a whole multiple of 16.
    
    Also, as Magnus noted, "ALPHA Calling Standard" [2] required the same:
     D.3.1 Stack Alignment
      This standard requires that stacks be octaword aligned at the time a
      new procedure is invoked.
    
    However:
    - the "normal" kernel stack is always misaligned by 8 bytes, thanks to
      the odd number of 64-bit words in 'struct pt_regs', which is the very
      first thing pushed onto the kernel thread stack;
    - syscall, fault, interrupt etc. handlers may, or may not, receive aligned
      stack depending on numerous factors.
    
    Somehow we got away with it until recently, when we ended up with
    a stack corruption in kernel/smp.c:smp_call_function_single() due to
    its use of 32-byte aligned local data and the compiler doing clever
    things allocating it on the stack.
    
    This adds padding between the PAL-saved and kernel-saved registers
    so that 'struct pt_regs' have an even number of 64-bit words.
    This makes the stack properly aligned for most of the kernel
    code, except two handlers which need special threatment.
    
    Note: struct pt_regs doesn't belong in uapi/asm; this should be fixed,
    but let's put this off until later.
    
    Link: https://lore.kernel.org/rcu/alpine.DEB.2.21.2501130248010.18889@angie.orcam.me.uk/ [1]
    Link: https://bitsavers.org/pdf/dec/alpha/Alpha_Calling_Standard_Rev_2.0_19900427.pdf [2]
    
    Cc: stable@vger.kernel.org
    Tested-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Tested-by: Magnus Lindholm <linmag7@gmail.com>
    Tested-by: Matt Turner <mattst88@gmail.com>
    Reviewed-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Signed-off-by: Ivan Kokshaysky <ink@unseen.parts>
    Signed-off-by: Matt Turner <mattst88@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

alpha: replace hardcoded stack offsets with autogenerated ones [+ + +]
Author: Ivan Kokshaysky <ink@unseen.parts>
Date:   Tue Feb 4 23:35:22 2025 +0100

    alpha: replace hardcoded stack offsets with autogenerated ones
    
    commit 77b823fa619f97d16409ca37ad4f7936e28c5f83 upstream.
    
    This allows the assembly in entry.S to automatically keep in sync with
    changes in the stack layout (struct pt_regs and struct switch_stack).
    
    Cc: stable@vger.kernel.org
    Tested-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Tested-by: Matt Turner <mattst88@gmail.com>
    Reviewed-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Signed-off-by: Ivan Kokshaysky <ink@unseen.parts>
    Signed-off-by: Matt Turner <mattst88@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
amdkfd: properly free gang_ctx_bo when failed to init user queue [+ + +]
Author: Zhu Lingshan <lingshan.zhu@amd.com>
Date:   Sun Jan 26 17:21:10 2025 +0800

    amdkfd: properly free gang_ctx_bo when failed to init user queue
    
    [ Upstream commit a33f7f9660705fb2ecf3467b2c48965564f392ce ]
    
    The destructor of a gtt bo is declared as
    void amdgpu_amdkfd_free_gtt_mem(struct amdgpu_device *adev, void **mem_obj);
    Which takes void** as the second parameter.
    
    GCC allows passing void* to the function because void* can be implicitly
    casted to any other types, so it can pass compiling.
    
    However, passing this void* parameter into the function's
    execution process(which expects void** and dereferencing void**)
    will result in errors.
    
    Signed-off-by: Zhu Lingshan <lingshan.zhu@amd.com>
    Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
    Fixes: fb91065851cd ("drm/amdkfd: Refactor queue wptr_bo GART mapping")
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
arm64: cacheinfo: Avoid out-of-bounds write to cacheinfo array [+ + +]
Author: Radu Rendec <rrendec@redhat.com>
Date:   Thu Feb 6 12:44:20 2025 -0500

    arm64: cacheinfo: Avoid out-of-bounds write to cacheinfo array
    
    [ Upstream commit 875d742cf5327c93cba1f11e12b08d3cce7a88d2 ]
    
    The loop that detects/populates cache information already has a bounds
    check on the array size but does not account for cache levels with
    separate data/instructions cache. Fix this by incrementing the index
    for any populated leaf (instead of any populated level).
    
    Fixes: 5d425c186537 ("arm64: kernel: add support for cpu cache information")
    
    Signed-off-by: Radu Rendec <rrendec@redhat.com>
    Link: https://lore.kernel.org/r/20250206174420.2178724-1-rrendec@redhat.com
    Signed-off-by: Will Deacon <will@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: Handle .ARM.attributes section in linker scripts [+ + +]
Author: Nathan Chancellor <nathan@kernel.org>
Date:   Thu Feb 6 10:21:38 2025 -0700

    arm64: Handle .ARM.attributes section in linker scripts
    
    commit ca0f4fe7cf7183bfbdc67ca2de56ae1fc3a8db2b upstream.
    
    A recent LLVM commit [1] started generating an .ARM.attributes section
    similar to the one that exists for 32-bit, which results in orphan
    section warnings (or errors if CONFIG_WERROR is enabled) from the linker
    because it is not handled in the arm64 linker scripts.
    
      ld.lld: error: arch/arm64/kernel/vdso/vgettimeofday.o:(.ARM.attributes) is being placed in '.ARM.attributes'
      ld.lld: error: arch/arm64/kernel/vdso/vgetrandom.o:(.ARM.attributes) is being placed in '.ARM.attributes'
    
      ld.lld: error: vmlinux.a(lib/vsprintf.o):(.ARM.attributes) is being placed in '.ARM.attributes'
      ld.lld: error: vmlinux.a(lib/win_minmax.o):(.ARM.attributes) is being placed in '.ARM.attributes'
      ld.lld: error: vmlinux.a(lib/xarray.o):(.ARM.attributes) is being placed in '.ARM.attributes'
    
    Discard the new sections in the necessary linker scripts to resolve the
    warnings, as the kernel and vDSO do not need to retain it, similar to
    the .note.gnu.property section.
    
    Cc: stable@vger.kernel.org
    Fixes: b3e5d80d0c48 ("arm64/build: Warn on orphan section placement")
    Link: https://github.com/llvm/llvm-project/commit/ee99c4d4845db66c4daa2373352133f4b237c942 [1]
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Link: https://lore.kernel.org/r/20250206-arm64-handle-arm-attributes-in-linker-script-v3-1-d53d169913eb@kernel.org
    Signed-off-by: Will Deacon <will@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: rust: clean Rust 1.85.0 warning using softfloat target [+ + +]
Author: Miguel Ojeda <ojeda@kernel.org>
Date:   Mon Feb 10 17:37:32 2025 +0100

    arm64: rust: clean Rust 1.85.0 warning using softfloat target
    
    commit 446a8351f160d65a1c5df7097f31c74102ed2bb1 upstream.
    
    Starting with Rust 1.85.0 (to be released 2025-02-20), `rustc` warns
    [1] about disabling neon in the aarch64 hardfloat target:
    
        warning: target feature `neon` cannot be toggled with
                 `-Ctarget-feature`: unsound on hard-float targets
                 because it changes float ABI
          |
          = note: this was previously accepted by the compiler but
                  is being phased out; it will become a hard error
                  in a future release!
          = note: for more information, see issue #116344
                  <https://github.com/rust-lang/rust/issues/116344>
    
    Thus, instead, use the softfloat target instead.
    
    While trying it out, I found that the kernel sanitizers were not enabled
    for that built-in target [2]. Upstream Rust agreed to backport
    the enablement for the current beta so that it is ready for
    the 1.85.0 release [3] -- thanks!
    
    However, that still means that before Rust 1.85.0, we cannot switch
    since sanitizers could be in use. Thus conditionally do so.
    
    Cc: stable@vger.kernel.org # Needed in 6.12.y and 6.13.y only (Rust is pinned in older LTSs).
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Cc: Matthew Maurer <mmaurer@google.com>
    Cc: Alice Ryhl <aliceryhl@google.com>
    Cc: Ralf Jung <post@ralfj.de>
    Cc: Jubilee Young <workingjubilee@gmail.com>
    Link: https://github.com/rust-lang/rust/pull/133417 [1]
    Link: https://rust-lang.zulipchat.com/#narrow/channel/131828-t-compiler/topic/arm64.20neon.20.60-Ctarget-feature.60.20warning/near/495358442 [2]
    Link: https://github.com/rust-lang/rust/pull/135905 [3]
    Link: https://github.com/rust-lang/rust/issues/116344
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Reviewed-by: Trevor Gross <tmgross@umich.edu>
    Tested-by: Matthew Maurer <mmaurer@google.com>
    Reviewed-by: Ralf Jung <post@ralfj.de>
    Reviewed-by: Alice Ryhl <aliceryhl@google.com>
    Link: https://lore.kernel.org/r/20250210163732.281786-1-ojeda@kernel.org
    Signed-off-by: Will Deacon <will@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
arp: use RCU protection in arp_xmit() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Feb 7 13:58:36 2025 +0000

    arp: use RCU protection in arp_xmit()
    
    [ Upstream commit a42b69f692165ec39db42d595f4f65a4c8f42e44 ]
    
    arp_xmit() can be called without RTNL or RCU protection.
    
    Use RCU protection to avoid potential UAF.
    
    Fixes: 29a26a568038 ("netfilter: Pass struct net into the netfilter hooks")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20250207135841.1948589-5-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ASoC: Intel: bytcr_rt5640: Add DMI quirk for Vexia Edu Atla 10 tablet 5V [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Thu Jan 23 14:25:07 2025 +0100

    ASoC: Intel: bytcr_rt5640: Add DMI quirk for Vexia Edu Atla 10 tablet 5V
    
    [ Upstream commit 6917192378c1ce17ba31df51c4e0d8b1c97a453b ]
    
    The Vexia EDU ATLA 10 tablet comes in 2 different versions with
    significantly different mainboards. The only outward difference is that
    the charging barrel on one is marked 5V and the other is marked 9V.
    
    The 5V version mostly works with the BYTCR defaults, except that it is
    missing a CHAN package in its ACPI tables and the default of using
    SSP0-AIF2 is wrong, instead SSP0-AIF1 must be used. That and its jack
    detect signal is not inverted as it usually is.
    
    Add a DMI quirk for the 5V version to fix sound not working.
    
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://patch.msgid.link/20250123132507.18434-1-hdegoede@redhat.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ax25: Fix refcount leak caused by setting SO_BINDTODEVICE sockopt [+ + +]
Author: Murad Masimov <m.masimov@mt-integration.ru>
Date:   Mon Feb 3 12:12:03 2025 +0300

    ax25: Fix refcount leak caused by setting SO_BINDTODEVICE sockopt
    
    [ Upstream commit bca0902e61731a75fc4860c8720168d9f1bae3b6 ]
    
    If an AX25 device is bound to a socket by setting the SO_BINDTODEVICE
    socket option, a refcount leak will occur in ax25_release().
    
    Commit 9fd75b66b8f6 ("ax25: Fix refcount leaks caused by ax25_cb_del()")
    added decrement of device refcounts in ax25_release(). In order for that
    to work correctly the refcounts must already be incremented when the
    device is bound to the socket. An AX25 device can be bound to a socket
    by either calling ax25_bind() or setting SO_BINDTODEVICE socket option.
    In both cases the refcounts should be incremented, but in fact it is done
    only in ax25_bind().
    
    This bug leads to the following issue reported by Syzkaller:
    
    ================================================================
    refcount_t: decrement hit 0; leaking memory.
    WARNING: CPU: 1 PID: 5932 at lib/refcount.c:31 refcount_warn_saturate+0x1ed/0x210 lib/refcount.c:31
    Modules linked in:
    CPU: 1 UID: 0 PID: 5932 Comm: syz-executor424 Not tainted 6.13.0-rc4-syzkaller-00110-g4099a71718b0 #0
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014
    RIP: 0010:refcount_warn_saturate+0x1ed/0x210 lib/refcount.c:31
    Call Trace:
     <TASK>
     __refcount_dec include/linux/refcount.h:336 [inline]
     refcount_dec include/linux/refcount.h:351 [inline]
     ref_tracker_free+0x710/0x820 lib/ref_tracker.c:236
     netdev_tracker_free include/linux/netdevice.h:4156 [inline]
     netdev_put include/linux/netdevice.h:4173 [inline]
     netdev_put include/linux/netdevice.h:4169 [inline]
     ax25_release+0x33f/0xa10 net/ax25/af_ax25.c:1069
     __sock_release+0xb0/0x270 net/socket.c:640
     sock_close+0x1c/0x30 net/socket.c:1408
     ...
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xcd/0x250 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
     ...
     </TASK>
    ================================================================
    
    Fix the implementation of ax25_setsockopt() by adding increment of
    refcounts for the new device bound, and decrement of refcounts for
    the old unbound device.
    
    Fixes: 9fd75b66b8f6 ("ax25: Fix refcount leaks caused by ax25_cb_del()")
    Reported-by: syzbot+33841dc6aa3e1d86b78a@syzkaller.appspotmail.com
    Signed-off-by: Murad Masimov <m.masimov@mt-integration.ru>
    Link: https://patch.msgid.link/20250203091203.1744-1-m.masimov@mt-integration.ru
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
batman-adv: Drop unmanaged ELP metric worker [+ + +]
Author: Sven Eckelmann <sven@narfation.org>
Date:   Mon Jan 20 00:06:11 2025 +0100

    batman-adv: Drop unmanaged ELP metric worker
    
    commit 8c8ecc98f5c65947b0070a24bac11e12e47cc65d upstream.
    
    The ELP worker needs to calculate new metric values for all neighbors
    "reachable" over an interface. Some of the used metric sources require
    locks which might need to sleep. This sleep is incompatible with the RCU
    list iterator used for the recorded neighbors. The initial approach to work
    around of this problem was to queue another work item per neighbor and then
    run this in a new context.
    
    Even when this solved the RCU vs might_sleep() conflict, it has a major
    problems: Nothing was stopping the work item in case it is not needed
    anymore - for example because one of the related interfaces was removed or
    the batman-adv module was unloaded - resulting in potential invalid memory
    accesses.
    
    Directly canceling the metric worker also has various problems:
    
    * cancel_work_sync for a to-be-deactivated interface is called with
      rtnl_lock held. But the code in the ELP metric worker also tries to use
      rtnl_lock() - which will never return in this case. This also means that
      cancel_work_sync would never return because it is waiting for the worker
      to finish.
    * iterating over the neighbor list for the to-be-deactivated interface is
      currently done using the RCU specific methods. Which means that it is
      possible to miss items when iterating over it without the associated
      spinlock - a behaviour which is acceptable for a periodic metric check
      but not for a cleanup routine (which must "stop" all still running
      workers)
    
    The better approch is to get rid of the per interface neighbor metric
    worker and handle everything in the interface worker. The original problems
    are solved by:
    
    * creating a list of neighbors which require new metric information inside
      the RCU protected context, gathering the metric according to the new list
      outside the RCU protected context
    * only use rcu_trylock inside metric gathering code to avoid a deadlock
      when the cancel_delayed_work_sync is called in the interface removal code
      (which is called with the rtnl_lock held)
    
    Cc: stable@vger.kernel.org
    Fixes: c833484e5f38 ("batman-adv: ELP - compute the metric based on the estimated throughput")
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

batman-adv: fix panic during interface removal [+ + +]
Author: Andy Strohman <andrew@andrewstrohman.com>
Date:   Thu Jan 9 02:27:56 2025 +0000

    batman-adv: fix panic during interface removal
    
    commit ccb7276a6d26d6f8416e315b43b45e15ee7f29e2 upstream.
    
    Reference counting is used to ensure that
    batadv_hardif_neigh_node and batadv_hard_iface
    are not freed before/during
    batadv_v_elp_throughput_metric_update work is
    finished.
    
    But there isn't a guarantee that the hard if will
    remain associated with a soft interface up until
    the work is finished.
    
    This fixes a crash triggered by reboot that looks
    like this:
    
    Call trace:
     batadv_v_mesh_free+0xd0/0x4dc [batman_adv]
     batadv_v_elp_throughput_metric_update+0x1c/0xa4
     process_one_work+0x178/0x398
     worker_thread+0x2e8/0x4d0
     kthread+0xd8/0xdc
     ret_from_fork+0x10/0x20
    
    (the batadv_v_mesh_free call is misleading,
    and does not actually happen)
    
    I was able to make the issue happen more reliably
    by changing hardif_neigh->bat_v.metric_work work
    to be delayed work. This allowed me to track down
    and confirm the fix.
    
    Cc: stable@vger.kernel.org
    Fixes: c833484e5f38 ("batman-adv: ELP - compute the metric based on the estimated throughput")
    Signed-off-by: Andy Strohman <andrew@andrewstrohman.com>
    [sven@narfation.org: prevent entering batadv_v_elp_get_throughput without
     soft_iface]
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

batman-adv: Ignore neighbor throughput metrics in error case [+ + +]
Author: Sven Eckelmann <sven@narfation.org>
Date:   Mon Jan 20 20:35:28 2025 +0100

    batman-adv: Ignore neighbor throughput metrics in error case
    
    commit e7e34ffc976aaae4f465b7898303241b81ceefc3 upstream.
    
    If a temporary error happened in the evaluation of the neighbor throughput
    information, then the invalid throughput result should not be stored in the
    throughtput EWMA.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
block: cleanup and fix batch completion adding conditions [+ + +]
Author: Jens Axboe <axboe@kernel.dk>
Date:   Thu Feb 13 08:18:46 2025 -0700

    block: cleanup and fix batch completion adding conditions
    
    [ Upstream commit 1f47ed294a2bd577d5ae43e6e28e1c9a3be4a833 ]
    
    The conditions for whether or not a request is allowed adding to a
    completion batch are a bit hard to read, and they also have a few
    issues. One is that ioerror may indeed be a random value on passthrough,
    and it's being checked unconditionally of whether or not the given
    request is a passthrough request or not.
    
    Rewrite the conditions to be separate for easier reading, and only check
    ioerror for non-passthrough requests. This fixes an issue with bio
    unmapping on passthrough, where it fails getting added to a batch. This
    both leads to suboptimal performance, and may trigger a potential
    schedule-under-atomic condition for polled passthrough IO.
    
    Fixes: f794f3351f26 ("block: add support for blk_mq_end_request_batch()")
    Link: https://lore.kernel.org/r/20575f0a-656e-4bb3-9d82-dec6c7e3a35c@kernel.dk
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Bluetooth: btintel_pcie: Fix a potential race condition [+ + +]
Author: Kiran K <kiran.k@intel.com>
Date:   Fri Jan 31 18:30:19 2025 +0530

    Bluetooth: btintel_pcie: Fix a potential race condition
    
    [ Upstream commit 872274b992839ff64fe560767fe7ee5f942ccdb1 ]
    
    On HCI_OP_RESET command, firmware raises alive interrupt. Driver needs
    to wait for this before sending other command. This patch fixes the potential
    miss of alive interrupt due to which HCI_OP_RESET can timeout.
    
    Expected flow:
    If tx command is HCI_OP_RESET,
      1. set data->gp0_received = false
      2. send HCI_OP_RESET
      3. wait for alive interrupt
    
    Actual flow having potential race:
    If tx command is HCI_OP_RESET,
     1. send HCI_OP_RESET
       1a. Firmware raises alive interrupt here and in ISR
           data->gp0_received  is set to true
     2. set data->gp0_received = false
     3. wait for alive interrupt
    
    Signed-off-by: Kiran K <kiran.k@intel.com>
    Fixes: 05c200c8f029 ("Bluetooth: btintel_pcie: Add handshake between driver and firmware")
    Reported-by: Bjorn Helgaas <helgaas@kernel.org>
    Closes: https://patchwork.kernel.org/project/bluetooth/patch/20241001104451.626964-1-kiran.k@intel.com/
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf: handle implicit declaration of function gettid in bpf_iter.c [+ + +]
Author: Jason Xing <kernelxing@tencent.com>
Date:   Tue Oct 29 15:46:27 2024 +0800

    bpf: handle implicit declaration of function gettid in bpf_iter.c
    
    commit 42602e3a06f8e5b9a059344e305c9bee2dcc87c8 upstream.
    
    As we can see from the title, when I compiled the selftests/bpf, I
    saw the error:
    implicit declaration of function ‘gettid’ ; did you mean ‘getgid’? [-Werror=implicit-function-declaration]
      skel->bss->tid = gettid();
                       ^~~~~~
                       getgid
    
    Directly call the syscall solves this issue.
    
    Signed-off-by: Jason Xing <kernelxing@tencent.com>
    Reviewed-by: Alan Maguire <alan.maguire@oracle.com>
    Tested-by: Alan Maguire <alan.maguire@oracle.com>
    Link: https://lore.kernel.org/r/20241029074627.80289-1-kerneljasonxing@gmail.com
    Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
    Cc: Alan Maguire <alan.maguire@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
btrfs: fix hole expansion when writing at an offset beyond EOF [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Wed Feb 5 17:36:48 2025 +0000

    btrfs: fix hole expansion when writing at an offset beyond EOF
    
    commit da2dccd7451de62b175fb8f0808d644959e964c7 upstream.
    
    At btrfs_write_check() if our file's i_size is not sector size aligned and
    we have a write that starts at an offset larger than the i_size that falls
    within the same page of the i_size, then we end up not zeroing the file
    range [i_size, write_offset).
    
    The code is this:
    
        start_pos = round_down(pos, fs_info->sectorsize);
        oldsize = i_size_read(inode);
        if (start_pos > oldsize) {
            /* Expand hole size to cover write data, preventing empty gap */
            loff_t end_pos = round_up(pos + count, fs_info->sectorsize);
    
            ret = btrfs_cont_expand(BTRFS_I(inode), oldsize, end_pos);
            if (ret)
                return ret;
        }
    
    So if our file's i_size is 90269 bytes and a write at offset 90365 bytes
    comes in, we get 'start_pos' set to 90112 bytes, which is less than the
    i_size and therefore we don't zero out the range [90269, 90365) by
    calling btrfs_cont_expand().
    
    This is an old bug introduced in commit 9036c10208e1 ("Btrfs: update hole
    handling v2"), from 2008, and the buggy code got moved around over the
    years.
    
    Fix this by discarding 'start_pos' and comparing against the write offset
    ('pos') without any alignment.
    
    This bug was recently exposed by test case generic/363 which tests this
    scenario by polluting ranges beyond EOF with an mmap write and than verify
    that after a file increases we get zeroes for the range which is supposed
    to be a hole and not what we wrote with the previous mmaped write.
    
    We're only seeing this exposed now because generic/363 used to run only
    on xfs until last Sunday's fstests update.
    
    The test was failing like this:
    
       $ ./check generic/363
       FSTYP         -- btrfs
       PLATFORM      -- Linux/x86_64 debian0 6.13.0-rc7-btrfs-next-185+ #17 SMP PREEMPT_DYNAMIC Mon Feb  3 12:28:46 WET 2025
       MKFS_OPTIONS  -- /dev/sdc
       MOUNT_OPTIONS -- /dev/sdc /home/fdmanana/btrfs-tests/scratch_1
    
       generic/363 0s ... [failed, exit status 1]- output mismatch (see /home/fdmanana/git/hub/xfstests/results//generic/363.out.bad)
    #      --- tests/generic/363.out        2025-02-05 15:31:14.013646509 +0000
    #      +++ /home/fdmanana/git/hub/xfstests/results//generic/363.out.bad 2025-02-05 17:25:33.112630781 +0000
           @@ -1 +1,46 @@
            QA output created by 363
           +READ BAD DATA: offset = 0xdcad, size = 0xd921, fname = /home/fdmanana/btrfs-tests/dev/junk
           +OFFSET      GOOD    BAD     RANGE
           +0x1609d     0x0000  0x3104  0x0
           +operation# (mod 256) for the bad data may be 4
           +0x1609e     0x0000  0x0472  0x1
           +operation# (mod 256) for the bad data may be 4
           ...
           (Run 'diff -u /home/fdmanana/git/hub/xfstests/tests/generic/363.out /home/fdmanana/git/hub/xfstests/results//generic/363.out.bad'  to see the entire diff)
       Ran: generic/363
       Failures: generic/363
       Failed 1 of 1 tests
    
    Fixes: 9036c10208e1 ("Btrfs: update hole handling v2")
    CC: stable@vger.kernel.org
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: fix stale page cache after race between readahead and direct IO write [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Tue Feb 4 11:02:32 2025 +0000

    btrfs: fix stale page cache after race between readahead and direct IO write
    
    [ Upstream commit acc18e1c1d8c0d59d793cf87790ccfcafb1bf5f0 ]
    
    After commit ac325fc2aad5 ("btrfs: do not hold the extent lock for entire
    read") we can now trigger a race between a task doing a direct IO write
    and readahead. When this race is triggered it results in tasks getting
    stale data when they attempt do a buffered read (including the task that
    did the direct IO write).
    
    This race can be sporadically triggered with test case generic/418, failing
    like this:
    
       $ ./check generic/418
       FSTYP         -- btrfs
       PLATFORM      -- Linux/x86_64 debian0 6.13.0-rc7-btrfs-next-185+ #17 SMP PREEMPT_DYNAMIC Mon Feb  3 12:28:46 WET 2025
       MKFS_OPTIONS  -- /dev/sdc
       MOUNT_OPTIONS -- /dev/sdc /home/fdmanana/btrfs-tests/scratch_1
    
       generic/418 14s ... - output mismatch (see /home/fdmanana/git/hub/xfstests/results//generic/418.out.bad)
    #      --- tests/generic/418.out        2020-06-10 19:29:03.850519863 +0100
    #      +++ /home/fdmanana/git/hub/xfstests/results//generic/418.out.bad 2025-02-03 15:42:36.974609476 +0000
           @@ -1,2 +1,5 @@
            QA output created by 418
           +cmpbuf: offset 0: Expected: 0x1, got 0x0
           +[6:0] FAIL - comparison failed, offset 24576
           +diotest -wp -b 4096 -n 8 -i 4 failed at loop 3
            Silence is golden
           ...
           (Run 'diff -u /home/fdmanana/git/hub/xfstests/tests/generic/418.out /home/fdmanana/git/hub/xfstests/results//generic/418.out.bad'  to see the entire diff)
       Ran: generic/418
       Failures: generic/418
       Failed 1 of 1 tests
    
    The race happens like this:
    
    1) A file has a prealloc extent for the range [16K, 28K);
    
    2) Task A starts a direct IO write against file range [24K, 28K).
       At the start of the direct IO write it invalidates the page cache at
       __iomap_dio_rw() with kiocb_invalidate_pages() for the 4K page at file
       offset 24K;
    
    3) Task A enters btrfs_dio_iomap_begin() and locks the extent range
       [24K, 28K);
    
    4) Task B starts a readahead for file range [16K, 28K), entering
       btrfs_readahead().
    
       First it attempts to read the page at offset 16K by entering
       btrfs_do_readpage(), where it calls get_extent_map(), locks the range
       [16K, 20K) and gets the extent map for the range [16K, 28K), caching
       it into the 'em_cached' variable declared in the local stack of
       btrfs_readahead(), and then unlocks the range [16K, 20K).
    
       Since the extent map has the prealloc flag, at btrfs_do_readpage() we
       zero out the page's content and don't submit any bio to read the page
       from the extent.
    
       Then it attempts to read the page at offset 20K entering
       btrfs_do_readpage() where we reuse the previously cached extent map
       (decided by get_extent_map()) since it spans the page's range and
       it's still in the inode's extent map tree.
    
       Just like for the previous page, we zero out the page's content since
       the extent map has the prealloc flag set.
    
       Then it attempts to read the page at offset 24K entering
       btrfs_do_readpage() where we reuse the previously cached extent map
       (decided by get_extent_map()) since it spans the page's range and
       it's still in the inode's extent map tree.
    
       Just like for the previous pages, we zero out the page's content since
       the extent map has the prealloc flag set. Note that we didn't lock the
       extent range [24K, 28K), so we didn't synchronize with the ongoing
       direct IO write being performed by task A;
    
    5) Task A enters btrfs_create_dio_extent() and creates an ordered extent
       for the range [24K, 28K), with the flags BTRFS_ORDERED_DIRECT and
       BTRFS_ORDERED_PREALLOC set;
    
    6) Task A unlocks the range [24K, 28K) at btrfs_dio_iomap_begin();
    
    7) The ordered extent enters btrfs_finish_one_ordered() and locks the
       range [24K, 28K);
    
    8) Task A enters fs/iomap/direct-io.c:iomap_dio_complete() and it tries
       to invalidate the page at offset 24K by calling
       kiocb_invalidate_post_direct_write(), resulting in a call chain that
       ends up at btrfs_release_folio().
    
       The btrfs_release_folio() call ends up returning false because the range
       for the page at file offset 24K is currently locked by the task doing
       the ordered extent completion in the previous step (7), so we have:
    
       btrfs_release_folio() ->
          __btrfs_release_folio() ->
             try_release_extent_mapping() ->
                 try_release_extent_state()
    
       This last function checking that the range is locked and returning false
       and propagating it up to btrfs_release_folio().
    
       So this results in a failure to invalidate the page and
       kiocb_invalidate_post_direct_write() triggers this message logged in
       dmesg:
    
         Page cache invalidation failure on direct I/O.  Possible data corruption due to collision with buffered I/O!
    
       After this we leave the page cache with stale data for the file range
       [24K, 28K), filled with zeroes instead of the data written by direct IO
       write (all bytes with a 0x01 value), so any task attempting to read with
       buffered IO, including the task that did the direct IO write, will get
       all bytes in the range with a 0x00 value instead of the written data.
    
    Fix this by locking the range, with btrfs_lock_and_flush_ordered_range(),
    at the two callers of btrfs_do_readpage() instead of doing it at
    get_extent_map(), just like we did before commit ac325fc2aad5 ("btrfs: do
    not hold the extent lock for entire read"), and unlocking the range after
    all the calls to btrfs_do_readpage(). This way we never reuse a cached
    extent map without flushing any pending ordered extents from a concurrent
    direct IO write.
    
    Fixes: ac325fc2aad5 ("btrfs: do not hold the extent lock for entire read")
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: rename __get_extent_map() and pass btrfs_inode [+ + +]
Author: David Sterba <dsterba@suse.com>
Date:   Thu Jan 9 11:24:15 2025 +0100

    btrfs: rename __get_extent_map() and pass btrfs_inode
    
    [ Upstream commit 06de96faf795b5c276a3be612da6b08c6112e747 ]
    
    The double underscore naming scheme does not apply here, there's only
    only get_extent_map(). As the definition is changed also pass the struct
    btrfs_inode.
    
    Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Reviewed-by: Anand Jain <anand.jain@oracle.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Stable-dep-of: acc18e1c1d8c ("btrfs: fix stale page cache after race between readahead and direct IO write")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
can: c_can: fix unbalanced runtime PM disable in error path [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Sun Jan 12 13:41:52 2025 +0100

    can: c_can: fix unbalanced runtime PM disable in error path
    
    commit 257a2cd3eb578ee63d6bf90475dc4f4b16984139 upstream.
    
    Runtime PM is enabled as one of the last steps of probe(), so all
    earlier gotos to "exit_free_device" label were not correct and were
    leading to unbalanced runtime PM disable depth.
    
    Fixes: 6e2fe01dd6f9 ("can: c_can: move runtime PM enable/disable to c_can_platform")
    Cc: stable@vger.kernel.org
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
    Link: https://patch.msgid.link/20250112-syscon-phandle-args-can-v1-1-314d9549906f@linaro.org
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: ctucanfd: handle skb allocation failure [+ + +]
Author: Fedor Pchelkin <pchelkin@ispras.ru>
Date:   Tue Jan 14 18:21:38 2025 +0300

    can: ctucanfd: handle skb allocation failure
    
    commit 9bd24927e3eeb85642c7baa3b28be8bea6c2a078 upstream.
    
    If skb allocation fails, the pointer to struct can_frame is NULL. This
    is actually handled everywhere inside ctucan_err_interrupt() except for
    the only place.
    
    Add the missed NULL check.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE static
    analysis tool.
    
    Fixes: 2dcb8e8782d8 ("can: ctucanfd: add support for CTU CAN FD open-source IP core - bus independent part.")
    Cc: stable@vger.kernel.org
    Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
    Acked-by: Pavel Pisa <pisa@cmp.felk.cvut.cz>
    Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
    Link: https://patch.msgid.link/20250114152138.139580-1-pchelkin@ispras.ru
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: etas_es58x: fix potential NULL pointer dereference on udev->serial [+ + +]
Author: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Date:   Wed Feb 5 00:48:15 2025 +0900

    can: etas_es58x: fix potential NULL pointer dereference on udev->serial
    
    commit a1ad2109ce41c9e3912dadd07ad8a9c640064ffb upstream.
    
    The driver assumed that es58x_dev->udev->serial could never be NULL.
    While this is true on commercially available devices, an attacker
    could spoof the device identity providing a NULL USB serial number.
    That would trigger a NULL pointer dereference.
    
    Add a check on es58x_dev->udev->serial before accessing it.
    
    Reported-by: yan kang <kangyan91@outlook.com>
    Reported-by: yue sun <samsun1006219@gmail.com>
    Closes: https://lore.kernel.org/linux-can/SY8P300MB0421E0013C0EBD2AA46BA709A1F42@SY8P300MB0421.AUSP300.PROD.OUTLOOK.COM/
    Fixes: 9f06631c3f1f ("can: etas_es58x: export product information through devlink_ops::info_get()")
    Signed-off-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
    Link: https://patch.msgid.link/20250204154859.9797-2-mailhol.vincent@wanadoo.fr
    Cc: stable@vger.kernel.org
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: j1939: j1939_sk_send_loop(): fix unable to send messages with data length zero [+ + +]
Author: Alexander Hölzl <alexander.hoelzl@gmx.net>
Date:   Wed Feb 5 18:46:51 2025 +0100

    can: j1939: j1939_sk_send_loop(): fix unable to send messages with data length zero
    
    commit 44de577e61ed239db09f0da9d436866bef9b77dd upstream.
    
    The J1939 standard requires the transmission of messages of length 0.
    
    For example proprietary messages are specified with a data length of 0
    to 1785. The transmission of such messages is not possible. Sending
    results in no error being returned but no corresponding can frame
    being generated.
    
    Enable the transmission of zero length J1939 messages. In order to
    facilitate this two changes are necessary:
    
    1) If the transmission of a new message is requested from user space
    the message is segmented in j1939_sk_send_loop(). Let the segmentation
    take into account zero length messages, do not terminate immediately,
    queue the corresponding skb.
    
    2) j1939_session_skb_get_by_offset() selects the next skb to transmit
    for a session. Take into account that there might be zero length skbs
    in the queue.
    
    Signed-off-by: Alexander Hölzl <alexander.hoelzl@gmx.net>
    Acked-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Link: https://patch.msgid.link/20250205174651.103238-1-alexander.hoelzl@gmx.net
    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Cc: stable@vger.kernel.org
    [mkl: commit message rephrased]
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: rockchip: rkcanfd_handle_rx_fifo_overflow_int(): bail out if skb cannot be allocated [+ + +]
Author: Robin van der Gracht <robin@protonic.nl>
Date:   Mon Jan 27 13:16:44 2025 +0100

    can: rockchip: rkcanfd_handle_rx_fifo_overflow_int(): bail out if skb cannot be allocated
    
    commit f7f0adfe64de08803990dc4cbecd2849c04e314a upstream.
    
    Fix NULL pointer check in rkcanfd_handle_rx_fifo_overflow_int() to
    bail out if skb cannot be allocated.
    
    Fixes: ff60bfbaf67f ("can: rockchip_canfd: add driver for Rockchip CAN-FD controller")
    Cc: stable@vger.kernel.org
    Signed-off-by: Robin van der Gracht <robin@protonic.nl>
    Link: https://patch.msgid.link/20250208-fix-rockchip-canfd-v1-1-ec533c8a9895@pengutronix.de
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
cgroup: fix race between fork and cgroup.kill [+ + +]
Author: Shakeel Butt <shakeel.butt@linux.dev>
Date:   Thu Jan 30 16:05:42 2025 -0800

    cgroup: fix race between fork and cgroup.kill
    
    commit b69bb476dee99d564d65d418e9a20acca6f32c3f upstream.
    
    Tejun reported the following race between fork() and cgroup.kill at [1].
    
    Tejun:
      I was looking at cgroup.kill implementation and wondering whether there
      could be a race window. So, __cgroup_kill() does the following:
    
       k1. Set CGRP_KILL.
       k2. Iterate tasks and deliver SIGKILL.
       k3. Clear CGRP_KILL.
    
      The copy_process() does the following:
    
       c1. Copy a bunch of stuff.
       c2. Grab siglock.
       c3. Check fatal_signal_pending().
       c4. Commit to forking.
       c5. Release siglock.
       c6. Call cgroup_post_fork() which puts the task on the css_set and tests
           CGRP_KILL.
    
      The intention seems to be that either a forking task gets SIGKILL and
      terminates on c3 or it sees CGRP_KILL on c6 and kills the child. However, I
      don't see what guarantees that k3 can't happen before c6. ie. After a
      forking task passes c5, k2 can take place and then before the forking task
      reaches c6, k3 can happen. Then, nobody would send SIGKILL to the child.
      What am I missing?
    
    This is indeed a race. One way to fix this race is by taking
    cgroup_threadgroup_rwsem in write mode in __cgroup_kill() as the fork()
    side takes cgroup_threadgroup_rwsem in read mode from cgroup_can_fork()
    to cgroup_post_fork(). However that would be heavy handed as this adds
    one more potential stall scenario for cgroup.kill which is usually
    called under extreme situation like memory pressure.
    
    To fix this race, let's maintain a sequence number per cgroup which gets
    incremented on __cgroup_kill() call. On the fork() side, the
    cgroup_can_fork() will cache the sequence number locally and recheck it
    against the cgroup's sequence number at cgroup_post_fork() site. If the
    sequence numbers mismatch, it means __cgroup_kill() can been called and
    we should send SIGKILL to the newly created task.
    
    Reported-by: Tejun Heo <tj@kernel.org>
    Closes: https://lore.kernel.org/all/Z5QHE2Qn-QZ6M-KW@slm.duckdns.org/ [1]
    Fixes: 661ee6280931 ("cgroup: introduce cgroup.kill")
    Cc: stable@vger.kernel.org # v5.14+
    Signed-off-by: Shakeel Butt <shakeel.butt@linux.dev>
    Reviewed-by: Michal Koutný <mkoutny@suse.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

cgroup: Remove steal time from usage_usec [+ + +]
Author: Muhammad Adeel <Muhammad.Adeel@ibm.com>
Date:   Fri Feb 7 14:24:32 2025 +0000

    cgroup: Remove steal time from usage_usec
    
    [ Upstream commit db5fd3cf8bf41b84b577b8ad5234ea95f327c9be ]
    
    The CPU usage time is the time when user, system or both are using the CPU.
    Steal time is the time when CPU is waiting to be run by the Hypervisor. It
    should not be added to the CPU usage time, hence removing it from the
    usage_usec entry.
    
    Fixes: 936f2a70f2077 ("cgroup: add cpu.stat file to root cgroup")
    Acked-by: Axel Busch <axel.busch@ibm.com>
    Acked-by: Michal Koutný <mkoutny@suse.com>
    Signed-off-by: Muhammad Adeel <muhammad.adeel@ibm.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
cifs: pick channels for individual subrequests [+ + +]
Author: Shyam Prasad N <sprasad@microsoft.com>
Date:   Tue Feb 11 10:00:25 2025 +0000

    cifs: pick channels for individual subrequests
    
    commit f1bf10d7e909fe898a112f5cae1e97ce34d6484d upstream.
    
    The netfs library could break down a read request into
    multiple subrequests. When multichannel is used, there is
    potential to improve performance when each of these
    subrequests pick a different channel.
    
    Today we call cifs_pick_channel when the main read request
    is initialized in cifs_init_request. This change moves this to
    cifs_prepare_read, which is the right place to pick channel since
    it gets called for each subrequest.
    
    Interestingly cifs_prepare_write already does channel selection
    for individual subreq, but looks like it was missed for read.
    This is especially important when multichannel is used with
    increased rasize.
    
    In my test setup, with rasize set to 8MB, a sequential read
    of large file was taking 11.5s without this change. With the
    change, it completed in 9s. The difference is even more signigicant
    with bigger rasize.
    
    Cc: <stable@vger.kernel.org>
    Cc: David Howells <dhowells@redhat.com>
    Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
clocksource: Use migrate_disable() to avoid calling get_random_u32() in atomic context [+ + +]
Author: Waiman Long <longman@redhat.com>
Date:   Fri Jan 31 12:33:23 2025 -0500

    clocksource: Use migrate_disable() to avoid calling get_random_u32() in atomic context
    
    [ Upstream commit 6bb05a33337b2c842373857b63de5c9bf1ae2a09 ]
    
    The following bug report happened with a PREEMPT_RT kernel:
    
      BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:48
      in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 2012, name: kwatchdog
      preempt_count: 1, expected: 0
      RCU nest depth: 0, expected: 0
      get_random_u32+0x4f/0x110
      clocksource_verify_choose_cpus+0xab/0x1a0
      clocksource_verify_percpu.part.0+0x6b/0x330
      clocksource_watchdog_kthread+0x193/0x1a0
    
    It is due to the fact that clocksource_verify_choose_cpus() is invoked with
    preemption disabled.  This function invokes get_random_u32() to obtain
    random numbers for choosing CPUs.  The batched_entropy_32 local lock and/or
    the base_crng.lock spinlock in driver/char/random.c will be acquired during
    the call. In PREEMPT_RT kernel, they are both sleeping locks and so cannot
    be acquired in atomic context.
    
    Fix this problem by using migrate_disable() to allow smp_processor_id() to
    be reliably used without introducing atomic context. preempt_disable() is
    then called after clocksource_verify_choose_cpus() but before the
    clocksource measurement is being run to avoid introducing unexpected
    latency.
    
    Fixes: 7560c02bdffb ("clocksource: Check per-CPU clock synchronization when marked unstable")
    Suggested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: Waiman Long <longman@redhat.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Paul E. McKenney <paulmck@kernel.org>
    Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Link: https://lore.kernel.org/all/20250131173323.891943-2-longman@redhat.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clocksource: Use pr_info() for "Checking clocksource synchronization" message [+ + +]
Author: Waiman Long <longman@redhat.com>
Date:   Fri Jan 24 20:54:41 2025 -0500

    clocksource: Use pr_info() for "Checking clocksource synchronization" message
    
    [ Upstream commit 1f566840a82982141f94086061927a90e79440e5 ]
    
    The "Checking clocksource synchronization" message is normally printed
    when clocksource_verify_percpu() is called for a given clocksource if
    both the CLOCK_SOURCE_UNSTABLE and CLOCK_SOURCE_VERIFY_PERCPU flags
    are set.
    
    It is an informational message and so pr_info() is the correct choice.
    
    Signed-off-by: Waiman Long <longman@redhat.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Paul E. McKenney <paulmck@kernel.org>
    Acked-by: John Stultz <jstultz@google.com>
    Link: https://lore.kernel.org/all/20250125015442.3740588-1-longman@redhat.com
    Stable-dep-of: 6bb05a33337b ("clocksource: Use migrate_disable() to avoid calling get_random_u32() in atomic context")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
cpufreq/amd-pstate: Align offline flow of shared memory and MSR based systems [+ + +]
Author: Dhananjay Ugwekar <Dhananjay.Ugwekar@amd.com>
Date:   Wed Oct 23 10:21:12 2024 +0000

    cpufreq/amd-pstate: Align offline flow of shared memory and MSR based systems
    
    [ Upstream commit a6960e6b1b0e2cb268f427a99040c408a8d10665 ]
    
    Set min_perf to lowest_perf for shared memory systems, similar to the MSR
    based systems.
    
    Signed-off-by: Dhananjay Ugwekar <Dhananjay.Ugwekar@amd.com>
    Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
    Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
    Link: https://lore.kernel.org/r/20241023102108.5980-5-Dhananjay.Ugwekar@amd.com
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Stable-dep-of: 3ace20038e19 ("cpufreq/amd-pstate: Fix cpufreq_policy ref counting")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

cpufreq/amd-pstate: Call cppc_set_epp_perf in the reenable function [+ + +]
Author: Dhananjay Ugwekar <Dhananjay.Ugwekar@amd.com>
Date:   Wed Oct 23 10:21:10 2024 +0000

    cpufreq/amd-pstate: Call cppc_set_epp_perf in the reenable function
    
    [ Upstream commit 796ff50e127af8362035f87ba29b6b84e2dd9742 ]
    
    The EPP value being set in perf_ctrls.energy_perf is not being propagated
    to the shared memory, fix that.
    
    Signed-off-by: Dhananjay Ugwekar <Dhananjay.Ugwekar@amd.com>
    Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
    Reviewed-by: Perry Yuan <perry.yuan@amd.com>
    Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
    Link: https://lore.kernel.org/r/20241023102108.5980-4-Dhananjay.Ugwekar@amd.com
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Stable-dep-of: 3ace20038e19 ("cpufreq/amd-pstate: Fix cpufreq_policy ref counting")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

cpufreq/amd-pstate: convert mutex use to guard() [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Mon Dec 9 12:52:37 2024 -0600

    cpufreq/amd-pstate: convert mutex use to guard()
    
    [ Upstream commit 6c093d5a5b73ec1caf1e706510ae6031af2f9d43 ]
    
    Using scoped guard declaration will unlock mutexes automatically.
    
    Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
    Link: https://lore.kernel.org/r/20241209185248.16301-5-mario.limonciello@amd.com
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Stable-dep-of: 3ace20038e19 ("cpufreq/amd-pstate: Fix cpufreq_policy ref counting")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

cpufreq/amd-pstate: Fix cpufreq_policy ref counting [+ + +]
Author: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
Date:   Wed Feb 5 11:25:20 2025 +0000

    cpufreq/amd-pstate: Fix cpufreq_policy ref counting
    
    [ Upstream commit 3ace20038e19f23fe73259513f1f08d4bf1a3c83 ]
    
    amd_pstate_update_limits() takes a cpufreq_policy reference but doesn't
    decrement the refcount in one of the exit paths, fix that.
    
    Fixes: 45722e777fd9 ("cpufreq: amd-pstate: Optimize amd_pstate_update_limits()")
    Signed-off-by: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
    Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
    Link: https://lore.kernel.org/r/20250205112523.201101-10-dhananjay.ugwekar@amd.com
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

cpufreq/amd-pstate: Merge amd_pstate_epp_cpu_offline() and amd_pstate_epp_offline() [+ + +]
Author: Dhananjay Ugwekar <Dhananjay.Ugwekar@amd.com>
Date:   Wed Dec 4 14:48:42 2024 +0000

    cpufreq/amd-pstate: Merge amd_pstate_epp_cpu_offline() and amd_pstate_epp_offline()
    
    [ Upstream commit 53ec2101dfede8fecdd240662281a12e537c3411 ]
    
    amd_pstate_epp_offline() is only called from within
    amd_pstate_epp_cpu_offline() and doesn't make much sense to have it at all.
    Hence, remove it.
    
    Also remove the unncessary debug print in the offline path while at it.
    
    Signed-off-by: Dhananjay Ugwekar <Dhananjay.Ugwekar@amd.com>
    Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
    Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
    Link: https://lore.kernel.org/r/20241204144842.164178-6-Dhananjay.Ugwekar@amd.com
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Stable-dep-of: 3ace20038e19 ("cpufreq/amd-pstate: Fix cpufreq_policy ref counting")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

cpufreq/amd-pstate: Refactor amd_pstate_epp_reenable() and amd_pstate_epp_offline() [+ + +]
Author: Dhananjay Ugwekar <Dhananjay.Ugwekar@amd.com>
Date:   Wed Dec 4 14:48:40 2024 +0000

    cpufreq/amd-pstate: Refactor amd_pstate_epp_reenable() and amd_pstate_epp_offline()
    
    [ Upstream commit b1089e0c8817fda93d474eaa82ad86386887aefe ]
    
    Replace similar code chunks with amd_pstate_update_perf() and
    amd_pstate_set_epp() function calls.
    
    Signed-off-by: Dhananjay Ugwekar <Dhananjay.Ugwekar@amd.com>
    Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
    Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
    Link: https://lore.kernel.org/r/20241204144842.164178-4-Dhananjay.Ugwekar@amd.com
    [ML: Fix LKP reported error about unused variable]
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Stable-dep-of: 3ace20038e19 ("cpufreq/amd-pstate: Fix cpufreq_policy ref counting")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

cpufreq/amd-pstate: Remove the cppc_state check in offline/online functions [+ + +]
Author: Dhananjay Ugwekar <Dhananjay.Ugwekar@amd.com>
Date:   Wed Dec 4 14:48:41 2024 +0000

    cpufreq/amd-pstate: Remove the cppc_state check in offline/online functions
    
    [ Upstream commit b78f8c87ec3e7499bb049986838636d3afbc7ece ]
    
    Only amd_pstate_epp driver (i.e. cppc_state = ACTIVE) enters the
    amd_pstate_epp_offline() and amd_pstate_epp_cpu_online() functions,
    so remove the unnecessary if condition checking if cppc_state is
    equal to AMD_PSTATE_ACTIVE.
    
    Signed-off-by: Dhananjay Ugwekar <Dhananjay.Ugwekar@amd.com>
    Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
    Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
    Link: https://lore.kernel.org/r/20241204144842.164178-5-Dhananjay.Ugwekar@amd.com
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Stable-dep-of: 3ace20038e19 ("cpufreq/amd-pstate: Fix cpufreq_policy ref counting")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

cpufreq/amd-pstate: Remove the goto label in amd_pstate_update_limits [+ + +]
Author: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
Date:   Wed Feb 5 11:25:12 2025 +0000

    cpufreq/amd-pstate: Remove the goto label in amd_pstate_update_limits
    
    commit d364eee14c682b141f4667efc3c65191339d88bd upstream.
    
    Scope based guard/cleanup macros should not be used together with goto
    labels. Hence, remove the goto label.
    
    Fixes: 6c093d5a5b73 ("cpufreq/amd-pstate: convert mutex use to guard()")
    Signed-off-by: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
    Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
    Link: https://lore.kernel.org/r/20250205112523.201101-2-dhananjay.ugwekar@amd.com
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Documentation/networking: fix basic node example document ISO 15765-2 [+ + +]
Author: Reyders Morales <reyders1@gmail.com>
Date:   Mon Feb 3 23:47:20 2025 +0100

    Documentation/networking: fix basic node example document ISO 15765-2
    
    [ Upstream commit d0b197b6505fe3788860fc2a81b3ce53cbecc69c ]
    
    In the current struct sockaddr_can tp is member of can_addr. tp is not
    member of struct sockaddr_can.
    
    Signed-off-by: Reyders Morales <reyders1@gmail.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Acked-by: Oliver Hartkopp <socketcan@hartkopp.net>
    Link: https://patch.msgid.link/20250203224720.42530-1-reyders1@gmail.com
    Fixes: 67711e04254c ("Documentation: networking: document ISO 15765-2")
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amdgpu: avoid buffer overflow attach in smu_sys_set_pp_table() [+ + +]
Author: Jiang Liu <gerry@linux.alibaba.com>
Date:   Fri Feb 7 14:44:14 2025 +0800

    drm/amdgpu: avoid buffer overflow attach in smu_sys_set_pp_table()
    
    commit 1abb2648698bf10783d2236a6b4a7ca5e8021699 upstream.
    
    It malicious user provides a small pptable through sysfs and then
    a bigger pptable, it may cause buffer overflow attack in function
    smu_sys_set_pp_table().
    
    Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
    Signed-off-by: Jiang Liu <gerry@linux.alibaba.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdgpu: bail out when failed to load fw in psp_init_cap_microcode() [+ + +]
Author: Jiang Liu <gerry@linux.alibaba.com>
Date:   Fri Feb 7 14:28:51 2025 +0800

    drm/amdgpu: bail out when failed to load fw in psp_init_cap_microcode()
    
    [ Upstream commit a0a455b4bc7483ad60e8b8a50330c1e05bb7bfcf ]
    
    In function psp_init_cap_microcode(), it should bail out when failed to
    load firmware, otherwise it may cause invalid memory access.
    
    Fixes: 07dbfc6b102e ("drm/amd: Use `amdgpu_ucode_*` helpers for PSP")
    Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
    Signed-off-by: Jiang Liu <gerry@linux.alibaba.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/i915/selftests: avoid using uninitialized context [+ + +]
Author: Krzysztof Karas <krzysztof.karas@intel.com>
Date:   Thu Jan 30 09:19:31 2025 +0000

    drm/i915/selftests: avoid using uninitialized context
    
    [ Upstream commit 53139b3f9998ea07289e7b70b909fea2264a0de9 ]
    
    There is an error path in igt_ppgtt_alloc(), which leads
    to ww object being passed down to i915_gem_ww_ctx_fini() without
    initialization. Correct that by only putting ppgtt->vm and
    returning early.
    
    Fixes: 480ae79537b2 ("drm/i915/selftests: Prepare gtt tests for obj->mm.lock removal")
    Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com>
    Reviewed-by: Mikolaj Wasiak <mikolaj.wasiak@intel.com>
    Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com>
    Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/iuaonpjc3rywmvhna6umjlvzilocn2uqsrxfxfob24e2taocbi@lkaivvfp4777
    (cherry picked from commit 8d8334632ea62424233ac6529712868241d0f8df)
    Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/msm/dpu1: don't choke on disabling the writeback connector [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Mon Dec 9 12:04:24 2024 +0200

    drm/msm/dpu1: don't choke on disabling the writeback connector
    
    commit d9f55e2abfb933818c772eba659a9b7ab28a44d0 upstream.
    
    During suspend/resume process all connectors are explicitly disabled and
    then reenabled. However resume fails because of the connector_status check:
    
    [dpu error]connector not connected 3
    [drm:drm_mode_config_helper_resume [drm_kms_helper]] *ERROR* Failed to resume (-22)
    
    It doesn't make sense to check for the Writeback connected status (and
    other drivers don't perform such check), so drop the check.
    
    It wasn't a problem before the commit 71174f362d67 ("drm/msm/dpu: move
    writeback's atomic_check to dpu_writeback.c"), since encoder's
    atomic_check() is called under a different conditions that the
    connector's atomic_check() (e.g. it is not called if there is no
    connected CRTC or if the corresponding connector is not a part of the
    new state).
    
    Fixes: 71174f362d67 ("drm/msm/dpu: move writeback's atomic_check to dpu_writeback.c")
    Cc: stable@vger.kernel.org
    Reported-by: Leonard Lausen <leonard@lausen.nl>
    Closes: https://gitlab.freedesktop.org/drm/msm/-/issues/57
    Tested-by: Leonard Lausen <leonard@lausen.nl> # on sc7180 lazor
    Tested-by: György Kurucz <me@kuruczgy.com>
    Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
    Tested-by: Johan Hovold <johan+linaro@kernel.org>
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Tested-by: Jessica Zhang <quic_jesszhan@quicinc.com> # Trogdor (sc7180)
    Patchwork: https://patchwork.freedesktop.org/patch/627828/
    Link: https://lore.kernel.org/r/20241209-dpu-fix-wb-v4-1-7fe93059f9e0@linaro.org
    Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/msm/dpu: fix x1e80100 intf_6 underrun/vsync interrupt [+ + +]
Author: Stephan Gerhold <stephan.gerhold@linaro.org>
Date:   Fri Nov 15 13:55:13 2024 +0100

    drm/msm/dpu: fix x1e80100 intf_6 underrun/vsync interrupt
    
    commit ce55101e6ba188296dbdb9506665d26f23110292 upstream.
    
    The IRQ indexes for the intf_6 underrun/vsync interrupts are swapped.
    DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 16) is the actual underrun interrupt and
    DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 17) is the vsync interrupt.
    
    This causes timeout errors when using the DP2 controller, e.g.
      [dpu error]enc37 frame done timeout
      *ERROR* irq timeout id=37, intf_mode=INTF_MODE_VIDEO intf=6 wb=-1, pp=2, intr=0
      *ERROR* wait disable failed: id:37 intf:6 ret:-110
    
    Correct them to fix these errors and make DP2 work properly.
    
    Cc: stable@vger.kernel.org
    Fixes: e3b1f369db5a ("drm/msm/dpu: Add X1E80100 support")
    Signed-off-by: Stephan Gerhold <stephan.gerhold@linaro.org>
    Tested-by: Johan Hovold <johan+linaro@kernel.org>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Patchwork: https://patchwork.freedesktop.org/patch/624681/
    Link: https://lore.kernel.org/r/20241115-x1e80100-dp2-fix-v1-1-727b9fe6f390@linaro.org
    Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/msm/gem: prevent integer overflow in msm_ioctl_gem_submit() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Fri Nov 15 17:50:08 2024 +0300

    drm/msm/gem: prevent integer overflow in msm_ioctl_gem_submit()
    
    commit 3a47f4b439beb98e955d501c609dfd12b7836d61 upstream.
    
    The "submit->cmd[i].size" and "submit->cmd[i].offset" variables are u32
    values that come from the user via the submit_lookup_cmds() function.
    This addition could lead to an integer wrapping bug so use size_add()
    to prevent that.
    
    Fixes: 198725337ef1 ("drm/msm: fix cmdstream size check")
    Cc: stable@vger.kernel.org
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Patchwork: https://patchwork.freedesktop.org/patch/624696/
    Signed-off-by: Rob Clark <robdclark@chromium.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/rcar-du: dsi: Fix PHY lock bit check [+ + +]
Author: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com>
Date:   Tue Dec 17 07:31:35 2024 +0200

    drm/rcar-du: dsi: Fix PHY lock bit check
    
    commit 6389e616fae8a101ce00068f7690461ab57b29d8 upstream.
    
    The driver checks for bit 16 (using CLOCKSET1_LOCK define) in CLOCKSET1
    register when waiting for the PPI clock. However, the right bit to check
    is bit 17 (CLOCKSET1_LOCK_PHY define). Not only that, but there's
    nothing in the documents for bit 16 for V3U nor V4H.
    
    So, fix the check to use bit 17, and drop the define for bit 16.
    
    Fixes: 155358310f01 ("drm: rcar-du: Add R-Car DSI driver")
    Fixes: 11696c5e8924 ("drm: Place Renesas drivers in a separate dir")
    Cc: stable@vger.kernel.org
    Signed-off-by: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com>
    Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
    Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241217-rcar-gh-dsi-v5-1-e77421093c05@ideasonboard.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/tests: hdmi: Fix WW_MUTEX_SLOWPATH failures [+ + +]
Author: Maxime Ripard <mripard@kernel.org>
Date:   Wed Jan 29 15:21:53 2025 +0100

    drm/tests: hdmi: Fix WW_MUTEX_SLOWPATH failures
    
    [ Upstream commit fb97bc2e47f694f79d6358d981ae0428db8e8088 ]
    
    The light_up_connector helper function in the HDMI infrastructure unit
    tests uses drm_atomic_set_crtc_for_connector(), but fails when it
    returns an error.
    
    This function can return EDEADLK though if the sequence needs to be
    restarted, and WW_MUTEX_SLOWPATH is meant to test that we handle it
    properly.
    
    Let's handle EDEADLK and restart the sequence in our tests as well.
    
    Fixes: eb66d34d793e ("drm/tests: Add output bpc tests")
    Reported-by: Dave Airlie <airlied@gmail.com>
    Closes: https://lore.kernel.org/r/CAPM=9tzJ4-ERDxvuwrCyUPY0=+P44orhp1kLWVGL7MCfpQjMEQ@mail.gmail.com/
    Link: https://lore.kernel.org/r/20241031091558.2435850-1-mripard@kernel.org
    Reviewed-by: Simona Vetter <simona.vetter@ffwll.ch>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250129-test-kunit-v2-1-fe59c43805d5@kernel.org
    Signed-off-by: Maxime Ripard <mripard@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/tidss: Clear the interrupt status for interrupts being disabled [+ + +]
Author: Devarsh Thakkar <devarsht@ti.com>
Date:   Mon Oct 21 17:07:49 2024 +0300

    drm/tidss: Clear the interrupt status for interrupts being disabled
    
    commit 361a2ebb5cad211732ec3c5d962de49b21895590 upstream.
    
    The driver does not touch the irqstatus register when it is disabling
    interrupts.  This might cause an interrupt to trigger for an interrupt
    that was just disabled.
    
    To fix the issue, clear the irqstatus registers right after disabling
    the interrupts.
    
    Fixes: 32a1795f57ee ("drm/tidss: New driver for TI Keystone platform Display SubSystem")
    Cc: stable@vger.kernel.org
    Reported-by: Jonathan Cormier <jcormier@criticallink.com>
    Closes: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1394222/am625-issue-about-tidss-rcu_preempt-self-detected-stall-on-cpu/5424479#5424479
    Signed-off-by: Devarsh Thakkar <devarsht@ti.com>
    [Tomi: mostly rewrote the patch]
    Reviewed-by: Jonathan Cormier <jcormier@criticallink.com>
    Tested-by: Jonathan Cormier <jcormier@criticallink.com>
    Reviewed-by: Aradhya Bhatia <aradhya.bhatia@linux.dev>
    Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241021-tidss-irq-fix-v1-5-82ddaec94e4a@ideasonboard.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/tidss: Fix issue in irq handling causing irq-flood issue [+ + +]
Author: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Date:   Mon Oct 21 17:07:45 2024 +0300

    drm/tidss: Fix issue in irq handling causing irq-flood issue
    
    commit 44b6730ab53ef04944fbaf6da0e77397531517b7 upstream.
    
    It has been observed that sometimes DSS will trigger an interrupt and
    the top level interrupt (DISPC_IRQSTATUS) is not zero, but the VP and
    VID level interrupt-statuses are zero.
    
    As the top level irqstatus is supposed to tell whether we have VP/VID
    interrupts, the thinking of the driver authors was that this particular
    case could never happen. Thus the driver only clears the DISPC_IRQSTATUS
    bits which has corresponding interrupts in VP/VID status. So when this
    issue happens, the driver will not clear DISPC_IRQSTATUS, and we get an
    interrupt flood.
    
    It is unclear why the issue happens. It could be a race issue in the
    driver, but no such race has been found. It could also be an issue with
    the HW. However a similar case can be easily triggered by manually
    writing to DISPC_IRQSTATUS_RAW. This will forcibly set a bit in the
    DISPC_IRQSTATUS and trigger an interrupt, and as the driver never clears
    the bit, we get an interrupt flood.
    
    To fix the issue, always clear DISPC_IRQSTATUS. The concern with this
    solution is that if the top level irqstatus is the one that triggers the
    interrupt, always clearing DISPC_IRQSTATUS might leave some interrupts
    unhandled if VP/VID interrupt statuses have bits set. However, testing
    shows that if any of the irqstatuses is set (i.e. even if
    DISPC_IRQSTATUS == 0, but a VID irqstatus has a bit set), we will get an
    interrupt.
    
    Co-developed-by: Bin Liu <b-liu@ti.com>
    Signed-off-by: Bin Liu <b-liu@ti.com>
    Co-developed-by: Devarsh Thakkar <devarsht@ti.com>
    Signed-off-by: Devarsh Thakkar <devarsht@ti.com>
    Co-developed-by: Jonathan Cormier <jcormier@criticallink.com>
    Signed-off-by: Jonathan Cormier <jcormier@criticallink.com>
    Fixes: 32a1795f57ee ("drm/tidss: New driver for TI Keystone platform Display SubSystem")
    Cc: stable@vger.kernel.org
    Tested-by: Jonathan Cormier <jcormier@criticallink.com>
    Reviewed-by: Aradhya Bhatia <aradhya.bhatia@linux.dev>
    Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241021-tidss-irq-fix-v1-1-82ddaec94e4a@ideasonboard.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/tidss: Fix race condition while handling interrupt registers [+ + +]
Author: Devarsh Thakkar <devarsht@ti.com>
Date:   Mon Oct 21 17:07:50 2024 +0300

    drm/tidss: Fix race condition while handling interrupt registers
    
    commit a9a73f2661e6f625d306c9b0ef082e4593f45a21 upstream.
    
    The driver has a spinlock for protecting the irq_masks field and irq
    enable registers. However, the driver misses protecting the irq status
    registers which can lead to races.
    
    Take the spinlock when accessing irqstatus too.
    
    Fixes: 32a1795f57ee ("drm/tidss: New driver for TI Keystone platform Display SubSystem")
    Cc: stable@vger.kernel.org
    Signed-off-by: Devarsh Thakkar <devarsht@ti.com>
    [Tomi: updated the desc]
    Reviewed-by: Jonathan Cormier <jcormier@criticallink.com>
    Tested-by: Jonathan Cormier <jcormier@criticallink.com>
    Reviewed-by: Aradhya Bhatia <aradhya.bhatia@linux.dev>
    Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241021-tidss-irq-fix-v1-6-82ddaec94e4a@ideasonboard.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/v3d: Stop active perfmon if it is being destroyed [+ + +]
Author: Christian Gmeiner <cgmeiner@igalia.com>
Date:   Mon Nov 18 23:19:47 2024 +0100

    drm/v3d: Stop active perfmon if it is being destroyed
    
    commit 21f1435b1e6b012a07c42f36b206d2b66fc8f13b upstream.
    
    If the active performance monitor (`v3d->active_perfmon`) is being
    destroyed, stop it first. Currently, the active perfmon is not
    stopped during destruction, leaving the `v3d->active_perfmon` pointer
    stale. This can lead to undefined behavior and instability.
    
    This patch ensures that the active perfmon is stopped before being
    destroyed, aligning with the behavior introduced in commit
    7d1fd3638ee3 ("drm/v3d: Stop the active perfmon before being destroyed").
    
    Cc: stable@vger.kernel.org # v5.15+
    Fixes: 26a4dc29b74a ("drm/v3d: Expose performance counters to userspace")
    Signed-off-by: Christian Gmeiner <cgmeiner@igalia.com>
    Signed-off-by: Maíra Canal <mcanal@igalia.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241118221948.1758130-1-christian.gmeiner@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/xe/client: bo->client does not need bos_lock [+ + +]
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
Date:   Wed Feb 5 10:40:42 2025 +0530

    drm/xe/client: bo->client does not need bos_lock
    
    [ Upstream commit fc876c9524e2a9f816f51d533ed31df789cff65a ]
    
    bos_lock is to protect list of bos used by client, it is
    not required to protect bo->client so bring it outside of
    bos_lock.
    
    Fixes: b27970f3e11c ("drm/xe: Add tracking support for bos per client")
    Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
    Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
    Reviewed-by: Nirmoy Das <nirmoy.das@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250205051042.1991192-1-tejas.upadhyay@intel.com
    Signed-off-by: Nirmoy Das <nirmoy.das@intel.com>
    (cherry picked from commit f74fd53ba34551b7626193fb70c17226f06e9bf1)
    Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/xe/tracing: Fix a potential TP_printk UAF [+ + +]
Author: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Date:   Mon Dec 23 14:42:50 2024 +0100

    drm/xe/tracing: Fix a potential TP_printk UAF
    
    commit 07089083a526ea19daa72a1edf9d6e209615b77c upstream.
    
    The commit
    afd2627f727b ("tracing: Check "%s" dereference via the field and not the TP_printk format")
    exposes potential UAFs in the xe_bo_move trace event.
    
    Fix those by avoiding dereferencing the
    xe_mem_type_to_name[] array at TP_printk time.
    
    Since some code refactoring has taken place, explicit backporting may
    be needed for kernels older than 6.10.
    
    Fixes: e46d3f813abd ("drm/xe/trace: Extract bo, vm, vma traces")
    Cc: Gustavo Sousa <gustavo.sousa@intel.com>
    Cc: Lucas De Marchi <lucas.demarchi@intel.com>
    Cc: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
    Cc: Matt Roper <matthew.d.roper@intel.com>
    Cc: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>
    Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Cc: intel-xe@lists.freedesktop.org
    Cc: <stable@vger.kernel.org> # v6.11+
    Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
    Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241223134250.14345-1-thomas.hellstrom@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm: Fix DSC BPP increment decoding [+ + +]
Author: Imre Deak <imre.deak@intel.com>
Date:   Wed Feb 12 18:18:51 2025 +0200

    drm: Fix DSC BPP increment decoding
    
    [ Upstream commit e00a2e5d485faf53c7a24b9d1b575a642227947f ]
    
    Starting with DPCD version 2.0 bits 6:3 of the DP_DSC_BITS_PER_PIXEL_INC
    DPCD register contains the NativeYCbCr422_MAX_bpp_DELTA field, which can
    be non-zero as opposed to earlier DPCD versions, hence decoding the
    bit_per_pixel increment value at bits 2:0 in the same register requires
    applying a mask, do so.
    
    Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
    Fixes: 0c2287c96521 ("drm/display/dp: Add helper function to get DSC bpp precision")
    Reviewed-by: Jani Nikula <jani.nikula@intel.com>
    Signed-off-by: Imre Deak <imre.deak@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250212161851.4007005-1-imre.deak@intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm: renesas: rz-du: Increase supported resolutions [+ + +]
Author: Chris Brandt <chris.brandt@renesas.com>
Date:   Wed Nov 20 10:03:28 2024 -0500

    drm: renesas: rz-du: Increase supported resolutions
    
    commit 226570680bbde0a698f2985db20d9faf4f23cc6e upstream.
    
    The supported resolutions were misrepresented in earlier versions of
    hardware manuals.
    
    Fixes: 768e9e61b3b9 ("drm: renesas: Add RZ/G2L DU Support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Chris Brandt <chris.brandt@renesas.com>
    Tested-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
    Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
    Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241120150328.4131525-1-chris.brandt@renesas.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
efi: Avoid cold plugged memory for placing the kernel [+ + +]
Author: Ard Biesheuvel <ardb@kernel.org>
Date:   Sat Feb 1 18:21:35 2025 +0100

    efi: Avoid cold plugged memory for placing the kernel
    
    commit ba69e0750b0362870294adab09339a0c39c3beaf upstream.
    
    UEFI 2.11 introduced EFI_MEMORY_HOT_PLUGGABLE to annotate system memory
    regions that are 'cold plugged' at boot, i.e., hot pluggable memory that
    is available from early boot, and described as system RAM by the
    firmware.
    
    Existing loaders and EFI applications running in the boot context will
    happily use this memory for allocating data structures that cannot be
    freed or moved at runtime, and this prevents the memory from being
    unplugged. Going forward, the new EFI_MEMORY_HOT_PLUGGABLE attribute
    should be tested, and memory annotated as such should be avoided for
    such allocations.
    
    In the EFI stub, there are a couple of occurrences where, instead of the
    high-level AllocatePages() UEFI boot service, a low-level code sequence
    is used that traverses the EFI memory map and carves out the requested
    number of pages from a free region. This is needed, e.g., for allocating
    as low as possible, or for allocating pages at random.
    
    While AllocatePages() should presumably avoid special purpose memory and
    cold plugged regions, this manual approach needs to incorporate this
    logic itself, in order to prevent the kernel itself from ending up in a
    hot unpluggable region, preventing it from being unplugged.
    
    So add the EFI_MEMORY_HOTPLUGGABLE macro definition, and check for it
    where appropriate.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fbdev: omap: use threaded IRQ for LCD DMA [+ + +]
Author: Aaro Koskinen <aaro.koskinen@iki.fi>
Date:   Thu Jan 2 20:19:51 2025 +0200

    fbdev: omap: use threaded IRQ for LCD DMA
    
    [ Upstream commit e4b6b665df815b4841e71b72f06446884e8aad40 ]
    
    When using touchscreen and framebuffer, Nokia 770 crashes easily with:
    
        BUG: scheduling while atomic: irq/144-ads7846/82/0x00010000
        Modules linked in: usb_f_ecm g_ether usb_f_rndis u_ether libcomposite configfs omap_udc ohci_omap ohci_hcd
        CPU: 0 UID: 0 PID: 82 Comm: irq/144-ads7846 Not tainted 6.12.7-770 #2
        Hardware name: Nokia 770
        Call trace:
         unwind_backtrace from show_stack+0x10/0x14
         show_stack from dump_stack_lvl+0x54/0x5c
         dump_stack_lvl from __schedule_bug+0x50/0x70
         __schedule_bug from __schedule+0x4d4/0x5bc
         __schedule from schedule+0x34/0xa0
         schedule from schedule_preempt_disabled+0xc/0x10
         schedule_preempt_disabled from __mutex_lock.constprop.0+0x218/0x3b4
         __mutex_lock.constprop.0 from clk_prepare_lock+0x38/0xe4
         clk_prepare_lock from clk_set_rate+0x18/0x154
         clk_set_rate from sossi_read_data+0x4c/0x168
         sossi_read_data from hwa742_read_reg+0x5c/0x8c
         hwa742_read_reg from send_frame_handler+0xfc/0x300
         send_frame_handler from process_pending_requests+0x74/0xd0
         process_pending_requests from lcd_dma_irq_handler+0x50/0x74
         lcd_dma_irq_handler from __handle_irq_event_percpu+0x44/0x130
         __handle_irq_event_percpu from handle_irq_event+0x28/0x68
         handle_irq_event from handle_level_irq+0x9c/0x170
         handle_level_irq from generic_handle_domain_irq+0x2c/0x3c
         generic_handle_domain_irq from omap1_handle_irq+0x40/0x8c
         omap1_handle_irq from generic_handle_arch_irq+0x28/0x3c
         generic_handle_arch_irq from call_with_stack+0x1c/0x24
         call_with_stack from __irq_svc+0x94/0xa8
        Exception stack(0xc5255da0 to 0xc5255de8)
        5da0: 00000001 c22fc620 00000000 00000000 c08384a8 c106fc00 00000000 c240c248
        5dc0: c113a600 c3f6ec30 00000001 00000000 c22fc620 c5255df0 c22fc620 c0279a94
        5de0: 60000013 ffffffff
         __irq_svc from clk_prepare_lock+0x4c/0xe4
         clk_prepare_lock from clk_get_rate+0x10/0x74
         clk_get_rate from uwire_setup_transfer+0x40/0x180
         uwire_setup_transfer from spi_bitbang_transfer_one+0x2c/0x9c
         spi_bitbang_transfer_one from spi_transfer_one_message+0x2d0/0x664
         spi_transfer_one_message from __spi_pump_transfer_message+0x29c/0x498
         __spi_pump_transfer_message from __spi_sync+0x1f8/0x2e8
         __spi_sync from spi_sync+0x24/0x40
         spi_sync from ads7846_halfd_read_state+0x5c/0x1c0
         ads7846_halfd_read_state from ads7846_irq+0x58/0x348
         ads7846_irq from irq_thread_fn+0x1c/0x78
         irq_thread_fn from irq_thread+0x120/0x228
         irq_thread from kthread+0xc8/0xe8
         kthread from ret_from_fork+0x14/0x28
    
    As a quick fix, switch to a threaded IRQ which provides a stable system.
    
    Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
firmware: qcom: scm: smc: Handle missing SCM device [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Mon Dec 9 15:27:58 2024 +0100

    firmware: qcom: scm: smc: Handle missing SCM device
    
    [ Upstream commit 94f48ecf0a538019ca2025e0b0da391f8e7cc58c ]
    
    Commit ca61d6836e6f ("firmware: qcom: scm: fix a NULL-pointer
    dereference") makes it explicit that qcom_scm_get_tzmem_pool() can
    return NULL, therefore its users should handle this.
    
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Link: https://lore.kernel.org/r/20241209-qcom-scm-missing-barriers-and-all-sort-of-srap-v2-5-9061013c8d92@linaro.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
flow_dissector: use RCU protection to fetch dev_net() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Feb 5 15:51:17 2025 +0000

    flow_dissector: use RCU protection to fetch dev_net()
    
    [ Upstream commit afec62cd0a4191cde6dd3a75382be4d51a38ce9b ]
    
    __skb_flow_dissect() can be called from arbitrary contexts.
    
    It must extend its RCU protection section to include
    the call to dev_net(), which can become dev_net_rcu().
    
    This makes sure the net structure can not disappear under us.
    
    Fixes: 9b52e3f267a6 ("flow_dissector: handle no-skb use case")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20250205155120.1676781-10-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fs/ntfs3: Unify inode corruption marking with _ntfs_bad_inode() [+ + +]
Author: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Date:   Mon Dec 30 10:34:08 2024 +0300

    fs/ntfs3: Unify inode corruption marking with _ntfs_bad_inode()
    
    [ Upstream commit 55ad333de0f80bc0caee10c6c27196cdcf8891bb ]
    
    Also reworked error handling in a couple of places.
    
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gpio: bcm-kona: Add missing newline to dev_err format string [+ + +]
Author: Artur Weber <aweber.kernel@gmail.com>
Date:   Thu Feb 6 18:46:02 2025 +0100

    gpio: bcm-kona: Add missing newline to dev_err format string
    
    [ Upstream commit 615279db222c3ac56d5c93716efd72b843295c1f ]
    
    Add a missing newline to the format string of the "Couldn't get IRQ
    for bank..." error message.
    
    Fixes: 757651e3d60e ("gpio: bcm281xx: Add GPIO driver")
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Markus Mayer <mmayer@broadcom.com>
    Signed-off-by: Artur Weber <aweber.kernel@gmail.com>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Link: https://lore.kernel.org/r/20250206-kona-gpio-fixes-v2-3-409135eab780@gmail.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gpio: bcm-kona: Fix GPIO lock/unlock for banks above bank 0 [+ + +]
Author: Artur Weber <aweber.kernel@gmail.com>
Date:   Thu Feb 6 18:46:00 2025 +0100

    gpio: bcm-kona: Fix GPIO lock/unlock for banks above bank 0
    
    [ Upstream commit de1d0d160f64ee76df1d364d521b2faf465a091c ]
    
    The GPIO lock/unlock functions clear/write a bit to the relevant
    register for each bank. However, due to an oversight the bit that
    was being written was based on the total GPIO number, not the index
    of the GPIO within the relevant bank, causing it to fail for any
    GPIO above 32 (thus any GPIO for banks above bank 0).
    
    Fix lock/unlock for these banks by using the correct bit.
    
    Fixes: bdb93c03c550 ("gpio: bcm281xx: Centralize register locking")
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Markus Mayer <mmayer@broadcom.com>
    Signed-off-by: Artur Weber <aweber.kernel@gmail.com>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Link: https://lore.kernel.org/r/20250206-kona-gpio-fixes-v2-1-409135eab780@gmail.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gpio: bcm-kona: Make sure GPIO bits are unlocked when requesting IRQ [+ + +]
Author: Artur Weber <aweber.kernel@gmail.com>
Date:   Thu Feb 6 18:46:01 2025 +0100

    gpio: bcm-kona: Make sure GPIO bits are unlocked when requesting IRQ
    
    [ Upstream commit 57f5db77a915cc29461a679a6bcae7097967be1a ]
    
    The settings for all GPIOs are locked by default in bcm_kona_gpio_reset.
    The settings for a GPIO are unlocked when requesting it as a GPIO, but
    not when requesting it as an interrupt, causing the IRQ settings to not
    get applied.
    
    Fix this by making sure to unlock the right bits when an IRQ is requested.
    To avoid a situation where an IRQ being released causes a lock despite
    the same GPIO being used by a GPIO request or vice versa, add an unlock
    counter and only lock if it reaches 0.
    
    Fixes: 757651e3d60e ("gpio: bcm281xx: Add GPIO driver")
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Markus Mayer <mmayer@broadcom.com>
    Signed-off-by: Artur Weber <aweber.kernel@gmail.com>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Link: https://lore.kernel.org/r/20250206-kona-gpio-fixes-v2-2-409135eab780@gmail.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gpio: stmpe: Check return value of stmpe_reg_read in stmpe_gpio_irq_sync_unlock [+ + +]
Author: Wentao Liang <vulab@iscas.ac.cn>
Date:   Wed Feb 12 10:18:49 2025 +0800

    gpio: stmpe: Check return value of stmpe_reg_read in stmpe_gpio_irq_sync_unlock
    
    commit b9644fbfbcab13da7f8b37bef7c51e5b8407d031 upstream.
    
    The stmpe_reg_read function can fail, but its return value is not checked
    in stmpe_gpio_irq_sync_unlock. This can lead to silent failures and
    incorrect behavior if the hardware access fails.
    
    This patch adds checks for the return value of stmpe_reg_read. If the
    function fails, an error message is logged and the function returns
    early to avoid further issues.
    
    Fixes: b888fb6f2a27 ("gpio: stmpe: i2c transfer are forbiden in atomic context")
    Cc: stable@vger.kernel.org # 4.16+
    Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
    Link: https://lore.kernel.org/r/20250212021849.275-1-vulab@iscas.ac.cn
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
gpiolib: acpi: Add a quirk for Acer Nitro ANV14 [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Tue Feb 11 14:32:01 2025 -0600

    gpiolib: acpi: Add a quirk for Acer Nitro ANV14
    
    commit 8743d66979e494c5378563e6b5a32e913380abd8 upstream.
    
    Spurious immediate wake up events are reported on Acer Nitro ANV14. GPIO 11 is
    specified as an edge triggered input and also a wake source but this pin is
    supposed to be an output pin for an LED, so it's effectively floating.
    
    Block the interrupt from getting set up for this GPIO on this device.
    
    Cc: stable@vger.kernel.org
    Reported-by: Delgan <delgan.py@gmail.com>
    Tested-by: Delgan <delgan.py@gmail.com>
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3954
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Acked-by: Mika Westerberg <westeri@kernel.org>
    Link: https://lore.kernel.org/r/20250211203222.761206-1-superm1@kernel.org
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

gpiolib: Fix crash on error in gpiochip_get_ngpios() [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Thu Feb 13 17:56:46 2025 +0200

    gpiolib: Fix crash on error in gpiochip_get_ngpios()
    
    [ Upstream commit 7b4aebeecbbd5b5fe73e35fad3f62ed21aa7ef44 ]
    
    The gpiochip_get_ngpios() uses chip_*() macros to print messages.
    However these macros rely on gpiodev to be initialised and set,
    which is not the case when called via bgpio_init(). In such a case
    the printing messages will crash on NULL pointer dereference.
    Replace chip_*() macros by the respective dev_*() ones to avoid
    such crash.
    
    Fixes: 55b2395e4e92 ("gpio: mmio: handle "ngpios" properly in bgpio_init()")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20250213155646.2882324-1-andriy.shevchenko@linux.intel.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gpu: host1x: Fix a use of uninitialized mutex [+ + +]
Author: Rupinderjit Singh <rusingh@redhat.com>
Date:   Thu Feb 6 15:58:03 2025 +0000

    gpu: host1x: Fix a use of uninitialized mutex
    
    [ Upstream commit 02458fbfaa0170aabf8506f7d4ed054f02414251 ]
    
    commit c8347f915e67 ("gpu: host1x: Fix boot regression for Tegra")
    caused a use of uninitialized mutex leading to below warning when
    CONFIG_DEBUG_MUTEXES and CONFIG_DEBUG_LOCK_ALLOC are enabled.
    
    [   41.662843] ------------[ cut here ]------------
    [   41.663012] DEBUG_LOCKS_WARN_ON(lock->magic != lock)
    [   41.663035] WARNING: CPU: 4 PID: 794 at kernel/locking/mutex.c:587 __mutex_lock+0x670/0x878
    [   41.663458] Modules linked in: rtw88_8822c(+) bluetooth(+) rtw88_pci rtw88_core mac80211 aquantia libarc4 crc_itu_t cfg80211 tegra194_cpufreq dwmac_tegra(+) arm_dsu_pmu stmmac_platform stmmac pcs_xpcs rfkill at24 host1x(+) tegra_bpmp_thermal ramoops reed_solomon fuse loop nfnetlink xfs mmc_block rpmb_core ucsi_ccg ina3221 crct10dif_ce xhci_tegra ghash_ce lm90 sha2_ce sha256_arm64 sha1_ce sdhci_tegra pwm_fan sdhci_pltfm sdhci gpio_keys rtc_tegra cqhci mmc_core phy_tegra_xusb i2c_tegra tegra186_gpc_dma i2c_tegra_bpmp spi_tegra114 dm_mirror dm_region_hash dm_log dm_mod
    [   41.665078] CPU: 4 UID: 0 PID: 794 Comm: (udev-worker) Not tainted 6.11.0-29.31_1538613708.el10.aarch64+debug #1
    [   41.665838] Hardware name: NVIDIA NVIDIA Jetson AGX Orin Developer Kit/Jetson, BIOS 36.3.0-gcid-35594366 02/26/2024
    [   41.672555] pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    [   41.679636] pc : __mutex_lock+0x670/0x878
    [   41.683834] lr : __mutex_lock+0x670/0x878
    [   41.688035] sp : ffff800084b77090
    [   41.691446] x29: ffff800084b77160 x28: ffffdd4bebf7b000 x27: ffffdd4be96b1000
    [   41.698799] x26: 1fffe0002308361c x25: 1ffff0001096ee18 x24: 0000000000000000
    [   41.706149] x23: 0000000000000000 x22: 0000000000000002 x21: ffffdd4be6e3c7a0
    [   41.713500] x20: ffff800084b770f0 x19: ffff00011841b1e8 x18: 0000000000000000
    [   41.720675] x17: 0000000000000000 x16: 0000000000000000 x15: 0720072007200720
    [   41.728023] x14: 0000000000000000 x13: 0000000000000001 x12: ffff6001a96eaab3
    [   41.735375] x11: 1fffe001a96eaab2 x10: ffff6001a96eaab2 x9 : ffffdd4be4838bbc
    [   41.742723] x8 : 00009ffe5691554e x7 : ffff000d4b755593 x6 : 0000000000000001
    [   41.749985] x5 : ffff000d4b755590 x4 : 1fffe0001d88f001 x3 : dfff800000000000
    [   41.756988] x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff0000ec478000
    [   41.764251] Call trace:
    [   41.766695]  __mutex_lock+0x670/0x878
    [   41.770373]  mutex_lock_nested+0x2c/0x40
    [   41.774134]  host1x_intr_start+0x54/0xf8 [host1x]
    [   41.778863]  host1x_runtime_resume+0x150/0x228 [host1x]
    [   41.783935]  pm_generic_runtime_resume+0x84/0xc8
    [   41.788485]  __rpm_callback+0xa0/0x478
    [   41.792422]  rpm_callback+0x15c/0x1a8
    [   41.795922]  rpm_resume+0x698/0xc08
    [   41.799597]  __pm_runtime_resume+0xa8/0x140
    [   41.803621]  host1x_probe+0x810/0xbc0 [host1x]
    [   41.807909]  platform_probe+0xcc/0x1a8
    [   41.811845]  really_probe+0x188/0x800
    [   41.815347]  __driver_probe_device+0x164/0x360
    [   41.819810]  driver_probe_device+0x64/0x1a8
    [   41.823834]  __driver_attach+0x180/0x490
    [   41.827773]  bus_for_each_dev+0x104/0x1a0
    [   41.831797]  driver_attach+0x44/0x68
    [   41.835296]  bus_add_driver+0x23c/0x4e8
    [   41.839235]  driver_register+0x15c/0x3a8
    [   41.843170]  __platform_register_drivers+0xa4/0x208
    [   41.848159]  tegra_host1x_init+0x4c/0xff8 [host1x]
    [   41.853147]  do_one_initcall+0xd4/0x380
    [   41.856997]  do_init_module+0x1dc/0x698
    [   41.860758]  load_module+0xc70/0x1300
    [   41.864435]  __do_sys_init_module+0x1a8/0x1d0
    [   41.868721]  __arm64_sys_init_module+0x74/0xb0
    [   41.873183]  invoke_syscall.constprop.0+0xdc/0x1e8
    [   41.877997]  do_el0_svc+0x154/0x1d0
    [   41.881671]  el0_svc+0x54/0x140
    [   41.884820]  el0t_64_sync_handler+0x120/0x130
    [   41.889285]  el0t_64_sync+0x1a4/0x1a8
    [   41.892960] irq event stamp: 69737
    [   41.896370] hardirqs last  enabled at (69737): [<ffffdd4be6d7768c>] _raw_spin_unlock_irqrestore+0x44/0xe8
    [   41.905739] hardirqs last disabled at (69736): [<ffffdd4be59dcd40>] clk_enable_lock+0x98/0x198
    [   41.914314] softirqs last  enabled at (68082): [<ffffdd4be466b1d0>] handle_softirqs+0x4c8/0x890
    [   41.922977] softirqs last disabled at (67945): [<ffffdd4be44f02a4>] __do_softirq+0x1c/0x28
    [   41.931289] ---[ end trace 0000000000000000 ]---
    
    Inside the probe function when pm_runtime_enable() is called,
    the PM core invokes a resume callback if the device Host1x is
    in a suspended state. As it can be seen in the logs above,
    this leads to host1x_intr_start() function call which is
    trying to acquire a mutex lock. But, the function
    host_intr_init() only gets called after the pm_runtime_enable()
    where mutex is initialised leading to the use of mutex
    prior to its initialisation.
    
    Fix this by moving the mutex initialisation prior to the runtime
    PM enablement function pm_runtime_enable() in probe.
    
    Fixes: c8347f915e67 ("gpu: host1x: Fix boot regression for Tegra")
    Signed-off-by: Rupinderjit Singh <rusingh@redhat.com>
    Reviewed-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Signed-off-by: Thierry Reding <treding@nvidia.com>
    Link: https://patchwork.ozlabs.org/project/linux-tegra/patch/20250206155803.201942-1-rusingh@redhat.com/
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: Grab mm lock before grabbing pt lock [+ + +]
Author: Maksym Planeta <maksym@exostellar.io>
Date:   Wed Dec 4 11:35:15 2024 +0100

    Grab mm lock before grabbing pt lock
    
    [ Upstream commit 6d002348789bc16e9203e9818b7a3688787e3b29 ]
    
    Function xen_pin_page calls xen_pte_lock, which in turn grab page
    table lock (ptlock). When locking, xen_pte_lock expect mm->page_table_lock
    to be held before grabbing ptlock, but this does not happen when pinning
    is caused by xen_mm_pin_all.
    
    This commit addresses lockdep warning below, which shows up when
    suspending a Xen VM.
    
    [ 3680.658422] Freezing user space processes
    [ 3680.660156] Freezing user space processes completed (elapsed 0.001 seconds)
    [ 3680.660182] OOM killer disabled.
    [ 3680.660192] Freezing remaining freezable tasks
    [ 3680.661485] Freezing remaining freezable tasks completed (elapsed 0.001 seconds)
    [ 3680.685254]
    [ 3680.685265] ==================================
    [ 3680.685269] WARNING: Nested lock was not taken
    [ 3680.685274] 6.12.0+ #16 Tainted: G        W
    [ 3680.685279] ----------------------------------
    [ 3680.685283] migration/0/19 is trying to lock:
    [ 3680.685288] ffff88800bac33c0 (ptlock_ptr(ptdesc)#2){+.+.}-{3:3}, at: xen_pin_page+0x175/0x1d0
    [ 3680.685303]
    [ 3680.685303] but this task is not holding:
    [ 3680.685308] init_mm.page_table_lock
    [ 3680.685311]
    [ 3680.685311] stack backtrace:
    [ 3680.685316] CPU: 0 UID: 0 PID: 19 Comm: migration/0 Tainted: G        W          6.12.0+ #16
    [ 3680.685324] Tainted: [W]=WARN
    [ 3680.685328] Stopper: multi_cpu_stop+0x0/0x120 <- __stop_cpus.constprop.0+0x8c/0xd0
    [ 3680.685339] Call Trace:
    [ 3680.685344]  <TASK>
    [ 3680.685347]  dump_stack_lvl+0x77/0xb0
    [ 3680.685356]  __lock_acquire+0x917/0x2310
    [ 3680.685364]  lock_acquire+0xce/0x2c0
    [ 3680.685369]  ? xen_pin_page+0x175/0x1d0
    [ 3680.685373]  _raw_spin_lock_nest_lock+0x2f/0x70
    [ 3680.685381]  ? xen_pin_page+0x175/0x1d0
    [ 3680.685386]  xen_pin_page+0x175/0x1d0
    [ 3680.685390]  ? __pfx_xen_pin_page+0x10/0x10
    [ 3680.685394]  __xen_pgd_walk+0x233/0x2c0
    [ 3680.685401]  ? stop_one_cpu+0x91/0x100
    [ 3680.685405]  __xen_pgd_pin+0x5d/0x250
    [ 3680.685410]  xen_mm_pin_all+0x70/0xa0
    [ 3680.685415]  xen_pv_pre_suspend+0xf/0x280
    [ 3680.685420]  xen_suspend+0x57/0x1a0
    [ 3680.685428]  multi_cpu_stop+0x6b/0x120
    [ 3680.685432]  ? update_cpumasks_hier+0x7c/0xa60
    [ 3680.685439]  ? __pfx_multi_cpu_stop+0x10/0x10
    [ 3680.685443]  cpu_stopper_thread+0x8c/0x140
    [ 3680.685448]  ? smpboot_thread_fn+0x20/0x1f0
    [ 3680.685454]  ? __pfx_smpboot_thread_fn+0x10/0x10
    [ 3680.685458]  smpboot_thread_fn+0xed/0x1f0
    [ 3680.685462]  kthread+0xde/0x110
    [ 3680.685467]  ? __pfx_kthread+0x10/0x10
    [ 3680.685471]  ret_from_fork+0x2f/0x50
    [ 3680.685478]  ? __pfx_kthread+0x10/0x10
    [ 3680.685482]  ret_from_fork_asm+0x1a/0x30
    [ 3680.685489]  </TASK>
    [ 3680.685491]
    [ 3680.685491] other info that might help us debug this:
    [ 3680.685497] 1 lock held by migration/0/19:
    [ 3680.685500]  #0: ffffffff8284df38 (pgd_lock){+.+.}-{3:3}, at: xen_mm_pin_all+0x14/0xa0
    [ 3680.685512]
    [ 3680.685512] stack backtrace:
    [ 3680.685518] CPU: 0 UID: 0 PID: 19 Comm: migration/0 Tainted: G        W          6.12.0+ #16
    [ 3680.685528] Tainted: [W]=WARN
    [ 3680.685531] Stopper: multi_cpu_stop+0x0/0x120 <- __stop_cpus.constprop.0+0x8c/0xd0
    [ 3680.685538] Call Trace:
    [ 3680.685541]  <TASK>
    [ 3680.685544]  dump_stack_lvl+0x77/0xb0
    [ 3680.685549]  __lock_acquire+0x93c/0x2310
    [ 3680.685554]  lock_acquire+0xce/0x2c0
    [ 3680.685558]  ? xen_pin_page+0x175/0x1d0
    [ 3680.685562]  _raw_spin_lock_nest_lock+0x2f/0x70
    [ 3680.685568]  ? xen_pin_page+0x175/0x1d0
    [ 3680.685572]  xen_pin_page+0x175/0x1d0
    [ 3680.685578]  ? __pfx_xen_pin_page+0x10/0x10
    [ 3680.685582]  __xen_pgd_walk+0x233/0x2c0
    [ 3680.685588]  ? stop_one_cpu+0x91/0x100
    [ 3680.685592]  __xen_pgd_pin+0x5d/0x250
    [ 3680.685596]  xen_mm_pin_all+0x70/0xa0
    [ 3680.685600]  xen_pv_pre_suspend+0xf/0x280
    [ 3680.685607]  xen_suspend+0x57/0x1a0
    [ 3680.685611]  multi_cpu_stop+0x6b/0x120
    [ 3680.685615]  ? update_cpumasks_hier+0x7c/0xa60
    [ 3680.685620]  ? __pfx_multi_cpu_stop+0x10/0x10
    [ 3680.685625]  cpu_stopper_thread+0x8c/0x140
    [ 3680.685629]  ? smpboot_thread_fn+0x20/0x1f0
    [ 3680.685634]  ? __pfx_smpboot_thread_fn+0x10/0x10
    [ 3680.685638]  smpboot_thread_fn+0xed/0x1f0
    [ 3680.685642]  kthread+0xde/0x110
    [ 3680.685645]  ? __pfx_kthread+0x10/0x10
    [ 3680.685649]  ret_from_fork+0x2f/0x50
    [ 3680.685654]  ? __pfx_kthread+0x10/0x10
    [ 3680.685657]  ret_from_fork_asm+0x1a/0x30
    [ 3680.685662]  </TASK>
    [ 3680.685267] xen:grant_table: Grant tables using version 1 layout
    [ 3680.685921] OOM killer enabled.
    [ 3680.685934] Restarting tasks ... done.
    
    Signed-off-by: Maksym Planeta <maksym@exostellar.io>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Message-ID: <20241204103516.3309112-1-maksym@exostellar.io>
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
HID: hid-steam: Don't use cancel_delayed_work_sync in IRQ context [+ + +]
Author: Vicki Pfau <vi@endrift.com>
Date:   Tue Feb 4 19:55:29 2025 -0800

    HID: hid-steam: Don't use cancel_delayed_work_sync in IRQ context
    
    [ Upstream commit b051ffa2aeb2a60e092387b6fb2af1ad42f51a3c ]
    
    Lockdep reported that, as steam_do_deck_input_event is called from
    steam_raw_event inside of an IRQ context, it can lead to issues if that IRQ
    occurs while the work to be cancelled is running. By using cancel_delayed_work,
    this issue can be avoided. The exact ordering of the work and the event
    processing is not super important, so this is safe.
    
    Fixes: cd438e57dd05 ("HID: hid-steam: Add gamepad-only mode switched to by holding options")
    Signed-off-by: Vicki Pfau <vi@endrift.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: hid-steam: Make sure rumble work is canceled on removal [+ + +]
Author: Vicki Pfau <vi@endrift.com>
Date:   Wed Dec 25 18:34:24 2024 -0800

    HID: hid-steam: Make sure rumble work is canceled on removal
    
    [ Upstream commit cc4f952427aaa44ecfd92542e10a65cce67bd6f4 ]
    
    When a force feedback command is sent from userspace, work is scheduled to pass
    this data to the controller without blocking userspace itself. However, in
    theory, this work might not be properly canceled if the controller is removed
    at the exact right time. This patch ensures the work is properly canceled when
    the device is removed.
    
    Signed-off-by: Vicki Pfau <vi@endrift.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Stable-dep-of: 79504249d7e2 ("HID: hid-steam: Move hidraw input (un)registering to work")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: hid-steam: Move hidraw input (un)registering to work [+ + +]
Author: Vicki Pfau <vi@endrift.com>
Date:   Tue Feb 4 19:55:27 2025 -0800

    HID: hid-steam: Move hidraw input (un)registering to work
    
    [ Upstream commit 79504249d7e27cad4a3eeb9afc6386e418728ce0 ]
    
    Due to an interplay between locking in the input and hid transport subsystems,
    attempting to register or deregister the relevant input devices during the
    hidraw open/close events can lead to a lock ordering issue. Though this
    shouldn't cause a deadlock, this commit moves the input device manipulation to
    deferred work to sidestep the issue.
    
    Fixes: 385a4886778f6 ("HID: steam: remove input device when a hid client is running.")
    Signed-off-by: Vicki Pfau <vi@endrift.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: hid-thrustmaster: fix stack-out-of-bounds read in usb_check_int_endpoints() [+ + +]
Author: Tulio Fernandes <tuliomf09@gmail.com>
Date:   Wed Feb 5 18:50:34 2025 -0300

    HID: hid-thrustmaster: fix stack-out-of-bounds read in usb_check_int_endpoints()
    
    [ Upstream commit 0b43d98ff29be3144e86294486b1373b5df74c0e ]
    
    Syzbot[1] has detected a stack-out-of-bounds read of the ep_addr array from
    hid-thrustmaster driver. This array is passed to usb_check_int_endpoints
    function from usb.c core driver, which executes a for loop that iterates
    over the elements of the passed array. Not finding a null element at the end of
    the array, it tries to read the next, non-existent element, crashing the kernel.
    
    To fix this, a 0 element was added at the end of the array to break the for
    loop.
    
    [1] https://syzkaller.appspot.com/bug?extid=9c9179ac46169c56c1ad
    
    Reported-by: syzbot+9c9179ac46169c56c1ad@syzkaller.appspotmail.com
    Fixes: 50420d7c79c3 ("HID: hid-thrustmaster: Fix warning in thrustmaster_probe by adding endpoint check")
    Signed-off-by: Túlio Fernandes <tuliomf09@gmail.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: multitouch: Add NULL check in mt_input_configured [+ + +]
Author: Charles Han <hanchunchao@inspur.com>
Date:   Fri Nov 15 14:26:21 2024 +0800

    HID: multitouch: Add NULL check in mt_input_configured
    
    [ Upstream commit 9b8e2220d3a052a690b1d1b23019673e612494c5 ]
    
    devm_kasprintf() can return a NULL pointer on failure,but this
    returned value in mt_input_configured() is not checked.
    Add NULL check in mt_input_configured(), to handle kernel NULL
    pointer dereference error.
    
    Fixes: 479439463529 ("HID: multitouch: Correct devm device reference for hidinput input_dev name")
    Signed-off-by: Charles Han <hanchunchao@inspur.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: winwing: Add NULL check in winwing_init_led() [+ + +]
Author: Charles Han <hanchunchao@inspur.com>
Date:   Thu Nov 14 17:19:47 2024 +0800

    HID: winwing: Add NULL check in winwing_init_led()
    
    [ Upstream commit 45ab5166a82d038c898985b0ad43ead69c1f9573 ]
    
    devm_kasprintf() can return a NULL pointer on failure,but this
    returned value in winwing_init_led() is not checked.
    Add NULL check in winwing_init_led(), to handle kernel NULL
    pointer dereference error.
    
    Fixes: 266c990debad ("HID: Add WinWing Orion2 throttle support")
    Signed-off-by: Charles Han <hanchunchao@inspur.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
i3c: mipi-i3c-hci: Add Intel specific quirk to ring resuming [+ + +]
Author: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Date:   Tue Dec 31 13:59:03 2024 +0200

    i3c: mipi-i3c-hci: Add Intel specific quirk to ring resuming
    
    [ Upstream commit ccdb2e0e3b00d13df90ac7a0524dd855173f1171 ]
    
    MIPI I3C HCI on Intel hardware requires a quirk where ring needs to stop
    and set to run again after resuming the halted controller. This is not
    expected from the MIPI I3C HCI specification and is Intel specific.
    
    Add this quirk to generic aborted transfer handling and execute it only
    when ring is not in running state after a transfer error and attempted
    controller resume. This is the case on Intel hardware.
    
    It is not fully clear to me what is the ring running state in generic
    hardware in such case. I would expect if ring is not running, then stop
    request is a no-op and run request is either required or does the same
    what controller resume would do.
    
    Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
    Link: https://lore.kernel.org/r/20241231115904.620052-1-jarkko.nikula@linux.intel.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i3c: mipi-i3c-hci: Add support for MIPI I3C HCI on PCI bus [+ + +]
Author: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Date:   Tue Dec 31 13:59:04 2024 +0200

    i3c: mipi-i3c-hci: Add support for MIPI I3C HCI on PCI bus
    
    [ Upstream commit 30bb1ce71215645fa6a92f4fa8cbb8f58db68f12 ]
    
    Add a glue code for the MIPI I3C HCI on PCI bus with Intel Panther Lake
    I3C controller PCI IDs.
    
    MIPI I3C HCI on Intel platforms has additional logic around the MIPI I3C
    HCI core logic. Those together create so called I3C slice on PCI bus.
    Intel specific initialization code does a reset cycle to the I3C slice
    before probing the MIPI I3C HCI part.
    
    Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
    Link: https://lore.kernel.org/r/20241231115904.620052-2-jarkko.nikula@linux.intel.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
idpf: call set_real_num_queues in idpf_open [+ + +]
Author: Joshua Hay <joshua.a.hay@intel.com>
Date:   Tue Feb 4 18:08:11 2025 -0800

    idpf: call set_real_num_queues in idpf_open
    
    [ Upstream commit 52c11d31b5a1d1c747bb5f36cc4808e93e2348f4 ]
    
    On initial driver load, alloc_etherdev_mqs is called with whatever max
    queue values are provided by the control plane. However, if the driver
    is loaded on a system where num_online_cpus() returns less than the max
    queues, the netdev will think there are more queues than are actually
    available. Only num_online_cpus() will be allocated, but
    skb_get_queue_mapping(skb) could possibly return an index beyond the
    range of allocated queues. Consequently, the packet is silently dropped
    and it appears as if TX is broken.
    
    Set the real number of queues during open so the netdev knows how many
    queues will be allocated.
    
    Fixes: 1c325aac10a8 ("idpf: configure resources for TX queues")
    Signed-off-by: Joshua Hay <joshua.a.hay@intel.com>
    Reviewed-by: Madhu Chittim <madhu.chittim@intel.com>
    Tested-by: Samuel Salin <Samuel.salin@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

idpf: fix handling rsc packet with a single segment [+ + +]
Author: Sridhar Samudrala <sridhar.samudrala@intel.com>
Date:   Fri Jan 10 16:29:22 2025 -0800

    idpf: fix handling rsc packet with a single segment
    
    [ Upstream commit 69ab25a74e2df53edc2de4acfce0a484bdb88155 ]
    
    Handle rsc packet with a single segment same as a multi
    segment rsc packet so that CHECKSUM_PARTIAL is set in the
    skb->ip_summed field. The current code is passing CHECKSUM_NONE
    resulting in TCP GRO layer doing checksum in SW and hiding the
    issue. This will fail when using dmabufs as payload buffers as
    skb frag would be unreadable.
    
    Fixes: 3a8845af66ed ("idpf: add RX splitq napi poll support")
    Signed-off-by: Sridhar Samudrala <sridhar.samudrala@intel.com>
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Tested-by: Samuel Salin <Samuel.salin@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

idpf: record rx queue in skb for RSC packets [+ + +]
Author: Sridhar Samudrala <sridhar.samudrala@intel.com>
Date:   Fri Jan 10 16:29:58 2025 -0800

    idpf: record rx queue in skb for RSC packets
    
    [ Upstream commit 2ff66c2f9ea4e9311e9a00004348b6c465bd5d3b ]
    
    Move the call to skb_record_rx_queue in idpf_rx_process_skb_fields()
    so that RX queue is recorded for RSC packets too.
    
    Fixes: 90912f9f4f2d ("idpf: convert header split mode to libeth + napi_build_skb()")
    Signed-off-by: Sridhar Samudrala <sridhar.samudrala@intel.com>
    Reviewed-by: Madhu Chittim <madhu.chittim@intel.com>
    Tested-by: Samuel Salin <Samuel.salin@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
igc: Fix HW RX timestamp when passed by ZC XDP [+ + +]
Author: Zdenek Bouska <zdenek.bouska@siemens.com>
Date:   Tue Jan 28 13:26:48 2025 +0100

    igc: Fix HW RX timestamp when passed by ZC XDP
    
    [ Upstream commit 7822dd4d6d4bebca5045a395e1784ef09cae2d43 ]
    
    Fixes HW RX timestamp in the following scenario:
    - AF_PACKET socket with enabled HW RX timestamps is created
    - AF_XDP socket with enabled zero copy is created
    - frame is forwarded to the BPF program, where the timestamp should
      still be readable (extracted by igc_xdp_rx_timestamp(), kfunc
      behind bpf_xdp_metadata_rx_timestamp())
    - the frame got XDP_PASS from BPF program, redirecting to the stack
    - AF_PACKET socket receives the frame with HW RX timestamp
    
    Moves the skb timestamp setting from igc_dispatch_skb_zc() to
    igc_construct_skb_zc() so that igc_construct_skb_zc() is similar to
    igc_construct_skb().
    
    This issue can also be reproduced by running:
     # tools/testing/selftests/bpf/xdp_hw_metadata enp1s0
    When a frame with the wrong port 9092 (instead of 9091) is used:
     # echo -n xdp | nc -u -q1 192.168.10.9 9092
    then the RX timestamp is missing and xdp_hw_metadata prints:
     skb hwtstamp is not found!
    
    With this fix or when copy mode is used:
     # tools/testing/selftests/bpf/xdp_hw_metadata -c enp1s0
    then RX timestamp is found and xdp_hw_metadata prints:
     found skb hwtstamp = 1736509937.852786132
    
    Fixes: 069b142f5819 ("igc: Add support for PTP .getcyclesx64()")
    Signed-off-by: Zdenek Bouska <zdenek.bouska@siemens.com>
    Acked-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Florian Bezdeka <florian.bezdeka@siemens.com>
    Reviewed-by: Song Yoong Siang <yoong.siang.song@intel.com>
    Tested-by: Mor Bar-Gabay <morx.bar.gabay@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

igc: Set buffer type for empty frames in igc_init_empty_frame [+ + +]
Author: Song Yoong Siang <yoong.siang.song@intel.com>
Date:   Wed Feb 5 10:36:03 2025 +0800

    igc: Set buffer type for empty frames in igc_init_empty_frame
    
    commit 63f20f00d23d569e4e67859b4e8dcc9de79221cb upstream.
    
    Set the buffer type to IGC_TX_BUFFER_TYPE_SKB for empty frame in the
    igc_init_empty_frame function. This ensures that the buffer type is
    correctly identified and handled during Tx ring cleanup.
    
    Fixes: db0b124f02ba ("igc: Enhance Qbv scheduling by using first flag bit")
    Cc: stable@vger.kernel.org # 6.2+
    Signed-off-by: Song Yoong Siang <yoong.siang.song@intel.com>
    Acked-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Tested-by: Mor Bar-Gabay <morx.bar.gabay@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
include: net: add static inline dst_dev_overhead() to dst.h [+ + +]
Author: Justin Iurman <justin.iurman@uliege.be>
Date:   Tue Dec 3 13:49:42 2024 +0100

    include: net: add static inline dst_dev_overhead() to dst.h
    
    [ Upstream commit 0600cf40e9b36fe17f9c9f04d4f9cef249eaa5e7 ]
    
    Add static inline dst_dev_overhead() function to include/net/dst.h. This
    helper function is used by ioam6_iptunnel, rpl_iptunnel and
    seg6_iptunnel to get the dev's overhead based on a cache entry
    (dst_entry). If the cache is empty, the default and generic value
    skb->mac_len is returned. Otherwise, LL_RESERVED_SPACE() over dst's dev
    is returned.
    
    Signed-off-by: Justin Iurman <justin.iurman@uliege.be>
    Cc: Alexander Lobakin <aleksander.lobakin@intel.com>
    Cc: Vadim Fedorenko <vadim.fedorenko@linux.dev>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Stable-dep-of: 92191dd10730 ("net: ipv6: fix dst ref loops in rpl, seg6 and ioam6 lwtunnels")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
io_uring/kbuf: reallocate buf lists on upgrade [+ + +]
Author: Pavel Begunkov <asml.silence@gmail.com>
Date:   Wed Feb 12 13:46:46 2025 +0000

    io_uring/kbuf: reallocate buf lists on upgrade
    
    commit 8802766324e1f5d414a81ac43365c20142e85603 upstream.
    
    IORING_REGISTER_PBUF_RING can reuse an old struct io_buffer_list if it
    was created for legacy selected buffer and has been emptied. It violates
    the requirement that most of the field should stay stable after publish.
    Always reallocate it instead.
    
    Cc: stable@vger.kernel.org
    Reported-by: Pumpkin Chang <pumpkin@devco.re>
    Fixes: 2fcabce2d7d34 ("io_uring: disallow mixed provided buffer group registrations")
    Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
io_uring/uring_cmd: remove dead req_has_async_data() check [+ + +]
Author: Jens Axboe <axboe@kernel.dk>
Date:   Wed Feb 12 14:05:11 2025 -0700

    io_uring/uring_cmd: remove dead req_has_async_data() check
    
    [ Upstream commit 0edf1283a9d1419a2095b4fcdd95c11ac00a191c ]
    
    Any uring_cmd always has async data allocated now, there's no reason to
    check and clear a cached copy of the SQE.
    
    Fixes: d10f19dff56e ("io_uring/uring_cmd: switch to always allocating async data")
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
io_uring/waitid: don't abuse io_tw_state [+ + +]
Author: Pavel Begunkov <asml.silence@gmail.com>
Date:   Wed Feb 12 13:33:24 2025 +0000

    io_uring/waitid: don't abuse io_tw_state
    
    [ Upstream commit 06521ac0485effdcc9c792cb0b40ed8e6f2f5fb8 ]
    
    struct io_tw_state is managed by core io_uring, and opcode handling code
    must never try to cheat and create their own instances, it's plain
    incorrect.
    
    io_waitid_complete() attempts exactly that outside of the task work
    context, and even though the ring is locked, there would be no one to
    reap the requests from the defer completion list. It only works now
    because luckily it's called before io_uring_try_cancel_uring_cmd(),
    which flushes completions.
    
    Fixes: f31ecf671ddc4 ("io_uring: add IORING_OP_WAITID support")
    Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iommu/amd: Expicitly enable CNTRL.EPHEn bit in resume path [+ + +]
Author: Vasant Hegde <vasant.hegde@amd.com>
Date:   Mon Jan 27 09:44:11 2025 +0000

    iommu/amd: Expicitly enable CNTRL.EPHEn bit in resume path
    
    [ Upstream commit ef75966abf950c0539534effa4960caa29fb7167 ]
    
    With recent kernel, AMDGPU failed to resume after suspend on certain laptop.
    
    Sample log:
    -----------
    Nov 14 11:52:19 Thinkbook kernel: iommu ivhd0: AMD-Vi: Event logged [ILLEGAL_DEV_TABLE_ENTRY device=0000:06:00.0 pasid=0x00000 address=0x135300000 flags=0x0080]
    Nov 14 11:52:19 Thinkbook kernel: AMD-Vi: DTE[0]: 7d90000000000003
    Nov 14 11:52:19 Thinkbook kernel: AMD-Vi: DTE[1]: 0000100103fc0009
    Nov 14 11:52:19 Thinkbook kernel: AMD-Vi: DTE[2]: 2000000117840013
    Nov 14 11:52:19 Thinkbook kernel: AMD-Vi: DTE[3]: 0000000000000000
    
    This is because in resume path, CNTRL[EPHEn] is not set. Fix this by
    setting CNTRL[EPHEn] to 1 in resume path if EFR[EPHSUP] is set.
    
    Note
      May be better approach is to save the control register in suspend path
      and restore it in resume path instead of trying to set indivisual
      bits. We will have separate patch for that.
    
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219499
    Fixes: c4cb23111103 ("iommu/amd: Add support for enable/disable IOPF")
    Tested-by: Hamish McIntyre-Bhatty <kernel-bugzilla@regd.hamishmb.com>
    Signed-off-by: Vasant Hegde <vasant.hegde@amd.com>
    Link: https://lore.kernel.org/r/20250127094411.5931-1-vasant.hegde@amd.com
    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iommu: Fix potential memory leak in iopf_queue_remove_device() [+ + +]
Author: Lu Baolu <baolu.lu@linux.intel.com>
Date:   Fri Jan 17 13:58:00 2025 +0800

    iommu: Fix potential memory leak in iopf_queue_remove_device()
    
    commit 9759ae2cee7cd42b95f1c48aa3749bd02b5ddb08 upstream.
    
    The iopf_queue_remove_device() helper removes a device from the per-iommu
    iopf queue when PRI is disabled on the device. It responds to all
    outstanding iopf's with an IOMMU_PAGE_RESP_INVALID code and detaches the
    device from the queue.
    
    However, it fails to release the group structure that represents a group
    of iopf's awaiting for a response after responding to the hardware. This
    can cause a memory leak if iopf_queue_remove_device() is called with
    pending iopf's.
    
    Fix it by calling iopf_free_group() after the iopf group is responded.
    
    Fixes: 199112327135 ("iommu: Track iopf group instead of last fault")
    Cc: stable@vger.kernel.org
    Suggested-by: Kevin Tian <kevin.tian@intel.com>
    Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
    Reviewed-by: Kevin Tian <kevin.tian@intel.com>
    Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
    Link: https://lore.kernel.org/r/20250117055800.782462-1-baolu.lu@linux.intel.com
    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ipv4: add RCU protection to ip4_dst_hoplimit() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Feb 5 15:51:10 2025 +0000

    ipv4: add RCU protection to ip4_dst_hoplimit()
    
    [ Upstream commit 469308552ca4560176cfc100e7ca84add1bebd7c ]
    
    ip4_dst_hoplimit() must use RCU protection to make
    sure the net structure it reads does not disappear.
    
    Fixes: fa50d974d104 ("ipv4: Namespaceify ip_default_ttl sysctl knob")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20250205155120.1676781-3-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv4: icmp: convert to dev_net_rcu() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Feb 5 15:51:16 2025 +0000

    ipv4: icmp: convert to dev_net_rcu()
    
    [ Upstream commit 4b8474a0951e605d2a27a2c483da4eb4b8c63760 ]
    
    __icmp_send() must ensure rcu_read_lock() is held, as spotted
    by Jakub.
    
    Other ICMP uses of dev_net() seem safe, change them to dev_net_rcu()
    to get LOCKDEP support.
    
    Fixes: dde1bc0e6f86 ("[NETNS]: Add namespace for ICMP replying code.")
    Closes: https://lore.kernel.org/netdev/20250203153633.46ce0337@kernel.org/
    Reported-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20250205155120.1676781-9-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv4: use RCU protection in __ip_rt_update_pmtu() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Feb 5 15:51:15 2025 +0000

    ipv4: use RCU protection in __ip_rt_update_pmtu()
    
    [ Upstream commit 139512191bd06f1b496117c76372b2ce372c9a41 ]
    
    __ip_rt_update_pmtu() must use RCU protection to make
    sure the net structure it reads does not disappear.
    
    Fixes: 2fbc6e89b2f1 ("ipv4: Update exception handling for multipath routes via same device")
    Fixes: 1de6b15a434c ("Namespaceify min_pmtu sysctl")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20250205155120.1676781-8-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv4: use RCU protection in inet_select_addr() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Feb 5 15:51:14 2025 +0000

    ipv4: use RCU protection in inet_select_addr()
    
    [ Upstream commit 719817cd293e4fa389e1f69c396f3f816ed5aa41 ]
    
    inet_select_addr() must use RCU protection to make
    sure the net structure it reads does not disappear.
    
    Fixes: c4544c724322 ("[NETNS]: Process inet_select_addr inside a namespace.")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20250205155120.1676781-7-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv4: use RCU protection in ip_dst_mtu_maybe_forward() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Feb 5 15:51:11 2025 +0000

    ipv4: use RCU protection in ip_dst_mtu_maybe_forward()
    
    [ Upstream commit 071d8012869b6af352acca346ade13e7be90a49f ]
    
    ip_dst_mtu_maybe_forward() must use RCU protection to make
    sure the net structure it reads does not disappear.
    
    Fixes: f87c10a8aa1e8 ("ipv4: introduce ip_dst_mtu_maybe_forward and protect forwarding path against pmtu spoofing")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20250205155120.1676781-4-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv4: use RCU protection in ipv4_default_advmss() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Feb 5 15:51:12 2025 +0000

    ipv4: use RCU protection in ipv4_default_advmss()
    
    [ Upstream commit 71b8471c93fa0bcab911fcb65da1eb6c4f5f735f ]
    
    ipv4_default_advmss() must use RCU protection to make
    sure the net structure it reads does not disappear.
    
    Fixes: 2e9589ff809e ("ipv4: Namespaceify min_adv_mss sysctl knob")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20250205155120.1676781-5-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv4: use RCU protection in rt_is_expired() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Feb 5 15:51:13 2025 +0000

    ipv4: use RCU protection in rt_is_expired()
    
    [ Upstream commit dd205fcc33d92d54eee4d7f21bb073af9bd5ce2b ]
    
    rt_is_expired() must use RCU protection to make
    sure the net structure it reads does not disappear.
    
    Fixes: e84f84f27647 ("netns: place rt_genid into struct net")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20250205155120.1676781-6-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipv6: icmp: convert to dev_net_rcu() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Feb 5 15:51:19 2025 +0000

    ipv6: icmp: convert to dev_net_rcu()
    
    [ Upstream commit 34aef2b0ce3aa4eb4ef2e1f5cad3738d527032f5 ]
    
    icmp6_send() must acquire rcu_read_lock() sooner to ensure
    the dev_net() call done from a safe context.
    
    Other ICMPv6 uses of dev_net() seem safe, change them to
    dev_net_rcu() to get LOCKDEP support to catch bugs.
    
    Fixes: 9a43b709a230 ("[NETNS][IPV6] icmp6 - make icmpv6_socket per namespace")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20250205155120.1676781-12-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv6: mcast: add RCU protection to mld_newpack() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Feb 12 14:10:21 2025 +0000

    ipv6: mcast: add RCU protection to mld_newpack()
    
    [ Upstream commit a527750d877fd334de87eef81f1cb5f0f0ca3373 ]
    
    mld_newpack() can be called without RTNL or RCU being held.
    
    Note that we no longer can use sock_alloc_send_skb() because
    ipv6.igmp_sk uses GFP_KERNEL allocations which can sleep.
    
    Instead use alloc_skb() and charge the net->ipv6.igmp_sk
    socket under RCU protection.
    
    Fixes: b8ad0cbc58f7 ("[NETNS][IPV6] mcast - handle several network namespace")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Link: https://patch.msgid.link/20250212141021.1663666-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv6: mcast: extend RCU protection in igmp6_send() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Feb 7 13:58:40 2025 +0000

    ipv6: mcast: extend RCU protection in igmp6_send()
    
    [ Upstream commit 087c1faa594fa07a66933d750c0b2610aa1a2946 ]
    
    igmp6_send() can be called without RTNL or RCU being held.
    
    Extend RCU protection so that we can safely fetch the net pointer
    and avoid a potential UAF.
    
    Note that we no longer can use sock_alloc_send_skb() because
    ipv6.igmp_sk uses GFP_KERNEL allocations which can sleep.
    
    Instead use alloc_skb() and charge the net->ipv6.igmp_sk
    socket under RCU protection.
    
    Fixes: b8ad0cbc58f7 ("[NETNS][IPV6] mcast - handle several network namespace")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20250207135841.1948589-9-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv6: use RCU protection in ip6_default_advmss() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Feb 5 15:51:18 2025 +0000

    ipv6: use RCU protection in ip6_default_advmss()
    
    [ Upstream commit 3c8ffcd248da34fc41e52a46e51505900115fc2a ]
    
    ip6_default_advmss() needs rcu protection to make
    sure the net structure it reads does not disappear.
    
    Fixes: 5578689a4e3c ("[NETNS][IPV6] route6 - make route6 per namespace")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20250205155120.1676781-11-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
kbuild: suppress stdout from merge_config for silent builds [+ + +]
Author: Masahiro Yamada <masahiroy@kernel.org>
Date:   Tue Dec 10 19:24:41 2024 +0900

    kbuild: suppress stdout from merge_config for silent builds
    
    [ Upstream commit 1f937a4bcb0472015818f30f4d3c5546d3f09933 ]
    
    merge_config does not respect the Make's -s (--silent) option.
    
    Let's sink the stdout from merge_config for silent builds.
    
    This commit does not cater to the direct invocation of merge_config.sh
    (e.g. arch/mips/Makefile).
    
    Reported-by: Leon Romanovsky <leon@kernel.org>
    Closes: https://lore.kernel.org/all/e534ce33b0e1060eb85ece8429810f087b034c88.1733234008.git.leonro@nvidia.com/
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Tested-by: Leon Romanovsky <leon@kernel.org>
    Reviewed-by: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

kbuild: Use -fzero-init-padding-bits=all [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Mon Jan 27 11:10:28 2025 -0800

    kbuild: Use -fzero-init-padding-bits=all
    
    [ Upstream commit dce4aab8441d285b9a78b33753e0bf583c1320ee ]
    
    GCC 15 introduces a regression in "= { 0 }" style initialization of
    unions that Linux has depended on for eliminating uninitialized variable
    contents. GCC does not seem likely to fix it[1], instead suggesting[2]
    that affected projects start using -fzero-init-padding-bits=unions.
    
    To avoid future surprises beyond just the current situation with unions,
    enable -fzero-init-padding-bits=all when available (GCC 15+). This will
    correctly zero padding bits in unions and structs that might have been
    left uninitialized, and will make sure there is no immediate regression
    in union initializations. As seen in the stackinit KUnit selftest union
    cases, which were passing before, were failing under GCC 15:
    
        not ok 18 test_small_start_old_zero
        ok 29 test_small_start_dynamic_partial # SKIP XFAIL uninit bytes: 63
        ok 32 test_small_start_assigned_dynamic_partial # SKIP XFAIL uninit bytes: 63
        ok 67 test_small_start_static_partial # SKIP XFAIL uninit bytes: 63
        ok 70 test_small_start_static_all # SKIP XFAIL uninit bytes: 56
        ok 73 test_small_start_dynamic_all # SKIP XFAIL uninit bytes: 56
        ok 82 test_small_start_assigned_static_partial # SKIP XFAIL uninit bytes: 63
        ok 85 test_small_start_assigned_static_all # SKIP XFAIL uninit bytes: 56
        ok 88 test_small_start_assigned_dynamic_all # SKIP XFAIL uninit bytes: 56
    
    The above all now pass again with -fzero-init-padding-bits=all added.
    
    This also fixes the following cases for struct initialization that had
    been XFAIL until now because there was no compiler support beyond the
    larger "-ftrivial-auto-var-init=zero" option:
    
        ok 38 test_small_hole_static_all # SKIP XFAIL uninit bytes: 3
        ok 39 test_big_hole_static_all # SKIP XFAIL uninit bytes: 124
        ok 40 test_trailing_hole_static_all # SKIP XFAIL uninit bytes: 7
        ok 42 test_small_hole_dynamic_all # SKIP XFAIL uninit bytes: 3
        ok 43 test_big_hole_dynamic_all # SKIP XFAIL uninit bytes: 124
        ok 44 test_trailing_hole_dynamic_all # SKIP XFAIL uninit bytes: 7
        ok 58 test_small_hole_assigned_static_all # SKIP XFAIL uninit bytes: 3
        ok 59 test_big_hole_assigned_static_all # SKIP XFAIL uninit bytes: 124
        ok 60 test_trailing_hole_assigned_static_all # SKIP XFAIL uninit bytes: 7
        ok 62 test_small_hole_assigned_dynamic_all # SKIP XFAIL uninit bytes: 3
        ok 63 test_big_hole_assigned_dynamic_all # SKIP XFAIL uninit bytes: 124
        ok 64 test_trailing_hole_assigned_dynamic_all # SKIP XFAIL uninit bytes: 7
    
    All of the above now pass when built under GCC 15. Tests can be seen
    with:
    
        ./tools/testing/kunit/kunit.py run stackinit --arch=x86_64 \
            --make_option CC=gcc-15
    
    Clang continues to fully initialize these kinds of variables[3] without
    additional flags.
    
    Suggested-by: Jakub Jelinek <jakub@redhat.com>
    Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118403 [1]
    Link: https://lore.kernel.org/linux-toolchains/Z0hRrrNU3Q+ro2T7@tucnak/ [2]
    Link: https://github.com/llvm/llvm-project/commit/7a086e1b2dc05f54afae3591614feede727601fa [3]
    Reviewed-by: Nathan Chancellor <nathan@kernel.org>
    Acked-by: Masahiro Yamada <masahiroy@kernel.org>
    Link: https://lore.kernel.org/r/20250127191031.245214-3-kees@kernel.org
    Signed-off-by: Kees Cook <kees@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

kbuild: userprogs: fix bitsize and target detection on clang [+ + +]
Author: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
Date:   Thu Feb 13 15:55:17 2025 +0100

    kbuild: userprogs: fix bitsize and target detection on clang
    
    commit 1b71c2fb04e7a713abc6edde4a412416ff3158f2 upstream.
    
    scripts/Makefile.clang was changed in the linked commit to move --target from
    KBUILD_CFLAGS to KBUILD_CPPFLAGS, as that generally has a broader scope.
    However that variable is not inspected by the userprogs logic,
    breaking cross compilation on clang.
    
    Use both variables to detect bitsize and target arguments for userprogs.
    
    Fixes: feb843a469fb ("kbuild: add $(CLANG_FLAGS) to KBUILD_CPPFLAGS")
    Cc: stable@vger.kernel.org
    Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
    Reviewed-by: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
kunit: platform: Resolve 'struct completion' warning [+ + +]
Author: Brian Norris <briannorris@chromium.org>
Date:   Fri Dec 13 10:08:23 2024 -0800

    kunit: platform: Resolve 'struct completion' warning
    
    [ Upstream commit 7687c66c18c66d4ccd9949c6f641c0e7b5773483 ]
    
    If the <kunit/platform_device.h> header is included in a test without
    certain other headers, it produces compiler warnings like:
    
    In file included from [...]
    ../include/kunit/platform_device.h:15:57: warning: ‘struct completion’
    declared inside parameter list will not be visible outside of this
    definition or declaration
       15 |                                                  struct completion *x);
          |                                                         ^~~~~~~~~~
    
    Add a 'struct completion' forward declaration to resolve this.
    
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202412241958.dbAImJsA-lkp@intel.com/
    Signed-off-by: Brian Norris <briannorris@chromium.org>
    Reviewed-by: David Gow <davidgow@google.com>
    Link: https://lore.kernel.org/r/20241213180841.3023843-1-briannorris@chromium.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
KVM: nSVM: Enter guest mode before initializing nested NPT MMU [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Wed Jan 29 17:08:25 2025 -0800

    KVM: nSVM: Enter guest mode before initializing nested NPT MMU
    
    commit 46d6c6f3ef0eaff71c2db6d77d4e2ebb7adac34f upstream.
    
    When preparing vmcb02 for nested VMRUN (or state restore), "enter" guest
    mode prior to initializing the MMU for nested NPT so that guest_mode is
    set in the MMU's role.  KVM's model is that all L2 MMUs are tagged with
    guest_mode, as the behavior of hypervisor MMUs tends to be significantly
    different than kernel MMUs.
    
    Practically speaking, the bug is relatively benign, as KVM only directly
    queries role.guest_mode in kvm_mmu_free_guest_mode_roots() and
    kvm_mmu_page_ad_need_write_protect(), which SVM doesn't use, and in paths
    that are optimizations (mmu_page_zap_pte() and
    shadow_mmu_try_split_huge_pages()).
    
    And while the role is incorprated into shadow page usage, because nested
    NPT requires KVM to be using NPT for L1, reusing shadow pages across L1
    and L2 is impossible as L1 MMUs will always have direct=1, while L2 MMUs
    will have direct=0.
    
    Hoist the TLB processing and setting of HF_GUEST_MASK to the beginning
    of the flow instead of forcing guest_mode in the MMU, as nothing in
    nested_vmcb02_prepare_control() between the old and new locations touches
    TLB flush requests or HF_GUEST_MASK, i.e. there's no reason to present
    inconsistent vCPU state to the MMU.
    
    Fixes: 69cb877487de ("KVM: nSVM: move MMU setup to nested_prepare_vmcb_control")
    Cc: stable@vger.kernel.org
    Reported-by: Yosry Ahmed <yosry.ahmed@linux.dev>
    Reviewed-by: Yosry Ahmed <yosry.ahmed@linux.dev>
    Link: https://lore.kernel.org/r/20250130010825.220346-1-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: x86: Load DR6 with guest value only before entering .vcpu_run() loop [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Fri Jan 24 17:18:33 2025 -0800

    KVM: x86: Load DR6 with guest value only before entering .vcpu_run() loop
    
    commit c2fee09fc167c74a64adb08656cb993ea475197e upstream.
    
    Move the conditional loading of hardware DR6 with the guest's DR6 value
    out of the core .vcpu_run() loop to fix a bug where KVM can load hardware
    with a stale vcpu->arch.dr6.
    
    When the guest accesses a DR and host userspace isn't debugging the guest,
    KVM disables DR interception and loads the guest's values into hardware on
    VM-Enter and saves them on VM-Exit.  This allows the guest to access DRs
    at will, e.g. so that a sequence of DR accesses to configure a breakpoint
    only generates one VM-Exit.
    
    For DR0-DR3, the logic/behavior is identical between VMX and SVM, and also
    identical between KVM_DEBUGREG_BP_ENABLED (userspace debugging the guest)
    and KVM_DEBUGREG_WONT_EXIT (guest using DRs), and so KVM handles loading
    DR0-DR3 in common code, _outside_ of the core kvm_x86_ops.vcpu_run() loop.
    
    But for DR6, the guest's value doesn't need to be loaded into hardware for
    KVM_DEBUGREG_BP_ENABLED, and SVM provides a dedicated VMCB field whereas
    VMX requires software to manually load the guest value, and so loading the
    guest's value into DR6 is handled by {svm,vmx}_vcpu_run(), i.e. is done
    _inside_ the core run loop.
    
    Unfortunately, saving the guest values on VM-Exit is initiated by common
    x86, again outside of the core run loop.  If the guest modifies DR6 (in
    hardware, when DR interception is disabled), and then the next VM-Exit is
    a fastpath VM-Exit, KVM will reload hardware DR6 with vcpu->arch.dr6 and
    clobber the guest's actual value.
    
    The bug shows up primarily with nested VMX because KVM handles the VMX
    preemption timer in the fastpath, and the window between hardware DR6
    being modified (in guest context) and DR6 being read by guest software is
    orders of magnitude larger in a nested setup.  E.g. in non-nested, the
    VMX preemption timer would need to fire precisely between #DB injection
    and the #DB handler's read of DR6, whereas with a KVM-on-KVM setup, the
    window where hardware DR6 is "dirty" extends all the way from L1 writing
    DR6 to VMRESUME (in L1).
    
        L1's view:
        ==========
        <L1 disables DR interception>
               CPU 0/KVM-7289    [023] d....  2925.640961: kvm_entry: vcpu 0
     A:  L1 Writes DR6
               CPU 0/KVM-7289    [023] d....  2925.640963: <hack>: Set DRs, DR6 = 0xffff0ff1
    
     B:        CPU 0/KVM-7289    [023] d....  2925.640967: kvm_exit: vcpu 0 reason EXTERNAL_INTERRUPT intr_info 0x800000ec
    
     D: L1 reads DR6, arch.dr6 = 0
               CPU 0/KVM-7289    [023] d....  2925.640969: <hack>: Sync DRs, DR6 = 0xffff0ff0
    
               CPU 0/KVM-7289    [023] d....  2925.640976: kvm_entry: vcpu 0
        L2 reads DR6, L1 disables DR interception
               CPU 0/KVM-7289    [023] d....  2925.640980: kvm_exit: vcpu 0 reason DR_ACCESS info1 0x0000000000000216
               CPU 0/KVM-7289    [023] d....  2925.640983: kvm_entry: vcpu 0
    
               CPU 0/KVM-7289    [023] d....  2925.640983: <hack>: Set DRs, DR6 = 0xffff0ff0
    
        L2 detects failure
               CPU 0/KVM-7289    [023] d....  2925.640987: kvm_exit: vcpu 0 reason HLT
        L1 reads DR6 (confirms failure)
               CPU 0/KVM-7289    [023] d....  2925.640990: <hack>: Sync DRs, DR6 = 0xffff0ff0
    
        L0's view:
        ==========
        L2 reads DR6, arch.dr6 = 0
              CPU 23/KVM-5046    [001] d....  3410.005610: kvm_exit: vcpu 23 reason DR_ACCESS info1 0x0000000000000216
              CPU 23/KVM-5046    [001] .....  3410.005610: kvm_nested_vmexit: vcpu 23 reason DR_ACCESS info1 0x0000000000000216
    
        L2 => L1 nested VM-Exit
              CPU 23/KVM-5046    [001] .....  3410.005610: kvm_nested_vmexit_inject: reason: DR_ACCESS ext_inf1: 0x0000000000000216
    
              CPU 23/KVM-5046    [001] d....  3410.005610: kvm_entry: vcpu 23
              CPU 23/KVM-5046    [001] d....  3410.005611: kvm_exit: vcpu 23 reason VMREAD
              CPU 23/KVM-5046    [001] d....  3410.005611: kvm_entry: vcpu 23
              CPU 23/KVM-5046    [001] d....  3410.005612: kvm_exit: vcpu 23 reason VMREAD
              CPU 23/KVM-5046    [001] d....  3410.005612: kvm_entry: vcpu 23
    
        L1 writes DR7, L0 disables DR interception
              CPU 23/KVM-5046    [001] d....  3410.005612: kvm_exit: vcpu 23 reason DR_ACCESS info1 0x0000000000000007
              CPU 23/KVM-5046    [001] d....  3410.005613: kvm_entry: vcpu 23
    
        L0 writes DR6 = 0 (arch.dr6)
              CPU 23/KVM-5046    [001] d....  3410.005613: <hack>: Set DRs, DR6 = 0xffff0ff0
    
     A: <L1 writes DR6 = 1, no interception, arch.dr6 is still '0'>
    
     B:       CPU 23/KVM-5046    [001] d....  3410.005614: kvm_exit: vcpu 23 reason PREEMPTION_TIMER
              CPU 23/KVM-5046    [001] d....  3410.005614: kvm_entry: vcpu 23
    
     C: L0 writes DR6 = 0 (arch.dr6)
              CPU 23/KVM-5046    [001] d....  3410.005614: <hack>: Set DRs, DR6 = 0xffff0ff0
    
        L1 => L2 nested VM-Enter
              CPU 23/KVM-5046    [001] d....  3410.005616: kvm_exit: vcpu 23 reason VMRESUME
    
        L0 reads DR6, arch.dr6 = 0
    
    Reported-by: John Stultz <jstultz@google.com>
    Closes: https://lkml.kernel.org/r/CANDhNCq5_F3HfFYABqFGCA1bPd_%2BxgNj-iDQhH4tDk%2Bwi8iZZg%40mail.gmail.com
    Fixes: 375e28ffc0cf ("KVM: X86: Set host DR6 only on VMX and for KVM_DEBUGREG_WONT_EXIT")
    Fixes: d67668e9dd76 ("KVM: x86, SVM: isolate vcpu->arch.dr6 from vmcb->save.dr6")
    Cc: stable@vger.kernel.org
    Cc: Jim Mattson <jmattson@google.com>
    Tested-by: John Stultz <jstultz@google.com>
    Link: https://lore.kernel.org/r/20250125011833.3644371-1-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: x86: Reject Hyper-V's SEND_IPI hypercalls if local APIC isn't in-kernel [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Fri Jan 17 16:34:51 2025 -0800

    KVM: x86: Reject Hyper-V's SEND_IPI hypercalls if local APIC isn't in-kernel
    
    commit a8de7f100bb5989d9c3627d3a223ee1c863f3b69 upstream.
    
    Advertise support for Hyper-V's SEND_IPI and SEND_IPI_EX hypercalls if and
    only if the local API is emulated/virtualized by KVM, and explicitly reject
    said hypercalls if the local APIC is emulated in userspace, i.e. don't rely
    on userspace to opt-in to KVM_CAP_HYPERV_ENFORCE_CPUID.
    
    Rejecting SEND_IPI and SEND_IPI_EX fixes a NULL-pointer dereference if
    Hyper-V enlightenments are exposed to the guest without an in-kernel local
    APIC:
    
      dump_stack+0xbe/0xfd
      __kasan_report.cold+0x34/0x84
      kasan_report+0x3a/0x50
      __apic_accept_irq+0x3a/0x5c0
      kvm_hv_send_ipi.isra.0+0x34e/0x820
      kvm_hv_hypercall+0x8d9/0x9d0
      kvm_emulate_hypercall+0x506/0x7e0
      __vmx_handle_exit+0x283/0xb60
      vmx_handle_exit+0x1d/0xd0
      vcpu_enter_guest+0x16b0/0x24c0
      vcpu_run+0xc0/0x550
      kvm_arch_vcpu_ioctl_run+0x170/0x6d0
      kvm_vcpu_ioctl+0x413/0xb20
      __se_sys_ioctl+0x111/0x160
      do_syscal1_64+0x30/0x40
      entry_SYSCALL_64_after_hwframe+0x67/0xd1
    
    Note, checking the sending vCPU is sufficient, as the per-VM irqchip_mode
    can't be modified after vCPUs are created, i.e. if one vCPU has an
    in-kernel local APIC, then all vCPUs have an in-kernel local APIC.
    
    Reported-by: Dongjie Zou <zoudongjie@huawei.com>
    Fixes: 214ff83d4473 ("KVM: x86: hyperv: implement PV IPI send hypercalls")
    Fixes: 2bc39970e932 ("x86/kvm/hyper-v: Introduce KVM_GET_SUPPORTED_HV_CPUID")
    Cc: stable@vger.kernel.org
    Reviewed-by: Vitaly Kuznetsov <vkuznets@redhat.com>
    Link: https://lore.kernel.org/r/20250118003454.2619573-2-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 6.12.16 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Fri Feb 21 14:01:47 2025 +0100

    Linux 6.12.16
    
    Link: https://lore.kernel.org/r/20250219082601.683263930@linuxfoundation.org
    Tested-by: Pavel Machek (CIP) <pavel@denx.de>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Hardik Garg <hargar@linux.microsoft.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Tested-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Link: https://lore.kernel.org/r/20250220104454.293283301@linuxfoundation.org
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Markus Reichelt <lkt+2023@mareichelt.com>
    Tested-by: Slade Watkins <srw@sladewatkins.net>
    Tested-by: Hardik Garg <hargar@linux.microsoft.com>
    Tested-by: Takeshi Ogasawara <takeshi.ogasawara@futuring-girl.com>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
LoongArch: csum: Fix OoB access in IP checksum code for negative lengths [+ + +]
Author: Yuli Wang <wangyuli@uniontech.com>
Date:   Thu Feb 13 12:02:40 2025 +0800

    LoongArch: csum: Fix OoB access in IP checksum code for negative lengths
    
    [ Upstream commit 6287f1a8c16138c2ec750953e35039634018c84a ]
    
    Commit 69e3a6aa6be2 ("LoongArch: Add checksum optimization for 64-bit
    system") would cause an undefined shift and an out-of-bounds read.
    
    Commit 8bd795fedb84 ("arm64: csum: Fix OoB access in IP checksum code
    for negative lengths") fixes the same issue on ARM64.
    
    Fixes: 69e3a6aa6be2 ("LoongArch: Add checksum optimization for 64-bit system")
    Co-developed-by: Wentao Guan <guanwentao@uniontech.com>
    Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
    Signed-off-by: Yuli Wang <wangyuli@uniontech.com>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

LoongArch: Fix idle VS timer enqueue [+ + +]
Author: Marco Crivellari <marco.crivellari@suse.com>
Date:   Thu Feb 13 12:02:35 2025 +0800

    LoongArch: Fix idle VS timer enqueue
    
    [ Upstream commit edb1942542bc538707cea221e9c7923a6270465f ]
    
    LoongArch re-enables interrupts on its idle routine and performs a
    TIF_NEED_RESCHED check afterwards before putting the CPU to sleep.
    
    The IRQs firing between the check and the idle instruction may set the
    TIF_NEED_RESCHED flag. In order to deal with such a race, IRQs
    interrupting __arch_cpu_idle() rollback their return address to the
    beginning of __arch_cpu_idle() so that TIF_NEED_RESCHED is checked
    again before going back to sleep.
    
    However idle IRQs can also queue timers that may require a tick
    reprogramming through a new generic idle loop iteration but those timers
    would go unnoticed here because __arch_cpu_idle() only checks
    TIF_NEED_RESCHED. It doesn't check for pending timers.
    
    Fix this with fast-forwarding idle IRQs return address to the end of the
    idle routine instead of the beginning, so that the generic idle loop can
    handle both TIF_NEED_RESCHED and pending timers.
    
    Fixes: 0603839b18f4 ("LoongArch: Add exception/interrupt handling")
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
    Signed-off-by: Marco Crivellari <marco.crivellari@suse.com>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

LoongArch: KVM: Fix typo issue about GCFG feature detection [+ + +]
Author: Bibo Mao <maobibo@loongson.cn>
Date:   Thu Feb 13 12:02:56 2025 +0800

    LoongArch: KVM: Fix typo issue about GCFG feature detection
    
    [ Upstream commit bdb13252e5d1518823b81f458d9975c85d5240c2 ]
    
    This is typo issue and misusage about GCFG feature macro. The code
    is wrong, only that it does not cause obvious problem since GCFG is
    set again on vCPU context switch.
    
    Fixes: 0d0df3c99d4f ("LoongArch: KVM: Implement kvm hardware enable, disable interface")
    Signed-off-by: Bibo Mao <maobibo@loongson.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
media: bcm2835-unicam: Disable trigger mode operation [+ + +]
Author: Naushir Patuck <naush@raspberrypi.com>
Date:   Wed Nov 27 11:15:14 2024 +0000

    media: bcm2835-unicam: Disable trigger mode operation
    
    [ Upstream commit 697a252bb2ea414cc1c0b4cf4e3d94a879eaf162 ]
    
    The imx219/imx708 sensors frequently generate a single corrupt frame
    (image or embedded data) when the sensor first starts. This can either
    be a missing line, or invalid samples within the line. This only occurrs
    using the upstream Unicam kernel driver.
    
    Disabling trigger mode elimiates this corruption. Since trigger mode is
    a legacy feature copied from the firmware driver and not expected to be
    needed, remove it. Tested on the Raspberry Pi cameras and shows no ill
    effects.
    
    Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
    Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
    Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: cxd2841er: fix 64-bit division on gcc-9 [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Mon Nov 11 11:41:42 2024 +0100

    media: cxd2841er: fix 64-bit division on gcc-9
    
    [ Upstream commit 8d46603eeeb4c6abff1d2e49f2a6ae289dac765e ]
    
    It appears that do_div() once more gets confused by a complex
    expression that ends up not quite being constant despite
    __builtin_constant_p() thinking it is:
    
    ERROR: modpost: "__aeabi_uldivmod" [drivers/media/dvb-frontends/cxd2841er.ko] undefined!
    
    Use div_u64() instead, forcing the expression to be evaluated
    first, and making it a bit more readable.
    
    Cc: Dan Carpenter <dan.carpenter@linaro.org>
    Reported-by: Naresh Kamboju <naresh.kamboju@linaro.org>
    Closes: https://lore.kernel.org/linux-media/CA+G9fYvvNm-aYodLaAwwTjEGtX0YxR-1R14FOA5aHKt0sSVsYg@mail.gmail.com/
    Reported-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Closes: https://lore.kernel.org/linux-media/CA+G9fYvvNm-aYodLaAwwTjEGtX0YxR-1R14FOA5aHKt0sSVsYg@mail.gmail.com/
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
    [hverkuil: added Closes tags]
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: i2c: ds90ub913: Add error handling to ub913_hw_init() [+ + +]
Author: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Date:   Fri Dec 6 10:26:49 2024 +0200

    media: i2c: ds90ub913: Add error handling to ub913_hw_init()
    
    [ Upstream commit acd8f58d7a3bce0fbd3263961cd09555c00464ba ]
    
    Add error handling to ub913_hw_init() using a new helper function,
    ub913_update_bits().
    
    Reported-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Closes: https://lore.kernel.org/all/Zv40EQSR__JDN_0M@kekkonen.localdomain/
    Reviewed-by: Jai Luthra <jai.luthra@ideasonboard.com>
    Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
    Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: i2c: ds90ub953: Add error handling for i2c reads/writes [+ + +]
Author: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Date:   Fri Dec 6 10:26:50 2024 +0200

    media: i2c: ds90ub953: Add error handling for i2c reads/writes
    
    [ Upstream commit 0794c43ea1e451007e80246e1288ebbf44139397 ]
    
    Add error handling for i2c reads/writes in various places.
    
    Reported-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Closes: https://lore.kernel.org/all/Zv40EQSR__JDN_0M@kekkonen.localdomain/
    Reviewed-by: Jai Luthra <jai.luthra@ideasonboard.com>
    Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
    Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: uvcvideo: Add Kurokesu C1 PRO camera [+ + +]
Author: Isaac Scott <isaac.scott@ideasonboard.com>
Date:   Tue Dec 17 11:13:51 2024 +0000

    media: uvcvideo: Add Kurokesu C1 PRO camera
    
    [ Upstream commit 2762eab6d4140781840f253f9a04b8627017248b ]
    
    Add support for the Kurokesu C1 PRO camera. This camera experiences the
    same issues faced by the Sonix Technology Co. 292A IPC AR0330. As such,
    enable the UVC_QUIRK_MJPEG_NO_EOF quirk for this device to prevent
    frames from being erroneously dropped.
    
    Signed-off-by: Isaac Scott <isaac.scott@ideasonboard.com>
    Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: uvcvideo: Add new quirk definition for the Sonix Technology Co. 292a camera [+ + +]
Author: Isaac Scott <isaac.scott@ideasonboard.com>
Date:   Thu Nov 28 14:51:44 2024 +0000

    media: uvcvideo: Add new quirk definition for the Sonix Technology Co. 292a camera
    
    [ Upstream commit 81f8c0e138c43610cf09b8d2a533068aa58e538e ]
    
    The Sonix Technology Co. 292A camera (which uses an AR0330 sensor), can
    produce MJPEG and H.264 streams concurrently. When doing so, it drops
    the last packets of MJPEG frames every time the H.264 stream generates a
    key frame. Set the UVC_QUIRK_MJPEG_NO_EOF quirk to work around the
    issue.
    
    Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Isaac Scott <isaac.scott@ideasonboard.com>
    Link: https://lore.kernel.org/r/20241128145144.61475-3-isaac.scott@ideasonboard.com
    Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: uvcvideo: Implement dual stream quirk to fix loss of usb packets [+ + +]
Author: Isaac Scott <isaac.scott@ideasonboard.com>
Date:   Thu Nov 28 14:51:43 2024 +0000

    media: uvcvideo: Implement dual stream quirk to fix loss of usb packets
    
    [ Upstream commit c2eda35e675b6ea4a0a21a4b1167b121571a9036 ]
    
    Some cameras, such as the Sonix Technology Co. 292A, exhibit issues when
    running two parallel streams, causing USB packets to be dropped when an
    H.264 stream posts a keyframe while an MJPEG stream is running
    simultaneously. This occasionally causes the driver to erroneously
    output two consecutive JPEG images as a single frame.
    
    To fix this, we inspect the buffer, and trigger a new frame when we
    find an SOI.
    
    Signed-off-by: Isaac Scott <isaac.scott@ideasonboard.com>
    Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>
    Link: https://lore.kernel.org/r/20241128145144.61475-2-isaac.scott@ideasonboard.com
    Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: vidtv: Fix a null-ptr-deref in vidtv_mux_stop_thread [+ + +]
Author: Edward Adam Davis <eadavis@qq.com>
Date:   Sun Dec 29 18:50:39 2024 +0800

    media: vidtv: Fix a null-ptr-deref in vidtv_mux_stop_thread
    
    [ Upstream commit 1221989555db711578a327a9367f1be46500cb48 ]
    
    syzbot report a null-ptr-deref in vidtv_mux_stop_thread. [1]
    
    If dvb->mux is not initialized successfully by vidtv_mux_init() in the
    vidtv_start_streaming(), it will trigger null pointer dereference about mux
    in vidtv_mux_stop_thread().
    
    Adjust the timing of streaming initialization and check it before
    stopping it.
    
    [1]
    KASAN: null-ptr-deref in range [0x0000000000000128-0x000000000000012f]
    CPU: 0 UID: 0 PID: 5842 Comm: syz-executor248 Not tainted 6.13.0-rc4-syzkaller-00012-g9b2ffa6148b1 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
    RIP: 0010:vidtv_mux_stop_thread+0x26/0x80 drivers/media/test-drivers/vidtv/vidtv_mux.c:471
    Code: 90 90 90 90 66 0f 1f 00 55 53 48 89 fb e8 82 2e c8 f9 48 8d bb 28 01 00 00 48 b8 00 00 00 00 00 fc ff df 48 89 fa 48 c1 ea 03 <0f> b6 04 02 84 c0 74 02 7e 3b 0f b6 ab 28 01 00 00 31 ff 89 ee e8
    RSP: 0018:ffffc90003f2faa8 EFLAGS: 00010202
    RAX: dffffc0000000000 RBX: 0000000000000000 RCX: ffffffff87cfb125
    RDX: 0000000000000025 RSI: ffffffff87d120ce RDI: 0000000000000128
    RBP: ffff888029b8d220 R08: 0000000000000005 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000003 R12: ffff888029b8d188
    R13: ffffffff8f590aa0 R14: ffffc9000581c5c8 R15: ffff888029a17710
    FS:  00007f7eef5156c0(0000) GS:ffff8880b8600000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007f7eef5e635c CR3: 0000000076ca6000 CR4: 00000000003526f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     vidtv_stop_streaming drivers/media/test-drivers/vidtv/vidtv_bridge.c:209 [inline]
     vidtv_stop_feed+0x151/0x250 drivers/media/test-drivers/vidtv/vidtv_bridge.c:252
     dmx_section_feed_stop_filtering+0x90/0x160 drivers/media/dvb-core/dvb_demux.c:1000
     dvb_dmxdev_feed_stop.isra.0+0x1ee/0x270 drivers/media/dvb-core/dmxdev.c:486
     dvb_dmxdev_filter_stop+0x22a/0x3a0 drivers/media/dvb-core/dmxdev.c:559
     dvb_dmxdev_filter_free drivers/media/dvb-core/dmxdev.c:840 [inline]
     dvb_demux_release+0x92/0x550 drivers/media/dvb-core/dmxdev.c:1246
     __fput+0x3f8/0xb60 fs/file_table.c:450
     task_work_run+0x14e/0x250 kernel/task_work.c:239
     get_signal+0x1d3/0x2610 kernel/signal.c:2790
     arch_do_signal_or_restart+0x90/0x7e0 arch/x86/kernel/signal.c:337
     exit_to_user_mode_loop kernel/entry/common.c:111 [inline]
     exit_to_user_mode_prepare include/linux/entry-common.h:329 [inline]
     __syscall_exit_to_user_mode_work kernel/entry/common.c:207 [inline]
     syscall_exit_to_user_mode+0x150/0x2a0 kernel/entry/common.c:218
     do_syscall_64+0xda/0x250 arch/x86/entry/common.c:89
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Reported-by: syzbot+5e248227c80a3be8e96a@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=5e248227c80a3be8e96a
    Signed-off-by: Edward Adam Davis <eadavis@qq.com>
    Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mlxsw: Add return value check for mlxsw_sp_port_get_stats_raw() [+ + +]
Author: Wentao Liang <vulab@iscas.ac.cn>
Date:   Wed Feb 12 23:23:11 2025 +0800

    mlxsw: Add return value check for mlxsw_sp_port_get_stats_raw()
    
    commit fee5d688940690cc845937459e340e4e02598e90 upstream.
    
    Add a check for the return value of mlxsw_sp_port_get_stats_raw()
    in __mlxsw_sp_port_get_stats(). If mlxsw_sp_port_get_stats_raw()
    returns an error, exit the function to prevent further processing
    with potentially invalid data.
    
    Fixes: 614d509aa1e7 ("mlxsw: Move ethtool_ops to spectrum_ethtool.c")
    Cc: stable@vger.kernel.org # 5.9+
    Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
    Reviewed-by: Petr Machata <petrm@nvidia.com>
    Link: https://patch.msgid.link/20250212152311.1332-1-vulab@iscas.ac.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mmc: mtk-sd: Fix register settings for hs400(es) mode [+ + +]
Author: Andy-ld Lu <andy-ld.lu@mediatek.com>
Date:   Thu Jan 23 17:26:01 2025 +0800

    mmc: mtk-sd: Fix register settings for hs400(es) mode
    
    commit 3e68abf2b9cebe76c6cd4b1aca8e95cd671035a3 upstream.
    
    For hs400(es) mode, the 'hs400-ds-delay' is typically configured in the
    dts. However, some projects may only define 'mediatek,hs400-ds-dly3',
    which can lead to initialization failures in hs400es mode. CMD13 reported
    response crc error in the mmc_switch_status() just after switching to
    hs400es mode.
    
    [    1.914038][   T82] mmc0: mmc_select_hs400es failed, error -84
    [    1.914954][   T82] mmc0: error -84 whilst initialising MMC card
    
    Currently, the hs400_ds_dly3 value is set within the tuning function. This
    means that the PAD_DS_DLY3 field is not configured before tuning process,
    which is the reason for the above-mentioned CMD13 response crc error.
    
    Move the PAD_DS_DLY3 field configuration into msdc_prepare_hs400_tuning(),
    and add a value check of hs400_ds_delay to prevent overwriting by zero when
    the 'hs400-ds-delay' is not set in the dts. In addition, since hs400(es)
    only tune the PAD_DS_DLY1, the PAD_DS_DLY2_SEL bit should be cleared to
    bypass it.
    
    Fixes: c4ac38c6539b ("mmc: mtk-sd: Add HS400 online tuning support")
    Signed-off-by: Andy-ld Lu <andy-ld.lu@mediatek.com>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20250123092644.7359-1-andy-ld.lu@mediatek.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ndisc: extend RCU protection in ndisc_send_skb() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Feb 7 13:58:39 2025 +0000

    ndisc: extend RCU protection in ndisc_send_skb()
    
    [ Upstream commit ed6ae1f325d3c43966ec1b62ac1459e2b8e45640 ]
    
    ndisc_send_skb() can be called without RTNL or RCU held.
    
    Acquire rcu_read_lock() earlier, so that we can use dev_net_rcu()
    and avoid a potential UAF.
    
    Fixes: 1762f7e88eb3 ("[NETNS][IPV6] ndisc - make socket control per namespace")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20250207135841.1948589-8-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ndisc: ndisc_send_redirect() must use dev_get_by_index_rcu() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Feb 7 13:58:33 2025 +0000

    ndisc: ndisc_send_redirect() must use dev_get_by_index_rcu()
    
    [ Upstream commit 48145a57d4bbe3496e8e4880b23ea6b511e6e519 ]
    
    ndisc_send_redirect() is called under RCU protection, not RTNL.
    
    It must use dev_get_by_index_rcu() instead of __dev_get_by_index()
    
    Fixes: 2f17becfbea5 ("vrf: check the original netdevice for generating redirect")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Stephen Suryaputra <ssuryaextr@gmail.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20250207135841.1948589-2-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ndisc: use RCU protection in ndisc_alloc_skb() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Feb 7 13:58:34 2025 +0000

    ndisc: use RCU protection in ndisc_alloc_skb()
    
    [ Upstream commit 628e6d18930bbd21f2d4562228afe27694f66da9 ]
    
    ndisc_alloc_skb() can be called without RTNL or RCU being held.
    
    Add RCU protection to avoid possible UAF.
    
    Fixes: de09334b9326 ("ndisc: Introduce ndisc_alloc_skb() helper.")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20250207135841.1948589-3-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
neighbour: use RCU protection in __neigh_notify() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Feb 7 13:58:35 2025 +0000

    neighbour: use RCU protection in __neigh_notify()
    
    [ Upstream commit becbd5850c03ed33b232083dd66c6e38c0c0e569 ]
    
    __neigh_notify() can be called without RTNL or RCU protection.
    
    Use RCU protection to avoid potential UAF.
    
    Fixes: 426b5303eb43 ("[NETNS]: Modify the neighbour table code so it handles multiple network namespaces")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20250207135841.1948589-4-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: add dev_net_rcu() helper [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Feb 5 15:51:09 2025 +0000

    net: add dev_net_rcu() helper
    
    [ Upstream commit 482ad2a4ace2740ca0ff1cbc8f3c7f862f3ab507 ]
    
    dev->nd_net can change, readers should either
    use rcu_read_lock() or RTNL.
    
    We currently use a generic helper, dev_net() with
    no debugging support. We probably have many hidden bugs.
    
    Add dev_net_rcu() helper for callers using rcu_read_lock()
    protection.
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20250205155120.1676781-2-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 71b8471c93fa ("ipv4: use RCU protection in ipv4_default_advmss()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ethernet: ti: am65-cpsw: fix memleak in certain XDP cases [+ + +]
Author: Roger Quadros <rogerq@kernel.org>
Date:   Mon Feb 10 16:52:15 2025 +0200

    net: ethernet: ti: am65-cpsw: fix memleak in certain XDP cases
    
    [ Upstream commit 5db843258de1e4e6b1ef1cbd1797923c9e3de548 ]
    
    If the XDP program doesn't result in XDP_PASS then we leak the
    memory allocated by am65_cpsw_build_skb().
    
    It is pointless to allocate SKB memory before running the XDP
    program as we would be wasting CPU cycles for cases other than XDP_PASS.
    Move the SKB allocation after evaluating the XDP program result.
    
    This fixes the memleak. A performance boost is seen for XDP_DROP test.
    
    XDP_DROP test:
    Before: 460256 rx/s                  0 err/s
    After:  784130 rx/s                  0 err/s
    
    Fixes: 8acacc40f733 ("net: ethernet: ti: am65-cpsw: Add minimal XDP support")
    Signed-off-by: Roger Quadros <rogerq@kernel.org>
    Link: https://patch.msgid.link/20250210-am65-cpsw-xdp-fixes-v1-1-ec6b1f7f1aca@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ethernet: ti: am65_cpsw: fix tx_cleanup for XDP case [+ + +]
Author: Roger Quadros <rogerq@kernel.org>
Date:   Mon Feb 10 16:52:17 2025 +0200

    net: ethernet: ti: am65_cpsw: fix tx_cleanup for XDP case
    
    [ Upstream commit 4542536f664f752db5feba2c5998b165933c34f2 ]
    
    For XDP transmit case, swdata doesn't contain SKB but the
    XDP Frame. Infer the correct swdata based on buffer type
    and return the XDP Frame for XDP transmit case.
    
    Signed-off-by: Roger Quadros <rogerq@kernel.org>
    Fixes: 8acacc40f733 ("net: ethernet: ti: am65-cpsw: Add minimal XDP support")
    Link: https://patch.msgid.link/20250210-am65-cpsw-xdp-fixes-v1-3-ec6b1f7f1aca@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: fib_rules: annotate data-races around rule->[io]ifindex [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Feb 6 08:30:51 2025 +0000

    net: fib_rules: annotate data-races around rule->[io]ifindex
    
    [ Upstream commit cb827db50a88aebec516151681adb6db10b688ee ]
    
    rule->iifindex and rule->oifindex can be read without holding RTNL.
    
    Add READ_ONCE()/WRITE_ONCE() annotations where needed.
    
    Fixes: 32affa5578f0 ("fib: rules: no longer hold RTNL in fib_nl_dumprule()")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/20250206083051.2494877-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ipv4: Cache pmtu for all packet paths if multipath enabled [+ + +]
Author: Vladimir Vdovin <deliran@verdict.gg>
Date:   Fri Nov 8 09:34:24 2024 +0000

    net: ipv4: Cache pmtu for all packet paths if multipath enabled
    
    [ Upstream commit 7d3f3b4367f315a61fc615e3138f3d320da8c466 ]
    
    Check number of paths by fib_info_num_path(),
    and update_or_create_fnhe() for every path.
    Problem is that pmtu is cached only for the oif
    that has received icmp message "need to frag",
    other oifs will still try to use "default" iface mtu.
    
    An example topology showing the problem:
    
                        |  host1
                    +---------+
                    |  dummy0 | 10.179.20.18/32  mtu9000
                    +---------+
            +-----------+----------------+
        +---------+                     +---------+
        | ens17f0 |  10.179.2.141/31    | ens17f1 |  10.179.2.13/31
        +---------+                     +---------+
            |    (all here have mtu 9000)    |
        +------+                         +------+
        | ro1  |  10.179.2.140/31        | ro2  |  10.179.2.12/31
        +------+                         +------+
            |                                |
    ---------+------------+-------------------+------
                            |
                        +-----+
                        | ro3 | 10.10.10.10  mtu1500
                        +-----+
                            |
        ========================================
                    some networks
        ========================================
                            |
                        +-----+
                        | eth0| 10.10.30.30  mtu9000
                        +-----+
                            |  host2
    
    host1 have enabled multipath and
    sysctl net.ipv4.fib_multipath_hash_policy = 1:
    
    default proto static src 10.179.20.18
            nexthop via 10.179.2.12 dev ens17f1 weight 1
            nexthop via 10.179.2.140 dev ens17f0 weight 1
    
    When host1 tries to do pmtud from 10.179.20.18/32 to host2,
    host1 receives at ens17f1 iface an icmp packet from ro3 that ro3 mtu=1500.
    And host1 caches it in nexthop exceptions cache.
    
    Problem is that it is cached only for the iface that has received icmp,
    and there is no way that ro3 will send icmp msg to host1 via another path.
    
    Host1 now have this routes to host2:
    
    ip r g 10.10.30.30 sport 30000 dport 443
    10.10.30.30 via 10.179.2.12 dev ens17f1 src 10.179.20.18 uid 0
        cache expires 521sec mtu 1500
    
    ip r g 10.10.30.30 sport 30033 dport 443
    10.10.30.30 via 10.179.2.140 dev ens17f0 src 10.179.20.18 uid 0
        cache
    
    So when host1 tries again to reach host2 with mtu>1500,
    if packet flow is lucky enough to be hashed with oif=ens17f1 its ok,
    if oif=ens17f0 it blackholes and still gets icmp msgs from ro3 to ens17f1,
    until lucky day when ro3 will send it through another flow to ens17f0.
    
    Signed-off-by: Vladimir Vdovin <deliran@verdict.gg>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/20241108093427.317942-1-deliran@verdict.gg
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 139512191bd0 ("ipv4: use RCU protection in __ip_rt_update_pmtu()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ipv6: fix dst ref loops in rpl, seg6 and ioam6 lwtunnels [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Wed Jan 29 19:15:19 2025 -0800

    net: ipv6: fix dst ref loops in rpl, seg6 and ioam6 lwtunnels
    
    [ Upstream commit 92191dd1073088753821b862b791dcc83e558e07 ]
    
    Some lwtunnels have a dst cache for post-transformation dst.
    If the packet destination did not change we may end up recording
    a reference to the lwtunnel in its own cache, and the lwtunnel
    state will never be freed.
    
    Discovered by the ioam6.sh test, kmemleak was recently fixed
    to catch per-cpu memory leaks. I'm not sure if rpl and seg6
    can actually hit this, but in principle I don't see why not.
    
    Fixes: 8cb3bf8bff3c ("ipv6: ioam: Add support for the ip6ip6 encapsulation")
    Fixes: 6c8702c60b88 ("ipv6: sr: add support for SRH encapsulation and injection with lwtunnels")
    Fixes: a7a29f9c361f ("net: ipv6: add rpl sr tunnel")
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20250130031519.2716843-2-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ipv6: fix dst refleaks in rpl, seg6 and ioam6 lwtunnels [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Wed Jan 29 19:15:18 2025 -0800

    net: ipv6: fix dst refleaks in rpl, seg6 and ioam6 lwtunnels
    
    commit c71a192976ded2f2f416d03c4f595cdd4478b825 upstream.
    
    dst_cache_get() gives us a reference, we need to release it.
    
    Discovered by the ioam6.sh test, kmemleak was recently fixed
    to catch per-cpu memory leaks.
    
    Fixes: 985ec6f5e623 ("net: ipv6: rpl_iptunnel: mitigate 2-realloc issue")
    Fixes: 40475b63761a ("net: ipv6: seg6_iptunnel: mitigate 2-realloc issue")
    Fixes: dce525185bc9 ("net: ipv6: ioam6_iptunnel: mitigate 2-realloc issue")
    Reviewed-by: Justin Iurman <justin.iurman@uliege.be>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20250130031519.2716843-1-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: ipv6: ioam6_iptunnel: mitigate 2-realloc issue [+ + +]
Author: Justin Iurman <justin.iurman@uliege.be>
Date:   Tue Dec 3 13:49:43 2024 +0100

    net: ipv6: ioam6_iptunnel: mitigate 2-realloc issue
    
    [ Upstream commit dce525185bc92864e5a318040285ee070563fe34 ]
    
    This patch mitigates the two-reallocations issue with ioam6_iptunnel by
    providing the dst_entry (in the cache) to the first call to
    skb_cow_head(). As a result, the very first iteration may still trigger
    two reallocations (i.e., empty cache), while next iterations would only
    trigger a single reallocation.
    
    Performance tests before/after applying this patch, which clearly shows
    the improvement:
    - inline mode:
      - before: https://ibb.co/LhQ8V63
      - after: https://ibb.co/x5YT2bS
    - encap mode:
      - before: https://ibb.co/3Cjm5m0
      - after: https://ibb.co/TwpsxTC
    - encap mode with tunsrc:
      - before: https://ibb.co/Gpy9QPg
      - after: https://ibb.co/PW1bZFT
    
    This patch also fixes an incorrect behavior: after the insertion, the
    second call to skb_cow_head() makes sure that the dev has enough
    headroom in the skb for layer 2 and stuff. In that case, the "old"
    dst_entry was used, which is now fixed. After discussing with Paolo, it
    appears that both patches can be merged into a single one -this one-
    (for the sake of readability) and target net-next.
    
    Signed-off-by: Justin Iurman <justin.iurman@uliege.be>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Stable-dep-of: 92191dd10730 ("net: ipv6: fix dst ref loops in rpl, seg6 and ioam6 lwtunnels")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ipv6: rpl_iptunnel: mitigate 2-realloc issue [+ + +]
Author: Justin Iurman <justin.iurman@uliege.be>
Date:   Tue Dec 3 13:49:45 2024 +0100

    net: ipv6: rpl_iptunnel: mitigate 2-realloc issue
    
    [ Upstream commit 985ec6f5e6235242191370628acb73d7a9f0c0ea ]
    
    This patch mitigates the two-reallocations issue with rpl_iptunnel by
    providing the dst_entry (in the cache) to the first call to
    skb_cow_head(). As a result, the very first iteration would still
    trigger two reallocations (i.e., empty cache), while next iterations
    would only trigger a single reallocation.
    
    Performance tests before/after applying this patch, which clearly shows
    there is no impact (it even shows improvement):
    - before: https://ibb.co/nQJhqwc
    - after: https://ibb.co/4ZvW6wV
    
    Signed-off-by: Justin Iurman <justin.iurman@uliege.be>
    Cc: Alexander Aring <aahringo@redhat.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Stable-dep-of: 92191dd10730 ("net: ipv6: fix dst ref loops in rpl, seg6 and ioam6 lwtunnels")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ipv6: seg6_iptunnel: mitigate 2-realloc issue [+ + +]
Author: Justin Iurman <justin.iurman@uliege.be>
Date:   Tue Dec 3 13:49:44 2024 +0100

    net: ipv6: seg6_iptunnel: mitigate 2-realloc issue
    
    [ Upstream commit 40475b63761abb6f8fdef960d03228a08662c9c4 ]
    
    This patch mitigates the two-reallocations issue with seg6_iptunnel by
    providing the dst_entry (in the cache) to the first call to
    skb_cow_head(). As a result, the very first iteration would still
    trigger two reallocations (i.e., empty cache), while next iterations
    would only trigger a single reallocation.
    
    Performance tests before/after applying this patch, which clearly shows
    the improvement:
    - before: https://ibb.co/3Cg4sNH
    - after: https://ibb.co/8rQ350r
    
    Signed-off-by: Justin Iurman <justin.iurman@uliege.be>
    Cc: David Lebrun <dlebrun@google.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Stable-dep-of: 92191dd10730 ("net: ipv6: fix dst ref loops in rpl, seg6 and ioam6 lwtunnels")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netdevsim: print human readable IP address [+ + +]
Author: Hangbin Liu <liuhangbin@gmail.com>
Date:   Thu Oct 10 04:00:25 2024 +0000

    netdevsim: print human readable IP address
    
    commit c71bc6da6198a6d88df86094f1052bb581951d65 upstream.
    
    Currently, IPSec addresses are printed in hexadecimal format, which is
    not user-friendly. e.g.
    
      # cat /sys/kernel/debug/netdevsim/netdevsim0/ports/0/ipsec
      SA count=2 tx=20
      sa[0] rx ipaddr=0x00000000 00000000 00000000 0100a8c0
      sa[0]    spi=0x00000101 proto=0x32 salt=0x0adecc3a crypt=1
      sa[0]    key=0x3167608a ca4f1397 43565909 941fa627
      sa[1] tx ipaddr=0x00000000 00000000 00000000 00000000
      sa[1]    spi=0x00000100 proto=0x32 salt=0x0adecc3a crypt=1
      sa[1]    key=0x3167608a ca4f1397 43565909 941fa627
    
    This patch updates the code to print the IPSec address in a human-readable
    format for easier debug. e.g.
    
     # cat /sys/kernel/debug/netdevsim/netdevsim0/ports/0/ipsec
     SA count=4 tx=40
     sa[0] tx ipaddr=0.0.0.0
     sa[0]    spi=0x00000100 proto=0x32 salt=0x0adecc3a crypt=1
     sa[0]    key=0x3167608a ca4f1397 43565909 941fa627
     sa[1] rx ipaddr=192.168.0.1
     sa[1]    spi=0x00000101 proto=0x32 salt=0x0adecc3a crypt=1
     sa[1]    key=0x3167608a ca4f1397 43565909 941fa627
     sa[2] tx ipaddr=::
     sa[2]    spi=0x00000100 proto=0x32 salt=0x0adecc3a crypt=1
     sa[2]    key=0x3167608a ca4f1397 43565909 941fa627
     sa[3] rx ipaddr=2000::1
     sa[3]    spi=0x00000101 proto=0x32 salt=0x0adecc3a crypt=1
     sa[3]    key=0x3167608a ca4f1397 43565909 941fa627
    
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
    Link: https://patch.msgid.link/20241010040027.21440-2-liuhangbin@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>

 
NFS: Fix potential buffer overflowin nfs_sysfs_link_rpc_client() [+ + +]
Author: Zichen Xie <zichenxie0106@gmail.com>
Date:   Wed Dec 18 00:13:12 2024 +0800

    NFS: Fix potential buffer overflowin nfs_sysfs_link_rpc_client()
    
    [ Upstream commit 49fd4e34751e90e6df009b70cd0659dc839e7ca8 ]
    
    name is char[64] where the size of clnt->cl_program->name remains
    unknown. Invoking strcat() directly will also lead to potential buffer
    overflow. Change them to strscpy() and strncat() to fix potential
    issues.
    
    Signed-off-by: Zichen Xie <zichenxie0106@gmail.com>
    Reviewed-by: Benjamin Coddington <bcodding@redhat.com>
    Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfsd: clear acl_access/acl_default after releasing them [+ + +]
Author: Li Lingfeng <lilingfeng3@huawei.com>
Date:   Sun Jan 26 17:47:22 2025 +0800

    nfsd: clear acl_access/acl_default after releasing them
    
    commit 7faf14a7b0366f153284db0ad3347c457ea70136 upstream.
    
    If getting acl_default fails, acl_access and acl_default will be released
    simultaneously. However, acl_access will still retain a pointer pointing
    to the released posix_acl, which will trigger a WARNING in
    nfs3svc_release_getacl like this:
    
    ------------[ cut here ]------------
    refcount_t: underflow; use-after-free.
    WARNING: CPU: 26 PID: 3199 at lib/refcount.c:28
    refcount_warn_saturate+0xb5/0x170
    Modules linked in:
    CPU: 26 UID: 0 PID: 3199 Comm: nfsd Not tainted
    6.12.0-rc6-00079-g04ae226af01f-dirty #8
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
    1.16.1-2.fc37 04/01/2014
    RIP: 0010:refcount_warn_saturate+0xb5/0x170
    Code: cc cc 0f b6 1d b3 20 a5 03 80 fb 01 0f 87 65 48 d8 00 83 e3 01 75
    e4 48 c7 c7 c0 3b 9b 85 c6 05 97 20 a5 03 01 e8 fb 3e 30 ff <0f> 0b eb
    cd 0f b6 1d 8a3
    RSP: 0018:ffffc90008637cd8 EFLAGS: 00010282
    RAX: 0000000000000000 RBX: 0000000000000000 RCX: ffffffff83904fde
    RDX: dffffc0000000000 RSI: 0000000000000008 RDI: ffff88871ed36380
    RBP: ffff888158beeb40 R08: 0000000000000001 R09: fffff520010c6f56
    R10: ffffc90008637ab7 R11: 0000000000000001 R12: 0000000000000001
    R13: ffff888140e77400 R14: ffff888140e77408 R15: ffffffff858b42c0
    FS:  0000000000000000(0000) GS:ffff88871ed00000(0000)
    knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000562384d32158 CR3: 000000055cc6a000 CR4: 00000000000006f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     ? refcount_warn_saturate+0xb5/0x170
     ? __warn+0xa5/0x140
     ? refcount_warn_saturate+0xb5/0x170
     ? report_bug+0x1b1/0x1e0
     ? handle_bug+0x53/0xa0
     ? exc_invalid_op+0x17/0x40
     ? asm_exc_invalid_op+0x1a/0x20
     ? tick_nohz_tick_stopped+0x1e/0x40
     ? refcount_warn_saturate+0xb5/0x170
     ? refcount_warn_saturate+0xb5/0x170
     nfs3svc_release_getacl+0xc9/0xe0
     svc_process_common+0x5db/0xb60
     ? __pfx_svc_process_common+0x10/0x10
     ? __rcu_read_unlock+0x69/0xa0
     ? __pfx_nfsd_dispatch+0x10/0x10
     ? svc_xprt_received+0xa1/0x120
     ? xdr_init_decode+0x11d/0x190
     svc_process+0x2a7/0x330
     svc_handle_xprt+0x69d/0x940
     svc_recv+0x180/0x2d0
     nfsd+0x168/0x200
     ? __pfx_nfsd+0x10/0x10
     kthread+0x1a2/0x1e0
     ? kthread+0xf4/0x1e0
     ? __pfx_kthread+0x10/0x10
     ret_from_fork+0x34/0x60
     ? __pfx_kthread+0x10/0x10
     ret_from_fork_asm+0x1a/0x30
     </TASK>
    Kernel panic - not syncing: kernel: panic_on_warn set ...
    
    Clear acl_access/acl_default after posix_acl_release is called to prevent
    UAF from being triggered.
    
    Fixes: a257cdd0e217 ("[PATCH] NFSD: Add server support for NFSv3 ACLs.")
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/20241107014705.2509463-1-lilingfeng@huaweicloud.com/
    Signed-off-by: Li Lingfeng <lilingfeng3@huawei.com>
    Reviewed-by: Rick Macklem <rmacklem@uoguelph.ca>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
NFSD: fix hang in nfsd4_shutdown_callback [+ + +]
Author: Dai Ngo <dai.ngo@oracle.com>
Date:   Thu Jan 30 11:01:27 2025 -0800

    NFSD: fix hang in nfsd4_shutdown_callback
    
    commit 036ac2778f7b28885814c6fbc07e156ad1624d03 upstream.
    
    If nfs4_client is in courtesy state then there is no point to send
    the callback. This causes nfsd4_shutdown_callback to hang since
    cl_cb_inflight is not 0. This hang lasts about 15 minutes until TCP
    notifies NFSD that the connection was dropped.
    
    This patch modifies nfsd4_run_cb_work to skip the RPC call if
    nfs4_client is in courtesy state.
    
    Signed-off-by: Dai Ngo <dai.ngo@oracle.com>
    Fixes: 66af25799940 ("NFSD: add courteous server support for thread with only delegation")
    Cc: stable@vger.kernel.org
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nfsd: validate the nfsd_serv pointer before calling svc_wake_up [+ + +]
Author: Jeff Layton <jlayton@kernel.org>
Date:   Sat Jan 25 20:13:18 2025 -0500

    nfsd: validate the nfsd_serv pointer before calling svc_wake_up
    
    commit b9382e29ca538b879645899ce45d652a304e2ed2 upstream.
    
    nfsd_file_dispose_list_delayed can be called from the filecache
    laundrette, which is shut down after the nfsd threads are shut down and
    the nfsd_serv pointer is cleared. If nn->nfsd_serv is NULL then there
    are no threads to wake.
    
    Ensure that the nn->nfsd_serv pointer is non-NULL before calling
    svc_wake_up in nfsd_file_dispose_list_delayed. This is safe since the
    svc_serv is not freed until after the filecache laundrette is cancelled.
    
    Reported-by: Salvatore Bonaccorso <carnil@debian.org>
    Closes: https://bugs.debian.org/1093734
    Fixes: ffb402596147 ("nfsd: Don't leave work of closing files to a work queue")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jeff Layton <jlayton@kernel.org>
    Reviewed-by: NeilBrown <neilb@suse.de>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
objtool/rust: add one more `noreturn` Rust function [+ + +]
Author: Miguel Ojeda <ojeda@kernel.org>
Date:   Sun Jan 12 15:39:51 2025 +0100

    objtool/rust: add one more `noreturn` Rust function
    
    commit cee6f9a9c87b6ecfb51845950c28216b231c3610 upstream.
    
    Starting with Rust 1.85.0 (currently in beta, to be released 2025-02-20),
    under some kernel configurations with `CONFIG_RUST_DEBUG_ASSERTIONS=y`,
    one may trigger a new `objtool` warning:
    
        rust/kernel.o: warning: objtool: _R...securityNtB2_11SecurityCtx8as_bytes()
        falls through to next function _R...core3ops4drop4Drop4drop()
    
    due to a call to the `noreturn` symbol:
    
        core::panicking::assert_failed::<usize, usize>
    
    Thus add it to the list so that `objtool` knows it is actually `noreturn`.
    Do so matching with `strstr` since it is a generic.
    
    See commit 56d680dd23c3 ("objtool/rust: list `noreturn` Rust functions")
    for more details.
    
    Cc: stable@vger.kernel.org # Needed in 6.12.y and 6.13.y only (Rust is pinned in older LTSs).
    Fixes: 56d680dd23c3 ("objtool/rust: list `noreturn` Rust functions")
    Reviewed-by: Gary Guo <gary@garyguo.net>
    Link: https://lore.kernel.org/r/20250112143951.751139-1-ojeda@kernel.org
    [ Updated Cc: stable@ to include 6.13.y. - Miguel ]
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
openvswitch: use RCU protection in ovs_vport_cmd_fill_info() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Feb 7 13:58:37 2025 +0000

    openvswitch: use RCU protection in ovs_vport_cmd_fill_info()
    
    [ Upstream commit 90b2f49a502fa71090d9f4fe29a2f51fe5dff76d ]
    
    ovs_vport_cmd_fill_info() can be called without RTNL or RCU.
    
    Use RCU protection and dev_net_rcu() to avoid potential UAF.
    
    Fixes: 9354d4520342 ("openvswitch: reliable interface indentification in port dumps")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20250207135841.1948589-6-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
orangefs: fix a oob in orangefs_debug_write [+ + +]
Author: Mike Marshall <hubcap@omnibond.com>
Date:   Wed Jan 8 14:21:08 2025 -0500

    orangefs: fix a oob in orangefs_debug_write
    
    [ Upstream commit f7c848431632598ff9bce57a659db6af60d75b39 ]
    
    I got a syzbot report: slab-out-of-bounds Read in
    orangefs_debug_write... several people suggested fixes,
    I tested Al Viro's suggestion and made this patch.
    
    Signed-off-by: Mike Marshall <hubcap@omnibond.com>
    Reported-by: syzbot+fc519d7875f2d9186c1f@syzkaller.appspotmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
partitions: mac: fix handling of bogus partition table [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Fri Feb 14 02:39:50 2025 +0100

    partitions: mac: fix handling of bogus partition table
    
    commit 80e648042e512d5a767da251d44132553fe04ae0 upstream.
    
    Fix several issues in partition probing:
    
     - The bailout for a bad partoffset must use put_dev_sector(), since the
       preceding read_part_sector() succeeded.
     - If the partition table claims a silly sector size like 0xfff bytes
       (which results in partition table entries straddling sector boundaries),
       bail out instead of accessing out-of-bounds memory.
     - We must not assume that the partition table contains proper NUL
       termination - use strnlen() and strncmp() instead of strlen() and
       strcmp().
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Jann Horn <jannh@google.com>
    Link: https://lore.kernel.org/r/20250214-partition-mac-v1-1-c1c626dffbd5@google.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
PCI/DPC: Quirk PIO log size for Intel Raptor Lake-P [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Thu Jan 2 17:43:13 2025 +0100

    PCI/DPC: Quirk PIO log size for Intel Raptor Lake-P
    
    [ Upstream commit b198499c7d2508a76243b98e7cca992f6fd2b7f7 ]
    
    Apparently the Raptor Lake-P reference firmware configures the PIO log size
    correctly, but some vendor BIOSes, including at least ASUSTeK COMPUTER INC.
    Zenbook UX3402VA_UX3402VA, do not.
    
    Apply the quirk for Raptor Lake-P.  This prevents kernel complaints like:
    
      DPC: RP PIO log size 0 is invalid
    
    and also enables the DPC driver to dump the RP PIO Log registers when DPC
    is triggered.
    
    Note that the bug report also mentions 8086:a76e, which has been already
    added by 627c6db20703 ("PCI/DPC: Quirk PIO log size for Intel Raptor Lake
    Root Ports").
    
    Link: https://lore.kernel.org/r/20250102164315.7562-1-tiwai@suse.de
    Link: https://bugzilla.suse.com/show_bug.cgi?id=1234623
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    [bhelgaas: commit log]
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
PCI: Avoid FLR for Mediatek MT7922 WiFi [+ + +]
Author: Bjorn Helgaas <bhelgaas@google.com>
Date:   Wed Feb 12 13:35:16 2025 -0600

    PCI: Avoid FLR for Mediatek MT7922 WiFi
    
    commit 81f64e925c29fe6e99f04b131fac1935ac931e81 upstream.
    
    The Mediatek MT7922 WiFi device advertises FLR support, but it apparently
    does not work, and all subsequent config reads return ~0:
    
      pci 0000:01:00.0: [14c3:0616] type 00 class 0x028000 PCIe Endpoint
      pciback 0000:01:00.0: not ready 65535ms after FLR; giving up
    
    After an FLR, pci_dev_wait() waits for the device to become ready.  Prior
    to d591f6804e7e ("PCI: Wait for device readiness with Configuration RRS"),
    it polls PCI_COMMAND until it is something other that PCI_POSSIBLE_ERROR
    (~0).  If it times out, pci_dev_wait() returns -ENOTTY and
    __pci_reset_function_locked() tries the next available reset method.
    Typically this is Secondary Bus Reset, which does work, so the MT7922 is
    eventually usable.
    
    After d591f6804e7e, if Configuration Request Retry Status Software
    Visibility (RRS SV) is enabled, pci_dev_wait() polls PCI_VENDOR_ID until it
    is something other than the special 0x0001 Vendor ID that indicates a
    completion with RRS status.
    
    When RRS SV is enabled, reads of PCI_VENDOR_ID should return either 0x0001,
    i.e., the config read was completed with RRS, or a valid Vendor ID.  On the
    MT7922, it seems that all config reads after FLR return ~0 indefinitely.
    When pci_dev_wait() reads PCI_VENDOR_ID and gets 0xffff, it assumes that's
    a valid Vendor ID and the device is now ready, so it returns with success.
    
    After pci_dev_wait() returns success, we restore config space and continue.
    Since the MT7922 is not actually ready after the FLR, the restore fails and
    the device is unusable.
    
    We considered changing pci_dev_wait() to continue polling if a
    PCI_VENDOR_ID read returns either 0x0001 or 0xffff.  This "works" as it did
    before d591f6804e7e, although we have to wait for the timeout and then fall
    back to SBR.  But it doesn't work for SR-IOV VFs, which *always* return
    0xffff as the Vendor ID.
    
    Mark Mediatek MT7922 WiFi devices to avoid the use of FLR completely.  This
    will cause fallback to another reset method, such as SBR.
    
    Link: https://lore.kernel.org/r/20250212193516.88741-1-helgaas@kernel.org
    Fixes: d591f6804e7e ("PCI: Wait for device readiness with Configuration RRS")
    Link: https://github.com/QubesOS/qubes-issues/issues/9689#issuecomment-2582927149
    Link: https://lore.kernel.org/r/Z4pHll_6GX7OUBzQ@mail-itl
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Tested-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: switchtec: Add Microchip PCI100X device IDs [+ + +]
Author: Rakesh Babu Saladi <Saladi.Rakeshbabu@microchip.com>
Date:   Mon Jan 20 15:25:24 2025 +0530

    PCI: switchtec: Add Microchip PCI100X device IDs
    
    [ Upstream commit a3282f84b2151d254dc4abf24d1255c6382be774 ]
    
    Add Microchip parts to the Device ID table so the driver supports PCI100x
    devices.
    
    Add a new macro to quirk the Microchip Switchtec PCI100x parts to allow DMA
    access via NTB to work when the IOMMU is turned on.
    
    PCI100x family has 6 variants; each variant is designed for different
    application usages, different port counts and lane counts:
    
      PCI1001 has 1 x4 upstream port and 3 x4 downstream ports
      PCI1002 has 1 x4 upstream port and 4 x2 downstream ports
      PCI1003 has 2 x4 upstream ports, 2 x2 upstream ports, and 2 x2
        downstream ports
      PCI1004 has 4 x4 upstream ports
      PCI1005 has 1 x4 upstream port and 6 x2 downstream ports
      PCI1006 has 6 x2 upstream ports and 2 x2 downstream ports
    
    [Historical note: these parts use PCI_VENDOR_ID_EFAR (0x1055), from EFAR
    Microsystems, which was acquired in 1996 by Standard Microsystems Corp,
    which was acquired by Microchip Technology in 2012.  The PCI-SIG confirms
    that Vendor ID 0x1055 is assigned to Microchip even though it's not
    visible via https://pcisig.com/membership/member-companies]
    
    Link: https://lore.kernel.org/r/20250120095524.243103-1-Saladi.Rakeshbabu@microchip.com
    Signed-off-by: Rakesh Babu Saladi <Saladi.Rakeshbabu@microchip.com>
    [bhelgaas: Vendor ID history]
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Acked-By: Logan Gunthorpe <logang@deltatee.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf/x86/intel: Clean up PEBS-via-PT on hybrid [+ + +]
Author: Kan Liang <kan.liang@linux.intel.com>
Date:   Wed Jan 29 07:48:18 2025 -0800

    perf/x86/intel: Clean up PEBS-via-PT on hybrid
    
    [ Upstream commit 0a5561501397e2bbd0fb0e300eb489f72a90597a ]
    
    The PEBS-via-PT feature is exposed for the e-core of some hybrid
    platforms, e.g., ADL and MTL. But it never works.
    
    $ dmesg | grep PEBS
    [    1.793888] core: cpu_atom PMU driver: PEBS-via-PT
    
    $ perf record -c 1000 -e '{intel_pt/branch=0/,
    cpu_atom/cpu-cycles,aux-output/pp}' -C8
    Error:
    The sys_perf_event_open() syscall returned with 22 (Invalid argument)
    for event (cpu_atom/cpu-cycles,aux-output/pp).
    "dmesg | grep -i perf" may provide additional information.
    
    The "PEBS-via-PT" is printed if the corresponding bit of per-PMU
    capabilities is set. Since the feature is supported by the e-core HW,
    perf sets the bit for e-core. However, for Intel PT, if a feature is not
    supported on all CPUs, it is not supported at all. The PEBS-via-PT event
    cannot be created successfully.
    
    The PEBS-via-PT is no longer enumerated on the latest hybrid platform. It
    will be deprecated on future platforms with Arch PEBS. Let's remove it
    from the existing hybrid platforms.
    
    Fixes: d9977c43bff8 ("perf/x86: Register hybrid PMUs")
    Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/20250129154820.3755948-2-kan.liang@linux.intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

perf/x86/intel: Ensure LBRs are disabled when a CPU is starting [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Thu Jan 30 17:07:21 2025 -0800

    perf/x86/intel: Ensure LBRs are disabled when a CPU is starting
    
    commit c631a2de7ae48d50434bdc205d901423f8577c65 upstream.
    
    Explicitly clear DEBUGCTL.LBR when a CPU is starting, prior to purging the
    LBR MSRs themselves, as at least one system has been found to transfer
    control to the kernel with LBRs enabled (it's unclear whether it's a BIOS
    flaw or a CPU goof).  Because the kernel preserves the original DEBUGCTL,
    even when toggling LBRs, leaving DEBUGCTL.LBR as is results in running
    with LBRs enabled at all times.
    
    Closes: https://lore.kernel.org/all/c9d8269bff69f6359731d758e3b1135dedd7cc61.camel@redhat.com
    Reported-by: Maxim Levitsky <mlevitsk@redhat.com>
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
    Cc: stable@vger.kernel.org
    Link: https://lkml.kernel.org/r/20250131010721.470503-1-seanjc@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

perf/x86/intel: Fix ARCH_PERFMON_NUM_COUNTER_LEAF [+ + +]
Author: Kan Liang <kan.liang@linux.intel.com>
Date:   Wed Jan 29 07:48:19 2025 -0800

    perf/x86/intel: Fix ARCH_PERFMON_NUM_COUNTER_LEAF
    
    commit 47a973fd75639fe80d59f9e1860113bb2a0b112b upstream.
    
    The EAX of the CPUID Leaf 023H enumerates the mask of valid sub-leaves.
    To tell the availability of the sub-leaf 1 (enumerate the counter mask),
    perf should check the bit 1 (0x2) of EAS, rather than bit 0 (0x1).
    
    The error is not user-visible on bare metal. Because the sub-leaf 0 and
    the sub-leaf 1 are always available. However, it may bring issues in a
    virtualization environment when a VMM only enumerates the sub-leaf 0.
    
    Introduce the cpuid35_e?x to replace the macros, which makes the
    implementation style consistent.
    
    Fixes: eb467aaac21e ("perf/x86/intel: Support Architectural PerfMon Extension leaf")
    Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: stable@vger.kernel.org
    Link: https://lkml.kernel.org/r/20250129154820.3755948-3-kan.liang@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
pinctrl: cy8c95x0: Avoid accessing reserved registers [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Mon Feb 3 15:10:28 2025 +0200

    pinctrl: cy8c95x0: Avoid accessing reserved registers
    
    [ Upstream commit 3fbe3fe28764455e4fc3578afb9765f46f9ce93d ]
    
    The checks for vrtual registers in the cy8c95x0_readable_register()
    and cy8c95x0_writeable_register() are not aligned and broken.
    
    Fix that by explicitly avoiding reserved registers to be accessed.
    
    Fixes: 71e4001a0455 ("pinctrl: pinctrl-cy8c95x0: Fix regcache")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/20250203131506.3318201-3-andriy.shevchenko@linux.intel.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: cy8c95x0: Enable regmap locking for debug [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Mon Feb 3 15:10:29 2025 +0200

    pinctrl: cy8c95x0: Enable regmap locking for debug
    
    [ Upstream commit aac4470fa6e695e4d6ac94cc77d4690b57f1d2bc ]
    
    When regmap locking is disabled, debugfs is also disabled.
    Enable locking for debug when CONFIG_DEBUG_PINCTRL is set.
    
    Fixes: f71aba339a66 ("pinctrl: cy8c95x0: Use single I2C lock")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/20250203131506.3318201-4-andriy.shevchenko@linux.intel.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: cy8c95x0: Rename PWMSEL to SELPWM [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Mon Feb 3 15:10:30 2025 +0200

    pinctrl: cy8c95x0: Rename PWMSEL to SELPWM
    
    [ Upstream commit 0a7404fc5399e1100b14e7e2a4af2e4fd5e3b602 ]
    
    There are two registers in the hardware, one, "Select PWM",
    is per-port configuration enabling PWM function instead of GPIO.
    The other one is "PWM Select" is per-PWM selector to configure
    PWM itself. Original code uses abbreviation of the latter
    to describe the former. Rename it to follow the datasheet.
    
    Fixes: e6cbbe42944d ("pinctrl: Add Cypress cy8c95x0 support")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/20250203131506.3318201-5-andriy.shevchenko@linux.intel.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: cy8c95x0: Respect IRQ trigger settings from firmware [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Fri Jan 17 16:21:45 2025 +0200

    pinctrl: cy8c95x0: Respect IRQ trigger settings from firmware
    
    [ Upstream commit 1ddee69108d305bbc059cbf31c0b47626796be77 ]
    
    Some of the platforms may connect the INT pin via inversion logic
    effectively make the triggering to be active-low.
    Remove explicit trigger flag to respect the settings from firmware.
    
    Without this change even idling chip produces spurious interrupts
    and kernel disables the line in the result:
    
      irq 33: nobody cared (try booting with the "irqpoll" option)
      CPU: 0 UID: 0 PID: 125 Comm: irq/33-i2c-INT3 Not tainted 6.12.0-00236-g8b874ed11dae #64
      Hardware name: Intel Corp. QUARK/Galileo, BIOS 0x01000900 01/01/2014
      ...
      handlers:
      [<86e86bea>] irq_default_primary_handler threaded [<d153e44a>] cy8c95x0_irq_handler [pinctrl_cy8c95x0]
      Disabling IRQ #33
    
    Fixes: e6cbbe42944d ("pinctrl: Add Cypress cy8c95x0 support")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/20250117142304.596106-2-andriy.shevchenko@linux.intel.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: pinconf-generic: Print unsigned value if a format is registered [+ + +]
Author: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Date:   Wed Feb 5 12:10:58 2025 +0200

    pinctrl: pinconf-generic: Print unsigned value if a format is registered
    
    [ Upstream commit 0af4c120f5e7a1ea70aff7da2dfb65b6148a3e84 ]
    
    Commit 3ba11e684d16 ("pinctrl: pinconf-generic: print hex value")
    unconditionally switched to printing hex values in
    pinconf_generic_dump_one(). However, if a dump format is registered for the
    dumped pin, the hex value is printed as well. This hex value does not
    necessarily correspond 1:1 with the hardware register value (as noted by
    commit 3ba11e684d16 ("pinctrl: pinconf-generic: print hex value")). As a
    result, user-facing output may include information like:
    output drive strength (0x100 uA).
    
    To address this, check if a dump format is registered for the dumped
    property, and print the unsigned value instead when applicable.
    
    Fixes: 3ba11e684d16 ("pinctrl: pinconf-generic: print hex value")
    Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
    Link: https://lore.kernel.org/20250205101058.2034860-1-claudiu.beznea.uj@bp.renesas.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/efa: Reset device on probe failure [+ + +]
Author: Michael Margolin <mrgolin@amazon.com>
Date:   Wed Dec 25 13:15:48 2024 +0000

    RDMA/efa: Reset device on probe failure
    
    [ Upstream commit 123c13f10ed3627ba112172d8bd122a72cae226d ]
    
    Make sure the device is being reset on driver exit whatever the reason
    is, to keep the device aligned and allow it to close shared resources
    (e.g. admin queue).
    
    Reviewed-by: Firas Jahjah <firasj@amazon.com>
    Reviewed-by: Yonatan Nachum <ynachum@amazon.com>
    Signed-off-by: Michael Margolin <mrgolin@amazon.com>
    Link: https://patch.msgid.link/20241225131548.15155-1-mrgolin@amazon.com
    Reviewed-by: Gal Pressman <gal.pressman@linux.dev>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
regmap-irq: Add missing kfree() [+ + +]
Author: Jiasheng Jiang <jiashengjiangcool@gmail.com>
Date:   Wed Feb 5 00:43:43 2025 +0000

    regmap-irq: Add missing kfree()
    
    commit 32ffed055dcee17f6705f545b069e44a66067808 upstream.
    
    Add kfree() for "d->main_status_buf" to the error-handling path to prevent
    a memory leak.
    
    Fixes: a2d21848d921 ("regmap: regmap-irq: Add main status register support")
    Cc: stable@vger.kernel.org  # v5.1+
    Signed-off-by: Jiasheng Jiang <jiashengjiangcool@gmail.com>
    Link: https://patch.msgid.link/20250205004343.14413-1-jiashengjiangcool@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
regulator: qcom_smd: Add l2, l5 sub-node to mp5496 regulator [+ + +]
Author: Varadarajan Narayanan <quic_varada@quicinc.com>
Date:   Wed Feb 5 13:16:56 2025 +0530

    regulator: qcom_smd: Add l2, l5 sub-node to mp5496 regulator
    
    commit b0eddc21900fb44f8c5db95710479865e3700fbd upstream.
    
    Adding l2, l5 sub-node entry to mp5496 regulator node.
    
    Cc: stable@vger.kernel.org
    Acked-by: Rob Herring <robh@kernel.org>
    Signed-off-by: Varadarajan Narayanan <quic_varada@quicinc.com>
    Link: https://patch.msgid.link/20250205074657.4142365-2-quic_varada@quicinc.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "vfio/platform: check the bounds of read/write syscalls" [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Wed Feb 19 08:01:16 2025 +0100

    Revert "vfio/platform: check the bounds of read/write syscalls"
    
    This reverts commit 61ba518195d61c38c6cb86f83135e51f93735442.
    
    It had been committed multiple times to the tree, and isn't needed
    again.
    
    Link: https://lore.kernel.org/r/a082db2605514513a0a8568382d5bd2b6f1877a0.camel@cyberus-technology.de
    Reported-by: Stefan Nürnberger <stefan.nuernberger@cyberus-technology.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ring-buffer: Unlock resize on mmap error [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Thu Feb 13 13:19:57 2025 -0500

    ring-buffer: Unlock resize on mmap error
    
    commit 9ba0e1755a40f9920ad0f4168031291b3eb58d7b upstream.
    
    Memory mapping the tracing ring buffer will disable resizing the buffer.
    But if there's an error in the memory mapping like an invalid parameter,
    the function exits out without re-enabling the resizing of the ring
    buffer, preventing the ring buffer from being resized after that.
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Vincent Donnefort <vdonnefort@google.com>
    Link: https://lore.kernel.org/20250213131957.530ec3c5@gandalf.local.home
    Fixes: 117c39200d9d7 ("ring-buffer: Introducing ring-buffer mapping functions")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ring-buffer: Update pages_touched to reflect persistent buffer content [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Fri Feb 14 12:35:12 2025 -0500

    ring-buffer: Update pages_touched to reflect persistent buffer content
    
    commit 97937834ae876f29565415ab15f1284666dc6be3 upstream.
    
    The pages_touched field represents the number of subbuffers in the ring
    buffer that have content that can be read. This is used in accounting of
    "dirty_pages" and "buffer_percent" to allow the user to wait for the
    buffer to be filled to a certain amount before it reads the buffer in
    blocking mode.
    
    The persistent buffer never updated this value so it was set to zero, and
    this accounting would take it as it had no content. This would cause user
    space to wait for content even though there's enough content in the ring
    buffer that satisfies the buffer_percent.
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Vincent Donnefort <vdonnefort@google.com>
    Link: https://lore.kernel.org/20250214123512.0631436e@gandalf.local.home
    Fixes: 5f3b6e839f3ce ("ring-buffer: Validate boot range memory events")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ring-buffer: Validate the persistent meta data subbuf array [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Fri Feb 14 10:28:20 2025 -0500

    ring-buffer: Validate the persistent meta data subbuf array
    
    commit f5b95f1fa2ef3a03f49eeec658ba97e721412b32 upstream.
    
    The meta data for a mapped ring buffer contains an array of indexes of all
    the subbuffers. The first entry is the reader page, and the rest of the
    entries lay out the order of the subbuffers in how the ring buffer link
    list is to be created.
    
    The validator currently makes sure that all the entries are within the
    range of 0 and nr_subbufs. But it does not check if there are any
    duplicates.
    
    While working on the ring buffer, I corrupted this array, where I added
    duplicates. The validator did not catch it and created the ring buffer
    link list on top of it. Luckily, the corruption was only that the reader
    page was also in the writer path and only presented corrupted data but did
    not crash the kernel. But if there were duplicates in the writer side,
    then it could corrupt the ring buffer link list and cause a crash.
    
    Create a bitmask array with the size of the number of subbuffers. Then
    clear it. When walking through the subbuf array checking to see if the
    entries are within the range, test if its bit is already set in the
    subbuf_mask. If it is, then there is duplicates and fail the validation.
    If not, set the corresponding bit and continue.
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Vincent Donnefort <vdonnefort@google.com>
    Link: https://lore.kernel.org/20250214102820.7509ddea@gandalf.local.home
    Fixes: c76883f18e59b ("ring-buffer: Add test if range of boot buffer is valid")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rtla/timerlat_hist: Abort event processing on second signal [+ + +]
Author: Tomas Glozar <tglozar@redhat.com>
Date:   Thu Jan 16 15:49:30 2025 +0100

    rtla/timerlat_hist: Abort event processing on second signal
    
    [ Upstream commit d6899e560366e10141189697502bc5521940c588 ]
    
    If either SIGINT is received twice, or after a SIGALRM (that is, after
    timerlat was supposed to stop), abort processing events currently left
    in the tracefs buffer and exit immediately.
    
    This allows the user to exit rtla without waiting for processing all
    events, should that take longer than wanted, at the cost of not
    processing all samples.
    
    Cc: John Kacur <jkacur@redhat.com>
    Cc: Luis Goncalves <lgoncalv@redhat.com>
    Cc: Gabriele Monaco <gmonaco@redhat.com>
    Link: https://lore.kernel.org/20250116144931.649593-5-tglozar@redhat.com
    Signed-off-by: Tomas Glozar <tglozar@redhat.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rtla/timerlat_top: Abort event processing on second signal [+ + +]
Author: Tomas Glozar <tglozar@redhat.com>
Date:   Thu Jan 16 15:49:31 2025 +0100

    rtla/timerlat_top: Abort event processing on second signal
    
    [ Upstream commit 80967b354a76b360943af384c10d807d98bea5c4 ]
    
    If either SIGINT is received twice, or after a SIGALRM (that is, after
    timerlat was supposed to stop), abort processing events currently left
    in the tracefs buffer and exit immediately.
    
    This allows the user to exit rtla without waiting for processing all
    events, should that take longer than wanted, at the cost of not
    processing all samples.
    
    Cc: John Kacur <jkacur@redhat.com>
    Cc: Luis Goncalves <lgoncalv@redhat.com>
    Cc: Gabriele Monaco <gmonaco@redhat.com>
    Link: https://lore.kernel.org/20250116144931.649593-6-tglozar@redhat.com
    Signed-off-by: Tomas Glozar <tglozar@redhat.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rust: kbuild: add -fzero-init-padding-bits to bindgen_skip_cflags [+ + +]
Author: Justin M. Forbes <jforbes@fedoraproject.org>
Date:   Wed Jan 29 14:50:02 2025 -0700

    rust: kbuild: add -fzero-init-padding-bits to bindgen_skip_cflags
    
    [ Upstream commit a9c621a217128eb3fb7522cf763992d9437fd5ba ]
    
    This seems to break the build when building with gcc15:
    
        Unable to generate bindings: ClangDiagnostic("error: unknown
        argument: '-fzero-init-padding-bits=all'\n")
    
    Thus skip that flag.
    
    Signed-off-by: Justin M. Forbes <jforbes@fedoraproject.org>
    Fixes: dce4aab8441d ("kbuild: Use -fzero-init-padding-bits=all")
    Reviewed-by: Kees Cook <kees@kernel.org>
    Link: https://lore.kernel.org/r/20250129215003.1736127-1-jforbes@fedoraproject.org
    [ Slightly reworded commit. - Miguel ]
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

rust: rbtree: fix overindented list item [+ + +]
Author: Miguel Ojeda <ojeda@kernel.org>
Date:   Fri Feb 7 00:20:22 2025 +0100

    rust: rbtree: fix overindented list item
    
    commit 2e4f982cf392af2f1282b5537a72144e064799e3 upstream.
    
    Starting with Rust 1.86.0 (to be released 2025-04-03), Clippy will have
    a new lint, `doc_overindented_list_items` [1], which catches cases of
    overindented list items.
    
    The lint has been added by Yutaro Ohno, based on feedback from the kernel
    [2] on a patch that fixed a similar case -- commit 0c5928deada1 ("rust:
    block: fix formatting in GenDisk doc").
    
    Clippy reports a few cases in the kernel, apart from the one already
    fixed in the commit above. One is this one:
    
        error: doc list item overindented
            --> rust/kernel/rbtree.rs:1152:5
             |
        1152 | ///     null, it is a pointer to the root of the [`RBTree`].
             |     ^^^^ help: try using `  ` (2 spaces)
             |
             = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#doc_overindented_list_items
             = note: `-D clippy::doc-overindented-list-items` implied by `-D warnings`
             = help: to override `-D warnings` add `#[allow(clippy::doc_overindented_list_items)]`
    
    Thus clean it up.
    
    Cc: Yutaro Ohno <yutaro.ono.418@gmail.com>
    Cc: stable@vger.kernel.org # Needed in 6.12.y and 6.13.y only (Rust is pinned in older LTSs).
    Fixes: a335e9591404 ("rust: rbtree: add `RBTree::entry`")
    Link: https://github.com/rust-lang/rust-clippy/pull/13711 [1]
    Link: https://github.com/rust-lang/rust-clippy/issues/13601 [2]
    Reviewed-by: Alice Ryhl <aliceryhl@google.com>
    Reviewed-by: Yutaro Ohno <yutaro.ono.418@gmail.com>
    Link: https://lore.kernel.org/r/20250206232022.599998-1-ojeda@kernel.org
    [ There are a few other cases, so updated message. - Miguel ]
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
s390/pci: Fix handling of isolated VFs [+ + +]
Author: Niklas Schnelle <schnelle@linux.ibm.com>
Date:   Fri Feb 7 13:30:17 2025 +0100

    s390/pci: Fix handling of isolated VFs
    
    commit 2844ddbd540fc84d7571cca65d6c43088e4d6952 upstream.
    
    In contrast to the commit message of the fixed commit VFs whose parent
    PF is not configured are not always isolated, that is put on their own
    PCI domain. This is because for VFs to be added to an existing PCI
    domain it is enough for that PCI domain to share the same topology ID or
    PCHID. Such a matching PCI domain without a parent PF may exist when
    a PF from the same PCI card created the domain with the VF being a child
    of a different, non accessible, PF. While not causing technical issues
    it makes the rules which VFs are isolated inconsistent.
    
    Fix this by explicitly checking that the parent PF exists on the PCI
    domain determined by the topology ID or PCHID before registering the VF.
    This works because a parent PF which is under control of this Linux
    instance must be enabled and configured at the point where its child VFs
    appear because otherwise SR-IOV could not have been enabled on the
    parent.
    
    Fixes: 25f39d3dcb48 ("s390/pci: Ignore RID for isolated VFs")
    Cc: stable@vger.kernel.org
    Reviewed-by: Halil Pasic <pasic@linux.ibm.com>
    Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com>
    Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

s390/pci: Pull search for parent PF out of zpci_iov_setup_virtfn() [+ + +]
Author: Niklas Schnelle <schnelle@linux.ibm.com>
Date:   Fri Feb 7 13:30:16 2025 +0100

    s390/pci: Pull search for parent PF out of zpci_iov_setup_virtfn()
    
    commit 05793884a1f30509e477de9da233ab73584b1c8c upstream.
    
    This creates a new zpci_iov_find_parent_pf() function which a future
    commit can use to find if a VF has a configured parent PF. Use
    zdev->rid instead of zdev->devfn such that the new function can be used
    before it has been decided if the RID will be exposed and zdev->devfn is
    set. Also handle the hypotheical case that the RID is not available but
    there is an otherwise matching zbus.
    
    Fixes: 25f39d3dcb48 ("s390/pci: Ignore RID for isolated VFs")
    Cc: stable@vger.kernel.org
    Reviewed-by: Halil Pasic <pasic@linux.ibm.com>
    Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com>
    Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sched_ext: Fix incorrect autogroup migration detection [+ + +]
Author: Tejun Heo <tj@kernel.org>
Date:   Fri Jan 24 12:22:12 2025 -1000

    sched_ext: Fix incorrect autogroup migration detection
    
    commit d6f3e7d564b2309e1f17e709a70eca78d7ca2bb8 upstream.
    
    scx_move_task() is called from sched_move_task() and tells the BPF scheduler
    that cgroup migration is being committed. sched_move_task() is used by both
    cgroup and autogroup migrations and scx_move_task() tried to filter out
    autogroup migrations by testing the destination cgroup and PF_EXITING but
    this is not enough. In fact, without explicitly tagging the thread which is
    doing the cgroup migration, there is no good way to tell apart
    scx_move_task() invocations for racing migration to the root cgroup and an
    autogroup migration.
    
    This led to scx_move_task() incorrectly ignoring a migration from non-root
    cgroup to an autogroup of the root cgroup triggering the following warning:
    
      WARNING: CPU: 7 PID: 1 at kernel/sched/ext.c:3725 scx_cgroup_can_attach+0x196/0x340
      ...
      Call Trace:
      <TASK>
        cgroup_migrate_execute+0x5b1/0x700
        cgroup_attach_task+0x296/0x400
        __cgroup_procs_write+0x128/0x140
        cgroup_procs_write+0x17/0x30
        kernfs_fop_write_iter+0x141/0x1f0
        vfs_write+0x31d/0x4a0
        __x64_sys_write+0x72/0xf0
        do_syscall_64+0x82/0x160
        entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Fix it by adding an argument to sched_move_task() that indicates whether the
    moving is for a cgroup or autogroup migration. After the change,
    scx_move_task() is called only for cgroup migrations and renamed to
    scx_cgroup_move_task().
    
    Link: https://github.com/sched-ext/scx/issues/370
    Fixes: 819513666966 ("sched_ext: Add cgroup support")
    Cc: stable@vger.kernel.org # v6.12+
    Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

sched_ext: Fix lock imbalance in dispatch_to_local_dsq() [+ + +]
Author: Andrea Righi <arighi@nvidia.com>
Date:   Mon Jan 27 23:06:16 2025 +0100

    sched_ext: Fix lock imbalance in dispatch_to_local_dsq()
    
    [ Upstream commit 1626e5ef0b00386a4fd083fa7c46c8edbd75f9b4 ]
    
    While performing the rq locking dance in dispatch_to_local_dsq(), we may
    trigger the following lock imbalance condition, in particular when
    multiple tasks are rapidly changing CPU affinity (i.e., running a
    `stress-ng --race-sched 0`):
    
    [   13.413579] =====================================
    [   13.413660] WARNING: bad unlock balance detected!
    [   13.413729] 6.13.0-virtme #15 Not tainted
    [   13.413792] -------------------------------------
    [   13.413859] kworker/1:1/80 is trying to release lock (&rq->__lock) at:
    [   13.413954] [<ffffffff873c6c48>] dispatch_to_local_dsq+0x108/0x1a0
    [   13.414111] but there are no more locks to release!
    [   13.414176]
    [   13.414176] other info that might help us debug this:
    [   13.414258] 1 lock held by kworker/1:1/80:
    [   13.414318]  #0: ffff8b66feb41698 (&rq->__lock){-.-.}-{2:2}, at: raw_spin_rq_lock_nested+0x20/0x90
    [   13.414612]
    [   13.414612] stack backtrace:
    [   13.415255] CPU: 1 UID: 0 PID: 80 Comm: kworker/1:1 Not tainted 6.13.0-virtme #15
    [   13.415505] Workqueue:  0x0 (events)
    [   13.415567] Sched_ext: dsp_local_on (enabled+all), task: runnable_at=-2ms
    [   13.415570] Call Trace:
    [   13.415700]  <TASK>
    [   13.415744]  dump_stack_lvl+0x78/0xe0
    [   13.415806]  ? dispatch_to_local_dsq+0x108/0x1a0
    [   13.415884]  print_unlock_imbalance_bug+0x11b/0x130
    [   13.415965]  ? dispatch_to_local_dsq+0x108/0x1a0
    [   13.416226]  lock_release+0x231/0x2c0
    [   13.416326]  _raw_spin_unlock+0x1b/0x40
    [   13.416422]  dispatch_to_local_dsq+0x108/0x1a0
    [   13.416554]  flush_dispatch_buf+0x199/0x1d0
    [   13.416652]  balance_one+0x194/0x370
    [   13.416751]  balance_scx+0x61/0x1e0
    [   13.416848]  prev_balance+0x43/0xb0
    [   13.416947]  __pick_next_task+0x6b/0x1b0
    [   13.417052]  __schedule+0x20d/0x1740
    
    This happens because dispatch_to_local_dsq() is racing with
    dispatch_dequeue() and, when the latter wins, we incorrectly assume that
    the task has been moved to dst_rq.
    
    Fix by properly tracking the currently locked rq.
    
    Fixes: 4d3ca89bdd31 ("sched_ext: Refactor consume_remote_task()")
    Signed-off-by: Andrea Righi <arighi@nvidia.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sched_ext: Fix the incorrect bpf_list kfunc API in common.bpf.h. [+ + +]
Author: Chuyi Zhou <zhouchuyi@bytedance.com>
Date:   Wed Feb 12 15:19:36 2025 +0800

    sched_ext: Fix the incorrect bpf_list kfunc API in common.bpf.h.
    
    [ Upstream commit 2e2006c91c842c551521434466f9b4324719c9a7 ]
    
    Now BPF only supports bpf_list_push_{front,back}_impl kfunc, not bpf_list_
    push_{front,back}.
    
    This patch fix this issue. Without this patch, if we use bpf_list kfunc
    in scx, the BPF verifier would complain:
    
    libbpf: extern (func ksym) 'bpf_list_push_back': not found in kernel or
    module BTFs
    libbpf: failed to load object 'scx_foo'
    libbpf: failed to load BPF skeleton 'scx_foo': -EINVAL
    
    With this patch, the bpf list kfunc will work as expected.
    
    Signed-off-by: Chuyi Zhou <zhouchuyi@bytedance.com>
    Fixes: 2a52ca7c98960 ("sched_ext: Add scx_simple and scx_example_qmap example schedulers")
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sched_ext: Use SCX_CALL_OP_TASK in task_tick_scx [+ + +]
Author: Chuyi Zhou <zhouchuyi@bytedance.com>
Date:   Wed Feb 12 21:09:35 2025 +0800

    sched_ext: Use SCX_CALL_OP_TASK in task_tick_scx
    
    [ Upstream commit f5717c93a1b999970f3a64d771a1a9ee68cc37d0 ]
    
    Now when we use scx_bpf_task_cgroup() in ops.tick() to get the cgroup of
    the current task, the following error will occur:
    
    scx_foo[3795244] triggered exit kind 1024:
      runtime error (called on a task not being operated on)
    
    The reason is that we are using SCX_CALL_OP() instead of SCX_CALL_OP_TASK()
    when calling ops.tick(), which triggers the error during the subsequent
    scx_kf_allowed_on_arg_tasks() check.
    
    SCX_CALL_OP_TASK() was first introduced in commit 36454023f50b ("sched_ext:
    Track tasks that are subjects of the in-flight SCX operation") to ensure
    task's rq lock is held when accessing task's sched_group. Since ops.tick()
    is marked as SCX_KF_TERMINAL and task_tick_scx() is protected by the rq
    lock, we can use SCX_CALL_OP_TASK() to avoid the above issue. Similarly,
    the same changes should be made for ops.disable() and ops.exit_task(), as
    they are also protected by task_rq_lock() and it's safe to access the
    task's task_group.
    
    Fixes: 36454023f50b ("sched_ext: Track tasks that are subjects of the in-flight SCX operation")
    Signed-off-by: Chuyi Zhou <zhouchuyi@bytedance.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scripts/Makefile.extrawarn: Do not show clang's non-kprintf warnings at W=1 [+ + +]
Author: Nathan Chancellor <nathan@kernel.org>
Date:   Fri Jan 31 15:55:28 2025 -0700

    scripts/Makefile.extrawarn: Do not show clang's non-kprintf warnings at W=1
    
    [ Upstream commit 738fc998b639407346a9e026514f0562301462cd ]
    
    Clang's -Wformat-overflow and -Wformat-truncation have chosen to check
    '%p' unlike GCC but it does not know about the kernel's pointer
    extensions in lib/vsprintf.c, so the developers split that part of the
    warning out for the kernel to disable because there will always be false
    positives.
    
    Commit 908dd508276d ("kbuild: enable -Wformat-truncation on clang") did
    disabled these warnings but only in a block that would be called when
    W=1 was not passed, so they would appear with W=1. Move the disabling of
    the non-kprintf warnings to a block that always runs so that they are
    never seen, regardless of warning level.
    
    Fixes: 908dd508276d ("kbuild: enable -Wformat-truncation on clang")
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202501291646.VtwF98qd-lkp@intel.com/
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scsi: ufs: bsg: Set bsg_queue to NULL after removal [+ + +]
Author: Guixin Liu <kanie@linux.alibaba.com>
Date:   Wed Dec 18 09:42:14 2024 +0800

    scsi: ufs: bsg: Set bsg_queue to NULL after removal
    
    [ Upstream commit 1e95c798d8a7f70965f0f88d4657b682ff0ec75f ]
    
    Currently, this does not cause any issues, but I believe it is necessary to
    set bsg_queue to NULL after removing it to prevent potential use-after-free
    (UAF) access.
    
    Signed-off-by: Guixin Liu <kanie@linux.alibaba.com>
    Link: https://lore.kernel.org/r/20241218014214.64533-3-kanie@linux.alibaba.com
    Reviewed-by: Avri Altman <avri.altman@wdc.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: ufs: core: Ensure clk_gating.lock is used only after initialization [+ + +]
Author: Avri Altman <avri.altman@wdc.com>
Date:   Tue Jan 28 09:12:06 2025 +0200

    scsi: ufs: core: Ensure clk_gating.lock is used only after initialization
    
    commit 3d4114a1d34413dfffa0094c2eb7b95e61087abd upstream.
    
    Address a lockdep warning triggered by the use of the clk_gating.lock before
    it is properly initialized. The warning is as follows:
    
    [    4.388838] INFO: trying to register non-static key.
    [    4.395673] The code is fine but needs lockdep annotation, or maybe
    [    4.402118] you didn't initialize this object before use?
    [    4.407673] turning off the locking correctness validator.
    [    4.413334] CPU: 5 UID: 0 PID: 58 Comm: kworker/u32:1 Not tainted 6.12-rc1 #185
    [    4.413343] Hardware name: Qualcomm Technologies, Inc. Robotics RB5 (DT)
    [    4.413362] Call trace:
    [    4.413364]  show_stack+0x18/0x24 (C)
    [    4.413374]  dump_stack_lvl+0x90/0xd0
    [    4.413384]  dump_stack+0x18/0x24
    [    4.413392]  register_lock_class+0x498/0x4a8
    [    4.413400]  __lock_acquire+0xb4/0x1b90
    [    4.413406]  lock_acquire+0x114/0x310
    [    4.413413]  _raw_spin_lock_irqsave+0x60/0x88
    [    4.413423]  ufshcd_setup_clocks+0x2c0/0x490
    [    4.413433]  ufshcd_init+0x198/0x10ec
    [    4.413437]  ufshcd_pltfrm_init+0x600/0x7c0
    [    4.413444]  ufs_qcom_probe+0x20/0x58
    [    4.413449]  platform_probe+0x68/0xd8
    [    4.413459]  really_probe+0xbc/0x268
    [    4.413466]  __driver_probe_device+0x78/0x12c
    [    4.413473]  driver_probe_device+0x40/0x11c
    [    4.413481]  __device_attach_driver+0xb8/0xf8
    [    4.413489]  bus_for_each_drv+0x84/0xe4
    [    4.413495]  __device_attach+0xfc/0x18c
    [    4.413502]  device_initial_probe+0x14/0x20
    [    4.413510]  bus_probe_device+0xb0/0xb4
    [    4.413517]  deferred_probe_work_func+0x8c/0xc8
    [    4.413524]  process_scheduled_works+0x250/0x658
    [    4.413534]  worker_thread+0x15c/0x2c8
    [    4.413542]  kthread+0x134/0x200
    [    4.413550]  ret_from_fork+0x10/0x20
    
    To fix this issue, ensure that the spinlock is only used after it has been
    properly initialized before using it in ufshcd_setup_clocks().  Do that
    unconditionally as initializing a spinlock is a fast operation.
    
    Fixes: 209f4e43b806 ("scsi: ufs: core: Introduce a new clock_gating lock")
    Reported-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: Avri Altman <avri.altman@wdc.com>
    Link: https://lore.kernel.org/r/20250128071207.75494-2-avri.altman@wdc.com
    Reviewed-by: Bean Huo <beanhuo@micron.com>
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: ufs: core: Introduce a new clock_gating lock [+ + +]
Author: Avri Altman <avri.altman@wdc.com>
Date:   Sun Nov 24 09:08:07 2024 +0200

    scsi: ufs: core: Introduce a new clock_gating lock
    
    [ Upstream commit 209f4e43b8068c24cde227f464111030430153fa ]
    
    Introduce a new clock gating lock to serialize access to some of the clock
    gating members instead of the host_lock.
    
    While at it, simplify the code with the guard() macro and co for automatic
    cleanup of the new lock. There are some explicit
    spin_lock_irqsave()/spin_unlock_irqrestore() snaking instances I left
    behind because I couldn't make heads or tails of it.
    
    Additionally, move the trace_ufshcd_clk_gating() call from inside the
    region protected by the lock as it doesn't needs protection.
    
    Signed-off-by: Avri Altman <avri.altman@wdc.com>
    Link: https://lore.kernel.org/r/20241124070808.194860-4-avri.altman@wdc.com
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Stable-dep-of: 839a74b5649c ("scsi: ufs: Fix toggling of clk_gating.state when clock gating is not allowed")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: ufs: core: Introduce ufshcd_has_pending_tasks() [+ + +]
Author: Avri Altman <avri.altman@wdc.com>
Date:   Sun Nov 24 09:08:05 2024 +0200

    scsi: ufs: core: Introduce ufshcd_has_pending_tasks()
    
    [ Upstream commit e738ba458e7539be1757dcdf85835a5c7b11fad4 ]
    
    Prepare to remove hba->clk_gating.active_reqs check from
    ufshcd_is_ufs_dev_busy().
    
    Signed-off-by: Avri Altman <avri.altman@wdc.com>
    Link: https://lore.kernel.org/r/20241124070808.194860-2-avri.altman@wdc.com
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Stable-dep-of: 839a74b5649c ("scsi: ufs: Fix toggling of clk_gating.state when clock gating is not allowed")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: ufs: core: Prepare to introduce a new clock_gating lock [+ + +]
Author: Avri Altman <avri.altman@wdc.com>
Date:   Sun Nov 24 09:08:06 2024 +0200

    scsi: ufs: core: Prepare to introduce a new clock_gating lock
    
    [ Upstream commit 7869c6521f5715688b3d1f1c897374a68544eef0 ]
    
    Remove hba->clk_gating.active_reqs check from ufshcd_is_ufs_dev_busy()
    function to separate clock gating logic from general device busy checks.
    
    Signed-off-by: Avri Altman <avri.altman@wdc.com>
    Link: https://lore.kernel.org/r/20241124070808.194860-3-avri.altman@wdc.com
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Stable-dep-of: 839a74b5649c ("scsi: ufs: Fix toggling of clk_gating.state when clock gating is not allowed")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: ufs: Fix toggling of clk_gating.state when clock gating is not allowed [+ + +]
Author: Avri Altman <avri.altman@wdc.com>
Date:   Tue Jan 28 09:12:07 2025 +0200

    scsi: ufs: Fix toggling of clk_gating.state when clock gating is not allowed
    
    [ Upstream commit 839a74b5649c9f41d939a05059b5ca6b17156d03 ]
    
    This commit addresses an issue where clk_gating.state is being toggled in
    ufshcd_setup_clocks() even if clock gating is not allowed.
    
    The fix is to add a check for hba->clk_gating.is_initialized before toggling
    clk_gating.state in ufshcd_setup_clocks().
    
    Since clk_gating.lock is now initialized unconditionally, it can no longer
    lead to the spinlock being used before it is properly initialized, but
    instead it is mostly for documentation purposes.
    
    Fixes: 1ab27c9cf8b6 ("ufs: Add support for clock gating")
    Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: Avri Altman <avri.altman@wdc.com>
    Link: https://lore.kernel.org/r/20250128071207.75494-3-avri.altman@wdc.com
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests/bpf: Fix uprobe consumer test [+ + +]
Author: Jiri Olsa <jolsa@kernel.org>
Date:   Tue Sep 24 13:07:30 2024 +0200

    selftests/bpf: Fix uprobe consumer test
    
    commit 4b7c05598a644782b8451e415bb56f31e5c9d3ee upstream.
    
    With newly merged code the uprobe behaviour is slightly different
    and affects uprobe consumer test.
    
    We no longer need to check if the uprobe object is still preserved
    after removing last uretprobe, because it stays as long as there's
    pending/installed uretprobe instance.
    
    This allows to run uretprobe consumers registered 'after' uprobe was
    hit even if previous uretprobe got unregistered before being hit.
    
    The uprobe object will be now removed after the last uprobe ref is
    released and in such case it's held by ri->uprobe (return instance)
    which is released after the uretprobe is hit.
    
    Reported-by: Ihor Solodrai <ihor.solodrai@pm.me>
    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Tested-by: Ihor Solodrai <ihor.solodrai@pm.me>
    Closes: https://lore.kernel.org/bpf/w6U8Z9fdhjnkSp2UaFaV1fGqJXvfLEtDKEUyGDkwmoruDJ_AgF_c0FFhrkeKW18OqiP-05s9yDKiT6X-Ns-avN_ABf0dcUkXqbSJN1TQSXo=@pm.me/
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Cc: Alan Maguire <alan.maguire@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
selftests: gpio: gpio-sim: Fix missing chip disablements [+ + +]
Author: Koichiro Den <koichiro.den@canonical.com>
Date:   Wed Jan 22 13:33:09 2025 +0900

    selftests: gpio: gpio-sim: Fix missing chip disablements
    
    [ Upstream commit f8524ac33cd452aef5384504b3264db6039a455e ]
    
    Since upstream commit 8bd76b3d3f3a ("gpio: sim: lock up configfs that an
    instantiated device depends on"), rmdir for an active virtual devices
    been prohibited.
    
    Update gpio-sim selftest to align with the change.
    
    Reported-by: kernel test robot <oliver.sang@intel.com>
    Closes: https://lore.kernel.org/oe-lkp/202501221006.a1ca5dfa-lkp@intel.com
    Signed-off-by: Koichiro Den <koichiro.den@canonical.com>
    Link: https://lore.kernel.org/r/20250122043309.304621-1-koichiro.den@canonical.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests: rtnetlink: update netdevsim ipsec output format [+ + +]
Author: Hangbin Liu <liuhangbin@gmail.com>
Date:   Thu Oct 10 04:00:27 2024 +0000

    selftests: rtnetlink: update netdevsim ipsec output format
    
    commit 3ec920bb978ccdc68a7dfb304d303d598d038cb1 upstream.
    
    After the netdevsim update to use human-readable IP address formats for
    IPsec, we can now use the source and destination IPs directly in testing.
    Here is the result:
      # ./rtnetlink.sh -t kci_test_ipsec_offload
      PASS: ipsec_offload
    
    Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
    Acked-by: Stanislav Fomichev <sdf@fomichev.me>
    Link: https://patch.msgid.link/20241010040027.21440-4-liuhangbin@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
serial: 8250: Fix fifo underflow on flush [+ + +]
Author: John Keeping <jkeeping@inmusicbrands.com>
Date:   Sat Feb 8 12:41:44 2025 +0000

    serial: 8250: Fix fifo underflow on flush
    
    commit 9e512eaaf8f4008c44ede3dfc0fbc9d9c5118583 upstream.
    
    When flushing the serial port's buffer, uart_flush_buffer() calls
    kfifo_reset() but if there is an outstanding DMA transfer then the
    completion function will consume data from the kfifo via
    uart_xmit_advance(), underflowing and leading to ongoing DMA as the
    driver tries to transmit another 2^32 bytes.
    
    This is readily reproduced with serial-generic and amidi sending even
    short messages as closing the device on exit will wait for the fifo to
    drain and in the underflow case amidi hangs for 30 seconds on exit in
    tty_wait_until_sent().  A trace of that gives:
    
         kworker/1:1-84    [001]    51.769423: bprint:               serial8250_tx_dma: tx_size=3 fifo_len=3
               amidi-763   [001]    51.769460: bprint:               uart_flush_buffer: resetting fifo
     irq/21-fe530000-76    [000]    51.769474: bprint:               __dma_tx_complete: tx_size=3
     irq/21-fe530000-76    [000]    51.769479: bprint:               serial8250_tx_dma: tx_size=4096 fifo_len=4294967293
     irq/21-fe530000-76    [000]    51.781295: bprint:               __dma_tx_complete: tx_size=4096
     irq/21-fe530000-76    [000]    51.781301: bprint:               serial8250_tx_dma: tx_size=4096 fifo_len=4294963197
     irq/21-fe530000-76    [000]    51.793131: bprint:               __dma_tx_complete: tx_size=4096
     irq/21-fe530000-76    [000]    51.793135: bprint:               serial8250_tx_dma: tx_size=4096 fifo_len=4294959101
     irq/21-fe530000-76    [000]    51.804949: bprint:               __dma_tx_complete: tx_size=4096
    
    Since the port lock is held in when the kfifo is reset in
    uart_flush_buffer() and in __dma_tx_complete(), adding a flush_buffer
    hook to adjust the outstanding DMA byte count is sufficient to avoid the
    kfifo underflow.
    
    Fixes: 9ee4b83e51f74 ("serial: 8250: Add support for dmaengine")
    Cc: stable <stable@kernel.org>
    Signed-off-by: John Keeping <jkeeping@inmusicbrands.com>
    Link: https://lore.kernel.org/r/20250208124148.1189191-1-jkeeping@inmusicbrands.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: 8250_pci: Resolve WCH vendor ID ambiguity [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Wed Dec 4 05:09:21 2024 +0200

    serial: 8250_pci: Resolve WCH vendor ID ambiguity
    
    [ Upstream commit 16076ca3a1565491bcb28689e555d569a39391c7 ]
    
    There are two sites of the same brand: wch.cn and wch-ic.com.
    They are property of the same company, but it appears that they
    managed to get two different PCI vendor IDs. Rename them accordingly
    using standard pattern, i.e. PCI_VENDOR_ID_...
    
    While at it, move to PCI_VDEVICE() in the ID tables.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20241204031114.1029882-2-andriy.shevchenko@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

serial: 8250_pci: Share WCH IDs with parport_serial driver [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Wed Dec 4 05:09:22 2024 +0200

    serial: 8250_pci: Share WCH IDs with parport_serial driver
    
    [ Upstream commit 535a07698b8b3e6f305673102d297262cae2360a ]
    
    parport_serial driver uses subset of WCH IDs that are present in 8250_pci.
    Share them via pci_ids.h and switch parport_serial to use defined constants.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20241204031114.1029882-3-andriy.shevchenko@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

serial: port: Always update ->iotype in __uart_read_properties() [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Fri Jan 24 18:10:47 2025 +0200

    serial: port: Always update ->iotype in __uart_read_properties()
    
    commit e8486bd50ecf63c9a1e25271f258a8d959f2672f upstream.
    
    The documentation of the __uart_read_properties() states that
    ->iotype member is always altered after the function call, but
    the code doesn't do that in the case when use_defaults == false
    and the value of reg-io-width is unsupported. Make sure the code
    follows the documentation.
    
    Note, the current users of the uart_read_and_validate_port_properties()
    will fail and the change doesn't affect their behaviour, neither
    users of uart_read_port_properties() will be affected since the
    alteration happens there even in the current code flow.
    
    Fixes: e894b6005dce ("serial: port: Introduce a common helper to read properties")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20250124161530.398361-3-andriy.shevchenko@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: port: Assign ->iotype correctly when ->iobase is set [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Fri Jan 24 18:10:46 2025 +0200

    serial: port: Assign ->iotype correctly when ->iobase is set
    
    commit 166ac2bba167d575e7146beaa66093bc7c072f43 upstream.
    
    Currently the ->iotype is always assigned to the UPIO_MEM when
    the respective property is not found. However, this will not
    support the cases when user wants to have UPIO_PORT to be set
    or preserved.  Support this scenario by checking ->iobase value
    and default the ->iotype respectively.
    
    Fixes: 1117a6fdc7c1 ("serial: 8250_of: Switch to use uart_read_port_properties()")
    Fixes: e894b6005dce ("serial: port: Introduce a common helper to read properties")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20250124161530.398361-2-andriy.shevchenko@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
soc/tegra: fuse: Update Tegra234 nvmem keepout list [+ + +]
Author: Kartik Rajput <kkartik@nvidia.com>
Date:   Wed Nov 27 11:40:53 2024 +0530

    soc/tegra: fuse: Update Tegra234 nvmem keepout list
    
    [ Upstream commit 836b341cc8dab680acc06a7883bfeea89680b689 ]
    
    Various Nvidia userspace applications and tests access following fuse
    via Fuse nvmem interface:
    
            * odmid
            * odminfo
            * boot_security_info
            * public_key_hash
            * reserved_odm0
            * reserved_odm1
            * reserved_odm2
            * reserved_odm3
            * reserved_odm4
            * reserved_odm5
            * reserved_odm6
            * reserved_odm7
            * odm_lock
            * pk_h1
            * pk_h2
            * revoke_pk_h0
            * revoke_pk_h1
            * security_mode
            * system_fw_field_ratchet0
            * system_fw_field_ratchet1
            * system_fw_field_ratchet2
            * system_fw_field_ratchet3
            * optin_enable
    
    Update tegra234_fuse_keepouts list to allow reading these fuse from
    nvmem sysfs interface.
    
    Signed-off-by: Kartik Rajput <kkartik@nvidia.com>
    Link: https://lore.kernel.org/r/20241127061053.16775-1-kkartik@nvidia.com
    Signed-off-by: Thierry Reding <treding@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
spi: sn-f-ospi: Fix division by zero [+ + +]
Author: Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
Date:   Thu Feb 6 17:57:47 2025 +0900

    spi: sn-f-ospi: Fix division by zero
    
    [ Upstream commit 3588b1c0fde2f58d166e3f94a5a58d64b893526c ]
    
    When there is no dummy cycle in the spi-nor commands, both dummy bus cycle
    bytes and width are zero. Because of the cpu's warning when divided by
    zero, the warning should be avoided. Return just zero to avoid such
    calculations.
    
    Fixes: 1b74dd64c861 ("spi: Add Socionext F_OSPI SPI flash controller driver")
    Co-developed-by: Kohei Ito <ito.kohei@socionext.com>
    Signed-off-by: Kohei Ito <ito.kohei@socionext.com>
    Signed-off-by: Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
    Link: https://patch.msgid.link/20250206085747.3834148-1-hayashi.kunihiko@socionext.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
team: better TEAM_OPTION_TYPE_STRING validation [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Feb 12 13:49:28 2025 +0000

    team: better TEAM_OPTION_TYPE_STRING validation
    
    [ Upstream commit 5bef3ac184b5626ea62385d6b82a1992b89d7940 ]
    
    syzbot reported following splat [1]
    
    Make sure user-provided data contains one nul byte.
    
    [1]
     BUG: KMSAN: uninit-value in string_nocheck lib/vsprintf.c:633 [inline]
     BUG: KMSAN: uninit-value in string+0x3ec/0x5f0 lib/vsprintf.c:714
      string_nocheck lib/vsprintf.c:633 [inline]
      string+0x3ec/0x5f0 lib/vsprintf.c:714
      vsnprintf+0xa5d/0x1960 lib/vsprintf.c:2843
      __request_module+0x252/0x9f0 kernel/module/kmod.c:149
      team_mode_get drivers/net/team/team_core.c:480 [inline]
      team_change_mode drivers/net/team/team_core.c:607 [inline]
      team_mode_option_set+0x437/0x970 drivers/net/team/team_core.c:1401
      team_option_set drivers/net/team/team_core.c:375 [inline]
      team_nl_options_set_doit+0x1339/0x1f90 drivers/net/team/team_core.c:2662
      genl_family_rcv_msg_doit net/netlink/genetlink.c:1115 [inline]
      genl_family_rcv_msg net/netlink/genetlink.c:1195 [inline]
      genl_rcv_msg+0x1214/0x12c0 net/netlink/genetlink.c:1210
      netlink_rcv_skb+0x375/0x650 net/netlink/af_netlink.c:2543
      genl_rcv+0x40/0x60 net/netlink/genetlink.c:1219
      netlink_unicast_kernel net/netlink/af_netlink.c:1322 [inline]
      netlink_unicast+0xf52/0x1260 net/netlink/af_netlink.c:1348
      netlink_sendmsg+0x10da/0x11e0 net/netlink/af_netlink.c:1892
      sock_sendmsg_nosec net/socket.c:718 [inline]
      __sock_sendmsg+0x30f/0x380 net/socket.c:733
      ____sys_sendmsg+0x877/0xb60 net/socket.c:2573
      ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2627
      __sys_sendmsg net/socket.c:2659 [inline]
      __do_sys_sendmsg net/socket.c:2664 [inline]
      __se_sys_sendmsg net/socket.c:2662 [inline]
      __x64_sys_sendmsg+0x212/0x3c0 net/socket.c:2662
      x64_sys_call+0x2ed6/0x3c30 arch/x86/include/generated/asm/syscalls_64.h:47
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xcd/0x1e0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Fixes: 3d249d4ca7d0 ("net: introduce ethernet teaming device")
    Reported-by: syzbot+1fcd957a82e3a1baa94d@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=1fcd957a82e3a1baa94d
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Link: https://patch.msgid.link/20250212134928.1541609-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tools: fix annoying "mkdir -p ..." logs when building tools in parallel [+ + +]
Author: Masahiro Yamada <masahiroy@kernel.org>
Date:   Tue Feb 11 09:29:06 2025 +0900

    tools: fix annoying "mkdir -p ..." logs when building tools in parallel
    
    [ Upstream commit d1d0963121769d8d16150b913fe886e48efefa51 ]
    
    When CONFIG_OBJTOOL=y or CONFIG_DEBUG_INFO_BTF=y, parallel builds
    show awkward "mkdir -p ..." logs.
    
      $ make -j16
        [ snip ]
      mkdir -p /home/masahiro/ref/linux/tools/objtool && make O=/home/masahiro/ref/linux subdir=tools/objtool --no-print-directory -C objtool
      mkdir -p /home/masahiro/ref/linux/tools/bpf/resolve_btfids && make O=/home/masahiro/ref/linux subdir=tools/bpf/resolve_btfids --no-print-directory -C bpf/resolve_btfids
    
    Defining MAKEFLAGS=<value> on the command line wipes out command line
    switches from the resultant MAKEFLAGS definition, even though the command
    line switches are active. [1]
    
    MAKEFLAGS puts all single-letter options into the first word, and that
    word will be empty if no single-letter options were given. [2]
    However, this breaks if MAKEFLAGS=<value> is given on the command line.
    
    The tools/ and tools/% targets set MAKEFLAGS=<value> on the command
    line, which breaks the following code in tools/scripts/Makefile.include:
    
        short-opts := $(firstword -$(MAKEFLAGS))
    
    If MAKEFLAGS really needs modification, it should be done through the
    environment variable, as follows:
    
        MAKEFLAGS=<value> $(MAKE) ...
    
    That said, I question whether modifying MAKEFLAGS is necessary here.
    The only flag we might want to exclude is --no-print-directory, as the
    tools build system changes the working directory. However, people might
    find the "Entering/Leaving directory" logs annoying.
    
    I simply removed the offending MAKEFLAGS=<value>.
    
    [1]: https://savannah.gnu.org/bugs/?62469
    [2]: https://www.gnu.org/software/make/manual/make.html#Testing-Flags
    
    Fixes: ea01fa9f63ae ("tools: Connect to the kernel build system")
    Fixes: a50e43332756 ("perf tools: Honor parallel jobs")
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Tested-by: Daniel Xu <dxu@dxuuu.xyz>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tracing: Do not allow mmap() of persistent ring buffer [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Fri Feb 14 11:55:47 2025 -0500

    tracing: Do not allow mmap() of persistent ring buffer
    
    commit 129fe718819cc5e24ea2f489db9ccd4371f0c6f6 upstream.
    
    When trying to mmap a trace instance buffer that is attached to
    reserve_mem, it would crash:
    
     BUG: unable to handle page fault for address: ffffe97bd00025c8
     #PF: supervisor read access in kernel mode
     #PF: error_code(0x0000) - not-present page
     PGD 2862f3067 P4D 2862f3067 PUD 0
     Oops: Oops: 0000 [#1] PREEMPT_RT SMP PTI
     CPU: 4 UID: 0 PID: 981 Comm: mmap-rb Not tainted 6.14.0-rc2-test-00003-g7f1a5e3fbf9e-dirty #233
     Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
     RIP: 0010:validate_page_before_insert+0x5/0xb0
     Code: e2 01 89 d0 c3 cc cc cc cc 66 66 2e 0f 1f 84 00 00 00 00 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 0f 1f 44 00 00 <48> 8b 46 08 a8 01 75 67 66 90 48 89 f0 8b 50 34 85 d2 74 76 48 89
     RSP: 0018:ffffb148c2f3f968 EFLAGS: 00010246
     RAX: ffff9fa5d3322000 RBX: ffff9fa5ccff9c08 RCX: 00000000b879ed29
     RDX: ffffe97bd00025c0 RSI: ffffe97bd00025c0 RDI: ffff9fa5ccff9c08
     RBP: ffffb148c2f3f9f0 R08: 0000000000000004 R09: 0000000000000004
     R10: 0000000000000000 R11: 0000000000000200 R12: 0000000000000000
     R13: 00007f16a18d5000 R14: ffff9fa5c48db6a8 R15: 0000000000000000
     FS:  00007f16a1b54740(0000) GS:ffff9fa73df00000(0000) knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: ffffe97bd00025c8 CR3: 00000001048c6006 CR4: 0000000000172ef0
     Call Trace:
      <TASK>
      ? __die_body.cold+0x19/0x1f
      ? __die+0x2e/0x40
      ? page_fault_oops+0x157/0x2b0
      ? search_module_extables+0x53/0x80
      ? validate_page_before_insert+0x5/0xb0
      ? kernelmode_fixup_or_oops.isra.0+0x5f/0x70
      ? __bad_area_nosemaphore+0x16e/0x1b0
      ? bad_area_nosemaphore+0x16/0x20
      ? do_kern_addr_fault+0x77/0x90
      ? exc_page_fault+0x22b/0x230
      ? asm_exc_page_fault+0x2b/0x30
      ? validate_page_before_insert+0x5/0xb0
      ? vm_insert_pages+0x151/0x400
      __rb_map_vma+0x21f/0x3f0
      ring_buffer_map+0x21b/0x2f0
      tracing_buffers_mmap+0x70/0xd0
      __mmap_region+0x6f0/0xbd0
      mmap_region+0x7f/0x130
      do_mmap+0x475/0x610
      vm_mmap_pgoff+0xf2/0x1d0
      ksys_mmap_pgoff+0x166/0x200
      __x64_sys_mmap+0x37/0x50
      x64_sys_call+0x1670/0x1d70
      do_syscall_64+0xbb/0x1d0
      entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    The reason was that the code that maps the ring buffer pages to user space
    has:
    
            page = virt_to_page((void *)cpu_buffer->subbuf_ids[s]);
    
    And uses that in:
    
            vm_insert_pages(vma, vma->vm_start, pages, &nr_pages);
    
    But virt_to_page() does not work with vmap()'d memory which is what the
    persistent ring buffer has. It is rather trivial to allow this, but for
    now just disable mmap() of instances that have their ring buffer from the
    reserve_mem option.
    
    If an mmap() is performed on a persistent buffer it will return -ENODEV
    just like it would if the .mmap field wasn't defined in the
    file_operations structure.
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Vincent Donnefort <vdonnefort@google.com>
    Link: https://lore.kernel.org/20250214115547.0d7287d3@gandalf.local.home
    Fixes: 9b7bdf6f6ece6 ("tracing: Have trace_printk not use binary prints if boot buffer")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: Add USB_QUIRK_NO_LPM quirk for sony xperia xz1 smartphone [+ + +]
Author: Mathias Nyman <mathias.nyman@linux.intel.com>
Date:   Thu Feb 6 17:18:36 2025 +0200

    USB: Add USB_QUIRK_NO_LPM quirk for sony xperia xz1 smartphone
    
    commit 159daf1258227f44b26b5d38f4aa8f37b8cca663 upstream.
    
    The fastboot tool for communicating with Android bootloaders does not
    work reliably with this device if USB 2 Link Power Management (LPM)
    is enabled.
    
    Various fastboot commands are affected, including the
    following, which usually reproduces the problem within two tries:
    
      fastboot getvar kernel
      getvar:kernel  FAILED (remote: 'GetVar Variable Not found')
    
    This issue was hidden on many systems up until commit 63a1f8454962
    ("xhci: stored cached port capability values in one place") as the xhci
    driver failed to detect USB 2 LPM support if USB 3 ports were listed
    before USB 2 ports in the "supported protocol capabilities".
    
    Adding the quirk resolves the issue. No drawbacks are expected since
    the device uses different USB product IDs outside of fastboot mode, and
    since fastboot commands worked before, until LPM was enabled on the
    tested system by the aforementioned commit.
    
    Based on a patch from Forest <forestix@nom.one> from which most of the
    code and commit message is taken.
    
    Cc: stable <stable@kernel.org>
    Reported-by: Forest <forestix@nom.one>
    Closes: https://lore.kernel.org/hk8umj9lv4l4qguftdq1luqtdrpa1gks5l@sonic.net
    Tested-by: Forest <forestix@nom.one>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20250206151836.51742-1-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: cdc-acm: Check control transfer buffer size before access [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Wed Feb 12 19:15:15 2025 +0100

    usb: cdc-acm: Check control transfer buffer size before access
    
    commit e563b01208f4d1f609bcab13333b6c0e24ce6a01 upstream.
    
    If the first fragment is shorter than struct usb_cdc_notification, we can't
    calculate an expected_size. Log an error and discard the notification
    instead of reading lengths from memory outside the received data, which can
    lead to memory corruption when the expected_size decreases between
    fragments, causing `expected_size - acm->nb_index` to wrap.
    
    This issue has been present since the beginning of git history; however,
    it only leads to memory corruption since commit ea2583529cd1
    ("cdc-acm: reassemble fragmented notifications").
    
    A mitigating factor is that acm_ctrl_irq() can only execute after userspace
    has opened /dev/ttyACM*; but if ModemManager is running, ModemManager will
    do that automatically depending on the USB device's vendor/product IDs and
    its other interfaces.
    
    Cc: stable <stable@kernel.org>
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Jann Horn <jannh@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: cdc-acm: Fill in Renesas R-Car D3 USB Download mode quirk [+ + +]
Author: Marek Vasut <marek.vasut+renesas@mailbox.org>
Date:   Sun Feb 9 15:56:11 2025 +0100

    USB: cdc-acm: Fill in Renesas R-Car D3 USB Download mode quirk
    
    commit 7284922f3e4fa285dff1b8bb593aa9a0b8458f30 upstream.
    
    Add Renesas R-Car D3 USB Download mode quirk and update comments
    on all the other Renesas R-Car USB Download mode quirks to discern
    them from each other. This follows R-Car Series, 3rd Generation
    reference manual Rev.2.00 chapter 19.2.8 USB download mode .
    
    Fixes: 6d853c9e4104 ("usb: cdc-acm: Add DISABLE_ECHO for Renesas USB Download mode")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Link: https://lore.kernel.org/r/20250209145708.106914-1-marek.vasut+renesas@mailbox.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: cdc-acm: Fix handling of oversized fragments [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Wed Feb 12 19:15:16 2025 +0100

    usb: cdc-acm: Fix handling of oversized fragments
    
    commit 12e712964f41d05ae034989892de445781c46730 upstream.
    
    If we receive an initial fragment of size 8 bytes which specifies a wLength
    of 1 byte (so the reassembled message is supposed to be 9 bytes long), and
    we then receive a second fragment of size 9 bytes (which is not supposed to
    happen), we currently wrongly bypass the fragment reassembly code but still
    pass the pointer to the acm->notification_buffer to
    acm_process_notification().
    
    Make this less wrong by always going through fragment reassembly when we
    expect more fragments.
    
    Before this patch, receiving an overlong fragment could lead to `newctrl`
    in acm_process_notification() being uninitialized data (instead of data
    coming from the device).
    
    Cc: stable <stable@kernel.org>
    Fixes: ea2583529cd1 ("cdc-acm: reassemble fragmented notifications")
    Signed-off-by: Jann Horn <jannh@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: core: fix pipe creation for get_bMaxPacketSize0 [+ + +]
Author: Stefan Eichenberger <stefan.eichenberger@toradex.com>
Date:   Mon Feb 3 11:58:24 2025 +0100

    usb: core: fix pipe creation for get_bMaxPacketSize0
    
    commit 4aac0db5a0ebc599d4ad9bf5ebab78afa1f33e10 upstream.
    
    When usb_control_msg is used in the get_bMaxPacketSize0 function, the
    USB pipe does not include the endpoint device number. This can cause
    failures when a usb hub port is reinitialized after encountering a bad
    cable connection. As a result, the system logs the following error
    messages:
    usb usb2-port1: cannot reset (err = -32)
    usb usb2-port1: Cannot enable. Maybe the USB cable is bad?
    usb usb2-port1: attempt power cycle
    usb 2-1: new high-speed USB device number 5 using ci_hdrc
    usb 2-1: device descriptor read/8, error -71
    
    The problem began after commit 85d07c556216 ("USB: core: Unite old
    scheme and new scheme descriptor reads"). There
    usb_get_device_descriptor was replaced with get_bMaxPacketSize0. Unlike
    usb_get_device_descriptor, the get_bMaxPacketSize0 function uses the
    macro usb_rcvaddr0pipe, which does not include the endpoint device
    number. usb_get_device_descriptor, on the other hand, used the macro
    usb_rcvctrlpipe, which includes the endpoint device number.
    
    By modifying the get_bMaxPacketSize0 function to use usb_rcvctrlpipe
    instead of usb_rcvaddr0pipe, the issue can be resolved. This change will
    ensure that the endpoint device number is included in the USB pipe,
    preventing reinitialization failures. If the endpoint has not set the
    device number yet, it will still work because the device number is 0 in
    udev.
    
    Cc: stable <stable@kernel.org>
    Fixes: 85d07c556216 ("USB: core: Unite old scheme and new scheme descriptor reads")
    Signed-off-by: Stefan Eichenberger <stefan.eichenberger@toradex.com>
    Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://lore.kernel.org/r/20250203105840.17539-1-eichest@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: dwc2: gadget: remove of_node reference upon udc_stop [+ + +]
Author: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
Date:   Fri Jan 24 18:33:25 2025 +0100

    usb: dwc2: gadget: remove of_node reference upon udc_stop
    
    commit 58cd423820d5b5610977e55e4acdd06628829ede upstream.
    
    In dwc2_hsotg_udc_start(), e.g. when binding composite driver, "of_node"
    is set to hsotg->dev->of_node.
    
    It causes errors when binding the gadget driver several times, on
    stm32mp157c-ev1 board. Below error is seen:
    "pin PA10 already requested by 49000000.usb-otg; cannot claim for gadget.0"
    
    The first time, no issue is seen as when registering the driver, of_node
    isn't NULL:
    -> gadget_dev_desc_UDC_store
      -> usb_gadget_register_driver_owner
        -> driver_register
        ...
          -> really_probe -> pinctrl_bind_pins (no effect)
    
    Then dwc2_hsotg_udc_start() sets of_node.
    
    The second time (stop the gadget, reconfigure it, then start it again),
    of_node has been set, so the probing code tries to acquire pins for the
    gadget. These pins are hold by the controller, hence the error.
    
    So clear gadget.dev.of_node in udc_stop() routine to avoid the issue.
    
    Fixes: 7d7b22928b90 ("usb: gadget: s3c-hsotg: Propagate devicetree to gadget drivers")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
    Link: https://lore.kernel.org/r/20250124173325.2747710-1-fabrice.gasnier@foss.st.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: dwc3: Fix timeout issue during controller enter/exit from halt state [+ + +]
Author: Selvarasu Ganesan <selvarasu.g@samsung.com>
Date:   Sat Feb 1 22:09:02 2025 +0530

    usb: dwc3: Fix timeout issue during controller enter/exit from halt state
    
    commit d3a8c28426fc1fb3252753a9f1db0d691ffc21b0 upstream.
    
    There is a frequent timeout during controller enter/exit from halt state
    after toggling the run_stop bit by SW. This timeout occurs when
    performing frequent role switches between host and device, causing
    device enumeration issues due to the timeout. This issue was not present
    when USB2 suspend PHY was disabled by passing the SNPS quirks
    (snps,dis_u2_susphy_quirk and snps,dis_enblslpm_quirk) from the DTS.
    However, there is a requirement to enable USB2 suspend PHY by setting of
    GUSB2PHYCFG.ENBLSLPM and GUSB2PHYCFG.SUSPHY bits when controller starts
    in gadget or host mode results in the timeout issue.
    
    This commit addresses this timeout issue by ensuring that the bits
    GUSB2PHYCFG.ENBLSLPM and GUSB2PHYCFG.SUSPHY are cleared before starting
    the dwc3_gadget_run_stop sequence and restoring them after the
    dwc3_gadget_run_stop sequence is completed.
    
    Fixes: 72246da40f37 ("usb: Introduce DesignWare USB3 DRD Driver")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Selvarasu Ganesan <selvarasu.g@samsung.com>
    Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Link: https://lore.kernel.org/r/20250201163903.459-1-selvarasu.g@samsung.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: core: flush gadget workqueue after device removal [+ + +]
Author: Roy Luo <royluo@google.com>
Date:   Tue Feb 4 23:36:42 2025 +0000

    usb: gadget: core: flush gadget workqueue after device removal
    
    commit 399a45e5237ca14037120b1b895bd38a3b4492ea upstream.
    
    device_del() can lead to new work being scheduled in gadget->work
    workqueue. This is observed, for example, with the dwc3 driver with the
    following call stack:
      device_del()
        gadget_unbind_driver()
          usb_gadget_disconnect_locked()
            dwc3_gadget_pullup()
              dwc3_gadget_soft_disconnect()
                usb_gadget_set_state()
                  schedule_work(&gadget->work)
    
    Move flush_work() after device_del() to ensure the workqueue is cleaned
    up.
    
    Fixes: 5702f75375aa9 ("usb: gadget: udc-core: move sysfs_notify() to a workqueue")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Roy Luo <royluo@google.com>
    Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
    Reviewed-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Link: https://lore.kernel.org/r/20250204233642.666991-1-royluo@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: f_midi: fix MIDI Streaming descriptor lengths [+ + +]
Author: John Keeping <jkeeping@inmusicbrands.com>
Date:   Thu Jan 30 19:50:34 2025 +0000

    usb: gadget: f_midi: fix MIDI Streaming descriptor lengths
    
    commit da1668997052ed1cb00322e1f3b63702615c9429 upstream.
    
    While the MIDI jacks are configured correctly, and the MIDIStreaming
    endpoint descriptors are filled with the correct information,
    bNumEmbMIDIJack and bLength are set incorrectly in these descriptors.
    
    This does not matter when the numbers of in and out ports are equal, but
    when they differ the host will receive broken descriptors with
    uninitialized stack memory leaking into the descriptor for whichever
    value is smaller.
    
    The precise meaning of "in" and "out" in the port counts is not clearly
    defined and can be confusing.  But elsewhere the driver consistently
    uses this to match the USB meaning of IN and OUT viewed from the host,
    so that "in" ports send data to the host and "out" ports receive data
    from it.
    
    Cc: stable <stable@kernel.org>
    Fixes: c8933c3f79568 ("USB: gadget: f_midi: allow a dynamic number of input and output ports")
    Signed-off-by: John Keeping <jkeeping@inmusicbrands.com>
    Reviewed-by: Takashi Iwai <tiwai@suse.de>
    Link: https://lore.kernel.org/r/20250130195035.3883857-1-jkeeping@inmusicbrands.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: f_midi: Fixing wMaxPacketSize exceeded issue during MIDI bind retries [+ + +]
Author: Selvarasu Ganesan <selvarasu.g@samsung.com>
Date:   Sat Jan 18 11:31:33 2025 +0530

    usb: gadget: f_midi: Fixing wMaxPacketSize exceeded issue during MIDI bind retries
    
    commit 9e8b21410f310c50733f6e1730bae5a8e30d3570 upstream.
    
    The current implementation sets the wMaxPacketSize of bulk in/out
    endpoints to 1024 bytes at the end of the f_midi_bind function. However,
    in cases where there is a failure in the first midi bind attempt,
    consider rebinding. This scenario may encounter an f_midi_bind issue due
    to the previous bind setting the bulk endpoint's wMaxPacketSize to 1024
    bytes, which exceeds the ep->maxpacket_limit where configured dwc3 TX/RX
    FIFO's maxpacket size of 512 bytes for IN/OUT endpoints in support HS
    speed only.
    
    Here the term "rebind" in this context refers to attempting to bind the
    MIDI function a second time in certain scenarios. The situations where
    rebinding is considered include:
    
     * When there is a failure in the first UDC write attempt, which may be
       caused by other functions bind along with MIDI.
     * Runtime composition change : Example : MIDI,ADB to MIDI. Or MIDI to
       MIDI,ADB.
    
    This commit addresses this issue by resetting the wMaxPacketSize before
    endpoint claim. And here there is no need to reset all values in the usb
    endpoint descriptor structure, as all members except wMaxPacketSize and
    bEndpointAddress have predefined values.
    
    This ensures that restores the endpoint to its expected configuration,
    and preventing conflicts with value of ep->maxpacket_limit. It also
    aligns with the approach used in other function drivers, which treat
    endpoint descriptors as if they were full speed before endpoint claim.
    
    Fixes: 46decc82ffd5 ("usb: gadget: unconditionally allocate hs/ss descriptor in bind operation")
    Cc: stable@vger.kernel.org
    Signed-off-by: Selvarasu Ganesan <selvarasu.g@samsung.com>
    Link: https://lore.kernel.org/r/20250118060134.927-1-selvarasu.g@samsung.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: udc: renesas_usb3: Fix compiler warning [+ + +]
Author: Guo Ren <guoren@kernel.org>
Date:   Wed Jan 22 03:12:31 2025 -0500

    usb: gadget: udc: renesas_usb3: Fix compiler warning
    
    commit 335a1fc1193481f8027f176649c72868172f6f8b upstream.
    
    drivers/usb/gadget/udc/renesas_usb3.c: In function 'renesas_usb3_probe':
    drivers/usb/gadget/udc/renesas_usb3.c:2638:73: warning: '%d'
    directive output may be truncated writing between 1 and 11 bytes into a
    region of size 6 [-Wformat-truncation=]
    2638 |   snprintf(usb3_ep->ep_name, sizeof(usb3_ep->ep_name), "ep%d", i);
                                        ^~~~~~~~~~~~~~~~~~~~~~~~     ^~   ^
    
    Fixes: 746bfe63bba3 ("usb: gadget: renesas_usb3: add support for Renesas USB3.0 peripheral controller")
    Cc: stable@vger.kernel.org
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202501201409.BIQPtkeB-lkp@intel.com/
    Signed-off-by: Guo Ren <guoren@linux.alibaba.com>
    Link: https://lore.kernel.org/r/20250122081231.47594-1-guoren@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: hub: Ignore non-compliant devices with too many configs or interfaces [+ + +]
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Wed Jan 22 14:26:17 2025 -0500

    USB: hub: Ignore non-compliant devices with too many configs or interfaces
    
    commit 2240fed37afbcdb5e8b627bc7ad986891100e05d upstream.
    
    Robert Morris created a test program which can cause
    usb_hub_to_struct_hub() to dereference a NULL or inappropriate
    pointer:
    
    Oops: general protection fault, probably for non-canonical address
    0xcccccccccccccccc: 0000 [#1] SMP DEBUG_PAGEALLOC PTI
    CPU: 7 UID: 0 PID: 117 Comm: kworker/7:1 Not tainted 6.13.0-rc3-00017-gf44d154d6e3d #14
    Hardware name: FreeBSD BHYVE/BHYVE, BIOS 14.0 10/17/2021
    Workqueue: usb_hub_wq hub_event
    RIP: 0010:usb_hub_adjust_deviceremovable+0x78/0x110
    ...
    Call Trace:
     <TASK>
     ? die_addr+0x31/0x80
     ? exc_general_protection+0x1b4/0x3c0
     ? asm_exc_general_protection+0x26/0x30
     ? usb_hub_adjust_deviceremovable+0x78/0x110
     hub_probe+0x7c7/0xab0
     usb_probe_interface+0x14b/0x350
     really_probe+0xd0/0x2d0
     ? __pfx___device_attach_driver+0x10/0x10
     __driver_probe_device+0x6e/0x110
     driver_probe_device+0x1a/0x90
     __device_attach_driver+0x7e/0xc0
     bus_for_each_drv+0x7f/0xd0
     __device_attach+0xaa/0x1a0
     bus_probe_device+0x8b/0xa0
     device_add+0x62e/0x810
     usb_set_configuration+0x65d/0x990
     usb_generic_driver_probe+0x4b/0x70
     usb_probe_device+0x36/0xd0
    
    The cause of this error is that the device has two interfaces, and the
    hub driver binds to interface 1 instead of interface 0, which is where
    usb_hub_to_struct_hub() looks.
    
    We can prevent the problem from occurring by refusing to accept hub
    devices that violate the USB spec by having more than one
    configuration or interface.
    
    Reported-and-tested-by: Robert Morris <rtm@csail.mit.edu>
    Cc: stable <stable@kernel.org>
    Closes: https://lore.kernel.org/linux-usb/95564.1737394039@localhost/
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://lore.kernel.org/r/c27f3bf4-63d8-4fb5-ac82-09e3cd19f61c@rowland.harvard.edu
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: pci-quirks: Fix HCCPARAMS register error for LS7A EHCI [+ + +]
Author: Huacai Chen <chenhuacai@kernel.org>
Date:   Sun Feb 2 20:49:35 2025 +0800

    USB: pci-quirks: Fix HCCPARAMS register error for LS7A EHCI
    
    commit e71f7f42e3c874ac3314b8f250e8416a706165af upstream.
    
    LS7A EHCI controller doesn't have extended capabilities, so the EECP
    (EHCI Extended Capabilities Pointer) field of HCCPARAMS register should
    be 0x0, but it reads as 0xa0 now. This is a hardware flaw and will be
    fixed in future, now just clear the EECP field to avoid error messages
    on boot:
    
    ......
    [    0.581675] pci 0000:00:04.1: EHCI: unrecognized capability ff
    [    0.581699] pci 0000:00:04.1: EHCI: unrecognized capability ff
    [    0.581716] pci 0000:00:04.1: EHCI: unrecognized capability ff
    [    0.581851] pci 0000:00:04.1: EHCI: unrecognized capability ff
    ......
    [    0.581916] pci 0000:00:05.1: EHCI: unrecognized capability ff
    [    0.581951] pci 0000:00:05.1: EHCI: unrecognized capability ff
    [    0.582704] pci 0000:00:05.1: EHCI: unrecognized capability ff
    [    0.582799] pci 0000:00:05.1: EHCI: unrecognized capability ff
    ......
    
    Cc: stable <stable@kernel.org>
    Signed-off-by: Baoqi Zhang <zhangbaoqi@loongson.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Link: https://lore.kernel.org/r/20250202124935.480500-1-chenhuacai@loongson.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: quirks: add USB_QUIRK_NO_LPM quirk for Teclast dist [+ + +]
Author: Lei Huang <huanglei@kylinos.cn>
Date:   Wed Feb 12 17:38:29 2025 +0800

    USB: quirks: add USB_QUIRK_NO_LPM quirk for Teclast dist
    
    commit e169d96eecd447ff7fd7542ca5fa0911f5622054 upstream.
    
    Teclast disk used on Huawei hisi platforms doesn't work well,
    losing connectivity intermittently if LPM is enabled.
    Add quirk disable LPM to resolve the issue.
    
    Signed-off-by: Lei Huang <huanglei@kylinos.cn>
    Cc: stable <stable@kernel.org>
    Link: https://lore.kernel.org/r/20250212093829.7379-1-huanglei814@163.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: roles: set switch registered flag early on [+ + +]
Author: Elson Roy Serrao <quic_eserrao@quicinc.com>
Date:   Thu Feb 6 11:39:50 2025 -0800

    usb: roles: set switch registered flag early on
    
    commit 634775a752a86784511018a108f3b530cc3399a7 upstream.
    
    The role switch registration and set_role() can happen in parallel as they
    are invoked independent of each other. There is a possibility that a driver
    might spend significant amount of time in usb_role_switch_register() API
    due to the presence of time intensive operations like component_add()
    which operate under common mutex. This leads to a time window after
    allocating the switch and before setting the registered flag where the set
    role notifications are dropped. Below timeline summarizes this behavior
    
    Thread1                         |       Thread2
    usb_role_switch_register()      |
            |                       |
            ---> allocate switch    |
            |                       |
            ---> component_add()    |       usb_role_switch_set_role()
            |                       |       |
            |                       |       --> Drop role notifications
            |                       |           since sw->registered
            |                       |           flag is not set.
            |                       |
            --->Set registered flag.|
    
    To avoid this, set the registered flag early on in the switch register
    API.
    
    Fixes: b787a3e78175 ("usb: roles: don't get/set_role() when usb_role_switch is unregistered")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Elson Roy Serrao <quic_eserrao@quicinc.com>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Link: https://lore.kernel.org/r/20250206193950.22421-1-quic_eserrao@quicinc.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: serial: option: add MeiG Smart SLM828 [+ + +]
Author: Chester A. Unal <chester.a.unal@arinc9.com>
Date:   Fri Jan 24 10:28:00 2025 +0000

    USB: serial: option: add MeiG Smart SLM828
    
    commit db79e75460fc59b19f9c89d4b068e61cee59f37d upstream.
    
    MeiG Smart SLM828 is an LTE-A CAT6 modem with the mPCIe form factor. The
    "Cls=ff(vend.) Sub=10 Prot=02" and "Cls=ff(vend.) Sub=10 Prot=03"
    interfaces respond to AT commands. Add these interfaces.
    
    The product ID the modem uses is shared across multiple modems. Therefore,
    add comments to describe which interface is used for which modem.
    
    T:  Bus=01 Lev=01 Prnt=05 Port=01 Cnt=01 Dev#=  6 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=2dee ProdID=4d22 Rev=05.04
    S:  Manufacturer=MEIG
    S:  Product=LTE-A Module
    S:  SerialNumber=4da7ec42
    C:  #Ifs= 6 Cfg#= 1 Atr=80 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=10 Prot=01 Driver=(none)
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=10 Prot=02 Driver=(none)
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=10 Prot=03 Driver=(none)
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=10 Prot=04 Driver=(none)
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
    E:  Ad=88(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=10 Prot=05 Driver=qmi_wwan
    E:  Ad=0f(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Signed-off-by: Chester A. Unal <chester.a.unal@arinc9.com>
    Link: https://lore.kernel.org/20250124-for-johan-meig-slm828-v2-1-6b4cd3f6344f@arinc9.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add Telit Cinterion FN990B compositions [+ + +]
Author: Fabio Porcedda <fabio.porcedda@gmail.com>
Date:   Wed Feb 5 18:16:45 2025 +0100

    USB: serial: option: add Telit Cinterion FN990B compositions
    
    commit c979fb5ece2dc11cc9cc3d5c66f750e210bfdee2 upstream.
    
    Add the following Telit Cinterion FN990B40 compositions:
    
    0x10d0: rmnet + tty (AT/NMEA) + tty (AT) + tty (AT) + tty (AT) +
            tty (diag) + DPL + QDSS (Qualcomm Debug SubSystem) + adb
    T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 17 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10d0 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FN990
    S:  SerialNumber=43b38f19
    C:  #Ifs= 9 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8b(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 6 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=8c(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 7 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=70 Driver=(none)
    E:  Ad=8d(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 8 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=usbfs
    E:  Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10d1: MBIM + tty (AT/NMEA) + tty (AT) + tty (AT) + tty (AT) +
            tty (diag) + DPL + QDSS (Qualcomm Debug SubSystem) + adb
    T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 16 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10d1 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FN990
    S:  SerialNumber=43b38f19
    C:  #Ifs=10 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8b(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 7 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=8c(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 8 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=70 Driver=(none)
    E:  Ad=8d(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 9 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=usbfs
    E:  Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10d2: RNDIS + tty (AT/NMEA) + tty (AT) + tty (AT) + tty (AT) +
            tty (diag) + DPL + QDSS (Qualcomm Debug SubSystem) + adb
    T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 18 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10d2 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FN990
    S:  SerialNumber=43b38f19
    C:  #Ifs=10 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=ef(misc ) Sub=04 Prot=01 Driver=rndis_host
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8b(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 7 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=8c(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 8 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=70 Driver=(none)
    E:  Ad=8d(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 9 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=usbfs
    E:  Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10d3: ECM + tty (AT/NMEA) + tty (AT) + tty (AT) + tty (AT) +
            tty (diag) + DPL + QDSS (Qualcomm Debug SubSystem) + adb
    T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 20 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10d3 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FN990
    S:  SerialNumber=43b38f19
    C:  #Ifs=10 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=06 Prot=00 Driver=cdc_ether
    E:  Ad=82(I) Atr=03(Int.) MxPS=  16 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8b(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 7 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=8c(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 8 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=70 Driver=(none)
    E:  Ad=8d(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 9 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=usbfs
    E:  Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
    Reviewed-by: Daniele Palmas <dnlplm@gmail.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: drop MeiG Smart defines [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Tue Feb 11 15:45:16 2025 +0100

    USB: serial: option: drop MeiG Smart defines
    
    commit 6aa8a63c471eb6756aabd03f880feffe6a7af6c9 upstream.
    
    Several MeiG Smart modems apparently use the same product id, making the
    defines even less useful.
    
    Drop them in favour of using comments consistently to make the id table
    slightly less unwieldy.
    
    Cc: stable@vger.kernel.org
    Acked-by: Chester A. Unal <chester.a.unal@arinc9.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: fix Telit Cinterion FN990A name [+ + +]
Author: Fabio Porcedda <fabio.porcedda@gmail.com>
Date:   Wed Feb 5 18:16:47 2025 +0100

    USB: serial: option: fix Telit Cinterion FN990A name
    
    commit 12606fe73f33647c5e79bf666833bf0b225e649d upstream.
    
    The correct name for FN990 is FN990A so use it in order to avoid
    confusion with FN990B.
    
    Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: xhci: Restore xhci_pci support for Renesas HCs [+ + +]
Author: Michal Pecio <michal.pecio@gmail.com>
Date:   Tue Jan 28 10:45:29 2025 +0100

    usb: xhci: Restore xhci_pci support for Renesas HCs
    
    commit c81d9fcd5b9402166048f377d4e5e0ee6f9ef26d upstream.
    
    Some Renesas HCs require firmware upload to work, this is handled by the
    xhci_pci_renesas driver. Other variants of those chips load firmware from
    a SPI flash and are ready to work with xhci_pci alone.
    
    A refactor merged in v6.12 broke the latter configuration so that users
    are finding their hardware ignored by the normal driver and are forced to
    enable the firmware loader which isn't really necessary on their systems.
    
    Let xhci_pci work with those chips as before when the firmware loader is
    disabled by kernel configuration.
    
    Fixes: 25f51b76f90f ("xhci-pci: Make xhci-pci-renesas a proper modular driver")
    Cc: stable <stable@kernel.org>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219616
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219726
    Signed-off-by: Michal Pecio <michal.pecio@gmail.com>
    Tested-by: Nicolai Buchwitz <nb@tipi-net.de>
    Link: https://lore.kernel.org/r/20250128104529.58a79bfc@foxbook
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
vfio/nvgrace-gpu: Expose the blackwell device PF BAR1 to the VM [+ + +]
Author: Ankit Agrawal <ankita@nvidia.com>
Date:   Fri Jan 24 18:31:00 2025 +0000

    vfio/nvgrace-gpu: Expose the blackwell device PF BAR1 to the VM
    
    [ Upstream commit 6a9eb2d125ba90d13b45bcfabcddf9f61268f6a8 ]
    
    There is a HW defect on Grace Hopper (GH) to support the
    Multi-Instance GPU (MIG) feature [1] that necessiated the presence
    of a 1G region carved out from the device memory and mapped as
    uncached. The 1G region is shown as a fake BAR (comprising region 2 and 3)
    to workaround the issue.
    
    The Grace Blackwell systems (GB) differ from GH systems in the following
    aspects:
    1. The aforementioned HW defect is fixed on GB systems.
    2. There is a usable BAR1 (region 2 and 3) on GB systems for the
    GPUdirect RDMA feature [2].
    
    This patch accommodate those GB changes by showing the 64b physical
    device BAR1 (region2 and 3) to the VM instead of the fake one. This
    takes care of both the differences.
    
    Moreover, the entire device memory is exposed on GB as cacheable to
    the VM as there is no carveout required.
    
    Link: https://www.nvidia.com/en-in/technologies/multi-instance-gpu/ [1]
    Link: https://docs.nvidia.com/cuda/gpudirect-rdma/ [2]
    
    Cc: Kevin Tian <kevin.tian@intel.com>
    CC: Jason Gunthorpe <jgg@nvidia.com>
    Suggested-by: Alex Williamson <alex.williamson@redhat.com>
    Signed-off-by: Ankit Agrawal <ankita@nvidia.com>
    Link: https://lore.kernel.org/r/20250124183102.3976-3-ankita@nvidia.com
    Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

vfio/nvgrace-gpu: Read dvsec register to determine need for uncached resmem [+ + +]
Author: Ankit Agrawal <ankita@nvidia.com>
Date:   Fri Jan 24 18:30:59 2025 +0000

    vfio/nvgrace-gpu: Read dvsec register to determine need for uncached resmem
    
    [ Upstream commit bd53764a60ad586ad5b6ed339423ad5e67824464 ]
    
    NVIDIA's recently introduced Grace Blackwell (GB) Superchip is a
    continuation with the Grace Hopper (GH) superchip that provides a
    cache coherent access to CPU and GPU to each other's memory with
    an internal proprietary chip-to-chip cache coherent interconnect.
    
    There is a HW defect on GH systems to support the Multi-Instance
    GPU (MIG) feature [1] that necessiated the presence of a 1G region
    with uncached mapping carved out from the device memory. The 1G
    region is shown as a fake BAR (comprising region 2 and 3) to
    workaround the issue. This is fixed on the GB systems.
    
    The presence of the fix for the HW defect is communicated by the
    device firmware through the DVSEC PCI config register with ID 3.
    The module reads this to take a different codepath on GB vs GH.
    
    Scan through the DVSEC registers to identify the correct one and use
    it to determine the presence of the fix. Save the value in the device's
    nvgrace_gpu_pci_core_device structure.
    
    Link: https://www.nvidia.com/en-in/technologies/multi-instance-gpu/ [1]
    
    CC: Jason Gunthorpe <jgg@nvidia.com>
    CC: Kevin Tian <kevin.tian@intel.com>
    Signed-off-by: Ankit Agrawal <ankita@nvidia.com>
    Link: https://lore.kernel.org/r/20250124183102.3976-2-ankita@nvidia.com
    Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
vfio/pci: Enable iowrite64 and ioread64 for vfio pci [+ + +]
Author: Ramesh Thomas <ramesh.thomas@intel.com>
Date:   Tue Dec 10 05:19:37 2024 -0800

    vfio/pci: Enable iowrite64 and ioread64 for vfio pci
    
    [ Upstream commit 2b938e3db335e3670475e31a722c2bee34748c5a ]
    
    Definitions of ioread64 and iowrite64 macros in asm/io.h called by vfio
    pci implementations are enclosed inside check for CONFIG_GENERIC_IOMAP.
    They don't get defined if CONFIG_GENERIC_IOMAP is defined. Include
    linux/io-64-nonatomic-lo-hi.h to define iowrite64 and ioread64 macros
    when they are not defined. io-64-nonatomic-lo-hi.h maps the macros to
    generic implementation in lib/iomap.c. The generic implementation does
    64 bit rw if readq/writeq is defined for the architecture, otherwise it
    would do 32 bit back to back rw.
    
    Note that there are two versions of the generic implementation that
    differs in the order the 32 bit words are written if 64 bit support is
    not present. This is not the little/big endian ordering, which is
    handled separately. This patch uses the lo followed by hi word ordering
    which is consistent with current back to back implementation in the
    vfio/pci code.
    
    Signed-off-by: Ramesh Thomas <ramesh.thomas@intel.com>
    Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
    Link: https://lore.kernel.org/r/20241210131938.303500-2-ramesh.thomas@intel.com
    Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
vrf: use RCU protection in l3mdev_l3_out() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Feb 7 13:58:38 2025 +0000

    vrf: use RCU protection in l3mdev_l3_out()
    
    [ Upstream commit 6d0ce46a93135d96b7fa075a94a88fe0da8e8773 ]
    
    l3mdev_l3_out() can be called without RCU being held:
    
    raw_sendmsg()
     ip_push_pending_frames()
      ip_send_skb()
       ip_local_out()
        __ip_local_out()
         l3mdev_ip_out()
    
    Add rcu_read_lock() / rcu_read_unlock() pair to avoid
    a potential UAF.
    
    Fixes: a8e3e1a9f020 ("net: l3mdev: Add hook to output path")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20250207135841.1948589-7-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
vsock: Keep the binding until socket destruction [+ + +]
Author: Michal Luczaj <mhal@rbox.co>
Date:   Tue Jan 28 14:15:27 2025 +0100

    vsock: Keep the binding until socket destruction
    
    commit fcdd2242c0231032fc84e1404315c245ae56322a upstream.
    
    Preserve sockets bindings; this includes both resulting from an explicit
    bind() and those implicitly bound through autobind during connect().
    
    Prevents socket unbinding during a transport reassignment, which fixes a
    use-after-free:
    
        1. vsock_create() (refcnt=1) calls vsock_insert_unbound() (refcnt=2)
        2. transport->release() calls vsock_remove_bound() without checking if
           sk was bound and moved to bound list (refcnt=1)
        3. vsock_bind() assumes sk is in unbound list and before
           __vsock_insert_bound(vsock_bound_sockets()) calls
           __vsock_remove_bound() which does:
               list_del_init(&vsk->bound_table); // nop
               sock_put(&vsk->sk);               // refcnt=0
    
    BUG: KASAN: slab-use-after-free in __vsock_bind+0x62e/0x730
    Read of size 4 at addr ffff88816b46a74c by task a.out/2057
     dump_stack_lvl+0x68/0x90
     print_report+0x174/0x4f6
     kasan_report+0xb9/0x190
     __vsock_bind+0x62e/0x730
     vsock_bind+0x97/0xe0
     __sys_bind+0x154/0x1f0
     __x64_sys_bind+0x6e/0xb0
     do_syscall_64+0x93/0x1b0
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Allocated by task 2057:
     kasan_save_stack+0x1e/0x40
     kasan_save_track+0x10/0x30
     __kasan_slab_alloc+0x85/0x90
     kmem_cache_alloc_noprof+0x131/0x450
     sk_prot_alloc+0x5b/0x220
     sk_alloc+0x2c/0x870
     __vsock_create.constprop.0+0x2e/0xb60
     vsock_create+0xe4/0x420
     __sock_create+0x241/0x650
     __sys_socket+0xf2/0x1a0
     __x64_sys_socket+0x6e/0xb0
     do_syscall_64+0x93/0x1b0
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Freed by task 2057:
     kasan_save_stack+0x1e/0x40
     kasan_save_track+0x10/0x30
     kasan_save_free_info+0x37/0x60
     __kasan_slab_free+0x4b/0x70
     kmem_cache_free+0x1a1/0x590
     __sk_destruct+0x388/0x5a0
     __vsock_bind+0x5e1/0x730
     vsock_bind+0x97/0xe0
     __sys_bind+0x154/0x1f0
     __x64_sys_bind+0x6e/0xb0
     do_syscall_64+0x93/0x1b0
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    refcount_t: addition on 0; use-after-free.
    WARNING: CPU: 7 PID: 2057 at lib/refcount.c:25 refcount_warn_saturate+0xce/0x150
    RIP: 0010:refcount_warn_saturate+0xce/0x150
     __vsock_bind+0x66d/0x730
     vsock_bind+0x97/0xe0
     __sys_bind+0x154/0x1f0
     __x64_sys_bind+0x6e/0xb0
     do_syscall_64+0x93/0x1b0
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    refcount_t: underflow; use-after-free.
    WARNING: CPU: 7 PID: 2057 at lib/refcount.c:28 refcount_warn_saturate+0xee/0x150
    RIP: 0010:refcount_warn_saturate+0xee/0x150
     vsock_remove_bound+0x187/0x1e0
     __vsock_release+0x383/0x4a0
     vsock_release+0x90/0x120
     __sock_release+0xa3/0x250
     sock_close+0x14/0x20
     __fput+0x359/0xa80
     task_work_run+0x107/0x1d0
     do_exit+0x847/0x2560
     do_group_exit+0xb8/0x250
     __x64_sys_exit_group+0x3a/0x50
     x64_sys_call+0xfec/0x14f0
     do_syscall_64+0x93/0x1b0
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Fixes: c0cfa2d8a788 ("vsock: add multi-transports support")
    Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
    Signed-off-by: Michal Luczaj <mhal@rbox.co>
    Link: https://patch.msgid.link/20250128-vsock-transport-vs-autobind-v3-1-1cf57065b770@rbox.co
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

vsock: Orphan socket after transport release [+ + +]
Author: Michal Luczaj <mhal@rbox.co>
Date:   Mon Feb 10 13:15:00 2025 +0100

    vsock: Orphan socket after transport release
    
    commit 78dafe1cf3afa02ed71084b350713b07e72a18fb upstream.
    
    During socket release, sock_orphan() is called without considering that it
    sets sk->sk_wq to NULL. Later, if SO_LINGER is enabled, this leads to a
    null pointer dereferenced in virtio_transport_wait_close().
    
    Orphan the socket only after transport release.
    
    Partially reverts the 'Fixes:' commit.
    
    KASAN: null-ptr-deref in range [0x0000000000000018-0x000000000000001f]
     lock_acquire+0x19e/0x500
     _raw_spin_lock_irqsave+0x47/0x70
     add_wait_queue+0x46/0x230
     virtio_transport_release+0x4e7/0x7f0
     __vsock_release+0xfd/0x490
     vsock_release+0x90/0x120
     __sock_release+0xa3/0x250
     sock_close+0x14/0x20
     __fput+0x35e/0xa90
     __x64_sys_close+0x78/0xd0
     do_syscall_64+0x93/0x1b0
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Reported-by: syzbot+9d55b199192a4be7d02c@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=9d55b199192a4be7d02c
    Fixes: fcdd2242c023 ("vsock: Keep the binding until socket destruction")
    Tested-by: Luigi Leonardi <leonardi@redhat.com>
    Reviewed-by: Luigi Leonardi <leonardi@redhat.com>
    Signed-off-by: Michal Luczaj <mhal@rbox.co>
    Link: https://patch.msgid.link/20250210-vsock-linger-nullderef-v3-1-ef6244d02b54@rbox.co
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
vxlan: check vxlan_vnigroup_init() return value [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Mon Feb 10 10:52:42 2025 +0000

    vxlan: check vxlan_vnigroup_init() return value
    
    [ Upstream commit 5805402dcc56241987bca674a1b4da79a249bab7 ]
    
    vxlan_init() must check vxlan_vnigroup_init() success
    otherwise a crash happens later, spotted by syzbot.
    
    Oops: general protection fault, probably for non-canonical address 0xdffffc000000002c: 0000 [#1] PREEMPT SMP KASAN NOPTI
    KASAN: null-ptr-deref in range [0x0000000000000160-0x0000000000000167]
    CPU: 0 UID: 0 PID: 7313 Comm: syz-executor147 Not tainted 6.14.0-rc1-syzkaller-00276-g69b54314c975 #0
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014
     RIP: 0010:vxlan_vnigroup_uninit+0x89/0x500 drivers/net/vxlan/vxlan_vnifilter.c:912
    Code: 00 48 8b 44 24 08 4c 8b b0 98 41 00 00 49 8d 86 60 01 00 00 48 89 c2 48 89 44 24 10 48 b8 00 00 00 00 00 fc ff df 48 c1 ea 03 <80> 3c 02 00 0f 85 4d 04 00 00 49 8b 86 60 01 00 00 48 ba 00 00 00
    RSP: 0018:ffffc9000cc1eea8 EFLAGS: 00010202
    RAX: dffffc0000000000 RBX: 0000000000000001 RCX: ffffffff8672effb
    RDX: 000000000000002c RSI: ffffffff8672ecb9 RDI: ffff8880461b4f18
    RBP: ffff8880461b4ef4 R08: 0000000000000001 R09: 0000000000000000
    R10: 0000000000000001 R11: 0000000000000000 R12: 0000000000020000
    R13: ffff8880461b0d80 R14: 0000000000000000 R15: dffffc0000000000
    FS:  00007fecfa95d6c0(0000) GS:ffff88806a600000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007fecfa95cfb8 CR3: 000000004472c000 CR4: 0000000000352ef0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
      vxlan_uninit+0x1ab/0x200 drivers/net/vxlan/vxlan_core.c:2942
      unregister_netdevice_many_notify+0x12d6/0x1f30 net/core/dev.c:11824
      unregister_netdevice_many net/core/dev.c:11866 [inline]
      unregister_netdevice_queue+0x307/0x3f0 net/core/dev.c:11736
      register_netdevice+0x1829/0x1eb0 net/core/dev.c:10901
      __vxlan_dev_create+0x7c6/0xa30 drivers/net/vxlan/vxlan_core.c:3981
      vxlan_newlink+0xd1/0x130 drivers/net/vxlan/vxlan_core.c:4407
      rtnl_newlink_create net/core/rtnetlink.c:3795 [inline]
      __rtnl_newlink net/core/rtnetlink.c:3906 [inline]
    
    Fixes: f9c4bb0b245c ("vxlan: vni filtering support on collect metadata device")
    Reported-by: syzbot+6a9624592218c2c5e7aa@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/67a9d9b4.050a0220.110943.002d.GAE@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Roopa Prabhu <roopa@nvidia.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/20250210105242.883482-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
wifi: ath12k: fix handling of 6 GHz rules [+ + +]
Author: Aditya Kumar Singh <aditya.kumar.singh@oss.qualcomm.com>
Date:   Thu Jan 23 21:51:38 2025 +0530

    wifi: ath12k: fix handling of 6 GHz rules
    
    commit 64a1ba4072b34af1b76bf15fca5c2075b8cc4d64 upstream.
    
    In the US country code, to avoid including 6 GHz rules in the 5 GHz rules
    list, the number of 5 GHz rules is set to a default constant value of 4
    (REG_US_5G_NUM_REG_RULES). However, if there are more than 4 valid 5 GHz
    rules, the current logic will bypass the legitimate 6 GHz rules.
    
    For example, if there are 5 valid 5 GHz rules and 1 valid 6 GHz rule, the
    current logic will only consider 4 of the 5 GHz rules, treating the last
    valid rule as a 6 GHz rule. Consequently, the actual 6 GHz rule is never
    processed, leading to the eventual disabling of 6 GHz channels.
    
    To fix this issue, instead of hardcoding the value to 4, use a helper
    function to determine the number of 6 GHz rules present in the 5 GHz rules
    list and ignore only those rules.
    
    Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
    
    Cc: stable@vger.kernel.org
    Fixes: d889913205cf ("wifi: ath12k: driver for Qualcomm Wi-Fi 7 devices")
    Signed-off-by: Aditya Kumar Singh <aditya.kumar.singh@oss.qualcomm.com>
    Link: https://patch.msgid.link/20250123-fix_6ghz_rules_handling-v1-1-d734bfa58ff4@oss.qualcomm.com
    Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: rtw89: pci: disable PCIE wake bit when PCIE deinit [+ + +]
Author: Ping-Ke Shih <pkshih@realtek.com>
Date:   Mon Nov 11 14:38:35 2024 +0800

    wifi: rtw89: pci: disable PCIE wake bit when PCIE deinit
    
    commit 9c1df813e08832c3836c254bc8a2f83ff22dbc06 upstream.
    
    The PCIE wake bit is to control PCIE wake signal to host. When PCIE is
    going down, clear this bit to prevent waking up host unexpectedly.
    
    Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
    Link: https://patch.msgid.link/20241111063835.15454-1-pkshih@realtek.com
    Signed-off-by: Zenm Chen <zenmchen@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
workqueue: Put the pwq after detaching the rescuer from the pool [+ + +]
Author: Lai Jiangshan <jiangshan.ljs@antgroup.com>
Date:   Thu Jan 23 16:25:35 2025 +0800

    workqueue: Put the pwq after detaching the rescuer from the pool
    
    [ Upstream commit e76946110137703c16423baf6ee177b751a34b7e ]
    
    The commit 68f83057b913("workqueue: Reap workers via kthread_stop() and
    remove detach_completion") adds code to reap the normal workers but
    mistakenly does not handle the rescuer and also removes the code waiting
    for the rescuer in put_unbound_pool(), which caused a use-after-free bug
    reported by Cheung Wall.
    
    To avoid the use-after-free bug, the pool’s reference must be held until
    the detachment is complete. Therefore, move the code that puts the pwq
    after detaching the rescuer from the pool.
    
    Reported-by: cheung wall <zzqq0103.hey@gmail.com>
    Cc: cheung wall <zzqq0103.hey@gmail.com>
    Link: https://lore.kernel.org/lkml/CAKHoSAvP3iQW+GwmKzWjEAOoPvzeWeoMO0Gz7Pp3_4kxt-RMoA@mail.gmail.com/
    Fixes: 68f83057b913("workqueue: Reap workers via kthread_stop() and remove detach_completion")
    Signed-off-by: Lai Jiangshan <jiangshan.ljs@antgroup.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/cpu/kvm: SRSO: Fix possible missing IBPB on VM-Exit [+ + +]
Author: Patrick Bellasi <derkling@google.com>
Date:   Wed Feb 5 14:04:41 2025 +0000

    x86/cpu/kvm: SRSO: Fix possible missing IBPB on VM-Exit
    
    commit 318e8c339c9a0891c389298bb328ed0762a9935e upstream.
    
    In [1] the meaning of the synthetic IBPB flags has been redefined for a
    better separation of concerns:
     - ENTRY_IBPB     -- issue IBPB on entry only
     - IBPB_ON_VMEXIT -- issue IBPB on VM-Exit only
    and the Retbleed mitigations have been updated to match this new
    semantics.
    
    Commit [2] was merged shortly before [1], and their interaction was not
    handled properly. This resulted in IBPB not being triggered on VM-Exit
    in all SRSO mitigation configs requesting an IBPB there.
    
    Specifically, an IBPB on VM-Exit is triggered only when
    X86_FEATURE_IBPB_ON_VMEXIT is set. However:
    
     - X86_FEATURE_IBPB_ON_VMEXIT is not set for "spec_rstack_overflow=ibpb",
       because before [1] having X86_FEATURE_ENTRY_IBPB was enough. Hence,
       an IBPB is triggered on entry but the expected IBPB on VM-exit is
       not.
    
     - X86_FEATURE_IBPB_ON_VMEXIT is not set also when
       "spec_rstack_overflow=ibpb-vmexit" if X86_FEATURE_ENTRY_IBPB is
       already set.
    
       That's because before [1] this was effectively redundant. Hence, e.g.
       a "retbleed=ibpb spec_rstack_overflow=bpb-vmexit" config mistakenly
       reports the machine still vulnerable to SRSO, despite an IBPB being
       triggered both on entry and VM-Exit, because of the Retbleed selected
       mitigation config.
    
     - UNTRAIN_RET_VM won't still actually do anything unless
       CONFIG_MITIGATION_IBPB_ENTRY is set.
    
    For "spec_rstack_overflow=ibpb", enable IBPB on both entry and VM-Exit
    and clear X86_FEATURE_RSB_VMEXIT which is made superfluous by
    X86_FEATURE_IBPB_ON_VMEXIT. This effectively makes this mitigation
    option similar to the one for 'retbleed=ibpb', thus re-order the code
    for the RETBLEED_MITIGATION_IBPB option to be less confusing by having
    all features enabling before the disabling of the not needed ones.
    
    For "spec_rstack_overflow=ibpb-vmexit", guard this mitigation setting
    with CONFIG_MITIGATION_IBPB_ENTRY to ensure UNTRAIN_RET_VM sequence is
    effectively compiled in. Drop instead the CONFIG_MITIGATION_SRSO guard,
    since none of the SRSO compile cruft is required in this configuration.
    Also, check only that the required microcode is present to effectively
    enabled the IBPB on VM-Exit.
    
    Finally, update the KConfig description for CONFIG_MITIGATION_IBPB_ENTRY
    to list also all SRSO config settings enabled by this guard.
    
    Fixes: 864bcaa38ee4 ("x86/cpu/kvm: Provide UNTRAIN_RET_VM") [1]
    Fixes: d893832d0e1e ("x86/srso: Add IBPB on VMEXIT") [2]
    Reported-by: Yosry Ahmed <yosryahmed@google.com>
    Signed-off-by: Patrick Bellasi <derkling@google.com>
    Reviewed-by: Borislav Petkov (AMD) <bp@alien8.de>
    Cc: stable@kernel.org
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/mm/tlb: Only trim the mm_cpumask once a second [+ + +]
Author: Rik van Riel <riel@fb.com>
Date:   Wed Dec 4 21:03:16 2024 -0500

    x86/mm/tlb: Only trim the mm_cpumask once a second
    
    [ Upstream commit 6db2526c1d694c91c6e05e2f186c085e9460f202 ]
    
    Setting and clearing CPU bits in the mm_cpumask is only ever done
    by the CPU itself, from the context switch code or the TLB flush
    code.
    
    Synchronization is handled by switch_mm_irqs_off() blocking interrupts.
    
    Sending TLB flush IPIs to CPUs that are in the mm_cpumask, but no
    longer running the program causes a regression in the will-it-scale
    tlbflush2 test. This test is contrived, but a large regression here
    might cause a small regression in some real world workload.
    
    Instead of always sending IPIs to CPUs that are in the mm_cpumask,
    but no longer running the program, send these IPIs only once a second.
    
    The rest of the time we can skip over CPUs where the loaded_mm is
    different from the target mm.
    
    Reported-by: kernel test roboto <oliver.sang@intel.com>
    Signed-off-by: Rik van Riel <riel@surriel.com>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/r/20241204210316.612ee573@fangorn
    Closes: https://lore.kernel.org/oe-lkp/202411282207.6bd28eae-lkp@intel.com/
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/static-call: Remove early_boot_irqs_disabled check to fix Xen PVH dom0 [+ + +]
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Sat Dec 21 21:10:46 2024 +0000

    x86/static-call: Remove early_boot_irqs_disabled check to fix Xen PVH dom0
    
    commit 5cc2db37124bb33914996d6fdbb2ddb3811f2945 upstream.
    
    __static_call_update_early() has a check for early_boot_irqs_disabled, but
    is used before early_boot_irqs_disabled is set up in start_kernel().
    
    Xen PV has always special cased early_boot_irqs_disabled, but Xen PVH does
    not and falls over the BUG when booting as dom0.
    
    It is very suspect that early_boot_irqs_disabled starts as 0, becomes 1 for
    a time, then becomes 0 again, but as this needs backporting to fix a
    breakage in a security fix, dropping the BUG_ON() is the far safer option.
    
    Fixes: 0ef8047b737d ("x86/static-call: provide a way to do very early static-call updates")
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219620
    Reported-by: Alex Zenla <alex@edera.dev>
    Suggested-by: Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Tested-by: Alex Zenla <alex@edera.dev>
    Link: https://lore.kernel.org/r/20241221211046.6475-1-andrew.cooper3@citrix.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/xen: allow larger contiguous memory regions in PV guests [+ + +]
Author: Juergen Gross <jgross@suse.com>
Date:   Tue Feb 11 11:16:28 2025 +0100

    x86/xen: allow larger contiguous memory regions in PV guests
    
    [ Upstream commit e93ec87286bd1fd30b7389e7a387cfb259f297e3 ]
    
    Today a PV guest (including dom0) can create 2MB contiguous memory
    regions for DMA buffers at max. This has led to problems at least
    with the megaraid_sas driver, which wants to allocate a 2.3MB DMA
    buffer.
    
    The limiting factor is the frame array used to do the hypercall for
    making the memory contiguous, which has 512 entries and is just a
    static array in mmu_pv.c.
    
    In order to not waste memory for non-PV guests, put the initial
    frame array into .init.data section and dynamically allocate an array
    from the .init_after_bootmem hook of PV guests.
    
    In case a contiguous memory area larger than the initially supported
    2MB is requested, allocate a larger buffer for the frame list. Note
    that such an allocation is tried only after memory management has been
    initialized properly, which is tested via a flag being set in the
    .init_after_bootmem hook.
    
    Fixes: 9f40ec84a797 ("xen/swiotlb: add alignment check for dma buffers")
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Tested-by: Alan Robinson <Alan.Robinson@fujitsu.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xen/swiotlb: relax alignment requirements [+ + +]
Author: Juergen Gross <jgross@suse.com>
Date:   Mon Feb 10 08:43:39 2025 +0100

    xen/swiotlb: relax alignment requirements
    
    [ Upstream commit 85fcb57c983f423180ba6ec5d0034242da05cc54 ]
    
    When mapping a buffer for DMA via .map_page or .map_sg DMA operations,
    there is no need to check the machine frames to be aligned according
    to the mapped areas size. All what is needed in these cases is that the
    buffer is contiguous at machine level.
    
    So carve out the alignment check from range_straddles_page_boundary()
    and move it to a helper called by xen_swiotlb_alloc_coherent() and
    xen_swiotlb_free_coherent() directly.
    
    Fixes: 9f40ec84a797 ("xen/swiotlb: add alignment check for dma buffers")
    Reported-by: Jan Vejvalka <jan.vejvalka@lfmotol.cuni.cz>
    Tested-by: Jan Vejvalka <jan.vejvalka@lfmotol.cuni.cz>
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>