Changelog in Linux kernel 5.15.196

 
ALSA: firewire: amdtp-stream: fix enum kernel-doc warnings [+ + +]
Author: Randy Dunlap <[email protected]>
Date:   Mon Oct 13 20:05:52 2025 -0700

    ALSA: firewire: amdtp-stream: fix enum kernel-doc warnings
    
    [ Upstream commit d41f68dff783d181a8fd462e612bda0fbab7f735 ]
    
    Fix spelling of CIP_NO_HEADER to prevent a kernel-doc warning.
    
    Warning: amdtp-stream.h:57 Enum value 'CIP_NO_HEADER' not described in enum 'cip_flags'
    Warning: amdtp-stream.h:57 Excess enum value '%CIP_NO_HEADERS' description in 'cip_flags'
    
    Fixes: 3b196c394dd9f ("ALSA: firewire-lib: add no-header packet processing")
    Signed-off-by: Randy Dunlap <[email protected]>
    Reviewed-by: Takashi Sakamoto <[email protected]>
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: usb-audio: Fix NULL pointer deference in try_to_register_card [+ + +]
Author: Jiaming Zhang <[email protected]>
Date:   Wed Oct 15 13:16:45 2025 +0800

    ALSA: usb-audio: Fix NULL pointer deference in try_to_register_card
    
    [ Upstream commit 28412b489b088fb88dff488305fd4e56bd47f6e4 ]
    
    In try_to_register_card(), the return value of usb_ifnum_to_if() is
    passed directly to usb_interface_claimed() without a NULL check, which
    will lead to a NULL pointer dereference when creating an invalid
    USB audio device. Fix this by adding a check to ensure the interface
    pointer is valid before passing it to usb_interface_claimed().
    
    Fixes: 39efc9c8a973 ("ALSA: usb-audio: Fix last interface check for registration")
    Closes: https://lore.kernel.org/all/CANypQFYtQxHL5ghREs-BujZG413RPJGnO5TH=xjFBKpPts33tA@mail.gmail.com/
    Signed-off-by: Jiaming Zhang <[email protected]>
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
amd-xgbe: Avoid spurious link down messages during interface toggle [+ + +]
Author: Raju Rangoju <[email protected]>
Date:   Fri Oct 10 12:21:42 2025 +0530

    amd-xgbe: Avoid spurious link down messages during interface toggle
    
    [ Upstream commit 2616222e423398bb374ffcb5d23dea4ba2c3e524 ]
    
    During interface toggle operations (ifdown/ifup), the driver currently
    resets the local helper variable 'phy_link' to -1. This causes the link
    state machine to incorrectly interpret the state as a link change event,
    resulting in spurious "Link is down" messages being logged when the
    interface is brought back up.
    
    Preserve the phy_link state across interface toggles to avoid treating
    the -1 sentinel value as a legitimate link state transition.
    
    Fixes: 88131a812b16 ("amd-xgbe: Perform phy connect/disconnect at dev open/stop")
    Signed-off-by: Raju Rangoju <[email protected]>
    Reviewed-by: Dawid Osuchowski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
arch_topology: Fix incorrect error check in topology_parse_cpu_capacity() [+ + +]
Author: Kaushlendra Kumar <[email protected]>
Date:   Sun Oct 26 12:25:25 2025 -0400

    arch_topology: Fix incorrect error check in topology_parse_cpu_capacity()
    
    [ Upstream commit 2eead19334516c8e9927c11b448fbe512b1f18a1 ]
    
    Fix incorrect use of PTR_ERR_OR_ZERO() in topology_parse_cpu_capacity()
    which causes the code to proceed with NULL clock pointers. The current
    logic uses !PTR_ERR_OR_ZERO(cpu_clk) which evaluates to true for both
    valid pointers and NULL, leading to potential NULL pointer dereference
    in clk_get_rate().
    
    Per include/linux/err.h documentation, PTR_ERR_OR_ZERO(ptr) returns:
    "The error code within @ptr if it is an error pointer; 0 otherwise."
    
    This means PTR_ERR_OR_ZERO() returns 0 for both valid pointers AND NULL
    pointers. Therefore !PTR_ERR_OR_ZERO(cpu_clk) evaluates to true (proceed)
    when cpu_clk is either valid or NULL, causing clk_get_rate(NULL) to be
    called when of_clk_get() returns NULL.
    
    Replace with !IS_ERR_OR_NULL(cpu_clk) which only proceeds for valid
    pointers, preventing potential NULL pointer dereference in clk_get_rate().
    
    Cc: stable <[email protected]>
    Signed-off-by: Kaushlendra Kumar <[email protected]>
    Reviewed-by: Sudeep Holla <[email protected]>
    Fixes: b8fe128dad8f ("arch_topology: Adjust initial CPU capacities with current freq")
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
arm64, mm: avoid always making PTE dirty in pte_mkwrite() [+ + +]
Author: Huang Ying <[email protected]>
Date:   Wed Oct 15 10:37:12 2025 +0800

    arm64, mm: avoid always making PTE dirty in pte_mkwrite()
    
    [ Upstream commit 143937ca51cc6ae2fccc61a1cb916abb24cd34f5 ]
    
    Current pte_mkwrite_novma() makes PTE dirty unconditionally.  This may
    mark some pages that are never written dirty wrongly.  For example,
    do_swap_page() may map the exclusive pages with writable and clean PTEs
    if the VMA is writable and the page fault is for read access.
    However, current pte_mkwrite_novma() implementation always dirties the
    PTE.  This may cause unnecessary disk writing if the pages are
    never written before being reclaimed.
    
    So, change pte_mkwrite_novma() to clear the PTE_RDONLY bit only if the
    PTE_DIRTY bit is set to make it possible to make the PTE writable and
    clean.
    
    The current behavior was introduced in commit 73e86cb03cf2 ("arm64:
    Move PTE_RDONLY bit handling out of set_pte_at()").  Before that,
    pte_mkwrite() only sets the PTE_WRITE bit, while set_pte_at() only
    clears the PTE_RDONLY bit if both the PTE_WRITE and the PTE_DIRTY bits
    are set.
    
    To test the performance impact of the patch, on an arm64 server
    machine, run 16 redis-server processes on socket 1 and 16
    memtier_benchmark processes on socket 0 with mostly get
    transactions (that is, redis-server will mostly read memory only).
    The memory footprint of redis-server is larger than the available
    memory, so swap out/in will be triggered.  Test results show that the
    patch can avoid most swapping out because the pages are mostly clean.
    And the benchmark throughput improves ~23.9% in the test.
    
    Fixes: 73e86cb03cf2 ("arm64: Move PTE_RDONLY bit handling out of set_pte_at()")
    Signed-off-by: Huang Ying <[email protected]>
    Cc: Will Deacon <[email protected]>
    Cc: Anshuman Khandual <[email protected]>
    Cc: Ryan Roberts <[email protected]>
    Cc: Gavin Shan <[email protected]>
    Cc: Ard Biesheuvel <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Yicong Yang <[email protected]>
    Cc: [email protected]
    Cc: [email protected]
    Reviewed-by: Catalin Marinas <[email protected]>
    Signed-off-by: Catalin Marinas <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
arm64: cputype: Add Neoverse-V3AE definitions [+ + +]
Author: Mark Rutland <[email protected]>
Date:   Fri Sep 19 15:58:28 2025 +0100

    arm64: cputype: Add Neoverse-V3AE definitions
    
    commit 3bbf004c4808e2c3241e5c1ad6cc102f38a03c39 upstream.
    
    Add cputype definitions for Neoverse-V3AE. These will be used for errata
    detection in subsequent patches.
    
    These values can be found in the Neoverse-V3AE TRM:
    
      https://developer.arm.com/documentation/SDEN-2615521/9-0/
    
    ... in section A.6.1 ("MIDR_EL1, Main ID Register").
    
    Signed-off-by: Mark Rutland <[email protected]>
    Cc: James Morse <[email protected]>
    Cc: Will Deacon <[email protected]>
    Cc: Catalin Marinas <[email protected]>
    Signed-off-by: Ryan Roberts <[email protected]>
    Signed-off-by: Will Deacon <[email protected]>
    [ Ryan: Trivial backport ]
    Signed-off-by: Ryan Roberts <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

arm64: errata: Apply workarounds for Neoverse-V3AE [+ + +]
Author: Mark Rutland <[email protected]>
Date:   Fri Sep 19 15:58:29 2025 +0100

    arm64: errata: Apply workarounds for Neoverse-V3AE
    
    commit 0c33aa1804d101c11ba1992504f17a42233f0e11 upstream.
    
    Neoverse-V3AE is also affected by erratum #3312417, as described in its
    Software Developer Errata Notice (SDEN) document:
    
      Neoverse V3AE (MP172) SDEN v9.0, erratum 3312417
      https://developer.arm.com/documentation/SDEN-2615521/9-0/
    
    Enable the workaround for Neoverse-V3AE, and document this.
    
    Signed-off-by: Mark Rutland <[email protected]>
    Cc: James Morse <[email protected]>
    Cc: Will Deacon <[email protected]>
    Cc: Catalin Marinas <[email protected]>
    Signed-off-by: Ryan Roberts <[email protected]>
    Signed-off-by: Will Deacon <[email protected]>
    [ Ryan: Trivial backport ]
    Signed-off-by: Ryan Roberts <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
binder: remove "invalid inc weak" check [+ + +]
Author: Alice Ryhl <[email protected]>
Date:   Wed Oct 15 14:26:55 2025 +0000

    binder: remove "invalid inc weak" check
    
    commit d90eeb8ecd227c204ab6c34a17b372bd950b7aa2 upstream.
    
    There are no scenarios where a weak increment is invalid on binder_node.
    The only possible case where it could be invalid is if the kernel
    delivers BR_DECREFS to the process that owns the node, and then
    increments the weak refcount again, effectively "reviving" a dead node.
    
    However, that is not possible: when the BR_DECREFS command is delivered,
    the kernel removes and frees the binder_node. The fact that you were
    able to call binder_inc_node_nilocked() implies that the node is not yet
    destroyed, which implies that BR_DECREFS has not been delivered to
    userspace, so incrementing the weak refcount is valid.
    
    Note that it's currently possible to trigger this condition if the owner
    calls BINDER_THREAD_EXIT while node->has_weak_ref is true. This causes
    BC_INCREFS on binder_ref instances to fail when they should not.
    
    Cc: [email protected]
    Fixes: 457b9a6f09f0 ("Staging: android: add binder driver")
    Reported-by: Yu-Ting Tseng <[email protected]>
    Signed-off-by: Alice Ryhl <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
blk-crypto: fix missing blktrace bio split events [+ + +]
Author: Yu Kuai <[email protected]>
Date:   Sat Oct 18 10:51:29 2025 -0400

    blk-crypto: fix missing blktrace bio split events
    
    [ Upstream commit 06d712d297649f48ebf1381d19bd24e942813b37 ]
    
    trace_block_split() is missing, resulting in blktrace inability to catch
    BIO split events and making it harder to analyze the BIO sequence.
    
    Cc: [email protected]
    Fixes: 488f6682c832 ("block: blk-crypto-fallback for Inline Encryption")
    Signed-off-by: Yu Kuai <[email protected]>
    Reviewed-by: Bart Van Assche <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    [ changed blk_crypto_fallback_split_bio_if_needed() to blk_crypto_split_bio_if_needed() ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
btrfs: fix clearing of BTRFS_FS_RELOC_RUNNING if relocation already running [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Wed Sep 24 16:10:38 2025 +0100

    btrfs: fix clearing of BTRFS_FS_RELOC_RUNNING if relocation already running
    
    commit 7e5a5983edda664e8e4bb20af17b80f5135c655c upstream.
    
    When starting relocation, at reloc_chunk_start(), if we happen to find
    the flag BTRFS_FS_RELOC_RUNNING is already set we return an error
    (-EINPROGRESS) to the callers, however the callers call reloc_chunk_end()
    which will clear the flag BTRFS_FS_RELOC_RUNNING, which is wrong since
    relocation was started by another task and still running.
    
    Finding the BTRFS_FS_RELOC_RUNNING flag already set is an unexpected
    scenario, but still our current behaviour is not correct.
    
    Fix this by never calling reloc_chunk_end() if reloc_chunk_start() has
    returned an error, which is what logically makes sense, since the general
    widespread pattern is to have end functions called only if the counterpart
    start functions succeeded. This requires changing reloc_chunk_start() to
    clear BTRFS_FS_RELOC_RUNNING if there's a pending cancel request.
    
    Fixes: 907d2710d727 ("btrfs: add cancellable chunk relocation support")
    CC: [email protected] # 5.15+
    Reviewed-by: Boris Burkov <[email protected]>
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Reviewed-by: Qu Wenruo <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
can: m_can: m_can_plat_remove(): add missing pm_runtime_disable() [+ + +]
Author: Marc Kleine-Budde <[email protected]>
Date:   Wed Aug 6 17:46:32 2025 +0200

    can: m_can: m_can_plat_remove(): add missing pm_runtime_disable()
    
    [ Upstream commit ba569fb07a7e9e9b71e9282e27e993ba859295c2 ]
    
    Commit 227619c3ff7c ("can: m_can: move runtime PM enable/disable to
    m_can_platform") moved the PM runtime enable from the m_can core
    driver into the m_can_platform.
    
    That patch forgot to move the pm_runtime_disable() to
    m_can_plat_remove(), so that unloading the m_can_platform driver
    causes an "Unbalanced pm_runtime_enable!" error message.
    
    Add the missing pm_runtime_disable() to m_can_plat_remove() to fix the
    problem.
    
    Cc: Patrik Flykt <[email protected]>
    Fixes: 227619c3ff7c ("can: m_can: move runtime PM enable/disable to m_can_platform")
    Reviewed-by: Markus Schneider-Pargmann <[email protected]>
    Link: https://patch.msgid.link/20250929-m_can-fix-state-handling-v4-1-682b49b49d9a@pengutronix.de
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
comedi: fix divide-by-zero in comedi_buf_munge() [+ + +]
Author: Deepanshu Kartikey <[email protected]>
Date:   Wed Sep 24 15:56:39 2025 +0530

    comedi: fix divide-by-zero in comedi_buf_munge()
    
    commit 87b318ba81dda2ee7b603f4f6c55e78ec3e95974 upstream.
    
    The comedi_buf_munge() function performs a modulo operation
    `async->munge_chan %= async->cmd.chanlist_len` without first
    checking if chanlist_len is zero. If a user program submits a command with
    chanlist_len set to zero, this causes a divide-by-zero error when the device
    processes data in the interrupt handler path.
    
    Add a check for zero chanlist_len at the beginning of the
    function, similar to the existing checks for !map and
    CMDF_RAWDATA flag. When chanlist_len is zero, update
    munge_count and return early, indicating the data was
    handled without munging.
    
    This prevents potential kernel panics from malformed user commands.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=f6c3c066162d2c43a66c
    Cc: [email protected]
    Signed-off-by: Deepanshu Kartikey <[email protected]>
    Reviewed-by: Ian Abbott <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cpufreq: CPPC: Avoid using CPUFREQ_ETERNAL as transition delay [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Sat Oct 18 12:55:09 2025 -0400

    cpufreq: CPPC: Avoid using CPUFREQ_ETERNAL as transition delay
    
    [ Upstream commit f965d111e68f4a993cc44d487d416e3d954eea11 ]
    
    If cppc_get_transition_latency() returns CPUFREQ_ETERNAL to indicate a
    failure to retrieve the transition latency value from the platform
    firmware, the CPPC cpufreq driver will use that value (converted to
    microseconds) as the policy transition delay, but it is way too large
    for any practical use.
    
    Address this by making the driver use the cpufreq's default
    transition latency value (in microseconds) as the transition delay
    if CPUFREQ_ETERNAL is returned by cppc_get_transition_latency().
    
    Fixes: d4f3388afd48 ("cpufreq / CPPC: Set platform specific transition_delay_us")
    Cc: 5.19+ <[email protected]> # 5.19
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Reviewed-by: Mario Limonciello (AMD) <[email protected]>
    Reviewed-by: Jie Zhan <[email protected]>
    Acked-by: Viresh Kumar <[email protected]>
    Reviewed-by: Qais Yousef <[email protected]>
    [ added CPUFREQ_DEFAULT_TRANSITION_LATENCY_NS definition to include/linux/cpufreq.h ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
crypto: rockchip - Fix dma_unmap_sg() nents value [+ + +]
Author: Thomas Fourier <[email protected]>
Date:   Sat Oct 18 15:42:37 2025 -0400

    crypto: rockchip - Fix dma_unmap_sg() nents value
    
    [ Upstream commit 21140e5caf019e4a24e1ceabcaaa16bd693b393f ]
    
    The dma_unmap_sg() functions should be called with the same nents as the
    dma_map_sg(), not the value the map function returned.
    
    Fixes: 57d67c6e8219 ("crypto: rockchip - rework by using crypto_engine")
    Cc: <[email protected]>
    Signed-off-by: Thomas Fourier <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    [ removed unused rctx variable declaration since device pointer already came from tctx->dev->dev instead of rctx->dev ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dax: skip read lock assertion for read-only filesystems [+ + +]
Author: Yuezhang Mo <[email protected]>
Date:   Tue Sep 30 13:42:57 2025 +0800

    dax: skip read lock assertion for read-only filesystems
    
    [ Upstream commit 154d1e7ad9e5ce4b2aaefd3862b3dba545ad978d ]
    
    The commit 168316db3583("dax: assert that i_rwsem is held
    exclusive for writes") added lock assertions to ensure proper
    locking in DAX operations. However, these assertions trigger
    false-positive lockdep warnings since read lock is unnecessary
    on read-only filesystems(e.g., erofs).
    
    This patch skips the read lock assertion for read-only filesystems,
    eliminating the spurious warnings while maintaining the integrity
    checks for writable filesystems.
    
    Fixes: 168316db3583 ("dax: assert that i_rwsem is held exclusive for writes")
    Signed-off-by: Yuezhang Mo <[email protected]>
    Reviewed-by: Friendy Su <[email protected]>
    Reviewed-by: Daniel Palmer <[email protected]>
    Reviewed-by: Gao Xiang <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
devcoredump: Fix circular locking dependency with devcd->mutex. [+ + +]
Author: Maarten Lankhorst <[email protected]>
Date:   Sun Oct 26 21:15:01 2025 -0400

    devcoredump: Fix circular locking dependency with devcd->mutex.
    
    [ Upstream commit a91c8096590bd7801a26454789f2992094fe36da ]
    
    The original code causes a circular locking dependency found by lockdep.
    
    ======================================================
    WARNING: possible circular locking dependency detected
    6.16.0-rc6-lgci-xe-xe-pw-151626v3+ #1 Tainted: G S   U
    ------------------------------------------------------
    xe_fault_inject/5091 is trying to acquire lock:
    ffff888156815688 ((work_completion)(&(&devcd->del_wk)->work)){+.+.}-{0:0}, at: __flush_work+0x25d/0x660
    
    but task is already holding lock:
    
    ffff888156815620 (&devcd->mutex){+.+.}-{3:3}, at: dev_coredump_put+0x3f/0xa0
    which lock already depends on the new lock.
    the existing dependency chain (in reverse order) is:
    -> #2 (&devcd->mutex){+.+.}-{3:3}:
           mutex_lock_nested+0x4e/0xc0
           devcd_data_write+0x27/0x90
           sysfs_kf_bin_write+0x80/0xf0
           kernfs_fop_write_iter+0x169/0x220
           vfs_write+0x293/0x560
           ksys_write+0x72/0xf0
           __x64_sys_write+0x19/0x30
           x64_sys_call+0x2bf/0x2660
           do_syscall_64+0x93/0xb60
           entry_SYSCALL_64_after_hwframe+0x76/0x7e
    -> #1 (kn->active#236){++++}-{0:0}:
           kernfs_drain+0x1e2/0x200
           __kernfs_remove+0xae/0x400
           kernfs_remove_by_name_ns+0x5d/0xc0
           remove_files+0x54/0x70
           sysfs_remove_group+0x3d/0xa0
           sysfs_remove_groups+0x2e/0x60
           device_remove_attrs+0xc7/0x100
           device_del+0x15d/0x3b0
           devcd_del+0x19/0x30
           process_one_work+0x22b/0x6f0
           worker_thread+0x1e8/0x3d0
           kthread+0x11c/0x250
           ret_from_fork+0x26c/0x2e0
           ret_from_fork_asm+0x1a/0x30
    -> #0 ((work_completion)(&(&devcd->del_wk)->work)){+.+.}-{0:0}:
           __lock_acquire+0x1661/0x2860
           lock_acquire+0xc4/0x2f0
           __flush_work+0x27a/0x660
           flush_delayed_work+0x5d/0xa0
           dev_coredump_put+0x63/0xa0
           xe_driver_devcoredump_fini+0x12/0x20 [xe]
           devm_action_release+0x12/0x30
           release_nodes+0x3a/0x120
           devres_release_all+0x8a/0xd0
           device_unbind_cleanup+0x12/0x80
           device_release_driver_internal+0x23a/0x280
           device_driver_detach+0x14/0x20
           unbind_store+0xaf/0xc0
           drv_attr_store+0x21/0x50
           sysfs_kf_write+0x4a/0x80
           kernfs_fop_write_iter+0x169/0x220
           vfs_write+0x293/0x560
           ksys_write+0x72/0xf0
           __x64_sys_write+0x19/0x30
           x64_sys_call+0x2bf/0x2660
           do_syscall_64+0x93/0xb60
           entry_SYSCALL_64_after_hwframe+0x76/0x7e
    other info that might help us debug this:
    Chain exists of: (work_completion)(&(&devcd->del_wk)->work) --> kn->active#236 --> &devcd->mutex
     Possible unsafe locking scenario:
           CPU0                    CPU1
           ----                    ----
      lock(&devcd->mutex);
                                   lock(kn->active#236);
                                   lock(&devcd->mutex);
      lock((work_completion)(&(&devcd->del_wk)->work));
     *** DEADLOCK ***
    5 locks held by xe_fault_inject/5091:
     #0: ffff8881129f9488 (sb_writers#5){.+.+}-{0:0}, at: ksys_write+0x72/0xf0
     #1: ffff88810c755078 (&of->mutex#2){+.+.}-{3:3}, at: kernfs_fop_write_iter+0x123/0x220
     #2: ffff8881054811a0 (&dev->mutex){....}-{3:3}, at: device_release_driver_internal+0x55/0x280
     #3: ffff888156815620 (&devcd->mutex){+.+.}-{3:3}, at: dev_coredump_put+0x3f/0xa0
     #4: ffffffff8359e020 (rcu_read_lock){....}-{1:2}, at: __flush_work+0x72/0x660
    stack backtrace:
    CPU: 14 UID: 0 PID: 5091 Comm: xe_fault_inject Tainted: G S   U              6.16.0-rc6-lgci-xe-xe-pw-151626v3+ #1 PREEMPT_{RT,(lazy)}
    Tainted: [S]=CPU_OUT_OF_SPEC, [U]=USER
    Hardware name: Micro-Star International Co., Ltd. MS-7D25/PRO Z690-A DDR4(MS-7D25), BIOS 1.10 12/13/2021
    Call Trace:
     <TASK>
     dump_stack_lvl+0x91/0xf0
     dump_stack+0x10/0x20
     print_circular_bug+0x285/0x360
     check_noncircular+0x135/0x150
     ? register_lock_class+0x48/0x4a0
     __lock_acquire+0x1661/0x2860
     lock_acquire+0xc4/0x2f0
     ? __flush_work+0x25d/0x660
     ? mark_held_locks+0x46/0x90
     ? __flush_work+0x25d/0x660
     __flush_work+0x27a/0x660
     ? __flush_work+0x25d/0x660
     ? trace_hardirqs_on+0x1e/0xd0
     ? __pfx_wq_barrier_func+0x10/0x10
     flush_delayed_work+0x5d/0xa0
     dev_coredump_put+0x63/0xa0
     xe_driver_devcoredump_fini+0x12/0x20 [xe]
     devm_action_release+0x12/0x30
     release_nodes+0x3a/0x120
     devres_release_all+0x8a/0xd0
     device_unbind_cleanup+0x12/0x80
     device_release_driver_internal+0x23a/0x280
     ? bus_find_device+0xa8/0xe0
     device_driver_detach+0x14/0x20
     unbind_store+0xaf/0xc0
     drv_attr_store+0x21/0x50
     sysfs_kf_write+0x4a/0x80
     kernfs_fop_write_iter+0x169/0x220
     vfs_write+0x293/0x560
     ksys_write+0x72/0xf0
     __x64_sys_write+0x19/0x30
     x64_sys_call+0x2bf/0x2660
     do_syscall_64+0x93/0xb60
     ? __f_unlock_pos+0x15/0x20
     ? __x64_sys_getdents64+0x9b/0x130
     ? __pfx_filldir64+0x10/0x10
     ? do_syscall_64+0x1a2/0xb60
     ? clear_bhb_loop+0x30/0x80
     ? clear_bhb_loop+0x30/0x80
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    RIP: 0033:0x76e292edd574
    Code: c7 00 16 00 00 00 b8 ff ff ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 f3 0f 1e fa 80 3d d5 ea 0e 00 00 74 13 b8 01 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 54 c3 0f 1f 00 55 48 89 e5 48 83 ec 20 48 89
    RSP: 002b:00007fffe247a828 EFLAGS: 00000202 ORIG_RAX: 0000000000000001
    RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 000076e292edd574
    RDX: 000000000000000c RSI: 00006267f6306063 RDI: 000000000000000b
    RBP: 000000000000000c R08: 000076e292fc4b20 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000202 R12: 00006267f6306063
    R13: 000000000000000b R14: 00006267e6859c00 R15: 000076e29322a000
     </TASK>
    xe 0000:03:00.0: [drm] Xe device coredump has been deleted.
    
    Fixes: 01daccf74832 ("devcoredump : Serialize devcd_del work")
    Cc: Mukesh Ojha <[email protected]>
    Cc: Greg Kroah-Hartman <[email protected]>
    Cc: Johannes Berg <[email protected]>
    Cc: Rafael J. Wysocki <[email protected]>
    Cc: Danilo Krummrich <[email protected]>
    Cc: [email protected]
    Cc: [email protected] # v6.1+
    Signed-off-by: Maarten Lankhorst <[email protected]>
    Cc: Matthew Brost <[email protected]>
    Acked-by: Mukesh Ojha <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    [ replaced disable_delayed_work_sync() with cancel_delayed_work_sync() ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dlm: check for defined force value in dlm_lockspace_release [+ + +]
Author: Alexander Aring <[email protected]>
Date:   Wed Jul 23 11:21:52 2025 -0400

    dlm: check for defined force value in dlm_lockspace_release
    
    [ Upstream commit 6af515c9f3ccec3eb8a262ca86bef2c499d07951 ]
    
    Force values over 3 are undefined, so don't treat them as 3.
    
    Signed-off-by: Alexander Aring <[email protected]>
    Signed-off-by: David Teigland <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
doc: fix seg6_flowlabel path [+ + +]
Author: Nicolas Dichtel <[email protected]>
Date:   Fri Oct 10 16:18:59 2025 +0200

    doc: fix seg6_flowlabel path
    
    [ Upstream commit 0b4b77eff5f8cd9be062783a1c1e198d46d0a753 ]
    
    This sysctl is not per interface; it's global per netns.
    
    Fixes: 292ecd9f5a94 ("doc: move seg6_flowlabel to seg6-sysctl.rst")
    Reported-by: Philippe Guibert <[email protected]>
    Signed-off-by: Nicolas Dichtel <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dpaa2-eth: fix the pointer passed to PTR_ALIGN on Tx path [+ + +]
Author: Ioana Ciornei <[email protected]>
Date:   Thu Oct 16 16:58:07 2025 +0300

    dpaa2-eth: fix the pointer passed to PTR_ALIGN on Tx path
    
    [ Upstream commit 902e81e679d86846a2404630d349709ad9372d0d ]
    
    The blamed commit increased the needed headroom to account for
    alignment. This means that the size required to always align a Tx buffer
    was added inside the dpaa2_eth_needed_headroom() function. By doing
    that, a manual adjustment of the pointer passed to PTR_ALIGN() was no
    longer correct since the 'buffer_start' variable was already pointing
    to the start of the skb's memory.
    
    The behavior of the dpaa2-eth driver without this patch was to drop
    frames on Tx even when the headroom was matching the 128 bytes
    necessary. Fix this by removing the manual adjust of 'buffer_start' from
    the PTR_MODE call.
    
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Fixes: f422abe3f23d ("dpaa2-eth: increase the needed headroom to account for alignment")
    Signed-off-by: Ioana Ciornei <[email protected]>
    Tested-by: Mathew McBride <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amd/powerplay: Fix CIK shutdown temperature [+ + +]
Author: Timur Kristóf <[email protected]>
Date:   Mon Oct 13 08:06:42 2025 +0200

    drm/amd/powerplay: Fix CIK shutdown temperature
    
    [ Upstream commit 6917112af2ba36c5f19075eb9f2933ffd07e55bf ]
    
    Remove extra multiplication.
    
    CIK GPUs such as Hawaii appear to use PP_TABLE_V0 in which case
    the shutdown temperature is hardcoded in smu7_init_dpm_defaults
    and is already multiplied by 1000. The value was mistakenly
    multiplied another time by smu7_get_thermal_temperature_range.
    
    Fixes: 4ba082572a42 ("drm/amd/powerplay: export the thermal ranges of VI asics (V2)")
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/1676
    Reviewed-by: Alex Deucher <[email protected]>
    Signed-off-by: Timur Kristóf <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amdgpu: use atomic functions with memory barriers for vm fault info [+ + +]
Author: Gui-Dong Han <[email protected]>
Date:   Tue Oct 21 09:13:39 2025 -0400

    drm/amdgpu: use atomic functions with memory barriers for vm fault info
    
    [ Upstream commit 6df8e84aa6b5b1812cc2cacd6b3f5ccbb18cda2b ]
    
    The atomic variable vm_fault_info_updated is used to synchronize access to
    adev->gmc.vm_fault_info between the interrupt handler and
    get_vm_fault_info().
    
    The default atomic functions like atomic_set() and atomic_read() do not
    provide memory barriers. This allows for CPU instruction reordering,
    meaning the memory accesses to vm_fault_info and the vm_fault_info_updated
    flag are not guaranteed to occur in the intended order. This creates a
    race condition that can lead to inconsistent or stale data being used.
    
    The previous implementation, which used an explicit mb(), was incomplete
    and inefficient. It failed to account for all potential CPU reorderings,
    such as the access of vm_fault_info being reordered before the atomic_read
    of the flag. This approach is also more verbose and less performant than
    using the proper atomic functions with acquire/release semantics.
    
    Fix this by switching to atomic_set_release() and atomic_read_acquire().
    These functions provide the necessary acquire and release semantics,
    which act as memory barriers to ensure the correct order of operations.
    It is also more efficient and idiomatic than using explicit full memory
    barriers.
    
    Fixes: b97dfa27ef3a ("drm/amdgpu: save vm fault information for amdkfd")
    Cc: [email protected]
    Signed-off-by: Gui-Dong Han <[email protected]>
    Signed-off-by: Felix Kuehling <[email protected]>
    Reviewed-by: Felix Kuehling <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    [ kept kgd_dev parameter and adev cast in amdgpu_amdkfd_gpuvm_get_vm_fault_info ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/exynos: exynos7_drm_decon: fix uninitialized crtc reference in functions [+ + +]
Author: Kaustabh Chakraborty <[email protected]>
Date:   Fri Oct 17 22:34:55 2025 -0400

    drm/exynos: exynos7_drm_decon: fix uninitialized crtc reference in functions
    
    [ Upstream commit d31bbacf783daf1e71fbe5c68df93550c446bf44 ]
    
    Modify the functions to accept a pointer to struct decon_context
    instead.
    
    Signed-off-by: Kaustabh Chakraborty <[email protected]>
    Signed-off-by: Inki Dae <[email protected]>
    Stable-dep-of: e1361a4f1be9 ("drm/exynos: exynos7_drm_decon: remove ctx->suspended")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/exynos: exynos7_drm_decon: properly clear channels during bind [+ + +]
Author: Kaustabh Chakraborty <[email protected]>
Date:   Fri Oct 17 22:34:56 2025 -0400

    drm/exynos: exynos7_drm_decon: properly clear channels during bind
    
    [ Upstream commit 5f1a453974204175f20b3788824a0fe23cc36f79 ]
    
    The DECON channels are not cleared properly as the windows aren't
    shadow protected. When accompanied with an IOMMU, it pagefaults, and
    the kernel panics.
    
    Implement shadow protect/unprotect, along with a standalone update,
    for channel clearing to properly take effect.
    
    Signed-off-by: Kaustabh Chakraborty <[email protected]>
    Signed-off-by: Inki Dae <[email protected]>
    Stable-dep-of: e1361a4f1be9 ("drm/exynos: exynos7_drm_decon: remove ctx->suspended")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/exynos: exynos7_drm_decon: remove ctx->suspended [+ + +]
Author: Kaustabh Chakraborty <[email protected]>
Date:   Fri Oct 17 22:34:57 2025 -0400

    drm/exynos: exynos7_drm_decon: remove ctx->suspended
    
    [ Upstream commit e1361a4f1be9cb69a662c6d7b5ce218007d6e82b ]
    
    Condition guards are found to be redundant, as the call flow is properly
    managed now, as also observed in the Exynos5433 DECON driver. Since
    state checking is no longer necessary, remove it.
    
    This also fixes an issue which prevented decon_commit() from
    decon_atomic_enable() due to an incorrect state change setting.
    
    Fixes: 96976c3d9aff ("drm/exynos: Add DECON driver")
    Cc: [email protected]
    Suggested-by: Inki Dae <[email protected]>
    Signed-off-by: Kaustabh Chakraborty <[email protected]>
    Signed-off-by: Inki Dae <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
exec: Fix incorrect type for ret [+ + +]
Author: Xichao Zhao <[email protected]>
Date:   Mon Aug 25 15:36:09 2025 +0800

    exec: Fix incorrect type for ret
    
    [ Upstream commit 5e088248375d171b80c643051e77ade6b97bc386 ]
    
    In the setup_arg_pages(), ret is declared as an unsigned long.
    The ret might take a negative value. Therefore, its type should
    be changed to int.
    
    Signed-off-by: Xichao Zhao <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Kees Cook <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ext4: detect invalid INLINE_DATA + EXTENTS flag combination [+ + +]
Author: Deepanshu Kartikey <[email protected]>
Date:   Tue Sep 30 16:58:10 2025 +0530

    ext4: detect invalid INLINE_DATA + EXTENTS flag combination
    
    commit 1d3ad183943b38eec2acf72a0ae98e635dc8456b upstream.
    
    syzbot reported a BUG_ON in ext4_es_cache_extent() when opening a verity
    file on a corrupted ext4 filesystem mounted without a journal.
    
    The issue is that the filesystem has an inode with both the INLINE_DATA
    and EXTENTS flags set:
    
        EXT4-fs error (device loop0): ext4_cache_extents:545: inode #15:
        comm syz.0.17: corrupted extent tree: lblk 0 < prev 66
    
    Investigation revealed that the inode has both flags set:
        DEBUG: inode 15 - flag=1, i_inline_off=164, has_inline=1, extents_flag=1
    
    This is an invalid combination since an inode should have either:
    - INLINE_DATA: data stored directly in the inode
    - EXTENTS: data stored in extent-mapped blocks
    
    Having both flags causes ext4_has_inline_data() to return true, skipping
    extent tree validation in __ext4_iget(). The unvalidated out-of-order
    extents then trigger a BUG_ON in ext4_es_cache_extent() due to integer
    underflow when calculating hole sizes.
    
    Fix this by detecting this invalid flag combination early in ext4_iget()
    and rejecting the corrupted inode.
    
    Cc: [email protected]
    Reported-and-tested-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=038b7bf43423e132b308
    Suggested-by: Zhang Yi <[email protected]>
    Signed-off-by: Deepanshu Kartikey <[email protected]>
    Reviewed-by: Zhang Yi <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
f2fs: fix wrong block mapping for multi-devices [+ + +]
Author: Jaegeuk Kim <[email protected]>
Date:   Mon Oct 20 17:52:17 2025 -0400

    f2fs: fix wrong block mapping for multi-devices
    
    [ Upstream commit 9d5c4f5c7a2c7677e1b3942772122b032c265aae ]
    
    Assuming the disk layout as below,
    
    disk0: 0            --- 0x00035abfff
    disk1: 0x00035ac000 --- 0x00037abfff
    disk2: 0x00037ac000 --- 0x00037ebfff
    
    and we want to read data from offset=13568 having len=128 across the block
    devices, we can illustrate the block addresses like below.
    
    0 .. 0x00037ac000 ------------------- 0x00037ebfff, 0x00037ec000 -------
              |          ^            ^                                ^
              |   fofs   0            13568                            13568+128
              |       ------------------------------------------------------
              |   LBA    0x37e8aa9    0x37ebfa9                        0x37ec029
              --- map    0x3caa9      0x3ffa9
    
    In this example, we should give the relative map of the target block device
    ranging from 0x3caa9 to 0x3ffa9 where the length should be calculated by
    0x37ebfff + 1 - 0x37ebfa9.
    
    In the below equation, however, map->m_pblk was supposed to be the original
    address instead of the one from the target block address.
    
     - map->m_len = min(map->m_len, dev->end_blk + 1 - map->m_pblk);
    
    Cc: [email protected]
    Fixes: 71f2c8206202 ("f2fs: multidevice: support direct IO")
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    [ applied fix to f2fs_map_blocks() instead of f2fs_map_blocks_cached() ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fuse: allocate ff->release_args only if release is needed [+ + +]
Author: Amir Goldstein <[email protected]>
Date:   Mon Oct 20 12:02:55 2025 -0400

    fuse: allocate ff->release_args only if release is needed
    
    [ Upstream commit e26ee4efbc79610b20e7abe9d96c87f33dacc1ff ]
    
    This removed the need to pass isdir argument to fuse_put_file().
    
    Signed-off-by: Amir Goldstein <[email protected]>
    Signed-off-by: Miklos Szeredi <[email protected]>
    Stable-dep-of: 26e5c67deb2e ("fuse: fix livelock in synchronous file put from fuseblk workers")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

fuse: fix livelock in synchronous file put from fuseblk workers [+ + +]
Author: Darrick J. Wong <[email protected]>
Date:   Mon Oct 20 12:02:56 2025 -0400

    fuse: fix livelock in synchronous file put from fuseblk workers
    
    [ Upstream commit 26e5c67deb2e1f42a951f022fdf5b9f7eb747b01 ]
    
    I observed a hang when running generic/323 against a fuseblk server.
    This test opens a file, initiates a lot of AIO writes to that file
    descriptor, and closes the file descriptor before the writes complete.
    Unsurprisingly, the AIO exerciser threads are mostly stuck waiting for
    responses from the fuseblk server:
    
    # cat /proc/372265/task/372313/stack
    [<0>] request_wait_answer+0x1fe/0x2a0 [fuse]
    [<0>] __fuse_simple_request+0xd3/0x2b0 [fuse]
    [<0>] fuse_do_getattr+0xfc/0x1f0 [fuse]
    [<0>] fuse_file_read_iter+0xbe/0x1c0 [fuse]
    [<0>] aio_read+0x130/0x1e0
    [<0>] io_submit_one+0x542/0x860
    [<0>] __x64_sys_io_submit+0x98/0x1a0
    [<0>] do_syscall_64+0x37/0xf0
    [<0>] entry_SYSCALL_64_after_hwframe+0x4b/0x53
    
    But the /weird/ part is that the fuseblk server threads are waiting for
    responses from itself:
    
    # cat /proc/372210/task/372232/stack
    [<0>] request_wait_answer+0x1fe/0x2a0 [fuse]
    [<0>] __fuse_simple_request+0xd3/0x2b0 [fuse]
    [<0>] fuse_file_put+0x9a/0xd0 [fuse]
    [<0>] fuse_release+0x36/0x50 [fuse]
    [<0>] __fput+0xec/0x2b0
    [<0>] task_work_run+0x55/0x90
    [<0>] syscall_exit_to_user_mode+0xe9/0x100
    [<0>] do_syscall_64+0x43/0xf0
    [<0>] entry_SYSCALL_64_after_hwframe+0x4b/0x53
    
    The fuseblk server is fuse2fs so there's nothing all that exciting in
    the server itself.  So why is the fuse server calling fuse_file_put?
    The commit message for the fstest sheds some light on that:
    
    "By closing the file descriptor before calling io_destroy, you pretty
    much guarantee that the last put on the ioctx will be done in interrupt
    context (during I/O completion).
    
    Aha.  AIO fgets a new struct file from the fd when it queues the ioctx.
    The completion of the FUSE_WRITE command from userspace causes the fuse
    server to call the AIO completion function.  The completion puts the
    struct file, queuing a delayed fput to the fuse server task.  When the
    fuse server task returns to userspace, it has to run the delayed fput,
    which in the case of a fuseblk server, it does synchronously.
    
    Sending the FUSE_RELEASE command sychronously from fuse server threads
    is a bad idea because a client program can initiate enough simultaneous
    AIOs such that all the fuse server threads end up in delayed_fput, and
    now there aren't any threads left to handle the queued fuse commands.
    
    Fix this by only using asynchronous fputs when closing files, and leave
    a comment explaining why.
    
    Cc: [email protected] # v2.6.38
    Fixes: 5a18ec176c934c ("fuse: fix hang of single threaded fuseblk filesystem")
    Signed-off-by: Darrick J. Wong <[email protected]>
    Signed-off-by: Miklos Szeredi <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
hfs: clear offset and space out of valid records in b-tree node [+ + +]
Author: Viacheslav Dubeyko <[email protected]>
Date:   Fri Aug 15 12:49:19 2025 -0700

    hfs: clear offset and space out of valid records in b-tree node
    
    [ Upstream commit 18b07c44f245beb03588b00b212b38fce9af7cc9 ]
    
    Currently, hfs_brec_remove() executes moving records
    towards the location of deleted record and it updates
    offsets of moved records. However, the hfs_brec_remove()
    logic ignores the "mess" of b-tree node's free space and
    it doesn't touch the offsets out of records number.
    Potentially, it could confuse fsck or driver logic or
    to be a reason of potential corruption cases.
    
    This patch reworks the logic of hfs_brec_remove()
    by means of clearing freed space of b-tree node
    after the records moving. And it clear the last
    offset that keeping old location of free space
    because now the offset before this one is keeping
    the actual offset to the free space after the record
    deletion.
    
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    cc: John Paul Adrian Glaubitz <[email protected]>
    cc: Yangtao Li <[email protected]>
    cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

hfs: fix KMSAN uninit-value issue in hfs_find_set_zero_bits() [+ + +]
Author: Viacheslav Dubeyko <[email protected]>
Date:   Wed Aug 20 16:06:38 2025 -0700

    hfs: fix KMSAN uninit-value issue in hfs_find_set_zero_bits()
    
    [ Upstream commit 2048ec5b98dbdfe0b929d2e42dc7a54c389c53dd ]
    
    The syzbot reported issue in hfs_find_set_zero_bits():
    
    =====================================================
    BUG: KMSAN: uninit-value in hfs_find_set_zero_bits+0x74d/0xb60 fs/hfs/bitmap.c:45
     hfs_find_set_zero_bits+0x74d/0xb60 fs/hfs/bitmap.c:45
     hfs_vbm_search_free+0x13c/0x5b0 fs/hfs/bitmap.c:151
     hfs_extend_file+0x6a5/0x1b00 fs/hfs/extent.c:408
     hfs_get_block+0x435/0x1150 fs/hfs/extent.c:353
     __block_write_begin_int+0xa76/0x3030 fs/buffer.c:2151
     block_write_begin fs/buffer.c:2262 [inline]
     cont_write_begin+0x10e1/0x1bc0 fs/buffer.c:2601
     hfs_write_begin+0x85/0x130 fs/hfs/inode.c:52
     cont_expand_zero fs/buffer.c:2528 [inline]
     cont_write_begin+0x35a/0x1bc0 fs/buffer.c:2591
     hfs_write_begin+0x85/0x130 fs/hfs/inode.c:52
     hfs_file_truncate+0x1d6/0xe60 fs/hfs/extent.c:494
     hfs_inode_setattr+0x964/0xaa0 fs/hfs/inode.c:654
     notify_change+0x1993/0x1aa0 fs/attr.c:552
     do_truncate+0x28f/0x310 fs/open.c:68
     do_ftruncate+0x698/0x730 fs/open.c:195
     do_sys_ftruncate fs/open.c:210 [inline]
     __do_sys_ftruncate fs/open.c:215 [inline]
     __se_sys_ftruncate fs/open.c:213 [inline]
     __x64_sys_ftruncate+0x11b/0x250 fs/open.c:213
     x64_sys_call+0xfe3/0x3db0 arch/x86/include/generated/asm/syscalls_64.h:78
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xd9/0x210 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Uninit was created at:
     slab_post_alloc_hook mm/slub.c:4154 [inline]
     slab_alloc_node mm/slub.c:4197 [inline]
     __kmalloc_cache_noprof+0x7f7/0xed0 mm/slub.c:4354
     kmalloc_noprof include/linux/slab.h:905 [inline]
     hfs_mdb_get+0x1cc8/0x2a90 fs/hfs/mdb.c:175
     hfs_fill_super+0x3d0/0xb80 fs/hfs/super.c:337
     get_tree_bdev_flags+0x6e3/0x920 fs/super.c:1681
     get_tree_bdev+0x38/0x50 fs/super.c:1704
     hfs_get_tree+0x35/0x40 fs/hfs/super.c:388
     vfs_get_tree+0xb0/0x5c0 fs/super.c:1804
     do_new_mount+0x738/0x1610 fs/namespace.c:3902
     path_mount+0x6db/0x1e90 fs/namespace.c:4226
     do_mount fs/namespace.c:4239 [inline]
     __do_sys_mount fs/namespace.c:4450 [inline]
     __se_sys_mount+0x6eb/0x7d0 fs/namespace.c:4427
     __x64_sys_mount+0xe4/0x150 fs/namespace.c:4427
     x64_sys_call+0xfa7/0x3db0 arch/x86/include/generated/asm/syscalls_64.h:166
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xd9/0x210 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    CPU: 1 UID: 0 PID: 12609 Comm: syz.1.2692 Not tainted 6.16.0-syzkaller #0 PREEMPT(none)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/12/2025
    =====================================================
    
    The HFS_SB(sb)->bitmap buffer is allocated in hfs_mdb_get():
    
    HFS_SB(sb)->bitmap = kmalloc(8192, GFP_KERNEL);
    
    Finally, it can trigger the reported issue because kmalloc()
    doesn't clear the allocated memory. If allocated memory contains
    only zeros, then everything will work pretty fine.
    But if the allocated memory contains the "garbage", then
    it can affect the bitmap operations and it triggers
    the reported issue.
    
    This patch simply exchanges the kmalloc() on kzalloc()
    with the goal to guarantee the correctness of bitmap operations.
    Because, newly created allocation bitmap should have all
    available blocks free. Potentially, initialization bitmap's read
    operation could not fill the whole allocated memory and
    "garbage" in the not initialized memory will be the reason of
    volume coruptions and file system driver bugs.
    
    Reported-by: syzbot <[email protected]>
    Closes: https://syzkaller.appspot.com/bug?extid=773fa9d79b29bd8b6831
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    cc: John Paul Adrian Glaubitz <[email protected]>
    cc: Yangtao Li <[email protected]>
    cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

hfs: make proper initalization of struct hfs_find_data [+ + +]
Author: Viacheslav Dubeyko <[email protected]>
Date:   Mon Aug 18 15:52:52 2025 -0700

    hfs: make proper initalization of struct hfs_find_data
    
    [ Upstream commit c62663a986acee7c4485c1fa9de5fc40194b6290 ]
    
    Potenatially, __hfs_ext_read_extent() could operate by
    not initialized values of fd->key after hfs_brec_find() call:
    
    static inline int __hfs_ext_read_extent(struct hfs_find_data *fd, struct hfs_extent *extent,
                                            u32 cnid, u32 block, u8 type)
    {
            int res;
    
            hfs_ext_build_key(fd->search_key, cnid, block, type);
            fd->key->ext.FNum = 0;
            res = hfs_brec_find(fd);
            if (res && res != -ENOENT)
                    return res;
            if (fd->key->ext.FNum != fd->search_key->ext.FNum ||
                fd->key->ext.FkType != fd->search_key->ext.FkType)
                    return -ENOENT;
            if (fd->entrylength != sizeof(hfs_extent_rec))
                    return -EIO;
            hfs_bnode_read(fd->bnode, extent, fd->entryoffset, sizeof(hfs_extent_rec));
            return 0;
    }
    
    This patch changes kmalloc() on kzalloc() in hfs_find_init()
    and intializes fd->record, fd->keyoffset, fd->keylength,
    fd->entryoffset, fd->entrylength for the case if hfs_brec_find()
    has been found nothing in the b-tree node.
    
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    cc: John Paul Adrian Glaubitz <[email protected]>
    cc: Yangtao Li <[email protected]>
    cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

hfs: validate record offset in hfsplus_bmap_alloc [+ + +]
Author: Yang Chenzhi <[email protected]>
Date:   Mon Aug 18 22:17:34 2025 +0800

    hfs: validate record offset in hfsplus_bmap_alloc
    
    [ Upstream commit 738d5a51864ed8d7a68600b8c0c63fe6fe5c4f20 ]
    
    hfsplus_bmap_alloc can trigger a crash if a
    record offset or length is larger than node_size
    
    [   15.264282] BUG: KASAN: slab-out-of-bounds in hfsplus_bmap_alloc+0x887/0x8b0
    [   15.265192] Read of size 8 at addr ffff8881085ca188 by task test/183
    [   15.265949]
    [   15.266163] CPU: 0 UID: 0 PID: 183 Comm: test Not tainted 6.17.0-rc2-gc17b750b3ad9 #14 PREEMPT(voluntary)
    [   15.266165] Hardware name: QEMU Ubuntu 24.04 PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    [   15.266167] Call Trace:
    [   15.266168]  <TASK>
    [   15.266169]  dump_stack_lvl+0x53/0x70
    [   15.266173]  print_report+0xd0/0x660
    [   15.266181]  kasan_report+0xce/0x100
    [   15.266185]  hfsplus_bmap_alloc+0x887/0x8b0
    [   15.266208]  hfs_btree_inc_height.isra.0+0xd5/0x7c0
    [   15.266217]  hfsplus_brec_insert+0x870/0xb00
    [   15.266222]  __hfsplus_ext_write_extent+0x428/0x570
    [   15.266225]  __hfsplus_ext_cache_extent+0x5e/0x910
    [   15.266227]  hfsplus_ext_read_extent+0x1b2/0x200
    [   15.266233]  hfsplus_file_extend+0x5a7/0x1000
    [   15.266237]  hfsplus_get_block+0x12b/0x8c0
    [   15.266238]  __block_write_begin_int+0x36b/0x12c0
    [   15.266251]  block_write_begin+0x77/0x110
    [   15.266252]  cont_write_begin+0x428/0x720
    [   15.266259]  hfsplus_write_begin+0x51/0x100
    [   15.266262]  cont_write_begin+0x272/0x720
    [   15.266270]  hfsplus_write_begin+0x51/0x100
    [   15.266274]  generic_perform_write+0x321/0x750
    [   15.266285]  generic_file_write_iter+0xc3/0x310
    [   15.266289]  __kernel_write_iter+0x2fd/0x800
    [   15.266296]  dump_user_range+0x2ea/0x910
    [   15.266301]  elf_core_dump+0x2a94/0x2ed0
    [   15.266320]  vfs_coredump+0x1d85/0x45e0
    [   15.266349]  get_signal+0x12e3/0x1990
    [   15.266357]  arch_do_signal_or_restart+0x89/0x580
    [   15.266362]  irqentry_exit_to_user_mode+0xab/0x110
    [   15.266364]  asm_exc_page_fault+0x26/0x30
    [   15.266366] RIP: 0033:0x41bd35
    [   15.266367] Code: bc d1 f3 0f 7f 27 f3 0f 7f 6f 10 f3 0f 7f 77 20 f3 0f 7f 7f 30 49 83 c0 0f 49 29 d0 48 8d 7c 17 31 e9 9f 0b 00 00 66 0f ef c0 <f3> 0f 6f 0e f3 0f 6f 56 10 66 0f 74 c1 66 0f d7 d0 49 83 f8f
    [   15.266369] RSP: 002b:00007ffc9e62d078 EFLAGS: 00010283
    [   15.266371] RAX: 00007ffc9e62d100 RBX: 0000000000000000 RCX: 0000000000000000
    [   15.266372] RDX: 00000000000000e0 RSI: 0000000000000000 RDI: 00007ffc9e62d100
    [   15.266373] RBP: 0000400000000040 R08: 00000000000000e0 R09: 0000000000000000
    [   15.266374] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    [   15.266375] R13: 0000000000000000 R14: 0000000000000000 R15: 0000400000000000
    [   15.266376]  </TASK>
    
    When calling hfsplus_bmap_alloc to allocate a free node, this function
    first retrieves the bitmap from header node and map node using node->page
    together with the offset and length from hfs_brec_lenoff
    
    ```
    len = hfs_brec_lenoff(node, 2, &off16);
    off = off16;
    
    off += node->page_offset;
    pagep = node->page + (off >> PAGE_SHIFT);
    data = kmap_local_page(*pagep);
    ```
    
    However, if the retrieved offset or length is invalid(i.e. exceeds
    node_size), the code may end up accessing pages outside the allocated
    range for this node.
    
    This patch adds proper validation of both offset and length before use,
    preventing out-of-bounds page access. Move is_bnode_offset_valid and
    check_and_correct_requested_length to hfsplus_fs.h, as they may be
    required by other functions.
    
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Yang Chenzhi <[email protected]>
    Reviewed-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
hfsplus: fix KMSAN uninit-value issue in __hfsplus_ext_cache_extent() [+ + +]
Author: Viacheslav Dubeyko <[email protected]>
Date:   Mon Aug 18 15:52:32 2025 -0700

    hfsplus: fix KMSAN uninit-value issue in __hfsplus_ext_cache_extent()
    
    [ Upstream commit 4840ceadef4290c56cc422f0fc697655f3cbf070 ]
    
    The syzbot reported issue in __hfsplus_ext_cache_extent():
    
    [   70.194323][ T9350] BUG: KMSAN: uninit-value in __hfsplus_ext_cache_extent+0x7d0/0x990
    [   70.195022][ T9350]  __hfsplus_ext_cache_extent+0x7d0/0x990
    [   70.195530][ T9350]  hfsplus_file_extend+0x74f/0x1cf0
    [   70.195998][ T9350]  hfsplus_get_block+0xe16/0x17b0
    [   70.196458][ T9350]  __block_write_begin_int+0x962/0x2ce0
    [   70.196959][ T9350]  cont_write_begin+0x1000/0x1950
    [   70.197416][ T9350]  hfsplus_write_begin+0x85/0x130
    [   70.197873][ T9350]  generic_perform_write+0x3e8/0x1060
    [   70.198374][ T9350]  __generic_file_write_iter+0x215/0x460
    [   70.198892][ T9350]  generic_file_write_iter+0x109/0x5e0
    [   70.199393][ T9350]  vfs_write+0xb0f/0x14e0
    [   70.199771][ T9350]  ksys_write+0x23e/0x490
    [   70.200149][ T9350]  __x64_sys_write+0x97/0xf0
    [   70.200570][ T9350]  x64_sys_call+0x3015/0x3cf0
    [   70.201065][ T9350]  do_syscall_64+0xd9/0x1d0
    [   70.201506][ T9350]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [   70.202054][ T9350]
    [   70.202279][ T9350] Uninit was created at:
    [   70.202693][ T9350]  __kmalloc_noprof+0x621/0xf80
    [   70.203149][ T9350]  hfsplus_find_init+0x8d/0x1d0
    [   70.203602][ T9350]  hfsplus_file_extend+0x6ca/0x1cf0
    [   70.204087][ T9350]  hfsplus_get_block+0xe16/0x17b0
    [   70.204561][ T9350]  __block_write_begin_int+0x962/0x2ce0
    [   70.205074][ T9350]  cont_write_begin+0x1000/0x1950
    [   70.205547][ T9350]  hfsplus_write_begin+0x85/0x130
    [   70.206017][ T9350]  generic_perform_write+0x3e8/0x1060
    [   70.206519][ T9350]  __generic_file_write_iter+0x215/0x460
    [   70.207042][ T9350]  generic_file_write_iter+0x109/0x5e0
    [   70.207552][ T9350]  vfs_write+0xb0f/0x14e0
    [   70.207961][ T9350]  ksys_write+0x23e/0x490
    [   70.208375][ T9350]  __x64_sys_write+0x97/0xf0
    [   70.208810][ T9350]  x64_sys_call+0x3015/0x3cf0
    [   70.209255][ T9350]  do_syscall_64+0xd9/0x1d0
    [   70.209680][ T9350]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [   70.210230][ T9350]
    [   70.210454][ T9350] CPU: 2 UID: 0 PID: 9350 Comm: repro Not tainted 6.12.0-rc5 #5
    [   70.211174][ T9350] Hardware name: QEMU Ubuntu 24.04 PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    [   70.212115][ T9350] =====================================================
    [   70.212734][ T9350] Disabling lock debugging due to kernel taint
    [   70.213284][ T9350] Kernel panic - not syncing: kmsan.panic set ...
    [   70.213858][ T9350] CPU: 2 UID: 0 PID: 9350 Comm: repro Tainted: G    B              6.12.0-rc5 #5
    [   70.214679][ T9350] Tainted: [B]=BAD_PAGE
    [   70.215057][ T9350] Hardware name: QEMU Ubuntu 24.04 PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    [   70.215999][ T9350] Call Trace:
    [   70.216309][ T9350]  <TASK>
    [   70.216585][ T9350]  dump_stack_lvl+0x1fd/0x2b0
    [   70.217025][ T9350]  dump_stack+0x1e/0x30
    [   70.217421][ T9350]  panic+0x502/0xca0
    [   70.217803][ T9350]  ? kmsan_get_metadata+0x13e/0x1c0
    
    [   70.218294][ Message fromT sy9350]  kmsan_report+0x296/slogd@syzkaller 0x2aat Aug 18 22:11:058 ...
     kernel
    :[   70.213284][ T9350] Kernel panic - not syncing: kmsan.panic [   70.220179][ T9350]  ? kmsan_get_metadata+0x13e/0x1c0
    set ...
    [   70.221254][ T9350]  ? __msan_warning+0x96/0x120
    [   70.222066][ T9350]  ? __hfsplus_ext_cache_extent+0x7d0/0x990
    [   70.223023][ T9350]  ? hfsplus_file_extend+0x74f/0x1cf0
    [   70.224120][ T9350]  ? hfsplus_get_block+0xe16/0x17b0
    [   70.224946][ T9350]  ? __block_write_begin_int+0x962/0x2ce0
    [   70.225756][ T9350]  ? cont_write_begin+0x1000/0x1950
    [   70.226337][ T9350]  ? hfsplus_write_begin+0x85/0x130
    [   70.226852][ T9350]  ? generic_perform_write+0x3e8/0x1060
    [   70.227405][ T9350]  ? __generic_file_write_iter+0x215/0x460
    [   70.227979][ T9350]  ? generic_file_write_iter+0x109/0x5e0
    [   70.228540][ T9350]  ? vfs_write+0xb0f/0x14e0
    [   70.228997][ T9350]  ? ksys_write+0x23e/0x490
    [   70.229458][ T9350]  ? __x64_sys_write+0x97/0xf0
    [   70.229939][ T9350]  ? x64_sys_call+0x3015/0x3cf0
    [   70.230432][ T9350]  ? do_syscall_64+0xd9/0x1d0
    [   70.230941][ T9350]  ? entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [   70.231926][ T9350]  ? kmsan_get_metadata+0x13e/0x1c0
    [   70.232738][ T9350]  ? kmsan_internal_set_shadow_origin+0x77/0x110
    [   70.233711][ T9350]  ? kmsan_get_metadata+0x13e/0x1c0
    [   70.234516][ T9350]  ? kmsan_get_shadow_origin_ptr+0x4a/0xb0
    [   70.235398][ T9350]  ? __msan_metadata_ptr_for_load_4+0x24/0x40
    [   70.236323][ T9350]  ? hfsplus_brec_find+0x218/0x9f0
    [   70.237090][ T9350]  ? __pfx_hfs_find_rec_by_key+0x10/0x10
    [   70.237938][ T9350]  ? __msan_instrument_asm_store+0xbf/0xf0
    [   70.238827][ T9350]  ? __msan_metadata_ptr_for_store_4+0x27/0x40
    [   70.239772][ T9350]  ? __hfsplus_ext_write_extent+0x536/0x620
    [   70.240666][ T9350]  ? kmsan_get_metadata+0x13e/0x1c0
    [   70.241175][ T9350]  __msan_warning+0x96/0x120
    [   70.241645][ T9350]  __hfsplus_ext_cache_extent+0x7d0/0x990
    [   70.242223][ T9350]  hfsplus_file_extend+0x74f/0x1cf0
    [   70.242748][ T9350]  hfsplus_get_block+0xe16/0x17b0
    [   70.243255][ T9350]  ? kmsan_internal_set_shadow_origin+0x77/0x110
    [   70.243878][ T9350]  ? kmsan_get_metadata+0x13e/0x1c0
    [   70.244400][ T9350]  ? kmsan_get_shadow_origin_ptr+0x4a/0xb0
    [   70.244967][ T9350]  __block_write_begin_int+0x962/0x2ce0
    [   70.245531][ T9350]  ? __pfx_hfsplus_get_block+0x10/0x10
    [   70.246079][ T9350]  cont_write_begin+0x1000/0x1950
    [   70.246598][ T9350]  hfsplus_write_begin+0x85/0x130
    [   70.247105][ T9350]  ? __pfx_hfsplus_get_block+0x10/0x10
    [   70.247650][ T9350]  ? __pfx_hfsplus_write_begin+0x10/0x10
    [   70.248211][ T9350]  generic_perform_write+0x3e8/0x1060
    [   70.248752][ T9350]  __generic_file_write_iter+0x215/0x460
    [   70.249314][ T9350]  generic_file_write_iter+0x109/0x5e0
    [   70.249856][ T9350]  ? kmsan_internal_set_shadow_origin+0x77/0x110
    [   70.250487][ T9350]  vfs_write+0xb0f/0x14e0
    [   70.250930][ T9350]  ? __pfx_generic_file_write_iter+0x10/0x10
    [   70.251530][ T9350]  ksys_write+0x23e/0x490
    [   70.251974][ T9350]  __x64_sys_write+0x97/0xf0
    [   70.252450][ T9350]  x64_sys_call+0x3015/0x3cf0
    [   70.252924][ T9350]  do_syscall_64+0xd9/0x1d0
    [   70.253384][ T9350]  ? irqentry_exit+0x16/0x60
    [   70.253844][ T9350]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [   70.254430][ T9350] RIP: 0033:0x7f7a92adffc9
    [   70.254873][ T9350] Code: 00 c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 48
    [   70.256674][ T9350] RSP: 002b:00007fff0bca3188 EFLAGS: 00000202 ORIG_RAX: 0000000000000001
    [   70.257485][ T9350] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f7a92adffc9
    [   70.258246][ T9350] RDX: 000000000208e24b RSI: 0000000020000100 RDI: 0000000000000004
    [   70.258998][ T9350] RBP: 00007fff0bca31a0 R08: 00007fff0bca31a0 R09: 00007fff0bca31a0
    [   70.259769][ T9350] R10: 0000000000000000 R11: 0000000000000202 R12: 000055e0d75f8250
    [   70.260520][ T9350] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
    [   70.261286][ T9350]  </TASK>
    [   70.262026][ T9350] Kernel Offset: disabled
    
    (gdb) l *__hfsplus_ext_cache_extent+0x7d0
    0xffffffff8318aef0 is in __hfsplus_ext_cache_extent (fs/hfsplus/extents.c:168).
    163             fd->key->ext.cnid = 0;
    164             res = hfs_brec_find(fd, hfs_find_rec_by_key);
    165             if (res && res != -ENOENT)
    166                     return res;
    167             if (fd->key->ext.cnid != fd->search_key->ext.cnid ||
    168                 fd->key->ext.fork_type != fd->search_key->ext.fork_type)
    169                     return -ENOENT;
    170             if (fd->entrylength != sizeof(hfsplus_extent_rec))
    171                     return -EIO;
    172             hfs_bnode_read(fd->bnode, extent, fd->entryoffset,
    
    The __hfsplus_ext_cache_extent() calls __hfsplus_ext_read_extent():
    
    res = __hfsplus_ext_read_extent(fd, hip->cached_extents, inode->i_ino,
                                    block, HFSPLUS_IS_RSRC(inode) ?
                                            HFSPLUS_TYPE_RSRC :
                                            HFSPLUS_TYPE_DATA);
    
    And if inode->i_ino could be equal to zero or any non-available CNID,
    then hfs_brec_find() could not find the record in the tree. As a result,
    fd->key could be compared with fd->search_key. But hfsplus_find_init()
    uses kmalloc() for fd->key and fd->search_key allocation:
    
    int hfs_find_init(struct hfs_btree *tree, struct hfs_find_data *fd)
    {
    <skipped>
            ptr = kmalloc(tree->max_key_len * 2 + 4, GFP_KERNEL);
            if (!ptr)
                    return -ENOMEM;
            fd->search_key = ptr;
            fd->key = ptr + tree->max_key_len + 2;
    <skipped>
    }
    
    Finally, fd->key is still not initialized if hfs_brec_find()
    has found nothing.
    
    This patch changes kmalloc() on kzalloc() in hfs_find_init()
    and intializes fd->record, fd->keyoffset, fd->keylength,
    fd->entryoffset, fd->entrylength for the case if hfs_brec_find()
    has been found nothing in the b-tree node.
    
    Reported-by: syzbot <[email protected]>
    Closes: https://syzkaller.appspot.com/bug?extid=55ad87f38795d6787521
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    cc: John Paul Adrian Glaubitz <[email protected]>
    cc: Yangtao Li <[email protected]>
    cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

hfsplus: fix KMSAN uninit-value issue in hfsplus_delete_cat() [+ + +]
Author: Viacheslav Dubeyko <[email protected]>
Date:   Mon Aug 25 15:51:04 2025 -0700

    hfsplus: fix KMSAN uninit-value issue in hfsplus_delete_cat()
    
    [ Upstream commit 9b3d15a758910bb98ba8feb4109d99cc67450ee4 ]
    
    The syzbot reported issue in hfsplus_delete_cat():
    
    [   70.682285][ T9333] =====================================================
    [   70.682943][ T9333] BUG: KMSAN: uninit-value in hfsplus_subfolders_dec+0x1d7/0x220
    [   70.683640][ T9333]  hfsplus_subfolders_dec+0x1d7/0x220
    [   70.684141][ T9333]  hfsplus_delete_cat+0x105d/0x12b0
    [   70.684621][ T9333]  hfsplus_rmdir+0x13d/0x310
    [   70.685048][ T9333]  vfs_rmdir+0x5ba/0x810
    [   70.685447][ T9333]  do_rmdir+0x964/0xea0
    [   70.685833][ T9333]  __x64_sys_rmdir+0x71/0xb0
    [   70.686260][ T9333]  x64_sys_call+0xcd8/0x3cf0
    [   70.686695][ T9333]  do_syscall_64+0xd9/0x1d0
    [   70.687119][ T9333]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [   70.687646][ T9333]
    [   70.687856][ T9333] Uninit was stored to memory at:
    [   70.688311][ T9333]  hfsplus_subfolders_inc+0x1c2/0x1d0
    [   70.688779][ T9333]  hfsplus_create_cat+0x148e/0x1800
    [   70.689231][ T9333]  hfsplus_mknod+0x27f/0x600
    [   70.689730][ T9333]  hfsplus_mkdir+0x5a/0x70
    [   70.690146][ T9333]  vfs_mkdir+0x483/0x7a0
    [   70.690545][ T9333]  do_mkdirat+0x3f2/0xd30
    [   70.690944][ T9333]  __x64_sys_mkdir+0x9a/0xf0
    [   70.691380][ T9333]  x64_sys_call+0x2f89/0x3cf0
    [   70.691816][ T9333]  do_syscall_64+0xd9/0x1d0
    [   70.692229][ T9333]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [   70.692773][ T9333]
    [   70.692990][ T9333] Uninit was stored to memory at:
    [   70.693469][ T9333]  hfsplus_subfolders_inc+0x1c2/0x1d0
    [   70.693960][ T9333]  hfsplus_create_cat+0x148e/0x1800
    [   70.694438][ T9333]  hfsplus_fill_super+0x21c1/0x2700
    [   70.694911][ T9333]  mount_bdev+0x37b/0x530
    [   70.695320][ T9333]  hfsplus_mount+0x4d/0x60
    [   70.695729][ T9333]  legacy_get_tree+0x113/0x2c0
    [   70.696167][ T9333]  vfs_get_tree+0xb3/0x5c0
    [   70.696588][ T9333]  do_new_mount+0x73e/0x1630
    [   70.697013][ T9333]  path_mount+0x6e3/0x1eb0
    [   70.697425][ T9333]  __se_sys_mount+0x733/0x830
    [   70.697857][ T9333]  __x64_sys_mount+0xe4/0x150
    [   70.698269][ T9333]  x64_sys_call+0x2691/0x3cf0
    [   70.698704][ T9333]  do_syscall_64+0xd9/0x1d0
    [   70.699117][ T9333]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [   70.699730][ T9333]
    [   70.699946][ T9333] Uninit was created at:
    [   70.700378][ T9333]  __alloc_pages_noprof+0x714/0xe60
    [   70.700843][ T9333]  alloc_pages_mpol_noprof+0x2a2/0x9b0
    [   70.701331][ T9333]  alloc_pages_noprof+0xf8/0x1f0
    [   70.701774][ T9333]  allocate_slab+0x30e/0x1390
    [   70.702194][ T9333]  ___slab_alloc+0x1049/0x33a0
    [   70.702635][ T9333]  kmem_cache_alloc_lru_noprof+0x5ce/0xb20
    [   70.703153][ T9333]  hfsplus_alloc_inode+0x5a/0xd0
    [   70.703598][ T9333]  alloc_inode+0x82/0x490
    [   70.703984][ T9333]  iget_locked+0x22e/0x1320
    [   70.704428][ T9333]  hfsplus_iget+0x5c/0xba0
    [   70.704827][ T9333]  hfsplus_btree_open+0x135/0x1dd0
    [   70.705291][ T9333]  hfsplus_fill_super+0x1132/0x2700
    [   70.705776][ T9333]  mount_bdev+0x37b/0x530
    [   70.706171][ T9333]  hfsplus_mount+0x4d/0x60
    [   70.706579][ T9333]  legacy_get_tree+0x113/0x2c0
    [   70.707019][ T9333]  vfs_get_tree+0xb3/0x5c0
    [   70.707444][ T9333]  do_new_mount+0x73e/0x1630
    [   70.707865][ T9333]  path_mount+0x6e3/0x1eb0
    [   70.708270][ T9333]  __se_sys_mount+0x733/0x830
    [   70.708711][ T9333]  __x64_sys_mount+0xe4/0x150
    [   70.709158][ T9333]  x64_sys_call+0x2691/0x3cf0
    [   70.709630][ T9333]  do_syscall_64+0xd9/0x1d0
    [   70.710053][ T9333]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [   70.710611][ T9333]
    [   70.710842][ T9333] CPU: 3 UID: 0 PID: 9333 Comm: repro Not tainted 6.12.0-rc6-dirty #17
    [   70.711568][ T9333] Hardware name: QEMU Ubuntu 24.04 PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    [   70.712490][ T9333] =====================================================
    [   70.713085][ T9333] Disabling lock debugging due to kernel taint
    [   70.713618][ T9333] Kernel panic - not syncing: kmsan.panic set ...
    [   70.714159][ T9333] CPU: 3 UID: 0 PID: 9333 Comm: repro Tainted: G    B              6.12.0-rc6-dirty #17
    [   70.715007][ T9333] Tainted: [B]=BAD_PAGE
    [   70.715365][ T9333] Hardware name: QEMU Ubuntu 24.04 PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    [   70.716311][ T9333] Call Trace:
    [   70.716621][ T9333]  <TASK>
    [   70.716899][ T9333]  dump_stack_lvl+0x1fd/0x2b0
    [   70.717350][ T9333]  dump_stack+0x1e/0x30
    [   70.717743][ T9333]  panic+0x502/0xca0
    [   70.718116][ T9333]  ? kmsan_get_metadata+0x13e/0x1c0
    [   70.718611][ T9333]  kmsan_report+0x296/0x2a0
    [   70.719038][ T9333]  ? __msan_metadata_ptr_for_load_4+0x24/0x40
    [   70.719859][ T9333]  ? __msan_warning+0x96/0x120
    [   70.720345][ T9333]  ? hfsplus_subfolders_dec+0x1d7/0x220
    [   70.720881][ T9333]  ? hfsplus_delete_cat+0x105d/0x12b0
    [   70.721412][ T9333]  ? hfsplus_rmdir+0x13d/0x310
    [   70.721880][ T9333]  ? vfs_rmdir+0x5ba/0x810
    [   70.722458][ T9333]  ? do_rmdir+0x964/0xea0
    [   70.722883][ T9333]  ? __x64_sys_rmdir+0x71/0xb0
    [   70.723397][ T9333]  ? x64_sys_call+0xcd8/0x3cf0
    [   70.723915][ T9333]  ? do_syscall_64+0xd9/0x1d0
    [   70.724454][ T9333]  ? entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [   70.725110][ T9333]  ? vprintk_emit+0xd1f/0xe60
    [   70.725616][ T9333]  ? vprintk_default+0x3f/0x50
    [   70.726175][ T9333]  ? vprintk+0xce/0xd0
    [   70.726628][ T9333]  ? _printk+0x17e/0x1b0
    [   70.727129][ T9333]  ? __msan_metadata_ptr_for_load_4+0x24/0x40
    [   70.727739][ T9333]  ? kmsan_get_metadata+0x13e/0x1c0
    [   70.728324][ T9333]  __msan_warning+0x96/0x120
    [   70.728854][ T9333]  hfsplus_subfolders_dec+0x1d7/0x220
    [   70.729479][ T9333]  hfsplus_delete_cat+0x105d/0x12b0
    [   70.729984][ T9333]  ? kmsan_get_shadow_origin_ptr+0x4a/0xb0
    [   70.730646][ T9333]  ? __msan_metadata_ptr_for_load_4+0x24/0x40
    [   70.731296][ T9333]  ? kmsan_get_metadata+0x13e/0x1c0
    [   70.731863][ T9333]  hfsplus_rmdir+0x13d/0x310
    [   70.732390][ T9333]  ? __pfx_hfsplus_rmdir+0x10/0x10
    [   70.732919][ T9333]  vfs_rmdir+0x5ba/0x810
    [   70.733416][ T9333]  ? kmsan_get_shadow_origin_ptr+0x4a/0xb0
    [   70.734044][ T9333]  do_rmdir+0x964/0xea0
    [   70.734537][ T9333]  __x64_sys_rmdir+0x71/0xb0
    [   70.735032][ T9333]  x64_sys_call+0xcd8/0x3cf0
    [   70.735579][ T9333]  do_syscall_64+0xd9/0x1d0
    [   70.736092][ T9333]  ? irqentry_exit+0x16/0x60
    [   70.736637][ T9333]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [   70.737269][ T9333] RIP: 0033:0x7fa9424eafc9
    [   70.737775][ T9333] Code: 00 c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 48
    [   70.739844][ T9333] RSP: 002b:00007fff099cd8d8 EFLAGS: 00000202 ORIG_RAX: 0000000000000054
    [   70.740760][ T9333] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007fa9424eafc9
    [   70.741642][ T9333] RDX: 006c6f72746e6f63 RSI: 000000000000000a RDI: 0000000020000100
    [   70.742543][ T9333] RBP: 00007fff099cd8e0 R08: 00007fff099cd910 R09: 00007fff099cd910
    [   70.743376][ T9333] R10: 0000000000000000 R11: 0000000000000202 R12: 0000565430642260
    [   70.744247][ T9333] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
    [   70.745082][ T9333]  </TASK>
    
    The main reason of the issue that struct hfsplus_inode_info
    has not been properly initialized for the case of root folder.
    In the case of root folder, hfsplus_fill_super() calls
    the hfsplus_iget() that implements only partial initialization of
    struct hfsplus_inode_info and subfolders field is not
    initialized by hfsplus_iget() logic.
    
    This patch implements complete initialization of
    struct hfsplus_inode_info in the hfsplus_iget() logic with
    the goal to prevent likewise issues for the case of
    root folder.
    
    Reported-by: syzbot <[email protected]>
    Closes: https://syzkaller.appspot.com/bug?extid=fdedff847a0e5e84c39f
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    cc: John Paul Adrian Glaubitz <[email protected]>
    cc: Yangtao Li <[email protected]>
    cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

hfsplus: fix slab-out-of-bounds read in hfsplus_strcasecmp() [+ + +]
Author: Viacheslav Dubeyko <[email protected]>
Date:   Fri Sep 19 12:12:44 2025 -0700

    hfsplus: fix slab-out-of-bounds read in hfsplus_strcasecmp()
    
    commit 42520df65bf67189541a425f7d36b0b3e7bd7844 upstream.
    
    The hfsplus_strcasecmp() logic can trigger the issue:
    
    [  117.317703][ T9855] ==================================================================
    [  117.318353][ T9855] BUG: KASAN: slab-out-of-bounds in hfsplus_strcasecmp+0x1bc/0x490
    [  117.318991][ T9855] Read of size 2 at addr ffff88802160f40c by task repro/9855
    [  117.319577][ T9855]
    [  117.319773][ T9855] CPU: 0 UID: 0 PID: 9855 Comm: repro Not tainted 6.17.0-rc6 #33 PREEMPT(full)
    [  117.319780][ T9855] Hardware name: QEMU Ubuntu 24.04 PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    [  117.319783][ T9855] Call Trace:
    [  117.319785][ T9855]  <TASK>
    [  117.319788][ T9855]  dump_stack_lvl+0x1c1/0x2a0
    [  117.319795][ T9855]  ? __virt_addr_valid+0x1c8/0x5c0
    [  117.319803][ T9855]  ? __pfx_dump_stack_lvl+0x10/0x10
    [  117.319808][ T9855]  ? rcu_is_watching+0x15/0xb0
    [  117.319816][ T9855]  ? lock_release+0x4b/0x3e0
    [  117.319821][ T9855]  ? __kasan_check_byte+0x12/0x40
    [  117.319828][ T9855]  ? __virt_addr_valid+0x1c8/0x5c0
    [  117.319835][ T9855]  ? __virt_addr_valid+0x4a5/0x5c0
    [  117.319842][ T9855]  print_report+0x17e/0x7e0
    [  117.319848][ T9855]  ? __virt_addr_valid+0x1c8/0x5c0
    [  117.319855][ T9855]  ? __virt_addr_valid+0x4a5/0x5c0
    [  117.319862][ T9855]  ? __phys_addr+0xd3/0x180
    [  117.319869][ T9855]  ? hfsplus_strcasecmp+0x1bc/0x490
    [  117.319876][ T9855]  kasan_report+0x147/0x180
    [  117.319882][ T9855]  ? hfsplus_strcasecmp+0x1bc/0x490
    [  117.319891][ T9855]  hfsplus_strcasecmp+0x1bc/0x490
    [  117.319900][ T9855]  ? __pfx_hfsplus_cat_case_cmp_key+0x10/0x10
    [  117.319906][ T9855]  hfs_find_rec_by_key+0xa9/0x1e0
    [  117.319913][ T9855]  __hfsplus_brec_find+0x18e/0x470
    [  117.319920][ T9855]  ? __pfx_hfsplus_bnode_find+0x10/0x10
    [  117.319926][ T9855]  ? __pfx_hfs_find_rec_by_key+0x10/0x10
    [  117.319933][ T9855]  ? __pfx___hfsplus_brec_find+0x10/0x10
    [  117.319942][ T9855]  hfsplus_brec_find+0x28f/0x510
    [  117.319949][ T9855]  ? __pfx_hfs_find_rec_by_key+0x10/0x10
    [  117.319956][ T9855]  ? __pfx_hfsplus_brec_find+0x10/0x10
    [  117.319963][ T9855]  ? __kmalloc_noprof+0x2a9/0x510
    [  117.319969][ T9855]  ? hfsplus_find_init+0x8c/0x1d0
    [  117.319976][ T9855]  hfsplus_brec_read+0x2b/0x120
    [  117.319983][ T9855]  hfsplus_lookup+0x2aa/0x890
    [  117.319990][ T9855]  ? __pfx_hfsplus_lookup+0x10/0x10
    [  117.320003][ T9855]  ? d_alloc_parallel+0x2f0/0x15e0
    [  117.320008][ T9855]  ? __lock_acquire+0xaec/0xd80
    [  117.320013][ T9855]  ? __pfx_d_alloc_parallel+0x10/0x10
    [  117.320019][ T9855]  ? __raw_spin_lock_init+0x45/0x100
    [  117.320026][ T9855]  ? __init_waitqueue_head+0xa9/0x150
    [  117.320034][ T9855]  __lookup_slow+0x297/0x3d0
    [  117.320039][ T9855]  ? __pfx___lookup_slow+0x10/0x10
    [  117.320045][ T9855]  ? down_read+0x1ad/0x2e0
    [  117.320055][ T9855]  lookup_slow+0x53/0x70
    [  117.320065][ T9855]  walk_component+0x2f0/0x430
    [  117.320073][ T9855]  path_lookupat+0x169/0x440
    [  117.320081][ T9855]  filename_lookup+0x212/0x590
    [  117.320089][ T9855]  ? __pfx_filename_lookup+0x10/0x10
    [  117.320098][ T9855]  ? strncpy_from_user+0x150/0x290
    [  117.320105][ T9855]  ? getname_flags+0x1e5/0x540
    [  117.320112][ T9855]  user_path_at+0x3a/0x60
    [  117.320117][ T9855]  __x64_sys_umount+0xee/0x160
    [  117.320123][ T9855]  ? __pfx___x64_sys_umount+0x10/0x10
    [  117.320129][ T9855]  ? do_syscall_64+0xb7/0x3a0
    [  117.320135][ T9855]  ? entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [  117.320141][ T9855]  ? entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [  117.320145][ T9855]  do_syscall_64+0xf3/0x3a0
    [  117.320150][ T9855]  ? exc_page_fault+0x9f/0xf0
    [  117.320154][ T9855]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [  117.320158][ T9855] RIP: 0033:0x7f7dd7908b07
    [  117.320163][ T9855] Code: 23 0d 00 f7 d8 64 89 01 48 83 c8 ff c3 66 0f 1f 44 00 00 31 f6 e9 09 00 00 00 66 0f 1f 84 00 00 08
    [  117.320167][ T9855] RSP: 002b:00007ffd5ebd9698 EFLAGS: 00000202 ORIG_RAX: 00000000000000a6
    [  117.320172][ T9855] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f7dd7908b07
    [  117.320176][ T9855] RDX: 0000000000000009 RSI: 0000000000000009 RDI: 00007ffd5ebd9740
    [  117.320179][ T9855] RBP: 00007ffd5ebda780 R08: 0000000000000005 R09: 00007ffd5ebd9530
    [  117.320181][ T9855] R10: 00007f7dd799bfc0 R11: 0000000000000202 R12: 000055e2008b32d0
    [  117.320184][ T9855] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
    [  117.320189][ T9855]  </TASK>
    [  117.320190][ T9855]
    [  117.351311][ T9855] Allocated by task 9855:
    [  117.351683][ T9855]  kasan_save_track+0x3e/0x80
    [  117.352093][ T9855]  __kasan_kmalloc+0x8d/0xa0
    [  117.352490][ T9855]  __kmalloc_noprof+0x288/0x510
    [  117.352914][ T9855]  hfsplus_find_init+0x8c/0x1d0
    [  117.353342][ T9855]  hfsplus_lookup+0x19c/0x890
    [  117.353747][ T9855]  __lookup_slow+0x297/0x3d0
    [  117.354148][ T9855]  lookup_slow+0x53/0x70
    [  117.354514][ T9855]  walk_component+0x2f0/0x430
    [  117.354921][ T9855]  path_lookupat+0x169/0x440
    [  117.355325][ T9855]  filename_lookup+0x212/0x590
    [  117.355740][ T9855]  user_path_at+0x3a/0x60
    [  117.356115][ T9855]  __x64_sys_umount+0xee/0x160
    [  117.356529][ T9855]  do_syscall_64+0xf3/0x3a0
    [  117.356920][ T9855]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [  117.357429][ T9855]
    [  117.357636][ T9855] The buggy address belongs to the object at ffff88802160f000
    [  117.357636][ T9855]  which belongs to the cache kmalloc-2k of size 2048
    [  117.358827][ T9855] The buggy address is located 0 bytes to the right of
    [  117.358827][ T9855]  allocated 1036-byte region [ffff88802160f000, ffff88802160f40c)
    [  117.360061][ T9855]
    [  117.360266][ T9855] The buggy address belongs to the physical page:
    [  117.360813][ T9855] page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x21608
    [  117.361562][ T9855] head: order:3 mapcount:0 entire_mapcount:0 nr_pages_mapped:0 pincount:0
    [  117.362285][ T9855] flags: 0xfff00000000040(head|node=0|zone=1|lastcpupid=0x7ff)
    [  117.362929][ T9855] page_type: f5(slab)
    [  117.363282][ T9855] raw: 00fff00000000040 ffff88801a842f00 ffffea0000932000 dead000000000002
    [  117.364015][ T9855] raw: 0000000000000000 0000000080080008 00000000f5000000 0000000000000000
    [  117.364750][ T9855] head: 00fff00000000040 ffff88801a842f00 ffffea0000932000 dead000000000002
    [  117.365491][ T9855] head: 0000000000000000 0000000080080008 00000000f5000000 0000000000000000
    [  117.366232][ T9855] head: 00fff00000000003 ffffea0000858201 00000000ffffffff 00000000ffffffff
    [  117.366968][ T9855] head: ffffffffffffffff 0000000000000000 00000000ffffffff 0000000000000008
    [  117.367711][ T9855] page dumped because: kasan: bad access detected
    [  117.368259][ T9855] page_owner tracks the page as allocated
    [  117.368745][ T9855] page last allocated via order 3, migratetype Unmovable, gfp_mask 0xd20c0(__GFP_IO|__GFP_FS|__GFP_NOWARN1
    [  117.370541][ T9855]  post_alloc_hook+0x240/0x2a0
    [  117.370954][ T9855]  get_page_from_freelist+0x2101/0x21e0
    [  117.371435][ T9855]  __alloc_frozen_pages_noprof+0x274/0x380
    [  117.371935][ T9855]  alloc_pages_mpol+0x241/0x4b0
    [  117.372360][ T9855]  allocate_slab+0x8d/0x380
    [  117.372752][ T9855]  ___slab_alloc+0xbe3/0x1400
    [  117.373159][ T9855]  __kmalloc_cache_noprof+0x296/0x3d0
    [  117.373621][ T9855]  nexthop_net_init+0x75/0x100
    [  117.374038][ T9855]  ops_init+0x35c/0x5c0
    [  117.374400][ T9855]  setup_net+0x10c/0x320
    [  117.374768][ T9855]  copy_net_ns+0x31b/0x4d0
    [  117.375156][ T9855]  create_new_namespaces+0x3f3/0x720
    [  117.375613][ T9855]  unshare_nsproxy_namespaces+0x11c/0x170
    [  117.376094][ T9855]  ksys_unshare+0x4ca/0x8d0
    [  117.376477][ T9855]  __x64_sys_unshare+0x38/0x50
    [  117.376879][ T9855]  do_syscall_64+0xf3/0x3a0
    [  117.377265][ T9855] page last free pid 9110 tgid 9110 stack trace:
    [  117.377795][ T9855]  __free_frozen_pages+0xbeb/0xd50
    [  117.378229][ T9855]  __put_partials+0x152/0x1a0
    [  117.378625][ T9855]  put_cpu_partial+0x17c/0x250
    [  117.379026][ T9855]  __slab_free+0x2d4/0x3c0
    [  117.379404][ T9855]  qlist_free_all+0x97/0x140
    [  117.379790][ T9855]  kasan_quarantine_reduce+0x148/0x160
    [  117.380250][ T9855]  __kasan_slab_alloc+0x22/0x80
    [  117.380662][ T9855]  __kmalloc_noprof+0x232/0x510
    [  117.381074][ T9855]  tomoyo_supervisor+0xc0a/0x1360
    [  117.381498][ T9855]  tomoyo_env_perm+0x149/0x1e0
    [  117.381903][ T9855]  tomoyo_find_next_domain+0x15ad/0x1b90
    [  117.382378][ T9855]  tomoyo_bprm_check_security+0x11c/0x180
    [  117.382859][ T9855]  security_bprm_check+0x89/0x280
    [  117.383289][ T9855]  bprm_execve+0x8f1/0x14a0
    [  117.383673][ T9855]  do_execveat_common+0x528/0x6b0
    [  117.384103][ T9855]  __x64_sys_execve+0x94/0xb0
    [  117.384500][ T9855]
    [  117.384706][ T9855] Memory state around the buggy address:
    [  117.385179][ T9855]  ffff88802160f300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [  117.385854][ T9855]  ffff88802160f380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [  117.386534][ T9855] >ffff88802160f400: 00 04 fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [  117.387204][ T9855]                       ^
    [  117.387566][ T9855]  ffff88802160f480: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [  117.388243][ T9855]  ffff88802160f500: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [  117.388918][ T9855] ==================================================================
    
    The issue takes place if the length field of struct hfsplus_unistr
    is bigger than HFSPLUS_MAX_STRLEN. The patch simply checks
    the length of comparing strings. And if the strings' length
    is bigger than HFSPLUS_MAX_STRLEN, then it is corrected
    to this value.
    
    v2
    The string length correction has been added for hfsplus_strcmp().
    
    Reported-by: Jiaming Zhang <[email protected]>
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    cc: John Paul Adrian Glaubitz <[email protected]>
    cc: Yangtao Li <[email protected]>
    cc: [email protected]
    cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hfsplus: return EIO when type of hidden directory mismatch in hfsplus_fill_super() [+ + +]
Author: Yangtao Li <[email protected]>
Date:   Tue Aug 5 10:58:59 2025 -0600

    hfsplus: return EIO when type of hidden directory mismatch in hfsplus_fill_super()
    
    [ Upstream commit 9282bc905f0949fab8cf86c0f620ca988761254c ]
    
    If Catalog File contains corrupted record for the case of
    hidden directory's type, regard it as I/O error instead of
    Invalid argument.
    
    Signed-off-by: Yangtao Li <[email protected]>
    Reviewed-by: Viacheslav Dubeyko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
HID: multitouch: fix sticky fingers [+ + +]
Author: Benjamin Tissoires <[email protected]>
Date:   Wed Oct 8 16:06:58 2025 +0200

    HID: multitouch: fix sticky fingers
    
    commit 46f781e0d151844589dc2125c8cce3300546f92a upstream.
    
    The sticky fingers quirk (MT_QUIRK_STICKY_FINGERS) was only considering
    the case when slots were not released during the last report.
    This can be problematic if the firmware forgets to release a finger
    while others are still present.
    
    This was observed on the Synaptics DLL0945 touchpad found on the Dell
    XPS 9310 and the Dell Inspiron 5406.
    
    Fixes: 4f4001bc76fd ("HID: multitouch: fix rare Win 8 cases when the touch up event gets missing")
    Cc: [email protected]
    Signed-off-by: Benjamin Tissoires <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iio: imu: inv_icm42600: Avoid configuring if already pm_runtime suspended [+ + +]
Author: Sean Nyekjaer <[email protected]>
Date:   Mon Oct 20 09:10:30 2025 -0400

    iio: imu: inv_icm42600: Avoid configuring if already pm_runtime suspended
    
    [ Upstream commit 466f7a2fef2a4e426f809f79845a1ec1aeb558f4 ]
    
    Do as in suspend, skip resume configuration steps if the device is already
    pm_runtime suspended. This avoids reconfiguring a device that is already
    in the correct low-power state and ensures that pm_runtime handles the
    power state transitions properly.
    
    Fixes: 31c24c1e93c3 ("iio: imu: inv_icm42600: add core of new inv_icm42600 driver")
    Signed-off-by: Sean Nyekjaer <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    [ Placed early return before regulator enable instead of APEX wakeup logic ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: imu: inv_icm42600: Simplify pm_runtime setup [+ + +]
Author: Sean Nyekjaer <[email protected]>
Date:   Mon Oct 20 09:04:36 2025 -0400

    iio: imu: inv_icm42600: Simplify pm_runtime setup
    
    [ Upstream commit 0792c1984a45ccd7a296d6b8cb78088bc99a212e ]
    
    Rework the power management in inv_icm42600_core_probe() to use
    devm_pm_runtime_set_active_enabled(), which simplifies the runtime PM
    setup by handling activation and enabling in one step.
    Remove the separate inv_icm42600_disable_pm callback, as it's no longer
    needed with the devm-managed approach.
    Using devm_pm_runtime_enable() also fixes the missing disable of
    autosuspend.
    Update inv_icm42600_disable_vddio_reg() to only disable the regulator if
    the device is not suspended i.e. powered-down, preventing unbalanced
    disables.
    Also remove redundant error msg on regulator_disable(), the regulator
    framework already emits an error message when regulator_disable() fails.
    
    This simplifies the PM setup and avoids manipulating the usage counter
    unnecessarily.
    
    Fixes: 31c24c1e93c3 ("iio: imu: inv_icm42600: add core of new inv_icm42600 driver")
    Signed-off-by: Sean Nyekjaer <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: imu: inv_icm42600: use = { } instead of memset() [+ + +]
Author: David Lechner <[email protected]>
Date:   Mon Oct 20 09:10:29 2025 -0400

    iio: imu: inv_icm42600: use = { } instead of memset()
    
    [ Upstream commit 352112e2d9aab6a156c2803ae14eb89a9fd93b7d ]
    
    Use { } instead of memset() to zero-initialize stack memory to simplify
    the code.
    
    Signed-off-by: David Lechner <[email protected]>
    Reviewed-by: Nuno Sá <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://patch.msgid.link/20250611-iio-zero-init-stack-with-instead-of-memset-v1-16-ebb2d0a24302@baylibre.com
    Signed-off-by: Jonathan Cameron <[email protected]>
    Stable-dep-of: 466f7a2fef2a ("iio: imu: inv_icm42600: Avoid configuring if already pm_runtime suspended")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
jbd2: ensure that all ongoing I/O complete before freeing blocks [+ + +]
Author: Zhang Yi <[email protected]>
Date:   Tue Sep 16 17:33:36 2025 +0800

    jbd2: ensure that all ongoing I/O complete before freeing blocks
    
    commit 3c652c3a71de1d30d72dc82c3bead8deb48eb749 upstream.
    
    When releasing file system metadata blocks in jbd2_journal_forget(), if
    this buffer has not yet been checkpointed, it may have already been
    written back, currently be in the process of being written back, or has
    not yet written back.  jbd2_journal_forget() calls
    jbd2_journal_try_remove_checkpoint() to check the buffer's status and
    add it to the current transaction if it has not been written back. This
    buffer can only be reallocated after the transaction is committed.
    
    jbd2_journal_try_remove_checkpoint() attempts to lock the buffer and
    check its dirty status while holding the buffer lock. If the buffer has
    already been written back, everything proceeds normally. However, there
    are two issues. First, the function returns immediately if the buffer is
    locked by the write-back process. It does not wait for the write-back to
    complete. Consequently, until the current transaction is committed and
    the block is reallocated, there is no guarantee that the I/O will
    complete. This means that ongoing I/O could write stale metadata to the
    newly allocated block, potentially corrupting data. Second, the function
    unlocks the buffer as soon as it detects that the buffer is still dirty.
    If a concurrent write-back occurs immediately after this unlocking and
    before clear_buffer_dirty() is called in jbd2_journal_forget(), data
    corruption can theoretically still occur.
    
    Although these two issues are unlikely to occur in practice since the
    undergoing metadata writeback I/O does not take this long to complete,
    it's better to explicitly ensure that all ongoing I/O operations are
    completed.
    
    Fixes: 597599268e3b ("jbd2: discard dirty data when forgetting an un-journalled buffer")
    Cc: [email protected]
    Suggested-by: Jan Kara <[email protected]>
    Signed-off-by: Zhang Yi <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: Linux 5.15.196 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Wed Oct 29 14:03:16 2025 +0100

    Linux 5.15.196
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Slade Watkins <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Tested-by: Shuah Khan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Ron Economos <[email protected]>
    Tested-by: Brett A C Sheffield <[email protected]>
    Tested-by: Pavel Machek (CIP) <[email protected]>
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Tested-by: Slade Watkins <[email protected]>
    Tested-by: Linux Kernel Functional Testing <[email protected]>
    Tested-by: Vijayendra Suman <[email protected]>>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
m68k: bitops: Fix find_*_bit() signatures [+ + +]
Author: Geert Uytterhoeven <[email protected]>
Date:   Wed Sep 10 17:16:13 2025 +0200

    m68k: bitops: Fix find_*_bit() signatures
    
    [ Upstream commit 6d5674090543b89aac0c177d67e5fb32ddc53804 ]
    
    The function signatures of the m68k-optimized implementations of the
    find_{first,next}_{,zero_}bit() helpers do not match the generic
    variants.
    
    Fix this by changing all non-pointer inputs and outputs to "unsigned
    long", and updating a few local variables.
    
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Signed-off-by: Geert Uytterhoeven <[email protected]>
    Acked-by: "Yury Norov (NVIDIA)" <[email protected]>
    Link: https://patch.msgid.link/de6919554fbb4cd1427155c6bafbac8a9df822c8.1757517135.git.geert@linux-m68k.org
    Signed-off-by: Sasha Levin <[email protected]>

 
media: lirc: Fix error handling in lirc_register() [+ + +]
Author: Ma Ke <[email protected]>
Date:   Fri Oct 17 11:43:04 2025 -0400

    media: lirc: Fix error handling in lirc_register()
    
    [ Upstream commit 4f4098c57e139ad972154077fb45c3e3141555dd ]
    
    When cdev_device_add() failed, calling put_device() to explicitly
    release dev->lirc_dev. Otherwise, it could cause the fault of the
    reference count.
    
    Found by code review.
    
    Cc: [email protected]
    Fixes: a6ddd4fecbb0 ("media: lirc: remove last remnants of lirc kapi")
    Signed-off-by: Ma Ke <[email protected]>
    Signed-off-by: Sean Young <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: rc: Directly use ida_free() [+ + +]
Author: keliu <[email protected]>
Date:   Fri Oct 17 11:43:03 2025 -0400

    media: rc: Directly use ida_free()
    
    [ Upstream commit cd54ff938091d890edf78e6555ec30c63dcd2eb5 ]
    
    Use ida_alloc() and ida_free() instead of the deprecated
    ida_simple_get() and ida_simple_remove().
    
    Signed-off-by: keliu <[email protected]>
    Signed-off-by: Sean Young <[email protected]>
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Stable-dep-of: 4f4098c57e13 ("media: lirc: Fix error handling in lirc_register()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: s5p-mfc: remove an unused/uninitialized variable [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Fri Oct 17 11:44:44 2025 -0400

    media: s5p-mfc: remove an unused/uninitialized variable
    
    [ Upstream commit 7fa37ba25a1dfc084e24ea9acc14bf1fad8af14c ]
    
    The s5p_mfc_cmd_args structure in the v6 driver is never used, not
    initialized to anything other than zero, but as of clang-21 this
    causes a warning:
    
    drivers/media/platform/samsung/s5p-mfc/s5p_mfc_cmd_v6.c:45:7: error: variable 'h2r_args' is uninitialized when passed as a const pointer argument here [-Werror,-Wuninitialized-const-pointer]
       45 |                                         &h2r_args);
          |                                          ^~~~~~~~
    
    Just remove this for simplicity. Since the function is also called
    through a callback, this does require adding a trivial wrapper with
    the correct prototype.
    
    Fixes: f96f3cfa0bb8 ("[media] s5p-mfc: Update MFC v4l2 driver to support MFC6.x")
    Cc: [email protected]
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mei: me: add wildcat lake P DID [+ + +]
Author: Alexander Usyskin <[email protected]>
Date:   Thu Oct 16 15:59:12 2025 +0300

    mei: me: add wildcat lake P DID
    
    commit 410d6c2ad4d1a88efa0acbb9966693725b564933 upstream.
    
    Add Wildcat Lake P device id.
    
    Cc: [email protected]
    Co-developed-by: Tomas Winkler <[email protected]>
    Signed-off-by: Tomas Winkler <[email protected]>
    Signed-off-by: Alexander Usyskin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
MIPS: Malta: Fix keyboard resource preventing i8042 driver from registering [+ + +]
Author: Maciej W. Rozycki <[email protected]>
Date:   Tue Oct 21 20:38:22 2025 +0100

    MIPS: Malta: Fix keyboard resource preventing i8042 driver from registering
    
    commit bf5570590a981d0659d0808d2d4bcda21b27a2a5 upstream.
    
    MIPS Malta platform code registers the PCI southbridge legacy port I/O
    PS/2 keyboard range as a standard resource marked as busy.  It prevents
    the i8042 driver from registering as it fails to claim the resource in
    a call to i8042_platform_init().  Consequently PS/2 keyboard and mouse
    devices cannot be used with this platform.
    
    Fix the issue by removing the busy marker from the standard reservation,
    making the driver register successfully:
    
      serio: i8042 KBD port at 0x60,0x64 irq 1
      serio: i8042 AUX port at 0x60,0x64 irq 12
    
    and the resource show up as expected among the legacy devices:
    
      00000000-00ffffff : MSC PCI I/O
        00000000-0000001f : dma1
        00000020-00000021 : pic1
        00000040-0000005f : timer
        00000060-0000006f : keyboard
          00000060-0000006f : i8042
        00000070-00000077 : rtc0
        00000080-0000008f : dma page reg
        000000a0-000000a1 : pic2
        000000c0-000000df : dma2
        [...]
    
    If the i8042 driver has not been configured, then the standard resource
    will remain there preventing any conflicting dynamic assignment of this
    PCI port I/O address range.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Maciej W. Rozycki <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Acked-by: Thomas Bogendoerfer <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
most: usb: Fix use-after-free in hdm_disconnect [+ + +]
Author: Victoria Votokina <[email protected]>
Date:   Fri Oct 10 13:52:40 2025 +0300

    most: usb: Fix use-after-free in hdm_disconnect
    
    commit 4b1270902609ef0d935ed2faa2ea6d122bd148f5 upstream.
    
    hdm_disconnect() calls most_deregister_interface(), which eventually
    unregisters the MOST interface device with device_unregister(iface->dev).
    If that drops the last reference, the device core may call release_mdev()
    immediately while hdm_disconnect() is still executing.
    
    The old code also freed several mdev-owned allocations in
    hdm_disconnect() and then performed additional put_device() calls.
    Depending on refcount order, this could lead to use-after-free or
    double-free when release_mdev() ran (or when unregister paths also
    performed puts).
    
    Fix by moving the frees of mdev-owned allocations into release_mdev(),
    so they happen exactly once when the device is truly released, and by
    dropping the extra put_device() calls in hdm_disconnect() that are
    redundant after device_unregister() and most_deregister_interface().
    
    This addresses the KASAN slab-use-after-free reported by syzbot in
    hdm_disconnect(). See report and stack traces in the bug link below.
    
    Reported-by: [email protected]
    Cc: stable <[email protected]>
    Closes: https://syzkaller.appspot.com/bug?extid=916742d5d24f6c254761
    Fixes: 97a6f772f36b ("drivers: most: add USB adapter driver")
    Signed-off-by: Victoria Votokina <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

most: usb: hdm_probe: Fix calling put_device() before device initialization [+ + +]
Author: Victoria Votokina <[email protected]>
Date:   Fri Oct 10 13:52:41 2025 +0300

    most: usb: hdm_probe: Fix calling put_device() before device initialization
    
    commit a8cc9e5fcb0e2eef21513a4fec888f5712cb8162 upstream.
    
    The early error path in hdm_probe() can jump to err_free_mdev before
    &mdev->dev has been initialized with device_initialize(). Calling
    put_device(&mdev->dev) there triggers a device core WARN and ends up
    invoking kref_put(&kobj->kref, kobject_release) on an uninitialized
    kobject.
    
    In this path the private struct was only kmalloc'ed and the intended
    release is effectively kfree(mdev) anyway, so free it directly instead
    of calling put_device() on an uninitialized device.
    
    This removes the WARNING and fixes the pre-initialization error path.
    
    Fixes: 97a6f772f36b ("drivers: most: add USB adapter driver")
    Cc: stable <[email protected]>
    Signed-off-by: Victoria Votokina <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/ip6_tunnel: Prevent perpetual tunnel growth [+ + +]
Author: Dmitry Safonov <[email protected]>
Date:   Thu Oct 9 16:02:19 2025 +0100

    net/ip6_tunnel: Prevent perpetual tunnel growth
    
    [ Upstream commit 21f4d45eba0b2dcae5dbc9e5e0ad08735c993f16 ]
    
    Similarly to ipv4 tunnel, ipv6 version updates dev->needed_headroom, too.
    While ipv4 tunnel headroom adjustment growth was limited in
    commit 5ae1e9922bbd ("net: ip_tunnel: prevent perpetual headroom growth"),
    ipv6 tunnel yet increases the headroom without any ceiling.
    
    Reflect ipv4 tunnel headroom adjustment limit on ipv6 version.
    
    Credits to Francesco Ruggeri, who was originally debugging this issue
    and wrote local Arista-specific patch and a reproducer.
    
    Fixes: 8eb30be0352d ("ipv6: Create ip6_tnl_xmit")
    Cc: Florian Westphal <[email protected]>
    Cc: Francesco Ruggeri <[email protected]>
    Signed-off-by: Dmitry Safonov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net: add ndo_fdb_del_bulk [+ + +]
Author: Nikolay Aleksandrov <[email protected]>
Date:   Wed Apr 13 13:51:56 2022 +0300

    net: add ndo_fdb_del_bulk
    
    [ Upstream commit 1306d5362a591493a2d07f685ed2cc480dcda320 ]
    
    Add a new netdev op called ndo_fdb_del_bulk, it will be later used for
    driver-specific bulk delete implementation dispatched from rtnetlink. The
    first user will be the bridge, we need it to signal to rtnetlink from
    the driver that we support bulk delete operation (NLM_F_BULK).
    
    Signed-off-by: Nikolay Aleksandrov <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: bf29555f5bdc ("rtnetlink: Allow deleting FDB entries in user namespace")
    Signed-off-by: Sasha Levin <[email protected]>

net: bonding: fix possible peer notify event loss or dup issue [+ + +]
Author: Tonghao Zhang <[email protected]>
Date:   Tue Oct 21 13:09:33 2025 +0800

    net: bonding: fix possible peer notify event loss or dup issue
    
    commit 10843e1492e474c02b91314963161731fa92af91 upstream.
    
    If the send_peer_notif counter and the peer event notify are not synchronized.
    It may cause problems such as the loss or dup of peer notify event.
    
    Before this patch:
    - If should_notify_peers is true and the lock for send_peer_notif-- fails, peer
      event may be sent again in next mii_monitor loop, because should_notify_peers
      is still true.
    - If should_notify_peers is true and the lock for send_peer_notif-- succeeded,
      but the lock for peer event fails, the peer event will be lost.
    
    This patch locks the RTNL for send_peer_notif, events, and commit simultaneously.
    
    Fixes: 07a4ddec3ce9 ("bonding: add an option to specify a delay between peer notifications")
    Cc: Jay Vosburgh <[email protected]>
    Cc: Andrew Lunn <[email protected]>
    Cc: Eric Dumazet <[email protected]>
    Cc: Jakub Kicinski <[email protected]>
    Cc: Paolo Abeni <[email protected]>
    Cc: Hangbin Liu <[email protected]>
    Cc: Nikolay Aleksandrov <[email protected]>
    Cc: Vincent Bernat <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Tonghao Zhang <[email protected]>
    Acked-by: Jay Vosburgh <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: dlink: handle dma_map_single() failure properly [+ + +]
Author: Yeounsu Moon <[email protected]>
Date:   Fri Oct 10 00:57:16 2025 +0900

    net: dlink: handle dma_map_single() failure properly
    
    [ Upstream commit 65946eac6d888d50ae527c4e5c237dbe5cc3a2f2 ]
    
    There is no error handling for `dma_map_single()` failures.
    
    Add error handling by checking `dma_mapping_error()` and freeing
    the `skb` using `dev_kfree_skb()` (process context) when it fails.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Yeounsu Moon <[email protected]>
    Tested-on: D-Link DGE-550T Rev-A3
    Suggested-by: Simon Horman <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: enetc: correct the value of ENETC_RXB_TRUESIZE [+ + +]
Author: Wei Fang <[email protected]>
Date:   Thu Oct 16 16:01:31 2025 +0800

    net: enetc: correct the value of ENETC_RXB_TRUESIZE
    
    [ Upstream commit e59bc32df2e989f034623a580e30a2a72af33b3f ]
    
    The ENETC RX ring uses the page halves flipping mechanism, each page is
    split into two halves for the RX ring to use. And ENETC_RXB_TRUESIZE is
    defined to 2048 to indicate the size of half a page. However, the page
    size is configurable, for ARM64 platform, PAGE_SIZE is default to 4K,
    but it could be configured to 16K or 64K.
    
    When PAGE_SIZE is set to 16K or 64K, ENETC_RXB_TRUESIZE is not correct,
    and the RX ring will always use the first half of the page. This is not
    consistent with the description in the relevant kernel doc and commit
    messages.
    
    This issue is invisible in most cases, but if users want to increase
    PAGE_SIZE to receive a Jumbo frame with a single buffer for some use
    cases, it will not work as expected, because the buffer size of each
    RX BD is fixed to 2048 bytes.
    
    Based on the above two points, we expect to correct ENETC_RXB_TRUESIZE
    to (PAGE_SIZE >> 1), as described in the comment.
    
    Fixes: d4fd0404c1c9 ("enetc: Introduce basic PF and VF ENETC ethernet drivers")
    Signed-off-by: Wei Fang <[email protected]>
    Reviewed-by: Claudiu Manoil <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: netlink: add NLM_F_BULK delete request modifier [+ + +]
Author: Nikolay Aleksandrov <[email protected]>
Date:   Wed Apr 13 13:51:54 2022 +0300

    net: netlink: add NLM_F_BULK delete request modifier
    
    [ Upstream commit 545528d788556c724eeb5400757f828ef27782a8 ]
    
    Add a new delete request modifier called NLM_F_BULK which, when
    supported, would cause the request to delete multiple objects. The flag
    is a convenient way to signal that a multiple delete operation is
    requested which can be gradually added to different delete requests. In
    order to make sure older kernels will error out if the operation is not
    supported instead of doing something unintended we have to break a
    required condition when implementing support for this flag, f.e. for
    neighbors we will omit the mandatory mac address attribute.
    Initially it will be used to add flush with filtering support for bridge
    fdbs, but it also opens the door to add similar support to others.
    
    Signed-off-by: Nikolay Aleksandrov <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: bf29555f5bdc ("rtnetlink: Allow deleting FDB entries in user namespace")
    Signed-off-by: Sasha Levin <[email protected]>

net: ravb: Ensure memory write completes before ringing TX doorbell [+ + +]
Author: Lad Prabhakar <[email protected]>
Date:   Fri Oct 17 16:18:30 2025 +0100

    net: ravb: Ensure memory write completes before ringing TX doorbell
    
    commit 706136c5723626fcde8dd8f598a4dcd251e24927 upstream.
    
    Add a final dma_wmb() barrier before triggering the transmit request
    (TCCR_TSRQ) to ensure all descriptor and buffer writes are visible to
    the DMA engine.
    
    According to the hardware manual, a read-back operation is required
    before writing to the doorbell register to guarantee completion of
    previous writes. Instead of performing a dummy read, a dma_wmb() is
    used to both enforce the same ordering semantics on the CPU side and
    also to ensure completion of writes.
    
    Fixes: c156633f1353 ("Renesas Ethernet AVB driver proper")
    Cc: [email protected]
    Co-developed-by: Fabrizio Castro <[email protected]>
    Signed-off-by: Fabrizio Castro <[email protected]>
    Signed-off-by: Lad Prabhakar <[email protected]>
    Reviewed-by: Niklas Söderlund <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: rtnetlink: add bulk delete support flag [+ + +]
Author: Nikolay Aleksandrov <[email protected]>
Date:   Wed Apr 13 13:51:55 2022 +0300

    net: rtnetlink: add bulk delete support flag
    
    [ Upstream commit a6cec0bcd34264be8887791594be793b3f12719f ]
    
    Add a new rtnl flag (RTNL_FLAG_BULK_DEL_SUPPORTED) which is used to
    verify that the delete operation allows bulk object deletion. Also emit
    a warning if anyone tries to set it for non-delete kind.
    
    Suggested-by: David Ahern <[email protected]>
    Signed-off-by: Nikolay Aleksandrov <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: bf29555f5bdc ("rtnetlink: Allow deleting FDB entries in user namespace")
    Signed-off-by: Sasha Levin <[email protected]>

net: rtnetlink: add helper to extract msg type's kind [+ + +]
Author: Nikolay Aleksandrov <[email protected]>
Date:   Wed Apr 13 13:51:52 2022 +0300

    net: rtnetlink: add helper to extract msg type's kind
    
    [ Upstream commit 2e9ea3e30f696fd438319c07836422bb0bbb4608 ]
    
    Add a helper which extracts the msg type's kind using the kind mask (0x3).
    
    Signed-off-by: Nikolay Aleksandrov <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: bf29555f5bdc ("rtnetlink: Allow deleting FDB entries in user namespace")
    Signed-off-by: Sasha Levin <[email protected]>

net: rtnetlink: add NLM_F_BULK support to rtnl_fdb_del [+ + +]
Author: Nikolay Aleksandrov <[email protected]>
Date:   Wed Apr 13 13:51:57 2022 +0300

    net: rtnetlink: add NLM_F_BULK support to rtnl_fdb_del
    
    [ Upstream commit 9e83425993f38bb89e0ea07849ba0039a748e85b ]
    
    When NLM_F_BULK is specified in a fdb del message we need to handle it
    differently. First since this is a new call we can strictly validate the
    passed attributes, at first only ifindex and vlan are allowed as these
    will be the initially supported filter attributes, any other attribute
    is rejected. The mac address is no longer mandatory, but we use it
    to error out in older kernels because it cannot be specified with bulk
    request (the attribute is not allowed) and then we have to dispatch
    the call to ndo_fdb_del_bulk if the device supports it. The del bulk
    callback can do further validation of the attributes if necessary.
    
    Signed-off-by: Nikolay Aleksandrov <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: bf29555f5bdc ("rtnetlink: Allow deleting FDB entries in user namespace")
    Signed-off-by: Sasha Levin <[email protected]>

net: rtnetlink: fix module reference count leak issue in rtnetlink_rcv_msg [+ + +]
Author: Zhengchao Shao <[email protected]>
Date:   Mon Aug 15 10:46:29 2022 +0800

    net: rtnetlink: fix module reference count leak issue in rtnetlink_rcv_msg
    
    commit 5b22f62724a0a09e00d301abf5b57b0c12be8a16 upstream.
    
    When bulk delete command is received in the rtnetlink_rcv_msg function,
    if bulk delete is not supported, module_put is not called to release
    the reference counting. As a result, module reference count is leaked.
    
    Fixes: a6cec0bcd342 ("net: rtnetlink: add bulk delete support flag")
    Signed-off-by: Zhengchao Shao <[email protected]>
    Acked-by: Nikolay Aleksandrov <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: rtnetlink: use BIT for flag values [+ + +]
Author: Nikolay Aleksandrov <[email protected]>
Date:   Wed Apr 13 13:51:53 2022 +0300

    net: rtnetlink: use BIT for flag values
    
    [ Upstream commit 0569e31f1bc2f50613ba4c219f3ecc0d1174d841 ]
    
    Use BIT to define flag values.
    
    Signed-off-by: Nikolay Aleksandrov <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: bf29555f5bdc ("rtnetlink: Allow deleting FDB entries in user namespace")
    Signed-off-by: Sasha Levin <[email protected]>

net: tls: wait for async completion on last message [+ + +]
Author: Sascha Hauer <[email protected]>
Date:   Wed Sep 4 14:17:41 2024 +0200

    net: tls: wait for async completion on last message
    
    [ Upstream commit 54001d0f2fdbc7852136a00f3e6fc395a9547ae5 ]
    
    When asynchronous encryption is used KTLS sends out the final data at
    proto->close time. This becomes problematic when the task calling
    close() receives a signal. In this case it can happen that
    tcp_sendmsg_locked() called at close time returns -ERESTARTSYS and the
    final data is not sent.
    
    The described situation happens when KTLS is used in conjunction with
    io_uring, as io_uring uses task_work_add() to add work to the current
    userspace task. A discussion of the problem along with a reproducer can
    be found in [1] and [2]
    
    Fix this by waiting for the asynchronous encryption to be completed on
    the final message. With this there is no data left to be sent at close
    time.
    
    [1] https://lore.kernel.org/all/[email protected]/
    [2] https://lore.kernel.org/all/[email protected]/
    
    Signed-off-by: Sascha Hauer <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: b014a4e066c5 ("tls: wait for async encrypt in case of error during latter iterations of sendmsg")
    Signed-off-by: Sasha Levin <[email protected]>

net: usb: lan78xx: Add error handling to lan78xx_init_mac_address [+ + +]
Author: Oleksij Rempel <[email protected]>
Date:   Mon Dec 9 14:07:42 2024 +0100

    net: usb: lan78xx: Add error handling to lan78xx_init_mac_address
    
    [ Upstream commit 6f31135894ec96481e2bda93a1da70712f5e57c1 ]
    
    Convert `lan78xx_init_mac_address` to return error codes and handle
    failures in register read and write operations. Update `lan78xx_reset`
    to check for errors during MAC address initialization and propagate them
    appropriately.
    
    Signed-off-by: Oleksij Rempel <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 8d93ff40d49d ("net: usb: lan78xx: fix use of improperly initialized dev->chipid in lan78xx_reset")
    Signed-off-by: Sasha Levin <[email protected]>

net: usb: lan78xx: fix use of improperly initialized dev->chipid in lan78xx_reset [+ + +]
Author: I Viswanath <[email protected]>
Date:   Mon Oct 13 23:46:48 2025 +0530

    net: usb: lan78xx: fix use of improperly initialized dev->chipid in lan78xx_reset
    
    [ Upstream commit 8d93ff40d49d70e05c82a74beae31f883fe0eaf8 ]
    
    dev->chipid is used in lan78xx_init_mac_address before it's initialized:
    
    lan78xx_reset() {
        lan78xx_init_mac_address()
            lan78xx_read_eeprom()
                lan78xx_read_raw_eeprom() <- dev->chipid is used here
    
        dev->chipid = ... <- dev->chipid is initialized correctly here
    }
    
    Reorder initialization so that dev->chipid is set before calling
    lan78xx_init_mac_address().
    
    Fixes: a0db7d10b76e ("lan78xx: Add to handle mux control per chip id")
    Signed-off-by: I Viswanath <[email protected]>
    Reviewed-by: Vadim Fedorenko <[email protected]>
    Reviewed-by: Khalid Aziz <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: usb: rtl8150: Fix frame padding [+ + +]
Author: Michal Pecio <[email protected]>
Date:   Tue Oct 14 20:35:28 2025 +0200

    net: usb: rtl8150: Fix frame padding
    
    commit 75cea9860aa6b2350d90a8d78fed114d27c7eca2 upstream.
    
    TX frames aren't padded and unknown memory is sent into the ether.
    
    Theoretically, it isn't even guaranteed that the extra memory exists
    and can be sent out, which could cause further problems. In practice,
    I found that plenty of tailroom exists in the skb itself (in my test
    with ping at least) and skb_padto() easily succeeds, so use it here.
    
    In the event of -ENOMEM drop the frame like other drivers do.
    
    The use of one more padding byte instead of a USB zero-length packet
    is retained to avoid regression. I have a dodgy Etron xHCI controller
    which doesn't seem to support sending ZLPs at all.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Signed-off-by: Michal Pecio <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: usb: use eth_hw_addr_set() instead of ether_addr_copy() [+ + +]
Author: Jakub Kicinski <[email protected]>
Date:   Fri Oct 1 14:32:24 2021 -0700

    net: usb: use eth_hw_addr_set() instead of ether_addr_copy()
    
    [ Upstream commit af804e6db9f60b923ff5149d9bf782e0baa82a2b ]
    
    Commit 406f42fa0d3c ("net-next: When a bond have a massive amount
    of VLANs...") introduced a rbtree for faster Ethernet address look
    up. To maintain netdev->dev_addr in this tree we need to make all
    the writes to it got through appropriate helpers.
    
    Convert net/usb from ether_addr_copy() to eth_hw_addr_set():
    
      @@
      expression dev, np;
      @@
      - ether_addr_copy(dev->dev_addr, np)
      + eth_hw_addr_set(dev, np)
    
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 8d93ff40d49d ("net: usb: lan78xx: fix use of improperly initialized dev->chipid in lan78xx_reset")
    Signed-off-by: Sasha Levin <[email protected]>

 
NFSD: Define a proc_layoutcommit for the FlexFiles layout type [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Mon Oct 20 20:34:23 2025 -0400

    NFSD: Define a proc_layoutcommit for the FlexFiles layout type
    
    [ Upstream commit 4b47a8601b71ad98833b447d465592d847b4dc77 ]
    
    Avoid a crash if a pNFS client should happen to send a LAYOUTCOMMIT
    operation on a FlexFiles layout.
    
    Reported-by: Robert Morris <[email protected]>
    Closes: https://lore.kernel.org/linux-nfs/[email protected]/T/#t
    Cc: Thomas Haynes <[email protected]>
    Cc: [email protected]
    Fixes: 9b9960a0ca47 ("nfsd: Add a super simple flex file server")
    Signed-off-by: Chuck Lever <[email protected]>
    [ removed struct svc_rqst parameter from nfsd4_ff_proc_layoutcommit ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

NFSD: Fix last write offset handling in layoutcommit [+ + +]
Author: Sergey Bashirov <[email protected]>
Date:   Mon Oct 20 08:56:02 2025 -0400

    NFSD: Fix last write offset handling in layoutcommit
    
    [ Upstream commit d68886bae76a4b9b3484d23e5b7df086f940fa38 ]
    
    The data type of loca_last_write_offset is newoffset4 and is switched
    on a boolean value, no_newoffset, that indicates if a previous write
    occurred or not. If no_newoffset is FALSE, an offset is not given.
    This means that client does not try to update the file size. Thus,
    server should not try to calculate new file size and check if it fits
    into the segment range. See RFC 8881, section 12.5.4.2.
    
    Sometimes the current incorrect logic may cause clients to hang when
    trying to sync an inode. If layoutcommit fails, the client marks the
    inode as dirty again.
    
    Fixes: 9cf514ccfacb ("nfsd: implement pNFS operations")
    Cc: [email protected]
    Co-developed-by: Konstantin Evtushenko <[email protected]>
    Signed-off-by: Konstantin Evtushenko <[email protected]>
    Signed-off-by: Sergey Bashirov <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    [ adapted for direct inode->i_mtime access and 2-parameter proc_layoutcommit callback ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

NFSD: Minor cleanup in layoutcommit processing [+ + +]
Author: Sergey Bashirov <[email protected]>
Date:   Mon Oct 20 08:56:01 2025 -0400

    NFSD: Minor cleanup in layoutcommit processing
    
    [ Upstream commit 274365a51d88658fb51cca637ba579034e90a799 ]
    
    Remove dprintk in nfsd4_layoutcommit. These are not needed
    in day to day usage, and the information is also available
    in Wireshark when capturing NFS traffic.
    
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Sergey Bashirov <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Stable-dep-of: d68886bae76a ("NFSD: Fix last write offset handling in layoutcommit")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

NFSD: Rework encoding and decoding of nfsd4_deviceid [+ + +]
Author: Sergey Bashirov <[email protected]>
Date:   Mon Oct 20 08:56:00 2025 -0400

    NFSD: Rework encoding and decoding of nfsd4_deviceid
    
    [ Upstream commit 832738e4b325b742940761e10487403f9aad13e8 ]
    
    Compilers may optimize the layout of C structures, so we should not rely
    on sizeof struct and memcpy to encode and decode XDR structures. The byte
    order of the fields should also be taken into account.
    
    This patch adds the correct functions to handle the deviceid4 structure
    and removes the pad field, which is currently not used by NFSD, from the
    runtime state. The server's byte order is preserved because the deviceid4
    blob on the wire is only used as a cookie by the client.
    
    Signed-off-by: Sergey Bashirov <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Stable-dep-of: d68886bae76a ("NFSD: Fix last write offset handling in layoutcommit")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nios2: ensure that memblock.current_limit is set when setting pfn limits [+ + +]
Author: Simon Schuster <[email protected]>
Date:   Thu Aug 21 12:37:07 2025 +0200

    nios2: ensure that memblock.current_limit is set when setting pfn limits
    
    [ Upstream commit a20b83cf45be2057f3d073506779e52c7fa17f94 ]
    
    On nios2, with CONFIG_FLATMEM set, the kernel relies on
    memblock_get_current_limit() to determine the limits of mem_map, in
    particular for max_low_pfn.
    Unfortunately, memblock.current_limit is only default initialized to
    MEMBLOCK_ALLOC_ANYWHERE at this point of the bootup, potentially leading
    to situations where max_low_pfn can erroneously exceed the value of
    max_pfn and, thus, the valid range of available DRAM.
    
    This can in turn cause kernel-level paging failures, e.g.:
    
    [   76.900000] Unable to handle kernel paging request at virtual address 20303000
    [   76.900000] ea = c0080890, ra = c000462c, cause = 14
    [   76.900000] Kernel panic - not syncing: Oops
    [   76.900000] ---[ end Kernel panic - not syncing: Oops ]---
    
    This patch fixes this by pre-calculating memblock.current_limit
    based on the upper limits of the available memory ranges via
    adjust_lowmem_bounds, a simplified version of the equivalent
    implementation within the arm architecture.
    
    Signed-off-by: Simon Schuster <[email protected]>
    Signed-off-by: Andreas Oetken <[email protected]>
    Signed-off-by: Dinh Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ocfs2: clear extent cache after moving/defragmenting extents [+ + +]
Author: Deepanshu Kartikey <[email protected]>
Date:   Thu Oct 9 21:19:03 2025 +0530

    ocfs2: clear extent cache after moving/defragmenting extents
    
    commit 78a63493f8e352296dbc7cb7b3f4973105e8679e upstream.
    
    The extent map cache can become stale when extents are moved or
    defragmented, causing subsequent operations to see outdated extent flags.
    This triggers a BUG_ON in ocfs2_refcount_cal_cow_clusters().
    
    The problem occurs when:
    1. copy_file_range() creates a reflinked extent with OCFS2_EXT_REFCOUNTED
    2. ioctl(FITRIM) triggers ocfs2_move_extents()
    3. __ocfs2_move_extents_range() reads and caches the extent (flags=0x2)
    4. ocfs2_move_extent()/ocfs2_defrag_extent() calls __ocfs2_move_extent()
       which clears OCFS2_EXT_REFCOUNTED flag on disk (flags=0x0)
    5. The extent map cache is not invalidated after the move
    6. Later write() operations read stale cached flags (0x2) but disk has
       updated flags (0x0), causing a mismatch
    7. BUG_ON(!(rec->e_flags & OCFS2_EXT_REFCOUNTED)) triggers
    
    Fix by clearing the extent map cache after each extent move/defrag
    operation in __ocfs2_move_extents_range().  This ensures subsequent
    operations read fresh extent data from disk.
    
    Link: https://lore.kernel.org/all/[email protected]/T/
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 53069d4e7695 ("Ocfs2/move_extents: move/defrag extents within a certain range.")
    Signed-off-by: Deepanshu Kartikey <[email protected]>
    Reported-by: [email protected]
    Tested-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?id=2959889e1f6e216585ce522f7e8bc002b46ad9e7
    Reviewed-by: Mark Fasheh <[email protected]>
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
padata: Reset next CPU when reorder sequence wraps around [+ + +]
Author: Xiao Liang <[email protected]>
Date:   Mon Oct 20 11:39:57 2025 -0400

    padata: Reset next CPU when reorder sequence wraps around
    
    [ Upstream commit 501302d5cee0d8e8ec2c4a5919c37e0df9abc99b ]
    
    When seq_nr wraps around, the next reorder job with seq 0 is hashed to
    the first CPU in padata_do_serial(). Correspondingly, need reset pd->cpu
    to the first one when pd->processed wraps around. Otherwise, if the
    number of used CPUs is not a power of 2, padata_find_next() will be
    checking a wrong list, hence deadlock.
    
    Fixes: 6fc4dbcf0276 ("padata: Replace delayed timer with immediate workqueue in padata_reorder")
    Cc: <[email protected]>
    Signed-off-by: Xiao Liang <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    [ moved fix from padata_reorder() to padata_find_next() and adapted cpumask_next_wrap() to 4-argument signature ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
PCI/sysfs: Ensure devices are powered for config reads (part 2) [+ + +]
Author: Brian Norris <[email protected]>
Date:   Mon Oct 20 13:41:36 2025 -0700

    PCI/sysfs: Ensure devices are powered for config reads (part 2)
    
    Commit 48991e493507 ("PCI/sysfs: Ensure devices are powered for config
    reads") was applied to various linux-stable trees. However, prior to
    6.12.y, we do not have commit d2bd39c0456b ("PCI: Store all PCIe
    Supported Link Speeds"). Therefore, we also need to apply the change to
    max_link_speed_show().
    
    This was pointed out here:
    
      Re: Patch "PCI/sysfs: Ensure devices are powered for config reads" has been added to the 6.6-stable tree
      https://lore.kernel.org/all/[email protected]/
    
    Original change description follows:
    
        The "max_link_width", "current_link_speed", "current_link_width",
        "secondary_bus_number", and "subordinate_bus_number" sysfs files all access
        config registers, but they don't check the runtime PM state. If the device
        is in D3cold or a parent bridge is suspended, we may see -EINVAL, bogus
        values, or worse, depending on implementation details.
    
        Wrap these access in pci_config_pm_runtime_{get,put}() like most of the
        rest of the similar sysfs attributes.
    
        Notably, "max_link_speed" does not access config registers; it returns a
        cached value since d2bd39c0456b ("PCI: Store all PCIe Supported Link
        Speeds").
    
    Fixes: 56c1af4606f0 ("PCI: Add sysfs max_link_speed/width, current_link_speed/width, etc")
    Link: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Brian Norris <[email protected]>
    Signed-off-by: Brian Norris <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
PCI: j721e: Enable ACSPCIE Refclk if "ti,syscon-acspcie-proxy-ctrl" exists [+ + +]
Author: Siddharth Vadapalli <[email protected]>
Date:   Mon Oct 20 12:14:07 2025 -0400

    PCI: j721e: Enable ACSPCIE Refclk if "ti,syscon-acspcie-proxy-ctrl" exists
    
    [ Upstream commit 82c4be4168e26a5593aaa1002b5678128a638824 ]
    
    The ACSPCIE module is capable of driving the reference clock required by
    the PCIe Endpoint device. It is an alternative to on-board and external
    reference clock generators. Enabling the output from the ACSPCIE module's
    PAD IO Buffers requires clearing the "PAD IO disable" bits of the
    ACSPCIE_PROXY_CTRL register in the CTRL_MMR register space.
    
    Add support to enable the ACSPCIE reference clock output using the optional
    device-tree property "ti,syscon-acspcie-proxy-ctrl".
    
    Link: https://lore.kernel.org/linux-pci/[email protected]
    Signed-off-by: Siddharth Vadapalli <[email protected]>
    Signed-off-by: Krzysztof Wilczyński <[email protected]>
    Reviewed-by: Manivannan Sadhasivam <[email protected]>
    Stable-dep-of: f842d3313ba1 ("PCI: j721e: Fix programming sequence of "strap" settings")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: j721e: Fix programming sequence of "strap" settings [+ + +]
Author: Siddharth Vadapalli <[email protected]>
Date:   Mon Oct 20 12:14:08 2025 -0400

    PCI: j721e: Fix programming sequence of "strap" settings
    
    [ Upstream commit f842d3313ba179d4005096357289c7ad09cec575 ]
    
    The Cadence PCIe Controller integrated in the TI K3 SoCs supports both
    Root-Complex and Endpoint modes of operation. The Glue Layer allows
    "strapping" the Mode of operation of the Controller, the Link Speed
    and the Link Width. This is enabled by programming the "PCIEn_CTRL"
    register (n corresponds to the PCIe instance) within the CTRL_MMR
    memory-mapped register space. The "reset-values" of the registers are
    also different depending on the mode of operation.
    
    Since the PCIe Controller latches onto the "reset-values" immediately
    after being powered on, if the Glue Layer configuration is not done while
    the PCIe Controller is off, it will result in the PCIe Controller latching
    onto the wrong "reset-values". In practice, this will show up as a wrong
    representation of the PCIe Controller's capability structures in the PCIe
    Configuration Space. Some such capabilities which are supported by the PCIe
    Controller in the Root-Complex mode but are incorrectly latched onto as
    being unsupported are:
    - Link Bandwidth Notification
    - Alternate Routing ID (ARI) Forwarding Support
    - Next capability offset within Advanced Error Reporting (AER) capability
    
    Fix this by powering off the PCIe Controller before programming the "strap"
    settings and powering it on after that. The runtime PM APIs namely
    pm_runtime_put_sync() and pm_runtime_get_sync() will decrement and
    increment the usage counter respectively, causing GENPD to power off and
    power on the PCIe Controller.
    
    Fixes: f3e25911a430 ("PCI: j721e: Add TI J721E PCIe driver")
    Signed-off-by: Siddharth Vadapalli <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: rcar-host: Convert struct rcar_msi mask_lock into raw spinlock [+ + +]
Author: Marek Vasut <[email protected]>
Date:   Tue Oct 21 12:43:52 2025 -0400

    PCI: rcar-host: Convert struct rcar_msi mask_lock into raw spinlock
    
    [ Upstream commit 5ed35b4d490d8735021cce9b715b62a418310864 ]
    
    The rcar_msi_irq_unmask() function may be called from a PCI driver
    request_threaded_irq() function. This triggers kernel/irq/manage.c
    __setup_irq() which locks raw spinlock &desc->lock descriptor lock
    and with that descriptor lock held, calls rcar_msi_irq_unmask().
    
    Since the &desc->lock descriptor lock is a raw spinlock, and the rcar_msi
    .mask_lock is not a raw spinlock, this setup triggers 'BUG: Invalid wait
    context' with CONFIG_PROVE_RAW_LOCK_NESTING=y.
    
    Use scoped_guard() to simplify the locking.
    
    Fixes: 83ed8d4fa656 ("PCI: rcar: Convert to MSI domains")
    Reported-by: Duy Nguyen <[email protected]>
    Reported-by: Thuan Nguyen <[email protected]>
    Signed-off-by: Marek Vasut <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Reviewed-by: Geert Uytterhoeven <[email protected]>
    Acked-by: Marc Zyngier <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    [ replaced scoped_guard() with explicit raw_spin_lock_irqsave()/raw_spin_unlock_irqrestore() calls ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: rcar-host: Drop PMSR spinlock [+ + +]
Author: Marek Vasut <[email protected]>
Date:   Tue Oct 21 14:46:28 2025 -0400

    PCI: rcar-host: Drop PMSR spinlock
    
    [ Upstream commit 0a8f173d9dad13930d5888505dc4c4fd6a1d4262 ]
    
    The pmsr_lock spinlock used to be necessary to synchronize access to the
    PMSR register, because that access could have been triggered from either
    config space access in rcar_pcie_config_access() or an exception handler
    rcar_pcie_aarch32_abort_handler().
    
    The rcar_pcie_aarch32_abort_handler() case is no longer applicable since
    commit 6e36203bc14c ("PCI: rcar: Use PCI_SET_ERROR_RESPONSE after read
    which triggered an exception"), which performs more accurate, controlled
    invocation of the exception, and a fixup.
    
    This leaves rcar_pcie_config_access() as the only call site from which
    rcar_pcie_wakeup() is called. The rcar_pcie_config_access() can only be
    called from the controller struct pci_ops .read and .write callbacks,
    and those are serialized in drivers/pci/access.c using raw spinlock
    'pci_lock' . It should be noted that CONFIG_PCI_LOCKLESS_CONFIG is never
    set on this platform.
    
    Since the 'pci_lock' is a raw spinlock , and the 'pmsr_lock' is not a
    raw spinlock, this constellation triggers 'BUG: Invalid wait context'
    with CONFIG_PROVE_RAW_LOCK_NESTING=y .
    
    Remove the pmsr_lock to fix the locking.
    
    Fixes: a115b1bd3af0 ("PCI: rcar: Add L1 link state fix into data abort hook")
    Reported-by: Duy Nguyen <[email protected]>
    Reported-by: Thuan Nguyen <[email protected]>
    Signed-off-by: Marek Vasut <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: Geert Uytterhoeven <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: rcar: Demote WARN() to dev_warn_ratelimited() in rcar_pcie_wakeup() [+ + +]
Author: Marek Vasut <[email protected]>
Date:   Sun May 12 01:54:50 2024 +0200

    PCI: rcar: Demote WARN() to dev_warn_ratelimited() in rcar_pcie_wakeup()
    
    commit c93637e6a4c4e1d0e85ef7efac78d066bbb24d96 upstream.
    
    Avoid large backtrace, it is sufficient to warn the user that there has
    been a link problem. Either the link has failed and the system is in need
    of maintenance, or the link continues to work and user has been informed.
    The message from the warning can be looked up in the sources.
    
    This makes an actual link issue less verbose.
    
    First of all, this controller has a limitation in that the controller
    driver has to assist the hardware with transition to L1 link state by
    writing L1IATN to PMCTRL register, the L1 and L0 link state switching
    is not fully automatic on this controller.
    
    In case of an ASMedia ASM1062 PCIe SATA controller which does not support
    ASPM, on entry to suspend or during platform pm_test, the SATA controller
    enters D3hot state and the link enters L1 state. If the SATA controller
    wakes up before rcar_pcie_wakeup() was called and returns to D0, the link
    returns to L0 before the controller driver even started its transition to
    L1 link state. At this point, the SATA controller did send an PM_ENTER_L1
    DLLP to the PCIe controller and the PCIe controller received it, and the
    PCIe controller did set PMSR PMEL1RX bit.
    
    Once rcar_pcie_wakeup() is called, if the link is already back in L0 state
    and PMEL1RX bit is set, the controller driver has no way to determine if
    it should perform the link transition to L1 state, or treat the link as if
    it is in L0 state. Currently the driver attempts to perform the transition
    to L1 link state unconditionally, which in this specific case fails with a
    PMSR L1FAEG poll timeout, however the link still works as it is already
    back in L0 state.
    
    Reduce this warning verbosity. In case the link is really broken, the
    rcar_pcie_config_access() would fail, otherwise it will succeed and any
    system with this controller and ASM1062 can suspend without generating
    a backtrace.
    
    Fixes: 84b576146294 ("PCI: rcar: Finish transition to L1 state in rcar_pcie_config_access()")
    Link: https://lore.kernel.org/linux-pci/[email protected]
    Signed-off-by: Marek Vasut <[email protected]>
    Signed-off-by: Krzysztof Wilczyński <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: rcar: Finish transition to L1 state in rcar_pcie_config_access() [+ + +]
Author: Marek Vasut <[email protected]>
Date:   Tue Oct 21 14:46:27 2025 -0400

    PCI: rcar: Finish transition to L1 state in rcar_pcie_config_access()
    
    [ Upstream commit 84b576146294c2be702cfcd174eaa74167e276f9 ]
    
    In case the controller is transitioning to L1 in rcar_pcie_config_access(),
    any read/write access to PCIECDR triggers asynchronous external abort. This
    is because the transition to L1 link state must be manually finished by the
    driver. The PCIe IP can transition back from L1 state to L0 on its own.
    
    Avoid triggering the abort in rcar_pcie_config_access() by checking whether
    the controller is in the transition state, and if so, finish the transition
    right away. This prevents a lot of unnecessary exceptions, although not all
    of them.
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Geert Uytterhoeven <[email protected]>
    Signed-off-by: Marek Vasut <[email protected]>
    Signed-off-by: Lorenzo Pieralisi <[email protected]>
    Reviewed-by: Geert Uytterhoeven <[email protected]>
    Cc: Arnd Bergmann <[email protected]>
    Cc: Bjorn Helgaas <[email protected]>
    Cc: Geert Uytterhoeven <[email protected]>
    Cc: Krzysztof Wilczyński <[email protected]>
    Cc: Lorenzo Pieralisi <[email protected]>
    Cc: Wolfram Sang <[email protected]>
    Cc: Yoshihiro Shimoda <[email protected]>
    Cc: [email protected]
    Stable-dep-of: 0a8f173d9dad ("PCI: rcar-host: Drop PMSR spinlock")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: tegra194: Handle errors in BPMP response [+ + +]
Author: Vidya Sagar <[email protected]>
Date:   Mon Oct 20 12:21:28 2025 -0400

    PCI: tegra194: Handle errors in BPMP response
    
    [ Upstream commit f8c9ad46b00453a8c075453f3745f8d263f44834 ]
    
    The return value from tegra_bpmp_transfer() indicates the success or
    failure of the IPC transaction with BPMP. If the transaction succeeded, we
    also need to check the actual command's result code.
    
    If we don't have error handling for tegra_bpmp_transfer(), we will set the
    pcie->ep_state to EP_STATE_ENABLED even when the tegra_bpmp_transfer()
    command fails. Thus, the pcie->ep_state will get out of sync with reality,
    and any further PERST# assert + deassert will be a no-op and will not
    trigger the hardware initialization sequence.
    
    This is because pex_ep_event_pex_rst_deassert() checks the current
    pcie->ep_state, and does nothing if the current state is already
    EP_STATE_ENABLED.
    
    Thus, it is important to have error handling for tegra_bpmp_transfer(),
    such that the pcie->ep_state can not get out of sync with reality, so that
    we will try to initialize the hardware not only during the first PERST#
    assert + deassert, but also during any succeeding PERST# assert + deassert.
    
    One example where this fix is needed is when using a rock5b as host.
    During the initial PERST# assert + deassert (triggered by the bootloader on
    the rock5b) pex_ep_event_pex_rst_deassert() will get called, but for some
    unknown reason, the tegra_bpmp_transfer() call to initialize the PHY fails.
    Once Linux has been loaded on the rock5b, the PCIe driver will once again
    assert + deassert PERST#. However, without tegra_bpmp_transfer() error
    handling, this second PERST# assert + deassert will not trigger the
    hardware initialization sequence.
    
    With tegra_bpmp_transfer() error handling, the second PERST# assert +
    deassert will once again trigger the hardware to be initialized and this
    time the tegra_bpmp_transfer() succeeds.
    
    Fixes: c57247f940e8 ("PCI: tegra: Add support for PCIe endpoint mode in Tegra194")
    Signed-off-by: Vidya Sagar <[email protected]>
    [cassel: improve commit log]
    Signed-off-by: Niklas Cassel <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Reviewed-by: Jon Hunter <[email protected]>
    Acked-by: Thierry Reding <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: tegra194: Reset BARs when running in PCIe endpoint mode [+ + +]
Author: Niklas Cassel <[email protected]>
Date:   Tue Oct 21 15:43:23 2025 -0400

    PCI: tegra194: Reset BARs when running in PCIe endpoint mode
    
    [ Upstream commit 42f9c66a6d0cc45758dab77233c5460e1cf003df ]
    
    Tegra already defines all BARs except BAR0 as BAR_RESERVED.  This is
    sufficient for pci-epf-test to not allocate backing memory and to not call
    set_bar() for those BARs. However, marking a BAR as BAR_RESERVED does not
    mean that the BAR gets disabled.
    
    The host side driver, pci_endpoint_test, simply does an ioremap for all
    enabled BARs and will run tests against all enabled BARs, so it will run
    tests against the BARs marked as BAR_RESERVED.
    
    After running the BAR tests (which will write to all enabled BARs), the
    inbound address translation is broken. This is because the tegra controller
    exposes the ATU Port Logic Structure in BAR4, so when BAR4 is written, the
    inbound address translation settings get overwritten.
    
    To avoid this, implement the dw_pcie_ep_ops .init() callback and start off
    by disabling all BARs (pci-epf-test will later enable/configure BARs that
    are not defined as BAR_RESERVED).
    
    This matches the behavior of other PCIe endpoint drivers: dra7xx, imx6,
    layerscape-ep, artpec6, dw-rockchip, qcom-ep, rcar-gen4, and uniphier-ep.
    
    With this, the PCI endpoint kselftest test case CONSECUTIVE_BAR_TEST (which
    was specifically made to detect address translation issues) passes.
    
    Fixes: c57247f940e8 ("PCI: tegra: Add support for PCIe endpoint mode in Tegra194")
    Signed-off-by: Niklas Cassel <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    [ changed dw_pcie_ep_ops .init to .ep_init and exported dw_pcie_ep_reset_bar ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
PM: runtime: Add new devm functions [+ + +]
Author: Bence Csókás <[email protected]>
Date:   Mon Oct 20 09:04:35 2025 -0400

    PM: runtime: Add new devm functions
    
    [ Upstream commit 73db799bf5efc5a04654bb3ff6c9bf63a0dfa473 ]
    
    Add `devm_pm_runtime_set_active_enabled()` and
    `devm_pm_runtime_get_noresume()` for simplifying
    common cases in drivers.
    
    Signed-off-by: Bence Csókás <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Stable-dep-of: 0792c1984a45 ("iio: imu: inv_icm42600: Simplify pm_runtime setup")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
r8152: add error handling in rtl8152_driver_init [+ + +]
Author: Yi Cong <[email protected]>
Date:   Sat Oct 11 16:24:15 2025 +0800

    r8152: add error handling in rtl8152_driver_init
    
    commit 75527d61d60d493d1eb064f335071a20ca581f54 upstream.
    
    rtl8152_driver_init() is missing the error handling.
    When rtl8152_driver registration fails, rtl8152_cfgselector_driver
    should be deregistered.
    
    Fixes: ec51fbd1b8a2 ("r8152: add USB device driver for config selection")
    Cc: [email protected]
    Signed-off-by: Yi Cong <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [[email protected]: clarified the commit message]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
 
r8169: fix packet truncation after S4 resume on RTL8168H/RTL8111H [+ + +]
Author: Linmao Li <[email protected]>
Date:   Thu Oct 9 20:25:49 2025 +0800

    r8169: fix packet truncation after S4 resume on RTL8168H/RTL8111H
    
    [ Upstream commit 70f92ab97042f243e1c8da1c457ff56b9b3e49f1 ]
    
    After resume from S4 (hibernate), RTL8168H/RTL8111H truncates incoming
    packets. Packet captures show messages like "IP truncated-ip - 146 bytes
    missing!".
    
    The issue is caused by RxConfig not being properly re-initialized after
    resume. Re-initializing the RxConfig register before the chip
    re-initialization sequence avoids the truncation and restores correct
    packet reception.
    
    This follows the same pattern as commit ef9da46ddef0 ("r8169: fix data
    corruption issue on RTL8402").
    
    Fixes: 6e1d0b898818 ("r8169:add support for RTL8168H and RTL8107E")
    Signed-off-by: Linmao Li <[email protected]>
    Reviewed-by: Jacob Keller <[email protected]>
    Reviewed-by: Heiner Kallweit <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "cpuidle: menu: Avoid discarding useful information" [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Sat Oct 18 14:27:15 2025 +0200

    Revert "cpuidle: menu: Avoid discarding useful information"
    
    commit 10fad4012234a7dea621ae17c0c9486824f645a0 upstream.
    
    It is reported that commit 85975daeaa4d ("cpuidle: menu: Avoid discarding
    useful information") led to a performance regression on Intel Jasper Lake
    systems because it reduced the time spent by CPUs in idle state C7 which
    is correlated to the maximum frequency the CPUs can get to because of an
    average running power limit [1].
    
    Before that commit, get_typical_interval() would have returned UINT_MAX
    whenever it had been unable to make a high-confidence prediction which
    had led to selecting the deepest available idle state too often and
    both power and performance had been inadequate as a result of that on
    some systems.  However, this had not been a problem on systems with
    relatively aggressive average running power limits, like the Jasper Lake
    systems in question, because on those systems it was compensated by the
    ability to run CPUs faster.
    
    It was addressed by causing get_typical_interval() to return a number
    based on the recent idle duration information available to it even if it
    could not make a high-confidence prediction, but that clearly did not
    take the possible correlation between idle power and available CPU
    capacity into account.
    
    For this reason, revert most of the changes made by commit 85975daeaa4d,
    except for one cosmetic cleanup, and add a comment explaining the
    rationale for returning UINT_MAX from get_typical_interval() when it
    is unable to make a high-confidence prediction.
    
    Fixes: 85975daeaa4d ("cpuidle: menu: Avoid discarding useful information")
    Closes: https://lore.kernel.org/linux-pm/36iykr223vmcfsoysexug6s274nq2oimcu55ybn6ww4il3g3cv@cohflgdbpnq7/ [1]
    Reported-by: Sergey Senozhatsky <[email protected]>
    Cc: All applicable <[email protected]>
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "perf test: Don't leak workload gopipe in PERF_RECORD_*" [+ + +]
Author: Niko Mauno <[email protected]>
Date:   Thu Oct 23 10:51:01 2025 +0300

    Revert "perf test: Don't leak workload gopipe in PERF_RECORD_*"
    
    This reverts commit b7e5c59f3b0971f56ebbceb9d42cc45e9ac1cd94 which is
    commit 48918cacefd226af44373e914e63304927c0e7dc upstream.
    
    Commit in question broke building perf followingly with v5.15.195:
    
      | ld: perf-in.o: in function `test__PERF_RECORD':
      | tools/perf/tests/perf-record.c:142: undefined reference to `evlist__cancel_workload'
    
    The 'evlist__cancel_workload' seems to be introduced in
    commit e880a70f8046 ("perf stat: Close cork_fd when create_perf_stat_counter() failed")
    which is currently not included in the 5.15 stable series.
    
    Fixes: b7e5c59f3b09 ("perf test: Don't leak workload gopipe in PERF_RECORD_*")
    Cc: [email protected] # 5.15
    Signed-off-by: Niko Mauno <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
riscv: kprobes: Fix probe address validation [+ + +]
Author: Fabian Vogt <[email protected]>
Date:   Wed Sep 10 17:25:13 2025 +0200

    riscv: kprobes: Fix probe address validation
    
    [ Upstream commit 9e68bd803fac49274fde914466fd3b07c4d602c8 ]
    
    When adding a kprobe such as "p:probe/tcp_sendmsg _text+15392192",
    arch_check_kprobe would start iterating all instructions starting from
    _text until the probed address. Not only is this very inefficient, but
    literal values in there (e.g. left by function patching) are
    misinterpreted in a way that causes a desync.
    
    Fix this by doing it like x86: start the iteration at the closest
    preceding symbol instead of the given starting point.
    
    Fixes: 87f48c7ccc73 ("riscv: kprobe: Fixup kernel panic when probing an illegal position")
    Signed-off-by: Fabian Vogt <[email protected]>
    Signed-off-by: Marvin Friedrich <[email protected]>
    Acked-by: Guo Ren <[email protected]>
    Link: https://lore.kernel.org/r/6191817.lOV4Wx5bFT@fvogt-thinkpad
    Signed-off-by: Paul Walmsley <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
rtnetlink: Allow deleting FDB entries in user namespace [+ + +]
Author: Johannes Wiesböck <[email protected]>
Date:   Wed Oct 15 22:15:43 2025 +0200

    rtnetlink: Allow deleting FDB entries in user namespace
    
    [ Upstream commit bf29555f5bdc017bac22ca66fcb6c9f46ec8788f ]
    
    Creating FDB entries is possible from a non-initial user namespace when
    having CAP_NET_ADMIN, yet, when deleting FDB entries, processes receive
    an EPERM because the capability is always checked against the initial
    user namespace. This restricts the FDB management from unprivileged
    containers.
    
    Drop the netlink_capable check in rtnl_fdb_del as it was originally
    dropped in c5c351088ae7 and reintroduced in 1690be63a27b without
    intention.
    
    This patch was tested using a container on GyroidOS, where it was
    possible to delete FDB entries from an unprivileged user namespace and
    private network namespace.
    
    Fixes: 1690be63a27b ("bridge: Add vlan support to static neighbors")
    Reviewed-by: Michael Weiß <[email protected]>
    Tested-by: Harshal Gohel <[email protected]>
    Signed-off-by: Johannes Wiesböck <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Reviewed-by: Nikolay Aleksandrov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
s390/cio: Update purge function to unregister the unused subchannels [+ + +]
Author: Vineeth Vijayan <[email protected]>
Date:   Wed Oct 1 15:38:17 2025 +0200

    s390/cio: Update purge function to unregister the unused subchannels
    
    commit 9daa5a8795865f9a3c93d8d1066785b07ded6073 upstream.
    
    Starting with 'commit 2297791c92d0 ("s390/cio: dont unregister
    subchannel from child-drivers")', cio no longer unregisters
    subchannels when the attached device is invalid or unavailable.
    
    As an unintended side-effect, the cio_ignore purge function no longer
    removes subchannels for devices on the cio_ignore list if no CCW device
    is attached. This situation occurs when a CCW device is non-operational
    or unavailable
    
    To ensure the same outcome of the purge function as when the
    current cio_ignore list had been active during boot, update the purge
    function to remove I/O subchannels without working CCW devices if the
    associated device number is found on the cio_ignore list.
    
    Fixes: 2297791c92d0 ("s390/cio: dont unregister subchannel from child-drivers")
    Suggested-by: Peter Oberparleiter <[email protected]>
    Reviewed-by: Peter Oberparleiter <[email protected]>
    Signed-off-by: Vineeth Vijayan <[email protected]>
    Signed-off-by: Heiko Carstens <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sched/balancing: Rename newidle_balance() => sched_balance_newidle() [+ + +]
Author: Ingo Molnar <[email protected]>
Date:   Fri Mar 8 12:18:16 2024 +0100

    sched/balancing: Rename newidle_balance() => sched_balance_newidle()
    
    [ Upstream commit 7d058285cd77cc1411c91efd1b1673530bb1bee8 ]
    
    Standardize scheduler load-balancing function names on the
    sched_balance_() prefix.
    
    Signed-off-by: Ingo Molnar <[email protected]>
    Reviewed-by: Shrikanth Hegde <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: 17e3e88ed0b6 ("sched/fair: Fix pelt lost idle time detection")
    Signed-off-by: Sasha Levin <[email protected]>

 
sched/fair: Fix pelt lost idle time detection [+ + +]
Author: Vincent Guittot <[email protected]>
Date:   Wed Oct 8 15:12:14 2025 +0200

    sched/fair: Fix pelt lost idle time detection
    
    [ Upstream commit 17e3e88ed0b6318fde0d1c14df1a804711cab1b5 ]
    
    The check for some lost idle pelt time should be always done when
    pick_next_task_fair() fails to pick a task and not only when we call it
    from the fair fast-path.
    
    The case happens when the last running task on rq is a RT or DL task. When
    the latter goes to sleep and the /Sum of util_sum of the rq is at the max
    value, we don't account the lost of idle time whereas we should.
    
    Fixes: 67692435c411 ("sched: Rework pick_next_task() slow-path")
    Signed-off-by: Vincent Guittot <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
sctp: avoid NULL dereference when chunk data buffer is missing [+ + +]
Author: Alexey Simakov <[email protected]>
Date:   Tue Oct 21 16:00:36 2025 +0300

    sctp: avoid NULL dereference when chunk data buffer is missing
    
    [ Upstream commit 441f0647f7673e0e64d4910ef61a5fb8f16bfb82 ]
    
    chunk->skb pointer is dereferenced in the if-block where it's supposed
    to be NULL only.
    
    chunk->skb can only be NULL if chunk->head_skb is not. Check for frag_list
    instead and do it just before replacing chunk->skb. We're sure that
    otherwise chunk->skb is non-NULL because of outer if() condition.
    
    Fixes: 90017accff61 ("sctp: Add GSO support")
    Signed-off-by: Alexey Simakov <[email protected]>
    Acked-by: Marcelo Ricardo Leitner <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
serial: 8250_exar: add support for Advantech 2 port card with Device ID 0x0018 [+ + +]
Author: Florian Eckert <[email protected]>
Date:   Wed Sep 24 15:41:15 2025 +0200

    serial: 8250_exar: add support for Advantech 2 port card with Device ID 0x0018
    
    commit e7cbce761fe3fcbcb49bcf30d4f8ca5e1a9ee2a0 upstream.
    
    The Advantech 2-port serial card with PCI vendor=0x13fe and device=0x0018
    has a 'XR17V35X' chip installed on the circuit board. Therefore, this
    driver can be used instead of theu outdated out-of-tree driver from the
    manufacturer.
    
    Signed-off-by: Florian Eckert <[email protected]>
    Cc: stable <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
splice, net: Add a splice_eof op to file-ops and socket-ops [+ + +]
Author: David Howells <[email protected]>
Date:   Wed Jun 7 19:19:10 2023 +0100

    splice, net: Add a splice_eof op to file-ops and socket-ops
    
    [ Upstream commit 2bfc66850952b6921b2033b09729ec59eabbc81d ]
    
    Add an optional method, ->splice_eof(), to allow splice to indicate the
    premature termination of a splice to struct file_operations and struct
    proto_ops.
    
    This is called if sendfile() or splice() encounters all of the following
    conditions inside splice_direct_to_actor():
    
     (1) the user did not set SPLICE_F_MORE (splice only), and
    
     (2) an EOF condition occurred (->splice_read() returned 0), and
    
     (3) we haven't read enough to fulfill the request (ie. len > 0 still), and
    
     (4) we have already spliced at least one byte.
    
    A further patch will modify the behaviour of SPLICE_F_MORE to always be
    passed to the actor if either the user set it or we haven't yet read
    sufficient data to fulfill the request.
    
    Suggested-by: Linus Torvalds <[email protected]>
    Link: https://lore.kernel.org/r/CAHk-=wh=V579PDYvkpnTobCLGczbgxpMgGmmhqiTyE34Cpi5Gg@mail.gmail.com/
    Signed-off-by: David Howells <[email protected]>
    Reviewed-by: Jakub Kicinski <[email protected]>
    cc: Jens Axboe <[email protected]>
    cc: Christoph Hellwig <[email protected]>
    cc: Al Viro <[email protected]>
    cc: Matthew Wilcox <[email protected]>
    cc: Jan Kara <[email protected]>
    cc: Jeff Layton <[email protected]>
    cc: David Hildenbrand <[email protected]>
    cc: Christian Brauner <[email protected]>
    cc: Chuck Lever <[email protected]>
    cc: Boris Pismenny <[email protected]>
    cc: John Fastabend <[email protected]>
    cc: [email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: b014a4e066c5 ("tls: wait for async encrypt in case of error during latter iterations of sendmsg")
    Signed-off-by: Sasha Levin <[email protected]>

 
tcp: fix tcp_tso_should_defer() vs large RTT [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Sat Oct 11 11:57:42 2025 +0000

    tcp: fix tcp_tso_should_defer() vs large RTT
    
    [ Upstream commit 295ce1eb36ae47dc862d6c8a1012618a25516208 ]
    
    Neal reported that using neper tcp_stream with TCP_TX_DELAY
    set to 50ms would often lead to flows stuck in a small cwnd mode,
    regardless of the congestion control.
    
    While tcp_stream sets TCP_TX_DELAY too late after the connect(),
    it highlighted two kernel bugs.
    
    The following heuristic in tcp_tso_should_defer() seems wrong
    for large RTT:
    
    delta = tp->tcp_clock_cache - head->tstamp;
    /* If next ACK is likely to come too late (half srtt), do not defer */
    if ((s64)(delta - (u64)NSEC_PER_USEC * (tp->srtt_us >> 4)) < 0)
          goto send_now;
    
    If next ACK is expected to come in more than 1 ms, we should
    not defer because we prefer a smooth ACK clocking.
    
    While blamed commit was a step in the good direction, it was not
    generic enough.
    
    Another patch fixing TCP_TX_DELAY for established flows
    will be proposed when net-next reopens.
    
    Fixes: 50c8339e9299 ("tcp: tso: restore IW10 after TSO autosizing")
    Reported-by: Neal Cardwell <[email protected]>
    Signed-off-by: Eric Dumazet <[email protected]>
    Reviewed-by: Neal Cardwell <[email protected]>
    Tested-by: Neal Cardwell <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [[email protected]: fixed whitespace issue]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tg3: prevent use of uninitialized remote_adv and local_adv variables [+ + +]
Author: Alexey Simakov <[email protected]>
Date:   Tue Oct 14 19:47:38 2025 +0300

    tg3: prevent use of uninitialized remote_adv and local_adv variables
    
    [ Upstream commit 0c3f2e62815a43628e748b1e4ad97a1c46cce703 ]
    
    Some execution paths that jump to the fiber_setup_done label
    could leave the remote_adv and local_adv variables uninitialized
    and then use it.
    
    Initialize this variables at the point of definition to avoid this.
    
    Fixes: 85730a631f0c ("tg3: Add SGMII phy support for 5719/5718 serdes")
    Co-developed-by: Alexandr Sapozhnikov <[email protected]>
    Signed-off-by: Alexandr Sapozhnikov <[email protected]>
    Signed-off-by: Alexey Simakov <[email protected]>
    Reviewed-by: Pavan Chebbi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tls: always set record_type in tls_process_cmsg [+ + +]
Author: Sabrina Dubroca <[email protected]>
Date:   Tue Oct 14 11:16:58 2025 +0200

    tls: always set record_type in tls_process_cmsg
    
    [ Upstream commit b6fe4c29bb51cf239ecf48eacf72b924565cb619 ]
    
    When userspace wants to send a non-DATA record (via the
    TLS_SET_RECORD_TYPE cmsg), we need to send any pending data from a
    previous MSG_MORE send() as a separate DATA record. If that DATA record
    is encrypted asynchronously, tls_handle_open_record will return
    -EINPROGRESS. This is currently treated as an error by
    tls_process_cmsg, and it will skip setting record_type to the correct
    value, but the caller (tls_sw_sendmsg_locked) handles that return
    value correctly and proceeds with sending the new message with an
    incorrect record_type (DATA instead of whatever was requested in the
    cmsg).
    
    Always set record_type before handling the open record. If
    tls_handle_open_record returns an error, record_type will be
    ignored. If it succeeds, whether with synchronous crypto (returning 0)
    or asynchronous (returning -EINPROGRESS), the caller will proceed
    correctly.
    
    Fixes: a42055e8d2c3 ("net/tls: Add support for async encryption of records for performance")
    Reported-by: Jann Horn <[email protected]>
    Signed-off-by: Sabrina Dubroca <[email protected]>
    Link: https://patch.msgid.link/0457252e578a10a94e40c72ba6288b3a64f31662.1760432043.git.sd@queasysnail.net
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tls: don't rely on tx_work during send() [+ + +]
Author: Sabrina Dubroca <[email protected]>
Date:   Tue Oct 14 11:17:00 2025 +0200

    tls: don't rely on tx_work during send()
    
    [ Upstream commit 7f846c65ca11e63d2409868ff039081f80e42ae4 ]
    
    With async crypto, we rely on tx_work to actually transmit records
    once encryption completes. But while send() is running, both the
    tx_lock and socket lock are held, so tx_work_handler cannot process
    the queue of encrypted records, and simply reschedules itself. During
    a large send(), this could last a long time, and use a lot of memory.
    
    Transmit any pending encrypted records before restarting the main
    loop of tls_sw_sendmsg_locked.
    
    Fixes: a42055e8d2c3 ("net/tls: Add support for async encryption of records for performance")
    Reported-by: Jann Horn <[email protected]>
    Signed-off-by: Sabrina Dubroca <[email protected]>
    Link: https://patch.msgid.link/8396631478f70454b44afb98352237d33f48d34d.1760432043.git.sd@queasysnail.net
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tls: wait for async encrypt in case of error during latter iterations of sendmsg [+ + +]
Author: Sabrina Dubroca <[email protected]>
Date:   Tue Oct 14 11:16:57 2025 +0200

    tls: wait for async encrypt in case of error during latter iterations of sendmsg
    
    [ Upstream commit b014a4e066c555185b7c367efacdc33f16695495 ]
    
    If we hit an error during the main loop of tls_sw_sendmsg_locked (eg
    failed allocation), we jump to send_end and immediately
    return. Previous iterations may have queued async encryption requests
    that are still pending. We should wait for those before returning, as
    we could otherwise be reading from memory that userspace believes
    we're not using anymore, which would be a sort of use-after-free.
    
    This is similar to what tls_sw_recvmsg already does: failures during
    the main loop jump to the "wait for async" code, not straight to the
    unlock/return.
    
    Fixes: a42055e8d2c3 ("net/tls: Add support for async encryption of records for performance")
    Reported-by: Jann Horn <[email protected]>
    Signed-off-by: Sabrina Dubroca <[email protected]>
    Link: https://patch.msgid.link/c793efe9673b87f808d84fdefc0f732217030c52.1760432043.git.sd@queasysnail.net
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
usb/core/quirks: Add Huawei ME906S to wakeup quirk [+ + +]
Author: Tim Guttzeit <[email protected]>
Date:   Mon Oct 20 15:39:04 2025 +0200

    usb/core/quirks: Add Huawei ME906S to wakeup quirk
    
    commit dfc2cf4dcaa03601cd4ca0f7def88b2630fca6ab upstream.
    
    The list of Huawei LTE modules needing the quirk fixing spurious wakeups
    was missing the IDs of the Huawei ME906S module, therefore suspend did not
    work.
    
    Cc: stable <[email protected]>
    Signed-off-by: Tim Guttzeit <[email protected]>
    Signed-off-by: Werner Sembach <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: gadget: f_acm: Refactor bind path to use __free() [+ + +]
Author: Kuen-Han Tsai <[email protected]>
Date:   Mon Oct 20 12:19:42 2025 -0400

    usb: gadget: f_acm: Refactor bind path to use __free()
    
    [ Upstream commit 47b2116e54b4a854600341487e8b55249e926324 ]
    
    After an bind/unbind cycle, the acm->notify_req is left stale. If a
    subsequent bind fails, the unified error label attempts to free this
    stale request, leading to a NULL pointer dereference when accessing
    ep->ops->free_request.
    
    Refactor the error handling in the bind path to use the __free()
    automatic cleanup mechanism.
    
    Unable to handle kernel NULL pointer dereference at virtual address 0000000000000020
    Call trace:
     usb_ep_free_request+0x2c/0xec
     gs_free_req+0x30/0x44
     acm_bind+0x1b8/0x1f4
     usb_add_function+0xcc/0x1f0
     configfs_composite_bind+0x468/0x588
     gadget_bind_driver+0x104/0x270
     really_probe+0x190/0x374
     __driver_probe_device+0xa0/0x12c
     driver_probe_device+0x3c/0x218
     __device_attach_driver+0x14c/0x188
     bus_for_each_drv+0x10c/0x168
     __device_attach+0xfc/0x198
     device_initial_probe+0x14/0x24
     bus_probe_device+0x94/0x11c
     device_add+0x268/0x48c
     usb_add_gadget+0x198/0x28c
     dwc3_gadget_init+0x700/0x858
     __dwc3_set_mode+0x3cc/0x664
     process_scheduled_works+0x1d8/0x488
     worker_thread+0x244/0x334
     kthread+0x114/0x1bc
     ret_from_fork+0x10/0x20
    
    Fixes: 1f1ba11b6494 ("usb gadget: issue notifications from ACM function")
    Cc: [email protected]
    Signed-off-by: Kuen-Han Tsai <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: f_ncm: Refactor bind path to use __free() [+ + +]
Author: Kuen-Han Tsai <[email protected]>
Date:   Mon Oct 20 12:20:33 2025 -0400

    usb: gadget: f_ncm: Refactor bind path to use __free()
    
    [ Upstream commit 75a5b8d4ddd4eb6b16cb0b475d14ff4ae64295ef ]
    
    After an bind/unbind cycle, the ncm->notify_req is left stale. If a
    subsequent bind fails, the unified error label attempts to free this
    stale request, leading to a NULL pointer dereference when accessing
    ep->ops->free_request.
    
    Refactor the error handling in the bind path to use the __free()
    automatic cleanup mechanism.
    
    Unable to handle kernel NULL pointer dereference at virtual address 0000000000000020
    Call trace:
     usb_ep_free_request+0x2c/0xec
     ncm_bind+0x39c/0x3dc
     usb_add_function+0xcc/0x1f0
     configfs_composite_bind+0x468/0x588
     gadget_bind_driver+0x104/0x270
     really_probe+0x190/0x374
     __driver_probe_device+0xa0/0x12c
     driver_probe_device+0x3c/0x218
     __device_attach_driver+0x14c/0x188
     bus_for_each_drv+0x10c/0x168
     __device_attach+0xfc/0x198
     device_initial_probe+0x14/0x24
     bus_probe_device+0x94/0x11c
     device_add+0x268/0x48c
     usb_add_gadget+0x198/0x28c
     dwc3_gadget_init+0x700/0x858
     __dwc3_set_mode+0x3cc/0x664
     process_scheduled_works+0x1d8/0x488
     worker_thread+0x244/0x334
     kthread+0x114/0x1bc
     ret_from_fork+0x10/0x20
    
    Fixes: 9f6ce4240a2b ("usb: gadget: f_ncm.c added")
    Cc: [email protected]
    Signed-off-by: Kuen-Han Tsai <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: Introduce free_usb_request helper [+ + +]
Author: Kuen-Han Tsai <[email protected]>
Date:   Mon Oct 20 12:20:32 2025 -0400

    usb: gadget: Introduce free_usb_request helper
    
    [ Upstream commit 201c53c687f2b55a7cc6d9f4000af4797860174b ]
    
    Introduce the free_usb_request() function that frees both the request's
    buffer and the request itself.
    
    This function serves as the cleanup callback for DEFINE_FREE() to enable
    automatic, scope-based cleanup for usb_request pointers.
    
    Signed-off-by: Kuen-Han Tsai <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: 75a5b8d4ddd4 ("usb: gadget: f_ncm: Refactor bind path to use __free()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: Store endpoint pointer in usb_request [+ + +]
Author: Kuen-Han Tsai <[email protected]>
Date:   Mon Oct 20 12:20:31 2025 -0400

    usb: gadget: Store endpoint pointer in usb_request
    
    [ Upstream commit bfb1d99d969fe3b892db30848aeebfa19d21f57f ]
    
    Gadget function drivers often have goto-based error handling in their
    bind paths, which can be bug-prone. Refactoring these paths to use
    __free() scope-based cleanup is desirable, but currently blocked.
    
    The blocker is that usb_ep_free_request(ep, req) requires two
    parameters, while the __free() mechanism can only pass a pointer to the
    request itself.
    
    Store an endpoint pointer in the struct usb_request. The pointer is
    populated centrally in usb_ep_alloc_request() on every successful
    allocation, making the request object self-contained.
    
    Signed-off-by: Kuen-Han Tsai <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: 75a5b8d4ddd4 ("usb: gadget: f_ncm: Refactor bind path to use __free()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: raw-gadget: do not limit transfer length [+ + +]
Author: Andrey Konovalov <[email protected]>
Date:   Wed Oct 22 00:25:45 2025 +0200

    usb: raw-gadget: do not limit transfer length
    
    commit 37b9dd0d114a0e38c502695e30f55a74fb0c37d0 upstream.
    
    Drop the check on the maximum transfer length in Raw Gadget for both
    control and non-control transfers.
    
    Limiting the transfer length causes a problem with emulating USB devices
    whose full configuration descriptor exceeds PAGE_SIZE in length.
    
    Overall, there does not appear to be any reason to enforce any kind of
    transfer length limit on the Raw Gadget side for either control or
    non-control transfers, so let's just drop the related check.
    
    Cc: stable <[email protected]>
    Fixes: f2c2e717642c ("usb: gadget: add raw-gadget interface")
    Signed-off-by: Andrey Konovalov <[email protected]>
    Link: https://patch.msgid.link/a6024e8eab679043e9b8a5defdb41c4bda62f02b.1761085528.git.andreyknvl@gmail.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
USB: serial: option: add Quectel RG255C [+ + +]
Author: Reinhard Speyerer <[email protected]>
Date:   Wed Oct 22 16:17:26 2025 +0200

    USB: serial: option: add Quectel RG255C
    
    commit 89205c60c0fc96b73567a2e9fe27ee3f59d01193 upstream.
    
    Add support for Quectel RG255C devices to complement commit 5c964c8a97c1
    ("net: usb: qmi_wwan: add Quectel RG255C").
    The composition is DM / NMEA / AT / QMI.
    
    T:  Bus=01 Lev=02 Prnt=99 Port=01 Cnt=02 Dev#=110 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=2c7c ProdID=0316 Rev= 5.15
    S:  Manufacturer=Quectel
    S:  Product=RG255C-GL
    S:  SerialNumber=xxxxxxxx
    C:* #Ifs= 4 Cfg#= 1 Atr=a0 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    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= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
    E:  Ad=86(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Signed-off-by: Reinhard Speyerer <[email protected]>
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: option: add Telit FN920C04 ECM compositions [+ + +]
Author: LI Qingwu <[email protected]>
Date:   Thu Oct 23 03:44:22 2025 +0000

    USB: serial: option: add Telit FN920C04 ECM compositions
    
    commit 622865c73ae30f254abdf182f4b66cccbe3e0f10 upstream.
    
    Add support for the Telit Cinterion FN920C04 module when operating in
    ECM (Ethernet Control Model) mode. The following USB product IDs are
    used by the module when AT#USBCFG is set to 3 or 7.
    
    0x10A3: ECM + tty (NMEA) + tty (DUN) [+ tty (DIAG)]
    T:  Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#=  3 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10a3 Rev= 5.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FN920
    S:  SerialNumber=76e7cb38
    C:* #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=06 Prot=00 Driver=cdc_ether
    E:  Ad=82(I) Atr=03(Int.) MxPS=  16 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
    I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=01(O) 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=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10A8: ECM + tty (DUN) + tty (AUX) [+ tty (DIAG)]
    T:  Bus=03 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#=  3 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10a8 Rev= 5.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FN920
    S:  SerialNumber=76e7cb38
    C:* #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=06 Prot=00 Driver=cdc_ether
    E:  Ad=82(I) Atr=03(Int.) MxPS=  16 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
    I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Adding these IDs allows the option driver to automatically create the
    corresponding /dev/ttyUSB* ports under ECM mode.
    
    Tested with FN920C04 under ECM configuration (USBCFG=3 and 7).
    
    Signed-off-by: LI Qingwu <[email protected]>
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: option: add UNISOC UIS7720 [+ + +]
Author: Renjun Wang <[email protected]>
Date:   Sun Oct 19 18:44:38 2025 +0800

    USB: serial: option: add UNISOC UIS7720
    
    commit 71c07570b918f000de5d0f7f1bf17a2887e303b5 upstream.
    
    Add support for UNISOC (Spreadtrum) UIS7720 (A7720) module.
    
    T:  Bus=05 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  5 Spd=480 MxCh= 0
    D:  Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1782 ProdID=4064 Rev=04.04
    S:  Manufacturer=Unisoc-phone
    S:  Product=Unisoc-phone
    S:  SerialNumber=0123456789ABCDEF
    C:  #Ifs= 9 Cfg#= 1 Atr=c0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=e0(wlcon) Sub=01 Prot=03 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= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 7 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 8 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=08(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0&1: RNDIS, 2: LOG, 3: DIAG, 4&5: AT Ports, 6&7: AT2 Ports, 8: ADB
    
    Signed-off-by: Renjun Wang <[email protected]>
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
vfs: Don't leak disconnected dentries on umount [+ + +]
Author: Jan Kara <[email protected]>
Date:   Mon Oct 20 20:42:20 2025 -0400

    vfs: Don't leak disconnected dentries on umount
    
    [ Upstream commit 56094ad3eaa21e6621396cc33811d8f72847a834 ]
    
    When user calls open_by_handle_at() on some inode that is not cached, we
    will create disconnected dentry for it. If such dentry is a directory,
    exportfs_decode_fh_raw() will then try to connect this dentry to the
    dentry tree through reconnect_path(). It may happen for various reasons
    (such as corrupted fs or race with rename) that the call to
    lookup_one_unlocked() in reconnect_one() will fail to find the dentry we
    are trying to reconnect and instead create a new dentry under the
    parent. Now this dentry will not be marked as disconnected although the
    parent still may well be disconnected (at least in case this
    inconsistency happened because the fs is corrupted and .. doesn't point
    to the real parent directory). This creates inconsistency in
    disconnected flags but AFAICS it was mostly harmless. At least until
    commit f1ee616214cb ("VFS: don't keep disconnected dentries on d_anon")
    which removed adding of most disconnected dentries to sb->s_anon list.
    Thus after this commit cleanup of disconnected dentries implicitely
    relies on the fact that dput() will immediately reclaim such dentries.
    However when some leaf dentry isn't marked as disconnected, as in the
    scenario described above, the reclaim doesn't happen and the dentries
    are "leaked". Memory reclaim can eventually reclaim them but otherwise
    they stay in memory and if umount comes first, we hit infamous "Busy
    inodes after unmount" bug. Make sure all dentries created under a
    disconnected parent are marked as disconnected as well.
    
    Reported-by: [email protected]
    Fixes: f1ee616214cb ("VFS: don't keep disconnected dentries on d_anon")
    CC: [email protected]
    Signed-off-by: Jan Kara <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    [ relocated DCACHE_DISCONNECTED propagation from d_alloc_parallel() to d_alloc() ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
vsock: fix lock inversion in vsock_assign_transport() [+ + +]
Author: Stefano Garzarella <[email protected]>
Date:   Tue Oct 21 14:17:18 2025 +0200

    vsock: fix lock inversion in vsock_assign_transport()
    
    commit f7c877e7535260cc7a21484c994e8ce7e8cb6780 upstream.
    
    Syzbot reported a potential lock inversion deadlock between
    vsock_register_mutex and sk_lock-AF_VSOCK when vsock_linger() is called.
    
    The issue was introduced by commit 687aa0c5581b ("vsock: Fix
    transport_* TOCTOU") which added vsock_register_mutex locking in
    vsock_assign_transport() around the transport->release() call, that can
    call vsock_linger(). vsock_assign_transport() can be called with sk_lock
    held. vsock_linger() calls sk_wait_event() that temporarily releases and
    re-acquires sk_lock. During this window, if another thread hold
    vsock_register_mutex while trying to acquire sk_lock, a circular
    dependency is created.
    
    Fix this by releasing vsock_register_mutex before calling
    transport->release() and vsock_deassign_transport(). This is safe
    because we don't need to hold vsock_register_mutex while releasing the
    old transport, and we ensure the new transport won't disappear by
    obtaining a module reference first via try_module_get().
    
    Reported-by: [email protected]
    Tested-by: [email protected]
    Fixes: 687aa0c5581b ("vsock: Fix transport_* TOCTOU")
    Cc: [email protected]
    Cc: [email protected]
    Signed-off-by: Stefano Garzarella <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
wifi: ath11k: HAL SRNG: don't deinitialize and re-initialize again [+ + +]
Author: Muhammad Usama Anjum <[email protected]>
Date:   Mon Oct 20 12:17:40 2025 -0400

    wifi: ath11k: HAL SRNG: don't deinitialize and re-initialize again
    
    [ Upstream commit 32be3ca4cf78b309dfe7ba52fe2d7cc3c23c5634 ]
    
    Don't deinitialize and reinitialize the HAL helpers. The dma memory is
    deallocated and there is high possibility that we'll not be able to get
    the same memory allocated from dma when there is high memory pressure.
    
    Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03926.13-QCAHSPSWPL_V2_SILICONZ_CE-2.52297.6
    
    Fixes: d5c65159f289 ("ath11k: driver for Qualcomm IEEE 802.11ax devices")
    Cc: [email protected]
    Cc: Baochen Qiang <[email protected]>
    Reviewed-by: Baochen Qiang <[email protected]>
    Signed-off-by: Muhammad Usama Anjum <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
xfs: always warn about deprecated mount options [+ + +]
Author: Darrick J. Wong <[email protected]>
Date:   Sun Oct 26 19:49:25 2025 -0400

    xfs: always warn about deprecated mount options
    
    [ Upstream commit 630785bfbe12c3ee3ebccd8b530a98d632b7e39d ]
    
    The deprecation of the 'attr2' mount option in 6.18 wasn't entirely
    successful because nobody noticed that the kernel never printed a
    warning about attr2 being set in fstab if the only xfs filesystem is the
    root fs; the initramfs mounts the root fs with no mount options; and the
    init scripts only conveyed the fstab options by remounting the root fs.
    
    Fix this by making it complain all the time.
    
    Cc: [email protected] # v5.13
    Fixes: 92cf7d36384b99 ("xfs: Skip repetitive warnings about mount options")
    Signed-off-by: Darrick J. Wong <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Carlos Maiolino <[email protected]>
    Signed-off-by: Carlos Maiolino <[email protected]>
    [ Update existing xfs_fs_warn_deprecated() callers ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

xfs: fix log CRC mismatches between i386 and other architectures [+ + +]
Author: Christoph Hellwig <[email protected]>
Date:   Mon Oct 20 08:50:24 2025 -0400

    xfs: fix log CRC mismatches between i386 and other architectures
    
    [ Upstream commit e747883c7d7306acb4d683038d881528fbfbe749 ]
    
    When mounting file systems with a log that was dirtied on i386 on
    other architectures or vice versa, log recovery is unhappy:
    
    [   11.068052] XFS (vdb): Torn write (CRC failure) detected at log block 0x2. Truncating head block from 0xc.
    
    This is because the CRCs generated by i386 and other architectures
    always diff.  The reason for that is that sizeof(struct xlog_rec_header)
    returns different values for i386 vs the rest (324 vs 328), because the
    struct is not sizeof(uint64_t) aligned, and i386 has odd struct size
    alignment rules.
    
    This issue goes back to commit 13cdc853c519 ("Add log versioning, and new
    super block field for the log stripe") in the xfs-import tree, which
    adds log v2 support and the h_size field that causes the unaligned size.
    At that time it only mattered for the crude debug only log header
    checksum, but with commit 0e446be44806 ("xfs: add CRC checks to the log")
    it became a real issue for v5 file system, because now there is a proper
    CRC, and regular builds actually expect it match.
    
    Fix this by allowing checksums with and without the padding.
    
    Fixes: 0e446be44806 ("xfs: add CRC checks to the log")
    Cc: <[email protected]> # v3.8
    Signed-off-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Carlos Maiolino <[email protected]>
    [ Adjust context and filenames ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

xfs: rename the old_crc variable in xlog_recover_process [+ + +]
Author: Christoph Hellwig <[email protected]>
Date:   Mon Oct 20 08:50:23 2025 -0400

    xfs: rename the old_crc variable in xlog_recover_process
    
    [ Upstream commit 0b737f4ac1d3ec093347241df74bbf5f54a7e16c ]
    
    old_crc is a very misleading name.  Rename it to expected_crc as that
    described the usage much better.
    
    Signed-off-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Darrick J. Wong <[email protected]>
    Signed-off-by: Carlos Maiolino <[email protected]>
    Stable-dep-of: e747883c7d73 ("xfs: fix log CRC mismatches between i386 and other architectures")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
xhci: dbc: enable back DbC in resume if it was enabled before suspend [+ + +]
Author: Mathias Nyman <[email protected]>
Date:   Tue Oct 14 01:55:42 2025 +0300

    xhci: dbc: enable back DbC in resume if it was enabled before suspend
    
    commit 2bbd38fcd29670e46c0fdb9cd0e90507a8a1bf6a upstream.
    
    DbC is currently only enabled back if it's in configured state during
    suspend.
    
    If system is suspended after DbC is enabled, but before the device is
    properly enumerated by the host, then DbC would not be enabled back in
    resume.
    
    Always enable DbC back in resume if it's suspended in enabled,
    connected, or configured state
    
    Cc: stable <[email protected]>
    Fixes: dfba2174dc42 ("usb: xhci: Add DbC support in xHCI driver")
    Tested-by: Łukasz Bartosik <[email protected]>
    Signed-off-by: Mathias Nyman <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>