Changelog in Linux kernel 5.10.266

 
9p: skip nlink update in cacheless mode to fix WARN_ON [+ + +]
Author: Breno Leitao <[email protected]>
Date:   Sun Jul 26 08:00:38 2026 -0400

    9p: skip nlink update in cacheless mode to fix WARN_ON
    
    [ Upstream commit 574aa0b4799470ac814479f1138d19efe6262255 ]
    
    v9fs_dec_count() unconditionally calls drop_nlink() on regular files,
    even when the inode's nlink is already zero. In cacheless mode the
    client refetches inode metadata from the server (the source of truth)
    on every operation, so by the time v9fs_remove() returns, the locally
    cached nlink may already reflect the post-unlink value:
    
      1. Client initiates unlink, server processes it and sets nlink to 0
      2. Client refetches inode metadata (nlink=0) before unlink returns
      3. Client's v9fs_remove() completes successfully
      4. Client calls v9fs_dec_count() which calls drop_nlink() on nlink=0
    
    This race is easily triggered under heavy unlink workloads, such as
    stress-ng's unlink stressor, producing the following warning:
    
      WARNING: fs/inode.c:417 at drop_nlink+0x4c/0xc8
      Call trace:
       drop_nlink+0x4c/0xc8
       v9fs_remove+0x1e0/0x250 [9p]
       v9fs_vfs_unlink+0x20/0x38 [9p]
       vfs_unlink+0x13c/0x258
       ...
    
    In cacheless mode the server is authoritative and the inode is on its
    way out, so locally adjusting nlink buys nothing. Skip v9fs_dec_count()
    entirely when neither CACHE_META nor CACHE_LOOSE is set, which both
    avoids the warning and removes a class of nlink races (two concurrent
    unlinkers observing nlink > 0 and both calling drop_nlink()) that an
    nlink == 0 guard alone would only narrow rather than close.
    
    Fixes: ac89b2ef9b55 ("9p: don't maintain dir i_nlink if the exported fs doesn't either")
    Cc: [email protected]
    Suggested-by: Dominique Martinet <[email protected]>
    Signed-off-by: Breno Leitao <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Dominique Martinet <[email protected]>
    [ Adapted `v9ses->cache & (CACHE_META | CACHE_LOOSE)` bitmask test to the pre-bitmask exclusive enum form `v9ses->cache != CACHE_LOOSE && v9ses->cache != CACHE_FSCACHE`. ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
af_packet: Don't send zero-byte data in tpacket_snd(). [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Mon Aug 10 15:04:47 2026 +0000

    af_packet: Don't send zero-byte data in tpacket_snd().
    
    [ Upstream commit 6bcd76c134c55c697148acb5c0194e9666abdf84 ]
    
    syzbot reported a WARNING in __dev_queue_xmit() triggered via tpacket_snd():
    
    skb_assert_len
    WARNING: at include/linux/skbuff.h:2753 skb_assert_len
    WARNING: at __dev_queue_xmit+0x21bc/0x4970 net/core/dev.c:4781
    
    Call Trace:
     <TASK>
     dev_queue_xmit include/linux/netdevice.h:3448 [inline]
     packet_xmit+0x243/0x310 net/packet/af_packet.c:276
     tpacket_snd net/packet/af_packet.c:2907 [inline]
     packet_sendmsg+0x28d6/0x4eb0 net/packet/af_packet.c:3134
    
    When sending 0-byte packets via TPACKET ring buffer on devices with no
    hard header (e.g. dev->hard_header_len == 0), tpacket_fill_skb()
    populates an skb with skb->len == 0 and returns 0. tpacket_snd() then
    forwards this empty skb to packet_xmit(), causing __dev_queue_xmit() to
    hit skb_assert_len(skb).
    
    Similar checks exist in packet_snd() via commit dc633700f00f
    ("net/af_packet: check len when min_header_len equals to 0") and in
    packet_sendmsg_spkt() via commit 6a341729fb31 ("af_packet: Don't send
    zero-byte data in packet_sendmsg_spkt().").
    
    Return -EINVAL in tpacket_fill_skb() when skb->len is zero to reject
    zero-length packets in tpacket_snd().
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Reviewed-by: Willem de Bruijn <[email protected]>
    Reviewed-by: Jiayuan Chen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ALSA: hda: Fix cached processing coefficient verbs [+ + +]
Author: Xu Rao <[email protected]>
Date:   Wed Jul 22 10:48:18 2026 -0400

    ALSA: hda: Fix cached processing coefficient verbs
    
    [ Upstream commit f67be28fdf8b5d31ac1cc1152bb17250f9f8f513 ]
    
    Intel HD Audio defines Coefficient Index and Processing Coefficient as
    separate audio widget controls in the Audio Widget Verb Definitions:
    Coefficient Index selects the coefficient slot, while Processing
    Coefficient accesses the value at the selected slot.
    
    hda_reg_read_coef() selects the slot with AC_VERB_SET_COEF_INDEX, but
    then uses AC_VERB_GET_COEF_INDEX for the value read.  That reads back the
    selected index instead of the coefficient value.  hda_reg_write_coef()
    has the same issue and builds the value write from AC_VERB_GET_COEF_INDEX
    instead of AC_VERB_SET_PROC_COEF.
    
    This only affects the regmap coefficient cache path used by codecs that
    set codec->cache_coef.  Direct coefficient helpers already use the normal
    SET_COEF_INDEX followed by GET_PROC_COEF or SET_PROC_COEF sequence, which
    is likely why this has not been noticed widely.
    
    Use AC_VERB_GET_PROC_COEF for cached coefficient reads and
    AC_VERB_SET_PROC_COEF for cached coefficient writes.
    
    Fixes: 40ba66a702b8 ("ALSA: hda - Add cache support for COEF read/write")
    Cc: [email protected]
    Signed-off-by: Xu Rao <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: seq: close a re-opened queue timer in the destructor [+ + +]
Author: Norbert Szetei <[email protected]>
Date:   Thu Aug 6 13:02:12 2026 -0400

    ALSA: seq: close a re-opened queue timer in the destructor
    
    [ Upstream commit 2c4dc0ed50b05cd847a4b34b8cebf0775f19aeb9 ]
    
    queue_delete() closes the queue timer, then frees it. snd_seq_timer_close()
    clears q->timer->timeri. snd_use_lock_sync() then drains borrowers, and
    snd_seq_timer_delete() frees q->timer.
    
    A borrower can re-open the timer inside that window. A SET_QUEUE_CLIENT
    that took a queueptr() use_lock reference before the queue was unlinked
    runs snd_seq_timer_open() after the close. Open refuses re-open only while
    timeri is set, and the close just cleared it, so it re-opens timeri.
    
    snd_seq_timer_delete() does not close that instance. Its snd_seq_timer_stop()
    is a no-op, because running was cleared first. So it frees q->timer with the
    instance still live. The queue is freed next.
    
    The instance stays on the global timer with callback_data pointing at the
    freed queue. A non-owner START on the unlocked queue arms it. The next tick
    derefs the freed queue in snd_seq_timer_interrupt().
    
    Reachable by an unprivileged user with access to /dev/snd/seq. No CAP and
    no queue ownership required.
    
    Close any lingering instance in the destructor. There, ->timeri can no
    longer change: the queue is unlinked and all use_lock borrowers have
    drained, so no snd_seq_queue_use() can re-open it. Close it before clearing
    q->timer. snd_timer_close() waits for any in-flight snd_seq_timer_interrupt()
    to finish, and that callback still reads q->timer (via snd_seq_check_queue()),
    so q->timer must stay valid until it drains.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: Norbert Szetei <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    [ replaced scoped_guard(spinlock_irq, &t->lock) with explicit spin_lock_irq()/spin_unlock_irq() pair since gnu89-compiled 5.15 rejects the macro's for-loop declarations ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: usx2y: bound the hwdep mmap fault offset [+ + +]
Author: Baul Lee <[email protected]>
Date:   Tue Aug 18 13:57:49 2026 -0400

    ALSA: usx2y: bound the hwdep mmap fault offset
    
    [ Upstream commit 2ca1eea3cd17930daffe9e429a7c89232036ec24 ]
    
    snd_us428ctls_vm_fault() turns the faulting page offset into a kernel
    address with no bound of any kind:
    
            offset = vmf->pgoff << PAGE_SHIFT;
            vaddr = (char *)(...)->us428ctls_sharedmem + offset;
            page = virt_to_page(vaddr);
            get_page(page);
            vmf->page = page;
    
            return 0;
    
    snd_us428ctls_mmap() checks only the length of the mapping, never the
    offset, and us428ctls_sharedmem is a single page from
    alloc_pages_exact().  For a character device file_mmap_size_max()
    returns ULONG_MAX, so the mm layer imposes no ceiling either.  Every page
    offset above zero resolves to a struct page outside the object, and the
    handler installs it into the caller's address space read-write; the vma
    is not marked read-only.
    
    The caller picks the page frame with a single mmap() argument and gets
    read-write access to a page of kernel memory it does not own; an offset
    that lands in an unpopulated vmemmap region oopses instead.
    
    A process that can open the hwdep node of an attached US-X2Y reaches
    this after loading the FPGA image through the same node; no capability
    check is involved.
    
    On 7.2.0-rc5 (arm64), mmap() with a large offset:
    
      Unable to handle kernel paging request at virtual address fffffdffc45d5ac8
      pc : snd_us428ctls_vm_fault+0x68/0x140 [snd_usb_usx2y]
      Call trace:
       snd_us428ctls_vm_fault+0x68/0x140 [snd_usb_usx2y]
       __do_fault
       __handle_mm_fault
       handle_mm_fault
       el0_da
    
    Reject any offset outside the shared region.  The pcm hwdep handler in
    usx2yhwdeppcm.c computes its address the same way and needs the same
    bound.
    
    Discovered by XBOW, triaged by Baul Lee <[email protected]>
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: Federico Kirschbaum <[email protected]>
    Reported-by: Baul Lee <[email protected]>
    Cc: [email protected]
    Signed-off-by: Baul Lee <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: usx2y: Fix potential leaks of uninitialized memory [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Tue Aug 18 13:57:48 2026 -0400

    ALSA: usx2y: Fix potential leaks of uninitialized memory
    
    [ Upstream commit 4e268db74770b454b877ab5260f1868a457d212c ]
    
    usx2y drivers may expose the allocated pages via mmap, but it performs
    zero-clear only for the struct size, not aligned with the page size.
    This leaves out some uninitialized trailing bytes.
    
    This patch fixes the clearance to cover all memory that are exposed to
    user-space.
    
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Stable-dep-of: 2ca1eea3cd17 ("ALSA: usx2y: bound the hwdep mmap fault offset")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
arm64: tegra: Add EL2 virtual timer interrupt for Tegra194 [+ + +]
Author: Jon Hunter <[email protected]>
Date:   Tue Jul 28 16:50:59 2026 +0100

    arm64: tegra: Add EL2 virtual timer interrupt for Tegra194
    
    [ Upstream commit a7c28483fd57dd0e1487024af70622315320774b ]
    
    Commit d87773de9efe ("clocksource/drivers/arm_arch_timer: Default to EL2
    virtual timer when running VHE") updated the ARM arch timer driver to
    use the virtual timer by default if the CPU is running at EL2 with VHE
    enabled. If the CPU is running at EL2 with VHE enabled but there is no
    interrupt provided for the virtual timer, then the following warning is
    displayed:
    
     arch_timer: [Firmware Bug]: VHE-capable CPU without EL2 virtual timer
      interrupt
    
    This warning is observed on Tegra194 platforms. Tegra194 SoC includes
    NVIDIA Carmel ARM v8.2 CPUs and support an EL2 virtual timer. Fix the
    above warning by adding the PPI for the EL2 virtual timer interrupt for
    Tegra194.
    
    Fixes: 5425fb15d8ee ("arm64: tegra: Add Tegra194 chip device tree")
    Signed-off-by: Jon Hunter <[email protected]>
    Signed-off-by: Thierry Reding <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ASoC: cs4265: sort the register default table [+ + +]
Author: Peter Ujfalusi <[email protected]>
Date:   Wed Aug 5 11:24:13 2026 +0300

    ASoC: cs4265: sort the register default table
    
    commit e4fe3e046524e5de3c04c6eef3743780cbdc231c upstream.
    
    reg_defaults must be sorted by ascending register address, as
    regcache_lookup_reg() locates entries in it with bsearch().  See commit
    fd80df352ba1 ("regcache: Add support for sorting defaults arrays").
    
    cs4265_reg_defaults[] lists CS4265_INT_MASK (0x0e),
    CS4265_STATUS_MODE_MSB (0x0f) and CS4265_STATUS_MODE_LSB (0x10) after
    CS4265_SPDIF_CTL1 (0x11) and CS4265_SPDIF_CTL2 (0x12), so the binary search
    does not find those three entries.  regcache_reg_needs_sync() then cannot
    compare them against their default and reports that a sync is needed, so
    they are written to the device on every regcache_sync() even when they were
    never touched.
    
    Sort the table by register address.
    
    Fixes: fb6f806967f6 ("ASoC: Add support for the CS4265 CODEC")
    Cc: [email protected]
    Signed-off-by: Peter Ujfalusi <[email protected]>
    Reviewed-by: Charles Keepax <[email protected]>
    Reviewed-by: Richard Fitzgerald <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: mediatek: mt8183: Check runtime resume during probe [+ + +]
Author: Cássio Gabriel <[email protected]>
Date:   Thu Jul 23 07:36:50 2026 -0400

    ASoC: mediatek: mt8183: Check runtime resume during probe
    
    [ Upstream commit f0334fbfd107682d0c95f3f71e25f6127038e2b9 ]
    
    The MT8183 AFE probe uses pm_runtime_get_sync() before reading hardware
    defaults into the regmap cache, but does not check whether runtime resume
    failed. If regmap_reinit_cache() then fails, the temporary runtime PM
    usage count is also not released.
    
    Use pm_runtime_resume_and_get() so resume failures abort probe without
    leaking a usage count, and release the temporary reference before
    handling the regmap cache result.
    
    Fixes: a94aec035a12 ("ASoC: mediatek: mt8183: add platform driver")
    Cc: [email protected]
    Signed-off-by: Cássio Gabriel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: xilinx: formatter_pcm: pass aud_drv_data to irq handlers [+ + +]
Author: Rosen Penev <[email protected]>
Date:   Thu Aug 6 16:32:31 2026 -0700

    ASoC: xilinx: formatter_pcm: pass aud_drv_data to irq handlers
    
    [ Upstream commit f12afefb7b01f94d6d66d397f323a9914edbf70e ]
    
    The irq handlers take a struct device pointer and call
    dev_get_drvdata() to obtain the driver data.  However, the driver
    data is only set at the end of probe, after devm_request_irq(),
    so an interrupt taken in between causes the handlers to pass a
    NULL pointer to readl() and crash.
    
    Pass the private data directly as the devm_request_irq() argument
    instead of the device pointer, matching what the handlers expect.
    
    Fixes: 6f6c3c36f091 ("ASoC: xlnx: add pcm formatter platform driver")
    Assisted-by: opencode:deepseek-v4-flash-free
    Signed-off-by: Rosen Penev <[email protected]>
    Reviewed-by: Michal Simek <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
audit: fix recursive locking deadlock in audit_dupe_exe() [+ + +]
Author: Ricardo Robaina <[email protected]>
Date:   Wed Jul 22 09:55:06 2026 -0400

    audit: fix recursive locking deadlock in audit_dupe_exe()
    
    [ Upstream commit 81905b5acbe77284734438df3fbec1158e6429a3 ]
    
    A deadlock occurs in the audit subsystem when duplicating
    executable-related rules.
    
    When a file is moved (e.g., via do_renameat2()), the VFS layer locks
    the parent directory (I_MUTEX_PARENT), which synchronously triggers an
    fsnotify_move event. If an existing executable audit rule matches the
    file being moved, the audit subsystem catches this event and calls
    audit_dupe_exe() to duplicate the watch and update the rule. Then,
    audit_alloc_mark() would call kern_path_parent() to resolve the path,
    leading to a blind attempt to acquire the exact same I_MUTEX_PARENT lock
    already held by the task, resulting in the following recursive locking
    deadlock:
    
     ============================================
     WARNING: possible recursive locking detected
     6.12.0-55.27.1.el10_0.x86_64+debug #1 Not tainted
     --------------------------------------------
     mv/5099 is trying to acquire lock:
     ffff888132845358 (&inode->i_sb->s_type->i_mutex_dir_key/1){+.+.}-{3:3},
     at: __kern_path_locked+0x10a/0x2f0
    
     but task is already holding lock:
     ffff888132846b58 (&inode->i_sb->s_type->i_mutex_dir_key/1){+.+.}-{3:3},
     at: lock_two_directories+0x13f/0x2b0
    
     other info that might help us debug this:
      Possible unsafe locking scenario:
    
            CPU0
            ----
       lock(&inode->i_sb->s_type->i_mutex_dir_key/1);
       lock(&inode->i_sb->s_type->i_mutex_dir_key/1);
    
      *** DEADLOCK ***
    
      May be due to missing lock nesting notation
    
      6 locks held by mv/5099:
      #0: ffff888112a9c440 (sb_writers#13)
      at: do_renameat2+0x34c/0xbc0
      #1: ffff888112a9c790 (&type->s_vfs_rename_key#3)
      at: do_renameat2+0x415/0xbc0
      #2: ffff888132846b58 (&inode->i_sb->s_type->i_mutex_dir_key/1)
      at: lock_two_directories+0x13f/0x2b0
      #3: ffff888132845358 (&inode->i_sb->s_type->i_mutex_dir_key/5)
      at: lock_two_directories+0x175/0x2b0
      #4: ffffffffb3a1fb10 (&fsnotify_mark_srcu)
      at: fsnotify+0x454/0x28a0
      #5: ffffffffaf886230 (audit_filter_mutex)
      at: audit_update_watch+0x36/0x11e0
    
     stack backtrace:
     Call Trace:
      <TASK>
      dump_stack_lvl+0x6f/0xb0
      print_deadlock_bug.cold+0xbd/0xca
      validate_chain+0x83a/0xf00
      __lock_acquire+0xcac/0x1d20
      lock_acquire.part.0+0x11b/0x360
      down_write_nested+0x9f/0x230
      __kern_path_locked+0x10a/0x2f0
      kern_path_locked+0x26/0x40
      audit_alloc_mark+0xfb/0x4f0
      audit_dupe_exe+0x6c/0xe0
      audit_dupe_rule+0x6c2/0xc00
      audit_update_watch+0x4cc/0x11e0
      audit_watch_handle_event+0x12c/0x1b0
      send_to_group+0x5d0/0x8b0
      fsnotify+0x615/0x28a0
      fsnotify_move+0x1d8/0x630
      vfs_rename+0xdcd/0x1df0
      do_renameat2+0x9d4/0xbc0
      __x64_sys_renameat+0x192/0x260
      do_syscall_64+0x92/0x180
      entry_SYSCALL_64_after_hwframe+0x76/0x7e
     RIP: 0033:0x7f0491fe8c4e
     Code: 0f 1f 40 00 48 8b 15 c1 e1 16 00 f7 d8 64 89 02 b8 ff ff ff ff
     c3 66 0f 1f 44 00 00 f3 0f 1e fa 49 89 ca b8 08 01 00 00 0f 05 <48>
     3d 00 f0 ff ff 77 0a c3 66 0f 1f 84 00 00 00 00 00 48 8b 15 89
     RSP: 002b:00007ffc7210bf38 EFLAGS: 00000246 ORIG_RAX: 0000000000000108
     RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f0491fe8c4e
     RDX: 0000000000000003 RSI: 00007ffc7210e6c8 RDI: 00000000ffffff9c
     RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000001
     R10: 00005575eb2dae2a R11: 0000000000000246 R12: 00005575eb2dae2a
     R13: 00007ffc7210e6c8 R14: 0000000000000003 R15: 00000000ffffff9c
      </TASK>
    
    The aforementioned deadlock can be consistently reproduced by running
    the script below:
    
     audit-dupe-exe-deadlock.sh
     --------------------------
     #!/bin/bash
     auditctl -D
     mkdir -p /tmp/foo
     touch /tmp/file
     auditctl -a always,exit -F exe=/tmp/file -F path=/tmp/file -S all -k dr
     mv /tmp/file /tmp/foo/file
     rm -Rf /tmp/foo
    
    This patch fixes the issue by introducing struct audit_watch_ctx to pass
    the fsnotify event context down to audit_alloc_mark(). By utilizing the
    already-resolved directory inode provided by the event, we bypass the
    kern_path_parent() path resolution entirely, safely avoiding the
    recursive lock. Furthermore, it explicitly allows duplicate fsnotify
    marks (allow_dups = 1) during the rename update, allowing the new rule's
    mark to safely coexist with the old rule's mark until the old rule is
    freed.
    
    P.S.: This issue was identified and reproduced during a comprehensive
    code coverage analysis of the audit subsystem. The full report is
    available at the link below:
    
    https://people.redhat.com/rrobaina/audit-code-coverage-analysis.pdf
    
    P.P.S: With the permission of both Ricardo and Nathan, I've squashed a
    fixup patch from Nathan that addresses a compile time error when
    CONFIG_AUDITSYSCALL=n.
    
    Cc: [email protected]
    Fixes: 34d99af52ad4 ("audit: implement audit by executable")
    Acked-by: Waiman Long <[email protected]>
    Acked-by: Richard Guy Briggs <[email protected]>
    Signed-off-by: Nathan Chancellor <[email protected]>
    Signed-off-by: Ricardo Robaina <[email protected]>
    [PM: move link metadata into the msg, apply fix from NC]
    Signed-off-by: Paul Moore <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

audit: use 'unsigned int' instead of 'unsigned' [+ + +]
Author: Ricardo Robaina <[email protected]>
Date:   Wed Jul 22 09:55:05 2026 -0400

    audit: use 'unsigned int' instead of 'unsigned'
    
    [ Upstream commit 8b226771014beab1292081151a99530886ce54b4 ]
    
    Address checkpatch.pl warning below, across the audit subsystem:
    
      WARNING: Prefer 'unsigned int' to bare use of 'unsigned'
    
    Minor cleanup, no functional changes.
    
    Signed-off-by: Ricardo Robaina <[email protected]>
    Signed-off-by: Paul Moore <[email protected]>
    Stable-dep-of: 81905b5acbe7 ("audit: fix recursive locking deadlock in audit_dupe_exe()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

audit: widen ino fields to u64 [+ + +]
Author: Jeff Layton <[email protected]>
Date:   Wed Jul 22 09:55:04 2026 -0400

    audit: widen ino fields to u64
    
    [ Upstream commit 125dfa218134df7cc112667e92984de9d8cd0bf6 ]
    
    inode->i_ino is being widened from unsigned long to u64. The audit
    subsystem uses unsigned long ino in struct fields, function parameters,
    and local variables that store inode numbers from arbitrary filesystems.
    On 32-bit platforms this truncates inode numbers that exceed 32 bits,
    which will cause incorrect audit log entries and broken watch/mark
    comparisons.
    
    Widen all audit ino fields, parameters, and locals to u64, and update
    the inode format string from %lu to %llu to match.
    
    Signed-off-by: Jeff Layton <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Acked-by: Paul Moore <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    Stable-dep-of: 81905b5acbe7 ("audit: fix recursive locking deadlock in audit_dupe_exe()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
binfmt_misc: restore write access when removing an entry [+ + +]
Author: Christian Brauner <[email protected]>
Date:   Wed Aug 12 08:02:22 2026 -0400

    binfmt_misc: restore write access when removing an entry
    
    [ Upstream commit db1856ea9196cf6e015d12199a34c0b9313c7bfa ]
    
    Registering an entry with the MISC_FMT_OPEN_FILE flag opens the
    interpreter via open_exec() which denies write access to it for as
    long as the entry exists. Removing the entry closes the interpreter
    file via filp_close() but never restores write access, leaving the
    inode's i_writecount permanently negative. Opening the interpreter
    for writing keeps failing with ETXTBSY long after the entry is gone
    until the inode is evicted from the inode cache.
    
    Commit 90f601b497d7 ("binfmt_misc: restore write access before
    closing files opened by open_exec()") fixed the same imbalance in the
    error path of bm_register_write() but the actual removal path has
    been leaking the write denial since the introduction of the flag.
    
    Restore write access in put_binfmt_handler() before closing the
    interpreter file.
    
    Link: https://patch.msgid.link/[email protected]
    Fixes: 948b701a607f ("binfmt_misc: add persistent opened binary handler for containers")
    Cc: [email protected]
    Signed-off-by: Christian Brauner (Amutable) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

binfmt_misc: use exe_file_deny_write_access() for the interpreter clone [+ + +]
Author: Christian Brauner <[email protected]>
Date:   Fri Jul 10 11:33:03 2026 +0200

    binfmt_misc: use exe_file_deny_write_access() for the interpreter clone
    
    commit fa5990ca8fd917003e526036bcc50413edb9722c upstream.
    
    For MISC_FMT_OPEN_FILE entries load_misc_binary() clones the
    registered interpreter file and denies write access to the clone via
    plain deny_write_access(). The clone is installed as
    bprm->interpreter and later released by the exec machinery through
    exe_file_allow_write_access() which skips the i_writecount increment
    for files with FMODE_FSNOTIFY_HSM set.
    
    The deny and allow side can therefore come to different conclusions
    when pre-content watches are in play: if a pre-content watch is added
    to the interpreter after registration every subsequent exec through
    that entry takes a write denial on the clone that is never paired
    with a write allowance, driving the interpreter inode's i_writecount
    further down with each exec and leaving the interpreter unwritable
    even after the entry and all its users are gone.
    
    Take the write denial via exe_file_deny_write_access() so both sides
    of the pairing base their decision on the same file mode, and
    propagate failure instead of silently ignoring it: an interpreter
    that is concurrently open for writing now fails the exec with
    ETXTBSY, exactly like an interpreter freshly opened via open_exec()
    would.
    
    Link: https://patch.msgid.link/[email protected]
    Fixes: 0357ef03c94e ("fs: don't block write during exec on pre-content watched files")
    Cc: [email protected]
    Signed-off-by: Christian Brauner (Amutable) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Bluetooth: HIDP: reject frames without a transaction header [+ + +]
Author: Sangho Lee <[email protected]>
Date:   Mon Aug 10 09:34:32 2026 -0400

    Bluetooth: HIDP: reject frames without a transaction header
    
    [ Upstream commit 47778d2c2087b5d192398f6fddf692d16a5431cf ]
    
    hidp_recv_ctrl_frame() and hidp_recv_intr_frame() read skb->data[0]
    before checking that the L2CAP SDU contains a transaction header. A
    connected HIDP peer can send an empty basic-mode SDU and make both paths
    use an uninitialized byte from skb tailroom.
    
    KMSAN reports the use in hidp_session_run(), with the uninitialized value
    originating in __alloc_skb() through vhci_write(). The control path
    produces two reports and the interrupt path produces one.
    
    The byte can also be controlled by a malformed lower-layer packet. If an
    HCI ACL packet contains an L2CAP PDU with a declared zero-length payload
    followed by an extra 0x15 byte, l2cap_recv_acldata() reduces skb->len to
    the declared PDU length before dispatch. The current HIDP path nevertheless
    consumes the extra byte as HIDP_TRANS_HID_CONTROL |
    HIDP_CTRL_VIRTUAL_CABLE_UNPLUG and terminates the HIDP session. With this
    change, the same packet is discarded and a subsequent feature report
    request succeeds.
    
    Pull the transaction header with skb_pull_data() and discard frames that
    do not contain it.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Signed-off-by: Sangho Lee <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
bootconfig: do not put quotes on cmdline items unless necessary [+ + +]
Author: Rasmus Villemoes <[email protected]>
Date:   Tue Jul 28 20:30:25 2026 -0400

    bootconfig: do not put quotes on cmdline items unless necessary
    
    [ Upstream commit 212f863fa8811c780abacc1d0404c573fdc0a2de ]
    
    When trying to migrate to using bootconfig to embed the kernel's and
    PID1's command line with the kernel image itself, and so allowing changing
    that without modifying the bootloader, I noticed that /proc/cmdline
    changed from e.g.
    
      console=ttymxc0,115200n8 cma=128M quiet -- --log-level=notice
    
    to
    
      console="ttymxc0,115200n8" cma="128M" quiet -- --log-level="notice"
    
    The kernel parameters are parsed just fine, and the quotes are indeed
    stripped from the actual argv[] given to PID1.  However, the quoting
    doesn't really serve any purpose and looks excessive, and might confuse
    some (naive) userspace tool trying to parse /proc/cmdline.  So do not
    quote the value unless it contains whitespace.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Rasmus Villemoes <[email protected]>
    Cc: Masami Hiramatsu <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Stable-dep-of: dec4d8118c17 ("bootconfig: fix NULL-pointer arithmetic in xbc_snprint_cmdline()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

bootconfig: fix NULL-pointer arithmetic in xbc_snprint_cmdline() [+ + +]
Author: Breno Leitao <[email protected]>
Date:   Tue Jul 28 20:30:27 2026 -0400

    bootconfig: fix NULL-pointer arithmetic in xbc_snprint_cmdline()
    
    [ Upstream commit dec4d8118c179b3d12bca7e609054c6011c4f2ce ]
    
    xbc_snprint_cmdline() is meant to be called twice: first with
    buf=NULL, size=0 to probe the rendered length, then with a real
    buffer to fill it (the standard snprintf() two-pass pattern). The
    probe call makes the function compute "buf + size" (NULL + 0) and,
    on every iteration, advance "buf += ret" from that NULL base and
    pass the result back into snprintf().
    
    Pointer arithmetic on a NULL pointer is undefined behavior. It is
    harmless in the in-kernel callers today, but the follow-up patches
    run this same code in the userspace tools/bootconfig parser at kernel
    build time, where host UBSan / FORTIFY_SOURCE abort the build.
    
    Track a running written length (size_t) instead of mutating @buf, and
    only form "buf + len" when @buf is non-NULL. snprintf(NULL, 0, ...)
    is itself well defined and returns the would-be length, so the
    two-pass "probe then fill" usage returns identical byte counts.
    
    Link: https://lore.kernel.org/all/[email protected]/
    
    Fixes: 51887d03aca1 ("bootconfig: init: Allow admin to use bootconfig for kernel command line")
    Cc: [email protected]
    Signed-off-by: Breno Leitao <[email protected]>
    Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

bootconfig: move xbc_snprint_cmdline() to lib/bootconfig.c [+ + +]
Author: Breno Leitao <[email protected]>
Date:   Tue Jul 28 20:30:26 2026 -0400

    bootconfig: move xbc_snprint_cmdline() to lib/bootconfig.c
    
    [ Upstream commit 5a643e4623238e14b03d75ca0d4eda0645720cee ]
    
    Move xbc_snprint_cmdline() from init/main.c to lib/bootconfig.c so the
    function (and its xbc_namebuf scratch buffer) becomes part of the shared
    parser library. tools/bootconfig already compiles lib/bootconfig.c
    directly, which lets a follow-up patch reuse the same renderer in the
    userspace tool to convert a bootconfig file into a flat cmdline string
    at build time.
    
    No functional change.
    
    Link: https://lore.kernel.org/all/[email protected]/
    
    Signed-off-by: Breno Leitao <[email protected]>
    Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
    Stable-dep-of: dec4d8118c17 ("bootconfig: fix NULL-pointer arithmetic in xbc_snprint_cmdline()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
bpf: Reject BPF_MAP_TYPE_INODE_STORAGE creation if BPF LSM is uninitialized [+ + +]
Author: Matt Bobrowski <[email protected]>
Date:   Tue Jul 21 14:48:40 2026 -0400

    bpf: Reject BPF_MAP_TYPE_INODE_STORAGE creation if BPF LSM is uninitialized
    
    [ Upstream commit a6f0643e4f63cfaa0d5d4a69de4f132eac4b8fe4 ]
    
    When CONFIG_BPF_LSM=y is set, BPF inode storage maps
    (BPF_MAP_TYPE_INODE_STORAGE) are compiled into the kernel. However,
    if the BPF LSM is not explicitly enabled at boot time (e.g. omitted
    from the "lsm=" boot parameter), lsm_prepare() is never executed for
    the BPF LSM.
    
    Consequently, the BPF inode security blob offset
    (bpf_lsm_blob_sizes.lbs_inode) is never initialized and remains at
    its default compiled size of 8 bytes instead of being updated to a
    valid offset past the reserved struct rcu_head (typically 16 bytes
    or more).
    
    When a privileged user creates and updates a BPF_MAP_TYPE_INODE_STORAGE
    map, bpf_inode() evaluates inode->i_security + 8. This erroneously
    aliases the struct rcu_head.func callback pointer at the beginning
    of the inode->i_security blob. During subsequent map element cleanup
    or inode destruction, writing NULL to owner_storage clears the queued
    RCU callback pointer. When rcu_do_batch() later executes the queued
    callback, it attempts an instruction fetch at address 0x0, triggering
    an immediate kernel panic.
    
    Fix this by introducing a global bpf_lsm_initialized boolean flag
    marked with __ro_after_init. Set this flag to true inside bpf_lsm_init()
    when the LSM framework successfully registers the BPF LSM. Gate map
    allocation in inode_storage_map_alloc() on this flag, returning
    -EOPNOTSUPP if the BPF LSM is in turn uninitialized.
    
    This fail-fast approach prevents userspace from allocating inode
    storage maps when the supporting BPF LSM infrastructure is absent,
    avoiding zombie map states.
    
    Fixes: 8ea636848aca ("bpf: Implement bpf_local_storage for inodes")
    Reported-by: oxsignal <[email protected]>
    Signed-off-by: Matt Bobrowski <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Reviewed-by: Emil Tsalapatis <[email protected]>
    Reviewed-by: Amery Hung <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
can: gs_usb: gs_usb_receive_bulk_callback(): resubmit URB on skb allocation failure [+ + +]
Author: Marc Kleine-Budde <[email protected]>
Date:   Wed Aug 12 10:46:11 2026 -0400

    can: gs_usb: gs_usb_receive_bulk_callback(): resubmit URB on skb allocation failure
    
    [ Upstream commit 68c5724ecd159992f76edb7b57dc508a44c8b7da ]
    
    If the allocation of the SKB in gs_usb_receive_bulk_callback() fails, the
    driver returns from the callback without resubmitting the URB in order to
    receive further USB in URBs.
    
    This results in a silent performance degradation which, if it occurs
    repeatedly, results in starvation of USB in traffic.
    
    Instead of returning immediately, try to resend the URB. If this also
    fails, this is logged as an info message.
    
    Fixes: d08e973a77d1 ("can: gs_usb: Added support for the GS_USB CAN devices")
    Fixes: 26949ac935e3 ("can: gs_usb: add CAN-FD support")
    Link: https://patch.msgid.link/[email protected]
    Cc: [email protected]
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ceph: avoid fs reclaim while using current->journal_info [+ + +]
Author: Max Kellermann <[email protected]>
Date:   Fri Aug 7 22:52:02 2026 -0400

    ceph: avoid fs reclaim while using current->journal_info
    
    [ Upstream commit 5b602344a49e039e792ce5a8923bcc61412ee134 ]
    
    handle_reply() stores a `ceph_mds_request` pointer in
    `current->journal_info` while filling the inode and dentry cache from
    an MDS reply.
    
    An allocation in this section can enter direct reclaim and prune
    dentries from another filesystem.  If this dirties an ext4 inode, ext4
    starts a JBD2 transaction.  JBD2 interprets the Ceph request in
    `current->journal_info` as a journal handle and dereferences the
    request's `r_tid` as `h_transaction`, causing a kernel crash, e.g.:
    
     Unable to handle kernel paging request at virtual address 00000000077b4818
     [...]
     Internal error: Oops: 0000000096000004 [#1]  SMP
     Modules linked in:
     CPU: 6 UID: 0 PID: 2699135 Comm: kworker/6:3 Tainted: G        W           6.18.38-i3 #1113 NONE
     [...]
     Workqueue: ceph-msgr ceph_con_workfn
     pstate: 80400009 (Nzcv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
     pc : jbd2__journal_start+0x2c/0x208
     lr : __ext4_journal_start_sb+0x100/0x178
     [...]
     Call trace:
      jbd2__journal_start+0x2c/0x208 (P)
      __ext4_journal_start_sb+0x100/0x178
      ext4_dirty_inode+0x3c/0x90
      __mark_inode_dirty+0x58/0x400
      iput.part.0+0x2b0/0x370
      iput+0x18/0x30
      dentry_unlink_inode+0xc0/0x158
      __dentry_kill+0x80/0x250
      shrink_dentry_list+0x90/0x130
      prune_dcache_sb+0x60/0x98
      super_cache_scan+0xe8/0x190
      do_shrink_slab+0x174/0x388
      shrink_slab+0xd8/0x4c0
      shrink_node+0x31c/0x908
      do_try_to_free_pages+0xd0/0x508
      try_to_free_pages+0x11c/0x238
      __alloc_frozen_pages_noprof+0x4d0/0xdd0
      __folio_alloc_noprof+0x18/0x70
      __filemap_get_folio+0x248/0x440
      ceph_readdir_prepopulate+0x570/0x9e8
      mds_dispatch+0x1424/0x1ba0
      ceph_con_process_message+0x74/0xa0
      ceph_con_v1_try_read+0x3a0/0x1510
      ceph_con_workfn+0x260/0x460
    
    Enter a scoped NOFS allocation context and leave it after clearing
    `journal_info`.  This prevents filesystem reclaim from recursing into
    another filesystem while the field contains Ceph-private data.
    
    Cc: [email protected]
    Fixes: 315f24088048 ("ceph: fix security xattr deadlock")
    Signed-off-by: Max Kellermann <[email protected]>
    Reviewed-by: Viacheslav Dubeyko <[email protected]>
    Reviewed-by: Xiubo Li <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ceph: fix hanging __ceph_get_caps() with stale mds_wanted [+ + +]
Author: Max Kellermann <[email protected]>
Date:   Sat Aug 8 10:09:30 2026 -0400

    ceph: fix hanging __ceph_get_caps() with stale mds_wanted
    
    [ Upstream commit 50958bb928bad3bdba9e5d1b7ff4bbadcf6951e6 ]
    
    A reader can hang forever in __ceph_get_caps() when the client no
    longer holds `FILE_RD`, but local cap state still says that the
    capability is already wanted (via `mds_wanted`).
    
    One way to trigger this is through MDS cap revocation.  If another
    client performs a conflicting operation, the MDS can revoke `FILE_RD`
    from the reader; the next read then has to reacquire `FILE_RD`.  If
    the cap update that should request `FILE_RD` never reaches the MDS
    after `cap->mds_wanted` was raised, the reader is left holding only
    non-file caps while local `mds_wanted` still includes the file read
    caps.
    
    In that state, try_get_cap_refs() sees `need <= mds_wanted` and
    returns 0, so __ceph_get_caps() just waits on `i_cap_wq`.  If the cap
    update that was supposed to request `FILE_RD never reaches the MDS
    after `cap->mds_wanted was` raised, no further request is sent and the
    waiter can sleep indefinitely until unrelated cap traffic happens to
    wake it up.
    
    The ordering issue is that `cap->mds_wanted` is updated in
    __prep_cap() before the `CEPH_MSG_CLIENT_CAPS message` is actually
    queued for send.  That makes one field serve two different meanings at
    once: what this client wants, and what the client believes the MDS
    already knows it wants.
    
    A proper fix would be to split those states and track whether a cap
    update is actually in flight or has been observed by the MDS.
    However, simply moving the `cap->mds_wanted assignment` later would
    not be sufficient: queueing the message in the messenger does not
    guarantee that the MDS processed that specific wanted set, and
    reconnect or message loss can still invalidate that assumption.
    Fixing that properly would require a larger rework of the cap state
    machine.
    
    To allow simpler backports to stable kernels, this patch implements a
    simpler workaround:
    
    - stop waiting forever in __ceph_get_caps(); after a bounded wait,
      fall back to the renew path
    
    - make ceph_renew_caps() issue a synchronous `OPEN` request whenever
      the inode still does not actually hold the wanted caps, instead of
      only calling ceph_check_caps()
    
    The extra issued-vs-wanted check in ceph_renew_caps() is necessary
    because the previous test only checked whether the inode still had any
    real caps at all.  That is not enough after revocation: the client can
    still hold something like `pLs` and yet be missing `FILE_RD`
    completely.  In that case, falling back to ceph_check_caps() is not
    sufficient, because it still trusts `cap->mds_wanted` and may resend
    nothing.  By requiring `(issued & wanted) == wanted` before taking the
    asynchronous path, the code only uses ceph_check_caps() when the
    `wanted caps` are already actually issued.  Otherwise, it sends the
    synchronous `OPEN` renew.
    
    This preserves the existing asynchronous fast path when the wanted
    caps are already issued, avoids changing cap-state semantics, and
    fixes the hang by guaranteeing that a stalled waiter eventually
    retries through a path that does not rely on the stale `mds_wanted`
    state.
    
    [ idryomov: move CEPH_GET_CAPS_WAIT_TIMEOUT from libceph.h to
      mds_client.h, formatting ]
    
    Cc: [email protected]
    Fixes: 0a454bdd501a ("ceph: reorganize __send_cap for less spinlock abuse")
    Signed-off-by: Max Kellermann <[email protected]>
    Reviewed-by: Alex Markuze <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ceph: fix MDS random selection readiness predicate [+ + +]
Author: Yiming Zhu <[email protected]>
Date:   Fri Jul 24 18:49:20 2026 +0800

    ceph: fix MDS random selection readiness predicate
    
    commit 2c11c4bfdb7bd2808b3b3ac228e1f2d9bcf25457 upstream.
    
    CEPH_MDS_IS_READY() is parsed so that the ternary expression can
    return true for an MDS entry with state 0 when it is not laggy. This
    allows the random selector to choose a down/DNE rank.
    
    Group the ternary expression under the state check so zero-state ranks
    are not treated as ready.
    
    Cc: [email protected]
    Fixes: b38c9eb4757d ("ceph: add possible_max_rank and make the code more readable")
    Link: https://tracker.ceph.com/issues/78648
    Signed-off-by: Yiming Zhu <[email protected]>
    Reviewed-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ceph: rename _to_client() to _to_fs_client() [+ + +]
Author: Xiubo Li <[email protected]>
Date:   Sat Aug 8 10:09:29 2026 -0400

    ceph: rename _to_client() to _to_fs_client()
    
    [ Upstream commit 5995d90d2d19f337df6a50bcf4699ef053214dac ]
    
    We need to covert the inode to ceph_client in the following commit,
    and will add one new helper for that, here we rename the old helper
    to _fs_client().
    
    Link: https://tracker.ceph.com/issues/61590
    Signed-off-by: Xiubo Li <[email protected]>
    Reviewed-by: Patrick Donnelly <[email protected]>
    Reviewed-by: Milind Changire <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Stable-dep-of: 50958bb928ba ("ceph: fix hanging __ceph_get_caps() with stale mds_wanted")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
crypto: ccm - Set rfc4309 maxauthsize from child [+ + +]
Author: Herbert Xu <[email protected]>
Date:   Mon Jul 20 11:34:21 2026 +1000

    crypto: ccm - Set rfc4309 maxauthsize from child
    
    [ Upstream commit 438f4896f78f69ec73d5f32d2c024193f1223569 ]
    
    Set the maxauthsize of rfc4309 using that of the child algorithm.
    
    Fixes: 4a49b499dfa0 ("[CRYPTO] ccm: Added CCM mode")
    Reported-by: Seohyeon Maeng <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: qce - fix error path in devm_qce_register_algs [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Fri Jul 24 10:15:38 2026 +0200

    crypto: qce - fix error path in devm_qce_register_algs
    
    commit 9c75402286409f5e1a75e4a445555c84066f89db upstream.
    
    If ops->register_algs() fails, the error path repeatedly calls the same
    ops->unregister_algs() from the failed registration. Use the loop index
    to unregister the previously registered algorithms instead.
    
    Fixes: e80cf84b6087 ("crypto: qce - unregister previously registered algos in error path")
    Cc: [email protected]
    Signed-off-by: Thorsten Blum <[email protected]>
    Reviewed-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
device property: Add fwnode_irq_get_byname [+ + +]
Author: Akhil R <[email protected]>
Date:   Wed Jul 22 06:30:22 2026 -0400

    device property: Add fwnode_irq_get_byname
    
    [ Upstream commit ca0acb511c21738b32386ce0f85c284b351d919e ]
    
    Add fwnode_irq_get_byname() to get an interrupt by name from either
    ACPI table or Device Tree, whichever is used for enumeration.
    
    In the ACPI case, this allow us to use 'interrupt-names' in
    _DSD which can be mapped to Interrupt() resource by index.
    The implementation is similar to 'interrupt-names' in the
    Device Tree.
    
    Signed-off-by: Akhil R <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Acked-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Wolfram Sang <[email protected]>
    Stable-dep-of: 158efa411c57 ("i2c: core: fix adapter probe deferral loop")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dm-integrity: don't increment hash_offset twice [+ + +]
Author: Mikulas Patocka <[email protected]>
Date:   Mon Jul 27 18:25:23 2026 -0400

    dm-integrity: don't increment hash_offset twice
    
    [ Upstream commit edf025f083854f80032b73a1aad69a3c90db236f ]
    
    hash_offset is already incremented in the loop "for (i = 0; i < to_copy;
    i++, ts--)". Do not increment it again.
    
    Signed-off-by: Mikulas Patocka <[email protected]>
    Assisted-by: Claude:claude-opus-4.6
    Fixes: 84597a44a9d8 ("dm-integrity: dm integrity: add optional discard support")
    Cc: [email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dm-verity: make error counter atomic [+ + +]
Author: Mikulas Patocka <[email protected]>
Date:   Mon Jul 27 20:58:10 2026 -0400

    dm-verity: make error counter atomic
    
    [ Upstream commit 8ec4d9c5a5cf4b61fc087f871465b1f79b393325 ]
    
    The error counter "v->corrupted_errs" was not atomic, thus it could be
    subject to race conditions. The call to
    dm_audit_log_target("max-corrupted-errors") may be skipped due to the
    races.
    
    Signed-off-by: Mikulas Patocka <[email protected]>
    Assisted-by: Claude:claude-opus-4.6
    Fixes: 65ff5b7ddf05 ("dm verity: add error handling modes for corrupted blocks")
    Cc: [email protected]
    [ kept 5.15's braceless single-statement DMERR body instead of upstream's braced block containing the absent dm_audit_log_target() call ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dma-buf/drivers: make reserving a shared slot mandatory v4 [+ + +]
Author: Christian König <[email protected]>
Date:   Fri Jul 31 12:30:04 2026 -0400

    dma-buf/drivers: make reserving a shared slot mandatory v4
    
    [ Upstream commit c8d4c18bfbc4ab467188dbe45cc8155759f49d9e ]
    
    Audit all the users of dma_resv_add_excl_fence() and make sure they
    reserve a shared slot also when only trying to add an exclusive fence.
    
    This is the next step towards handling the exclusive fence like a
    shared one.
    
    v2: fix missed case in amdgpu
    v3: and two more radeon, rename function
    v4: add one more case to TTM, fix i915 after rebase
    
    Signed-off-by: Christian König <[email protected]>
    Reviewed-by: Daniel Vetter <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Stable-dep-of: a48bbcc7ac73 ("drm/virtio: use uninterruptible resv lock for plane updates")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dma-buf/udmabuf: skip redundant cpu sync to fix cacheline EEXIST warning [+ + +]
Author: Mikhail Gavrilov <[email protected]>
Date:   Tue Jul 21 15:13:56 2026 -0400

    dma-buf/udmabuf: skip redundant cpu sync to fix cacheline EEXIST warning
    
    [ Upstream commit 504e2b4ab97a51d56d966cd36d0997ad30b65b2d ]
    
    When CONFIG_DMA_API_DEBUG_SG is enabled, importing a udmabuf into a DRM
    driver (e.g. amdgpu for video playback in GNOME Videos / Showtime)
    triggers a spurious warning:
    
      DMA-API: amdgpu 0000:03:00.0: cacheline tracking EEXIST, \
          overlapping mappings aren't supported
      WARNING: kernel/dma/debug.c:619 at add_dma_entry+0x473/0x5f0
    
    The call chain is:
    
      amdgpu_cs_ioctl
       -> amdgpu_ttm_backend_bind
        -> dma_buf_map_attachment
         -> [udmabuf] map_udmabuf -> get_sg_table
          -> dma_map_sgtable(dev, sg, direction, 0)  // attrs=0
           -> debug_dma_map_sg -> add_dma_entry -> EEXIST
    
    This happens because udmabuf builds a per-page scatter-gather list via
    sg_set_folio().  When begin_cpu_udmabuf() has already created an sg
    table mapped for the misc device, and an importer such as amdgpu maps
    the same pages for its own device via map_udmabuf(), the DMA debug
    infrastructure sees two active mappings whose physical addresses share
    cacheline boundaries and warns about the overlap.
    
    The DMA_ATTR_SKIP_CPU_SYNC flag suppresses this check in
    add_dma_entry() because it signals that no CPU cache maintenance is
    performed at map/unmap time, making the cacheline overlap harmless.
    
    All other major dma-buf exporters already pass this flag:
      - drm_gem_map_dma_buf() passes DMA_ATTR_SKIP_CPU_SYNC
      - amdgpu_dma_buf_map() passes DMA_ATTR_SKIP_CPU_SYNC
    
    The CPU sync at map/unmap time is also redundant for udmabuf:
    begin_cpu_udmabuf() and end_cpu_udmabuf() already perform explicit
    cache synchronization via dma_sync_sgtable_for_cpu/device() when CPU
    access is requested through the dma-buf interface.
    
    Pass DMA_ATTR_SKIP_CPU_SYNC to dma_map_sgtable() and
    dma_unmap_sgtable() in udmabuf to suppress the spurious warning and
    skip the redundant sync.
    
    Fixes: 284562e1f348 ("udmabuf: implement begin_cpu_access/end_cpu_access hooks")
    Cc: [email protected]
    Signed-off-by: Mikhail Gavrilov <[email protected]>
    Acked-by: Vivek Kasireddy <[email protected]>
    Signed-off-by: Vivek Kasireddy <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dmaengine: dw-edma: Add spinlock to protect DONE_INT_MASK and ABORT_INT_MASK [+ + +]
Author: Frank Li <[email protected]>
Date:   Sun Jul 26 17:28:19 2026 -0400

    dmaengine: dw-edma: Add spinlock to protect DONE_INT_MASK and ABORT_INT_MASK
    
    [ Upstream commit 8ffba0171c6bbce5f093c6dba5a02c0805b31203 ]
    
    The DONE_INT_MASK and ABORT_INT_MASK registers are shared by all DMA
    channels, and modifying them requires a read-modify-write sequence.
    Because this operation is not atomic, concurrent calls to
    dw_edma_v0_core_start() can introduce race conditions if two channels
    update these registers simultaneously.
    
    Add a spinlock to serialize access to these registers and prevent race
    conditions.
    
    Fixes: 7e4b8a4fbe2c ("dmaengine: Add Synopsys eDMA IP version 0 support")
    Cc: [email protected]
    Signed-off-by: Frank Li <[email protected]>
    [den: update dw_edma.lock comment]
    Link: https://lore.kernel.org/dmaengine/[email protected]/
    Signed-off-by: Koichiro Den <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: dw-edma: Improve the linked list and data blocks definition [+ + +]
Author: Gustavo Pimentel <[email protected]>
Date:   Sun Jul 26 17:28:17 2026 -0400

    dmaengine: dw-edma: Improve the linked list and data blocks definition
    
    [ Upstream commit 31fb8c1ff962d93ed5025f39a6a186207c9805eb ]
    
    In the previous implementation, the driver assumed that there existed
    only two memory spaces that would equally distribute the amount of
    read/write channels.
    
    This might not be the case on some other implementations, therefore this
    patch change this requirement so that each write/read channel has
    its own linked list and data space well defined, which allows
    different sizes and locations.
    
    Signed-off-by: Gustavo Pimentel <[email protected]>
    Link: https://lore.kernel.org/r/2e316cb983f8a1e09ce929029f87619dc92a52de.1613674948.git.gustavo.pimentel@synopsys.com
    Signed-off-by: Vinod Koul <[email protected]>
    Stable-dep-of: 8ffba0171c6b ("dmaengine: dw-edma: Add spinlock to protect DONE_INT_MASK and ABORT_INT_MASK")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: dw-edma: Remove unused irq field in struct dw_edma_chip [+ + +]
Author: Frank Li <[email protected]>
Date:   Sun Jul 26 17:28:18 2026 -0400

    dmaengine: dw-edma: Remove unused irq field in struct dw_edma_chip
    
    [ Upstream commit 5a0e4529d9aee8ce348f628ad476c9ddb6cf457d ]
    
    The "irq" field of struct dw_edma_chip was never used. Remove it.
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Serge Semin <[email protected]>
    Tested-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Frank Li <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Reviewed-by: Serge Semin <[email protected]>
    Reviewed-by: Manivannan Sadhasivam <[email protected]>
    Acked-By: Vinod Koul <[email protected]>
    Stable-dep-of: 8ffba0171c6b ("dmaengine: dw-edma: Add spinlock to protect DONE_INT_MASK and ABORT_INT_MASK")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amd/pm: fix torn gpu metrics reads [+ + +]
Author: Yang Wang <[email protected]>
Date:   Fri Aug 14 22:30:45 2026 -0400

    drm/amd/pm: fix torn gpu metrics reads
    
    [ Upstream commit 048f4541b71fb19645fb79d6e62e6e4da23a4035 ]
    
    amdgpu_dpm_get_gpu_metrics() returns a pointer to the shared metrics cache
    after dropping adev->pm.mutex. The sysfs path then copies from that pointer.
    Another reader can refresh the cache in place during the copy and return a
    snapshot containing data from two generations.
    
    Pass caller-provided storage through the DPM interface and copy the metrics
    while the mutex is held. This keeps the cache pointer private and makes each
    sysfs read observe one complete sample.
    
    Fixes: 25c933b1c4fc ("drm/amd/powerplay: add new sysfs interface for retrieving gpu metrics(V2)")
    Signed-off-by: Yang Wang <[email protected]>
    Reviewed-by: Kenneth Feng <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 862333bb48693ecafcae25af0c9d9ec31015ac77)
    Cc: [email protected]
    [ applied the fix at the sole caller `amdgpu_get_gpu_metrics()` since 5.10 lacks the `amdgpu_dpm_get_gpu_metrics()` wrapper function, wrapping both the swsmu and pp_funcs dispatch branches in `adev->pm.mutex` ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdgpu: Fix UVD decode image min size calculation [+ + +]
Author: David Rosca <[email protected]>
Date:   Thu Jul 30 18:01:51 2026 +0200

    drm/amdgpu: Fix UVD decode image min size calculation
    
    commit b8bb9ba3f101a1b0011f785a577a4a0a38371174 upstream.
    
    This needs to use pitch instead of width. Also reject pitch
    over 4096 to avoid overflow.
    
    Signed-off-by: David Rosca <[email protected]>
    Acked-by: Leo Liu <[email protected]>
    Reviewed-by: Ruijing Dong <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit b41c8cb12e202b220353332ab87dc01a11f69304)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amdgpu: Implement insert_end for VCE 3 [+ + +]
Author: David Rosca <[email protected]>
Date:   Mon Aug 10 11:11:35 2026 +0200

    drm/amdgpu: Implement insert_end for VCE 3
    
    commit d5ab4c6a64efef2d143a96df5357f59703cd703d upstream.
    
    After a recent change VCE now hangs when VCE_CMD_END is emitted
    after a pipeline sync without VM flush.
    Implement insert_end to correctly insert only one VCE_CMD_END per job.
    
    Fixes: bc639a9eadc7 ("drm/amdgpu: always emit the job vm fence")
    Signed-off-by: David Rosca <[email protected]>
    Acked-by: Alex Deucher <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 8897ea8c761b856f02061848a7908040a1fe5e68)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amdgpu: Reject UVD message with dimensions above 4096 [+ + +]
Author: David Rosca <[email protected]>
Date:   Thu Jul 30 17:37:44 2026 +0200

    drm/amdgpu: Reject UVD message with dimensions above 4096
    
    commit 8c9aebcdd9f46f7a14b98d6ab18574b7a48fbb08 upstream.
    
    Fixes potential overflow in DPB size calculations.
    
    Signed-off-by: David Rosca <[email protected]>
    Acked-by: Leo Liu <[email protected]>
    Reviewed-by: Ruijing Dong <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 05e1387d151f71569fbe122d2c89f9db0c21dc10)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amdgpu: Reject UVD message with invalid number of h265 refs [+ + +]
Author: David Rosca <[email protected]>
Date:   Tue Aug 11 11:03:10 2026 +0200

    drm/amdgpu: Reject UVD message with invalid number of h265 refs
    
    commit 9fca434208f1f9ab977feac62df8ebb1cc7ce893 upstream.
    
    Same change as for h264, avoids overflow later when calculating
    min dpb size.
    
    Signed-off-by: David Rosca <[email protected]>
    Reviewed-by: Leo Liu <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit a4b0720e4f1601f97f59a2be9c1b4b94fa6527d5)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amdgpu: validate GEM_CREATE domain combinations [+ + +]
Author: Candice Li <[email protected]>
Date:   Mon Jul 27 11:51:37 2026 +0800

    drm/amdgpu: validate GEM_CREATE domain combinations
    
    commit 5e9d136ad74df4edec67e502ce267597064d8f86 upstream.
    
    AMDGPU_GEM_CREATE checked domain bits against AMDGPU_GEM_DOMAIN_MASK,
    but did not validate domain combinations. Userspace could combine
    CPU|GTT|VRAM with DOORBELL, GDS, GWS, or OA, making
    amdgpu_bo_placement_from_domain() exceed AMDGPU_BO_MAX_PLACEMENTS and
    hit BUG_ON().
    
    Allow combinations only within CPU/GTT/VRAM, and require non-CPU/GTT/
    VRAM domains to be specified one at a time. Return -EINVAL for invalid
    combinations in amdgpu_gem_create_ioctl().
    
    v2: Rename helper from amdgpu_gem_domain_valid() to
        amdgpu_gem_are_domains_valid() (Christian)
    
    Signed-off-by: Candice Li <[email protected]>
    Reviewed-by: Christian König <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit db39852d0c39843cb02048dfb47e4b8c703e9080)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/displayid: fix Tiled Display Topology ID size [+ + +]
Author: Jani Nikula <[email protected]>
Date:   Fri Jul 31 12:56:54 2026 -0400

    drm/displayid: fix Tiled Display Topology ID size
    
    [ Upstream commit 90c0486a82e27393f9eaf3bb350f51a0bd38cb6b ]
    
    The Tiled Display Topology ID of a DisplayID Tiled Display Topology Data
    Block consists of three fields:
    
    - Tiled Display Manufacturer/Vendor ID Field (3 bytes)
    - Tiled Display Product ID Code Field (2 bytes)
    - Tiled Display Serial Number Field (4 bytes)
    
    i.e. a total of 9 bytes, not 8.
    
    The DisplayID Tiled Display Topology ID is used as the tile group
    identifier.
    
    Update both struct displayid_tiled_block topology_id member and struct
    drm_tile_group group_data member to full 9 bytes.
    
    The group data was missing the last byte of the serial number. I don't
    know whether there are known bug reports that might be linked to this,
    but it's plausible the last byte could be the differentiating part for
    the tile groups, and fewer tile groups might have been created than
    intended.
    
    Fixes: b49b55bd4fba ("drm/displayid: add displayid defines and edid extension (v2)")
    Fixes: 138f9ebb9755 ("drm: add tile_group support. (v3)")
    Cc: Dave Airlie <[email protected]>
    Cc: [email protected] # v3.19+
    Reviewed-by: Dave Airlie <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jani Nikula <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/dp/mst: fix buffer overflows in sideband chunk accumulation [+ + +]
Author: Ashutosh Desai <[email protected]>
Date:   Fri Jul 31 07:10:25 2026 -0400

    drm/dp/mst: fix buffer overflows in sideband chunk accumulation
    
    [ Upstream commit 55bd5e685bda455b9b50c835f8c8442d52a344a3 ]
    
    drm_dp_sideband_append_payload() has three related bugs when processing
    device-provided sideband reply data:
    
    1. Zero-length curchunk_len underflow: msg_len is a 6-bit field taken
       directly from the DP sideband header. If a device sends msg_len=0,
       curchunk_len is set to zero. The condition (curchunk_idx >= curchunk_len)
       is immediately true, and curchunk_len-1 wraps to 255 (u8 underflow).
       drm_dp_msg_data_crc4() reads 255 bytes from chunk[48], then memcpy()
       writes 255 bytes into msg[], both far out of bounds.
    
    2. chunk[48] overflow: curchunk_len can reach 63 (6-bit field). chunk[] is
       only 48 bytes. Multi-iteration payload assembly appends 16-byte blocks
       until curchunk_idx reaches curchunk_len, writing up to 15 bytes past
       the end of chunk[] into msg[].
    
    3. msg[256] overflow: each chunk contributes (curchunk_len-1) bytes to
       msg[]. No check ensures curlen + (curchunk_len-1) stays within msg[256],
       so the memcpy can spill into adjacent struct fields.
    
    All three are reachable from any DP MST device that can forge sideband
    reply messages on a physical connection.
    
    Fixes: ad7f8a1f9ced ("drm/helper: add Displayport multi-stream helper (v0.6)")
    Cc: <[email protected]> # v3.17+
    Signed-off-by: Ashutosh Desai <[email protected]>
    Reviewed-by: Lyude Paul <[email protected]>
    Signed-off-by: Lyude Paul <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/dp/mst: fix OOB reads in remote DPCD/I2C sideband reply parsers [+ + +]
Author: Ashutosh Desai <[email protected]>
Date:   Fri Jul 31 11:49:41 2026 -0400

    drm/dp/mst: fix OOB reads in remote DPCD/I2C sideband reply parsers
    
    [ Upstream commit 1a8f537f5a1eeac941f262fe73078d6b08ba83c0 ]
    
    drm_dp_sideband_parse_remote_dpcd_read() reads num_bytes from the raw
    message and then unconditionally does:
    
      memcpy(bytes, &raw->msg[idx], num_bytes);
    
    without checking that idx + num_bytes <= raw->curlen. raw->msg[] is
    256 bytes; if a malicious or misbehaving MST hub sets num_bytes larger
    than the remaining payload, the memcpy reads past the received data
    into whatever follows in raw->msg[].
    
    drm_dp_sideband_parse_remote_i2c_read_ack() has the same flaw (noted
    with a /* TODO check */ comment since the code was introduced).
    
    Fix both functions by using a single combined check
    (idx + num_bytes > curlen) before each memcpy. Since num_bytes is u8,
    it is always >= 0, so this strictly subsumes the simpler idx > curlen
    form and no separate step is needed.
    
    Fixes: ad7f8a1f9ced ("drm/helper: add Displayport multi-stream helper (v0.6)")
    Cc: <[email protected]> # v3.17+
    Signed-off-by: Ashutosh Desai <[email protected]>
    Reviewed-by: Lyude Paul <[email protected]>
    [added missing fixes tag]
    Signed-off-by: Lyude Paul <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/dp/mst: fix OOB reads on 2-byte fields in sideband reply parsers [+ + +]
Author: Ashutosh Desai <[email protected]>
Date:   Fri Jul 31 07:48:38 2026 -0400

    drm/dp/mst: fix OOB reads on 2-byte fields in sideband reply parsers
    
    [ Upstream commit 6b89ba3dba2f583626fb693e47e951ffb8bf591f ]
    
    Three sideband reply parsers read 16-bit fields as:
    
      val = (raw->msg[idx] << 8) | (raw->msg[idx+1]);
    
    and check bounds only after the fact. When idx == raw->curlen,
    raw->msg[idx+1] reads one byte past the received message data into
    the following struct fields (curchunk_len, curchunk_idx, curlen).
    
    Affected functions:
     - drm_dp_sideband_parse_enum_path_resources_ack()
       full_payload_bw_number and avail_payload_bw_number fields
     - drm_dp_sideband_parse_allocate_payload_ack()
       allocated_pbn field
     - drm_dp_sideband_parse_query_payload_ack()
       allocated_pbn field
    
    Fix by using a single combined check (idx + 2 > curlen) before each
    2-byte read. Since the check is strictly tighter than idx > curlen,
    no separate step is needed.
    
    Fixes: ad7f8a1f9ced ("drm/helper: add Displayport multi-stream helper (v0.6)")
    Cc: <[email protected]> # v3.17+
    Signed-off-by: Ashutosh Desai <[email protected]>
    Reviewed-by: Lyude Paul <[email protected]>
    [added fixes tag]
    Signed-off-by: Lyude Paul <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/i915/hdcp: require monotonically increasing seq_num_v [+ + +]
Author: Jani Nikula <[email protected]>
Date:   Tue Aug 4 07:21:38 2026 -0400

    drm/i915/hdcp: require monotonically increasing seq_num_v
    
    [ Upstream commit db9e64c983dcb07ff256bd455f258c44aa530ff8 ]
    
    The HDCP 2.2 specification requires the seq_num_v to be monotonically
    increasing, and repeated seq_num_v needs to be treated as an integrity
    failure. Make it so.
    
    For the first message, seq_num_v must be zero, and is already
    checked. We can only check for less-than-or-equal for the subsequent
    messages, where hdcp2_encrypted is true.
    
    Discovered using AI-assisted static analysis confirmed by Intel Product
    Security.
    
    Reported-by: Martin Hodo <[email protected]>
    Fixes: d849178e2c9e ("drm/i915: Implement HDCP2.2 repeater authentication")
    Cc: [email protected] # v5.2+
    Cc: Suraj Kandpal <[email protected]>
    Reviewed-by: Suraj Kandpal <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jani Nikula <[email protected]>
    (cherry picked from commit 58a224375c81179b52558c53d8857b93196d2687)
    Signed-off-by: Joonas Lahtinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/radeon: fix autosuspend cleanup during teardown [+ + +]
Author: Guangshuo Li <[email protected]>
Date:   Sat Aug 8 21:59:42 2026 +0800

    drm/radeon: fix autosuspend cleanup during teardown
    
    commit 587be7a17358ef8c0106775fcedae5a7bef50735 upstream.
    
    radeon_driver_load_kms() calls pm_runtime_use_autosuspend() for PX
    devices, but radeon_driver_unload_kms() does not call the matching
    pm_runtime_dont_use_autosuspend() during teardown.
    
    If the autosuspend delay is set to a negative value while autosuspend
    is enabled, the runtime PM core increments usage_count to prevent
    runtime suspend. Without calling pm_runtime_dont_use_autosuspend()
    during teardown, this reference is not dropped.
    
    The documentation for pm_runtime_use_autosuspend() also notes that it
    is important to undo it with pm_runtime_dont_use_autosuspend() at
    driver exit time, unless runtime PM was initially enabled with
    devm_pm_runtime_enable().
    
    Add the missing pm_runtime_dont_use_autosuspend() call to the driver
    unload path.
    
    This issue was found by manual code inspection.
    
    Fixes: 10ebc0bc0934 ("drm/radeon: add runtime PM support (v2)")
    Signed-off-by: Guangshuo Li <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 0fdc1ff82ea14844c22795e9e0813c3ca03235e1)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/tegra: fbdev: Remove offset into framebuffer memory [+ + +]
Author: Thomas Zimmermann <[email protected]>
Date:   Fri Jul 31 12:57:03 2026 -0400

    drm/tegra: fbdev: Remove offset into framebuffer memory
    
    [ Upstream commit a18b6e30ecd69096beda4a0c96d2570900c3879a ]
    
    The screen_buffer field in struct fb_info contains the kernel address
    of the first byte of framebuffer memory. Do not add the display offset.
    This offset only describes scrolling during scanout.
    
    Signed-off-by: Thomas Zimmermann <[email protected]>
    Fixes: de2ba664c30f ("gpu: host1x: drm: Add memory manager and fb")
    Cc: [email protected]
    Cc: [email protected]
    Cc: <[email protected]> # v3.10+
    Signed-off-by: Thierry Reding <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/virtio: bound EDID block reads to the response buffer [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Sat Aug 1 19:40:39 2026 -0400

    drm/virtio: bound EDID block reads to the response buffer
    
    [ Upstream commit 4e1a53892ba7f8a3e1da6bfc53c83ae7c812dccd ]
    
    virtio_get_edid_block() validates the read offset only against the
    device-supplied resp->size field, never against the fixed-size resp->edid
    array. The EDID block index is driven by the device-supplied extension
    count, so a malicious virtio-gpu backend can advertise a large size
    together with a high block count and read far past the array into adjacent
    kernel memory, which is then surfaced in the parsed EDID (an out-of-bounds
    read / info leak).
    
    Also reject any read whose end exceeds the size of the edid array.
    Conforming EDID responses stay within the array and are unaffected.
    
    Fixes: b4b01b4995fb ("drm/virtio: add edid support")
    Cc: [email protected]
    Signed-off-by: Bryam Vargas <[email protected]>
    Signed-off-by: Dmitry Osipenko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/virtio: Return proper error codes instead of -1 [+ + +]
Author: Dmitry Osipenko <[email protected]>
Date:   Sat Aug 1 19:40:38 2026 -0400

    drm/virtio: Return proper error codes instead of -1
    
    [ Upstream commit 4c703f5d6f776eaa6a98611c9b5dfe800fbeb0c8 ]
    
    Don't return -1 in error cases, return proper error code. The returned
    error codes propagate to error messages and to userspace and it's always
    good to have a meaningful error number for debugging purposes.
    
    Signed-off-by: Dmitry Osipenko <[email protected]>
    Link: http://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Gerd Hoffmann <[email protected]>
    Stable-dep-of: 4e1a53892ba7 ("drm/virtio: bound EDID block reads to the response buffer")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/virtio: use uninterruptible resv lock for plane updates [+ + +]
Author: Deepanshu Kartikey <[email protected]>
Date:   Fri Jul 31 12:30:05 2026 -0400

    drm/virtio: use uninterruptible resv lock for plane updates
    
    [ Upstream commit a48bbcc7ac739e93562d6148c6fa504c2e9f22f8 ]
    
    virtio_gpu_cursor_plane_update() and virtio_gpu_resource_flush() lock
    the framebuffer BO's dma_resv via virtio_gpu_array_lock_resv() and
    ignore its return value. The function can fail with -EINTR from
    dma_resv_lock_interruptible() (signal during lock wait) or with
    -ENOMEM from dma_resv_reserve_fences() (fence slot allocation),
    leaving the resv lock not held. The queue path then walks the object
    array and calls dma_resv_add_fence(), which requires the lock held;
    with lockdep enabled this trips dma_resv_assert_held():
    
      WARNING: drivers/dma-buf/dma-resv.c:296 at dma_resv_add_fence+0x71e/0x840
      Call Trace:
       virtio_gpu_array_add_fence
       virtio_gpu_queue_ctrl_sgs
       virtio_gpu_queue_fenced_ctrl_buffer
       virtio_gpu_cursor_plane_update
       drm_atomic_helper_commit_planes
       drm_atomic_helper_commit_tail
       commit_tail
       drm_atomic_helper_commit
       drm_atomic_commit
       drm_atomic_helper_update_plane
       __setplane_atomic
       drm_mode_cursor_universal
       drm_mode_cursor_common
       drm_mode_cursor_ioctl
       drm_ioctl
       __x64_sys_ioctl
    
    Beyond the WARN, mutating the dma_resv fence list without the lock
    races with concurrent readers/writers and can corrupt the list.
    
    Both call sites run inside the .atomic_update plane callback, which
    DRM atomic helpers do not allow to fail (by the time it runs, the
    commit has been signed off to userspace and there is no clean
    rollback path). Moving the lock acquisition to .prepare_fb was
    rejected because the broader lock scope deadlocks against other BO
    locking paths in the same atomic commit.
    
    Introduce virtio_gpu_lock_one_resv_uninterruptible() that uses
    dma_resv_lock() instead of dma_resv_lock_interruptible(). This
    eliminates the -EINTR failure mode -- the realistic syzbot trigger
    -- without extending the lock hold across the commit. The helper
    locks a single BO and rejects nents > 1 with -EINVAL; both fix
    sites lock exactly one BO.
    
    Use it from virtio_gpu_cursor_plane_update() and
    virtio_gpu_resource_flush(); check the return value to handle the
    remaining -ENOMEM case from dma_resv_reserve_fences() by freeing
    the objs and skipping the plane update for that frame. The
    framebuffer BOs touched here are not shared with other contexts
    and lock contention is expected to be brief, so the loss of
    signal-interruptibility is acceptable.
    
    Other callers of virtio_gpu_array_lock_resv() (the ioctl paths)
    continue to use the interruptible variant.
    
    The bug was reported by syzbot, triggered via fault injection
    (fail_nth) on the DRM_IOCTL_MODE_CURSOR path, which forces the
    -ENOMEM branch in dma_resv_reserve_fences().
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=72bd3dd3a5d5f39a0271
    Fixes: 5cfd31c5b3a3 ("drm/virtio: fix virtio_gpu_cursor_plane_update().")
    Cc: [email protected]
    Signed-off-by: Deepanshu Kartikey <[email protected]>
    Signed-off-by: Dmitry Osipenko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
espintcp: use sk_msg_free_partial to fix partial send [+ + +]
Author: Sabrina Dubroca <[email protected]>
Date:   Tue Jul 28 22:30:10 2026 -0400

    espintcp: use sk_msg_free_partial to fix partial send
    
    [ Upstream commit 007800408002d871f5699bdb944f985896730b8f ]
    
    sk_msg_free_partial() ensures consistency of the skmsg at every
    iteration, without having to manually handle uncharges and offsets.
    This simplifies the code, and fixes some bugs in skmsg accounting when
    we don't send the full contents.
    
    Cc: [email protected]
    Fixes: e27cca96cd68 ("xfrm: add espintcp (RFC 8229)")
    Reported-by: Aaron Esau <[email protected]>
    Reported-by: Yiming Qian <[email protected]>
    Signed-off-by: Sabrina Dubroca <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
f2fs: fix UAF issue in f2fs_merge_page_bio() [+ + +]
Author: Chao Yu <[email protected]>
Date:   Sun Sep 28 18:24:22 2025 +0800

    f2fs: fix UAF issue in f2fs_merge_page_bio()
    
    commit edf7e9040fc52c922db947f9c6c36f07377c52ea upstream.
    
    As JY reported in bugzilla [1],
    
    Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000
    pc : [0xffffffe51d249484] f2fs_is_cp_guaranteed+0x70/0x98
    lr : [0xffffffe51d24adbc] f2fs_merge_page_bio+0x520/0x6d4
    CPU: 3 UID: 0 PID: 6790 Comm: kworker/u16:3 Tainted: P    B   W  OE      6.12.30-android16-5-maybe-dirty-4k #1 5f7701c9cbf727d1eebe77c89bbbeb3371e895e5
    Tainted: [P]=PROPRIETARY_MODULE, [B]=BAD_PAGE, [W]=WARN, [O]=OOT_MODULE, [E]=UNSIGNED_MODULE
    Workqueue: writeback wb_workfn (flush-254:49)
    Call trace:
     f2fs_is_cp_guaranteed+0x70/0x98
     f2fs_inplace_write_data+0x174/0x2f4
     f2fs_do_write_data_page+0x214/0x81c
     f2fs_write_single_data_page+0x28c/0x764
     f2fs_write_data_pages+0x78c/0xce4
     do_writepages+0xe8/0x2fc
     __writeback_single_inode+0x4c/0x4b4
     writeback_sb_inodes+0x314/0x540
     __writeback_inodes_wb+0xa4/0xf4
     wb_writeback+0x160/0x448
     wb_workfn+0x2f0/0x5dc
     process_scheduled_works+0x1c8/0x458
     worker_thread+0x334/0x3f0
     kthread+0x118/0x1ac
     ret_from_fork+0x10/0x20
    
    [1] https://bugzilla.kernel.org/show_bug.cgi?id=220575
    
    The panic was caused by UAF issue w/ below race condition:
    
    kworker
    - writepages
     - f2fs_write_cache_pages
      - f2fs_write_single_data_page
       - f2fs_do_write_data_page
        - f2fs_inplace_write_data
         - f2fs_merge_page_bio
          - add_inu_page
          : cache page #1 into bio & cache bio in
            io->bio_list
      - f2fs_write_single_data_page
       - f2fs_do_write_data_page
        - f2fs_inplace_write_data
         - f2fs_merge_page_bio
          - add_inu_page
          : cache page #2 into bio which is linked
            in io->bio_list
                                                    write
                                                    - f2fs_write_begin
                                                    : write page #1
                                                     - f2fs_folio_wait_writeback
                                                      - f2fs_submit_merged_ipu_write
                                                       - f2fs_submit_write_bio
                                                       : submit bio which inclues page #1 and #2
    
                                                    software IRQ
                                                    - f2fs_write_end_io
                                                     - fscrypt_free_bounce_page
                                                     : freed bounced page which belongs to page #2
          - inc_page_count( , WB_DATA_TYPE(data_folio), false)
          : data_folio points to fio->encrypted_page
            the bounced page can be freed before
            accessing it in f2fs_is_cp_guarantee()
    
    It can reproduce w/ below testcase:
    Run below script in shell #1:
    for ((i=1;i>0;i++)) do xfs_io -f /mnt/f2fs/enc/file \
    -c "pwrite 0 32k" -c "fdatasync"
    
    Run below script in shell #2:
    for ((i=1;i>0;i++)) do xfs_io -f /mnt/f2fs/enc/file \
    -c "pwrite 0 32k" -c "fdatasync"
    
    So, in f2fs_merge_page_bio(), let's avoid using fio->encrypted_page after
    commit page into internal ipu cache.
    
    Fixes: 0b20fcec8651 ("f2fs: cache global IPU bio")
    Reported-by: JY <[email protected]>
    Signed-off-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Jiucheng Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
firmware_loader: introduce __free() cleanup hanler [+ + +]
Author: Dmitry Torokhov <[email protected]>
Date:   Mon Jul 27 23:26:07 2026 -0400

    firmware_loader: introduce __free() cleanup hanler
    
    [ Upstream commit 8dde8fa0cc3edce73c050b9882d06c1a575f6402 ]
    
    Define cleanup handler using facilities from linux/cleanup.h to simplify
    error handling in code using firmware loader. This will allow writing code
    like this:
    
    int driver_update_firmware(...)
    {
            const struct firmware *fw_entry __free(firmware) = NULL;
            int error;
    
            ...
            error = request_firmware(&fw_entry, fw_name, dev);
            if (error) {
                    dev_err(dev, "failed to request firmware %s: %d",
                            fw_name, error);
                    return error;
            }
    
            error = check_firmware_valid(fw_entry);
            if (error)
                    return error;
    
            guard(mutex)(&instance->lock);
    
            error = use_firmware(instance, fw);
            if (error)
                    return error;
    
            return 0;
    }
    
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Acked-by: Luis Chamberalin <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: d48795b5cd68 ("Input: ims-pcu - fix firmware leak in async update")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fpga: dfl-afu: validate DMA mapping length in afu_dma_map_region() [+ + +]
Author: Sebastian Alba Vives <[email protected]>
Date:   Tue Jul 21 19:58:31 2026 -0400

    fpga: dfl-afu: validate DMA mapping length in afu_dma_map_region()
    
    [ Upstream commit fc3b071a7c8dc0f5d56defddf6e6fd5aaa3e1e27 ]
    
    afu_ioctl_dma_map() accepts a 64-bit length from userspace via
    DFL_FPGA_PORT_DMA_MAP ioctl without an upper bound check. The value
    is passed to afu_dma_pin_pages() where npages is derived as
    length >> PAGE_SHIFT and passed to pin_user_pages_fast() which takes
    int nr_pages, causing implicit truncation if length is very large.
    
    Validate map.length at the ioctl entry point before calling
    afu_dma_map_region(), rejecting values whose page count exceeds
    INT_MAX.
    
    Fixes: fa8dda1edef9 ("fpga: dfl: afu: add DFL_FPGA_PORT_DMA_MAP/UNMAP ioctls support")
    Cc: [email protected]
    Signed-off-by: Sebastian Alba Vives <[email protected]>
    Reviewed-by: Xu Yilun <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Xu Yilun <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fs/resctrl: Fix double-add of pseudo-locked region's RMID to free list [+ + +]
Author: Reinette Chatre <[email protected]>
Date:   Wed Jul 29 14:35:10 2026 -0400

    fs/resctrl: Fix double-add of pseudo-locked region's RMID to free list
    
    [ Upstream commit b9f089723aee892efc77c349ae47a6b452b293c4 ]
    
    A pseudo-locked group's RMID is freed when it is created. On unmount
    rmdir_all_sub() unconditionally frees all RMID of all groups, resulting
    in a double-free of the pseudo-locked group's RMID. The consequence of this
    is that the original free results in the pseudo-locked group's RMID being
    added to the rmid_free_lru linked list and the second free then attempts
    to add the same RMID entry to the rmid_free_lru again.
    
    Do not double-free a pseudo-locked group's RMID.
    
    Fixes: e0bdfe8e36f3 ("x86/intel_rdt: Support creation/removal of pseudo-locked region")
    Signed-off-by: Reinette Chatre <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Cc: <[email protected]>
    Link: https://patch.msgid.link/551432dd7e624a862b8e58314c38aaba0afff3e9.1783377598.git.reinette.chatre@intel.com
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fs: don't block write during exec on pre-content watched files [+ + +]
Author: Amir Goldstein <[email protected]>
Date:   Wed Aug 12 08:02:21 2026 -0400

    fs: don't block write during exec on pre-content watched files
    
    [ Upstream commit 0357ef03c94ef835bd44a0658b8edb672a9dbf51 ]
    
    Commit 2a010c412853 ("fs: don't block i_writecount during exec") removed
    the legacy behavior of getting ETXTBSY on attempt to open and executable
    file for write while it is being executed.
    
    This commit was reverted because an application that depends on this
    legacy behavior was broken by the change.
    
    We need to allow HSM writing into executable files while executed to
    fill their content on-the-fly.
    
    To that end, disable the ETXTBSY legacy behavior for files that are
    watched by pre-content events.
    
    This change is not expected to cause regressions with existing systems
    which do not have any pre-content event listeners.
    
    Signed-off-by: Amir Goldstein <[email protected]>
    Acked-by: Christian Brauner <[email protected]>
    Signed-off-by: Jan Kara <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Stable-dep-of: db1856ea9196 ("binfmt_misc: restore write access when removing an entry")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fsnotify: opt-in for permission events at file open time [+ + +]
Author: Amir Goldstein <[email protected]>
Date:   Wed Aug 12 08:02:20 2026 -0400

    fsnotify: opt-in for permission events at file open time
    
    [ Upstream commit a94204f4d48e28a711b7ed10399f749286c433e3 ]
    
    Legacy inotify/fanotify listeners can add watches for events on inode,
    parent or mount and expect to get events (e.g. FS_MODIFY) on files that
    were already open at the time of setting up the watches.
    
    fanotify permission events are typically used by Anti-malware sofware,
    that is watching the entire mount and it is not common to have more that
    one Anti-malware engine installed on a system.
    
    To reduce the overhead of the fsnotify_file_perm() hooks on every file
    access, relax the semantics of the legacy FAN_ACCESS_PERM event to generate
    events only if there were *any* permission event listeners on the
    filesystem at the time that the file was opened.
    
    The new semantic is implemented by extending the FMODE_NONOTIFY bit into
    two FMODE_NONOTIFY_* bits, that are used to store a mode for which of the
    events types to report.
    
    This is going to apply to the new fanotify pre-content events in order
    to reduce the cost of the new pre-content event vfs hooks.
    
    [Thanks to Bert Karwatzki <[email protected]> for reporting a bug in this
    code with CONFIG_FANOTIFY_ACCESS_PERMISSIONS disabled]
    
    Suggested-by: Linus Torvalds <[email protected]>
    Link: https://lore.kernel.org/linux-fsdevel/CAHk-=wj8L=mtcRTi=NECHMGfZQgXOp_uix1YVh04fEmrKaMnXA@mail.gmail.com/
    Signed-off-by: Amir Goldstein <[email protected]>
    Signed-off-by: Jan Kara <[email protected]>
    Link: https://patch.msgid.link/5ea5f8e283d1edb55aa79c35187bfe344056af14.1731684329.git.josef@toxicpanda.com
    Stable-dep-of: db1856ea9196 ("binfmt_misc: restore write access when removing an entry")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ftrace: Add global mutex to serialize trace_parser access [+ + +]
Author: Tengda Wu <[email protected]>
Date:   Sun Aug 9 09:54:19 2026 -0400

    ftrace: Add global mutex to serialize trace_parser access
    
    [ Upstream commit 7720b63bcef3f54c7fe288774b720a227d54a306 ]
    
    In ftrace, the trace_parser structure is allocated and initialized when
    a trace file is opened, and is subsequently used across write and release
    handlers to parse user input.
    
    The affected handler paths and their specific functions are:
      - Open paths: ftrace_regex_open(), ftrace_graph_open()
      - Write paths: ftrace_regex_write(), ftrace_graph_write()
      - Release paths: ftrace_regex_release(), ftrace_graph_release()
    
    If userspace opens a trace file descriptor and shares it across multiple
    threads, concurrent write calls will race on the parser's internal state,
    specifically the 'idx', 'cont', and 'buffer' fields, leading to corrupted
    input or undefined behavior.
    
    Fix this by adding a global mutex, parser_lock, to serialize all access
    to trace_parser across write and release paths, preventing concurrent
    corruption of parser state.
    
    Fixes: e704eff3ff51 ("ftrace: Have set_graph_function handle multiple functions in one write")
    Fixes: 689fd8b65d66 ("tracing: trace parser support for function and graph")
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Tengda Wu <[email protected]>
    Signed-off-by: Steven Rostedt <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ftrace: Fix off-by-one fentry site disable in ftrace_free_mem() [+ + +]
Author: Josh Poimboeuf <[email protected]>
Date:   Wed Aug 5 21:56:46 2026 -0700

    ftrace: Fix off-by-one fentry site disable in ftrace_free_mem()
    
    commit 8b8292d6487c81bd57c2605a9b404b1cf8f1edfb upstream.
    
    When a module's init text is freed, do_init_module() calls
    ftrace_free_mem() with a half-open [start, end) range.  However the
    ftrace_cmp_recs() comparator treats the upper bound as inclusive, as all
    its other users do, passing 'ip + size - 1'.  So ftrace_free_mem() can
    delete a record sitting exactly at 'end', which is outside the freed
    range.
    
    For a kernel without CFI or IBT, the first record of a function is at
    the function start, which for the first function in a module is also the
    base of its text allocation.  As the module allocator packs its regions,
    that address is often the 'end' passed by a neighboring module's
    do_init_module(), causing the first function's ftrace location to get
    disabled, preventing an attempt to livepatch it:
    
      livepatch: failed to find location for function 'pcspkr_probe'
    
    Convert the exclusive end to the inclusive 'end - 1' the comparator
    expects, and return early for an empty range to avoid the subtraction
    from underflowing when the init text size is zero.
    
    Cc: [email protected]
    Fixes: 42c269c88dc1 ("ftrace: Allow for function tracing to record init functions on boot up")
    Link: https://patch.msgid.link/1b5ccfa8095bdb1277f84af1c2c2e2205aca03ae.1785992188.git.jpoimboe@kernel.org
    Signed-off-by: Josh Poimboeuf <[email protected]>
    Acked-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Steven Rostedt <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
gpio: tegra: do not call pinctrl for GPIO direction [+ + +]
Author: Runyu Xiao <[email protected]>
Date:   Tue Jul 28 18:18:11 2026 -0400

    gpio: tegra: do not call pinctrl for GPIO direction
    
    [ Upstream commit d3e91a95b2b0fc6336dbf3ec90d831a1654d2720 ]
    
    tegra_gpio_direction_input() and tegra_gpio_direction_output() already
    program the GPIO controller direction registers directly. The additional
    pinctrl_gpio_direction_input/output() calls do not add a Tegra pinctrl
    operation, because the Tegra pinmux ops provide GPIO request/free
    handling but no gpio_set_direction hook.
    
    The extra call still enters the pinctrl core and takes pctldev->mutex.
    Shared GPIO users can call the direction path while holding their
    per-line spinlock, so this otherwise redundant pinctrl direction call can
    sleep in an atomic context.
    
    This was found by our static analysis tool and then confirmed by manual
    review of tegra_gpio_probe(), the Tegra GPIO direction callbacks and the
    Tegra pinctrl ops. The reviewed path has a default non-sleeping
    struct gpio_chip while the direction callback still enters the pinctrl
    mutex path.
    
    A directed runtime validation kept the same non-sleeping chip registration
    and drove:
    
      gpio_shared_proxy_direction_output()
      gpiod_direction_output_raw_commit()
      tegra_gpio_direction_output()
      pinctrl_gpio_direction_output()
    
    Lockdep reported a sleep-in-atomic warning with the shared GPIO spinlock
    held and pinctrl_get_device_gpio_range() plus tegra_gpio_direction_output()
    on the stack.
    
    Do not mark the whole chip as can_sleep to paper over this: can_sleep
    describes whether get()/set() may sleep, and Tegra value access is MMIO.
    Remove the redundant pinctrl direction calls and keep pinctrl involvement
    in the existing request/free path.
    
    Fixes: 11da90541283 ("gpio: tegra: Fix offset of pinctrl calls")
    Cc: [email protected]
    Signed-off-by: Runyu Xiao <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
hwmon: (npcm750-pwm-fan): stop fan timer on device detach [+ + +]
Author: Hongyan Xu <[email protected]>
Date:   Wed Aug 12 10:46:31 2026 -0400

    hwmon: (npcm750-pwm-fan): stop fan timer on device detach
    
    [ Upstream commit f27f6976ea269219c1259a7c2f8c6dfe782540a3 ]
    
    When a fan tach channel is present, npcm7xx_pwm_fan_probe() starts
    fan_timer. The timer callback polls tach state and rearms the timer, but
    the driver has no remove callback or devm cleanup action to stop it. On
    device detach, the devm-managed driver data and I/O mappings can be
    released while the timer is still pending or running.
    
    Register a devm cleanup action before starting the timer and shut the
    timer down synchronously from that action.
    
    This issue was found by a static analysis tool.
    
    Fixes: f1fd4a4db777 ("hwmon: Add NPCM7xx PWM and Fan driver")
    Cc: [email protected]
    Signed-off-by: Hongyan Xu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    [ changed `timer_shutdown_sync()` to `timer_delete_sync()` since the former is absent in 5.10 ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
i2c: bcm-iproc: remove printout on handled timeouts [+ + +]
Author: Wolfram Sang <[email protected]>
Date:   Wed Aug 12 06:25:36 2026 -0400

    i2c: bcm-iproc: remove printout on handled timeouts
    
    [ Upstream commit 796e2c260187e32530cf343546ba1cdf2e2f5491 ]
    
    I2C and SMBus timeouts are not something the user needs to be informed
    about on controller level. The client driver may know if that really is
    a problem and give more detailed information to the user. The controller
    should just pass this information upwards. Remove the printout.
    
    Signed-off-by: Wolfram Sang <[email protected]>
    Signed-off-by: Andi Shyti <[email protected]>
    Stable-dep-of: 98f2e9e6d6f9 ("i2c: iproc: reset bus after timeout if START_BUSY is stuck")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

i2c: davinci: Unregister cpufreq notifier on probe failure [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Wed Jul 22 06:30:14 2026 -0400

    i2c: davinci: Unregister cpufreq notifier on probe failure
    
    [ Upstream commit e43f32816a1b1fe5a86279411626fe3a9be56d45 ]
    
    davinci_i2c_probe() registers a cpufreq transition notifier before adding
    the I2C adapter.  If i2c_add_numbered_adapter() fails, the probe error path
    releases the device resources without unregistering the notifier.
    
    Add a dedicated error path to unregister the cpufreq notifier after
    i2c_add_numbered_adapter() fails.
    
    Fixes: 82c0de11b734 ("i2c: davinci: Add cpufreq support")
    Signed-off-by: Haoxiang Li <[email protected]>
    Cc: <[email protected]> # v2.6.36+
    Reviewed-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Andi Shyti <[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]>

i2c: imx: fix locked bus on SMBus block-read of 0 (atomic) [+ + +]
Author: Vincent Jardin <[email protected]>
Date:   Mon Jul 27 09:13:17 2026 -0400

    i2c: imx: fix locked bus on SMBus block-read of 0 (atomic)
    
    [ Upstream commit cb2fc37857693b55909fb77dc2c87cfbc1cdc476 ]
    
    SMBus 3.1 6.5.7 allows a Block Read byte count of 0, but the atomic
    (polling) path rejects it as -EPROTO. Worse, it returns without a
    NACK+STOP: the next receive cycle has already started, so the target
    keeps holding SDA and the bus stays stuck until a power cycle for
    this i2c controller.
    
    Reading I2DR to obtain the count likewise arms the next byte on the
    count > I2C_SMBUS_BLOCK_MAX path, which also returned -EPROTO directly
    and left the bus held.
    
    Handle both: NACK the in-flight dummy byte (TXAK) and extend msgs->len so
    the existing last-byte handling emits STOP; the dummy byte is discarded.
    A count of 0 is a valid empty block read; a count above
    I2C_SMBUS_BLOCK_MAX is still reported as -EPROTO, but only after the bus
    has been released.
    
    The interrupt-driven path has the same flaw from a later commit and is
    fixed separately, as it carries a different Fixes: tag and stable range.
    
    Fixes: 8e8782c71595 ("i2c: imx: add SMBus block read support")
    Signed-off-by: Vincent Jardin <[email protected]>
    Cc: <[email protected]> # v3.16+
    Acked-by: Oleksij Rempel <[email protected]>
    Acked-by: Carlos Song <[email protected]>
    Reviewed-by: Stefan Eichenberger <[email protected]>
    Signed-off-by: Andi Shyti <[email protected]>
    Link: https://lore.kernel.org/r/20260713-for-upstream-i2c-lx2160-fix-v1-v3-1-073ac9e103a5@free.fr
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

i2c: imx: separate atomic, dma and non-dma use case [+ + +]
Author: Stefan Eichenberger <[email protected]>
Date:   Mon Jul 27 09:13:16 2026 -0400

    i2c: imx: separate atomic, dma and non-dma use case
    
    [ Upstream commit b460b15b3cc23ef3639cc51043bf8b2a70ca1878 ]
    
    Separate the atomic, dma and non-dma use case as a preparation step for
    moving the non-dma use case to the isr to avoid rescheduling while a
    transfer is in progress.
    
    Signed-off-by: Stefan Eichenberger <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Acked-by: Oleksij Rempel <[email protected]>
    Signed-off-by: Andi Shyti <[email protected]>
    Stable-dep-of: cb2fc3785769 ("i2c: imx: fix locked bus on SMBus block-read of 0 (atomic)")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

i2c: iproc: reset bus after timeout if START_BUSY is stuck [+ + +]
Author: Jonas Gorski <[email protected]>
Date:   Wed Aug 12 06:25:37 2026 -0400

    i2c: iproc: reset bus after timeout if START_BUSY is stuck
    
    [ Upstream commit 98f2e9e6d6f91a6abb43f166b244b428ba85fa2b ]
    
    If a transaction times out, the START_BUSY signal can stay up, and
    subsequent transactaction attempts will fail as the bus is still
    considered busy.
    
    I can easily trigger this by attempting to read from an address with no
    device, e.g. when running i2cdetect. After the first read times out, all
    subsequent read attempts return busy.
    
    To get to a working state again, the controller needs to be reset to
    clear the START_BUSY signal. So check for START_BUSY still asserted on a
    timeout, and do reset in case it is,
    
    This is also done by the original non-upstream iproc-smbus driver
    implementation [1].
    
    Works around situations like:
    
        bcm-iproc-2c 1803b000.i2c: transaction timed out
        bcm-iproc-2c 1803b000.i2c: bus is busy
        bcm-iproc-2c 1803b000.i2c: bus is busy
        bcm-iproc-2c 1803b000.i2c: bus is busy
        bcm-iproc-2c 1803b000.i2c: bus is busy
        bcm-iproc-2c 1803b000.i2c: bus is busy
        ...
    
    where the bus never recovers after a timeout.
    
    [1] https://github.com/opencomputeproject/onie/blob/master/patches/kernel/3.2.69/driver-iproc-smbus.patch
    
    Fixes: e6e5dd3566e0 ("i2c: iproc: Add Broadcom iProc I2C Driver")
    Signed-off-by: Jonas Gorski <[email protected]>
    Cc: <[email protected]> # v4.0+
    Acked-by: Ray Jui <[email protected]>
    Signed-off-by: Andi Shyti <[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]>

i2c: smbus: Check for parent device before dereference [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Fri Feb 4 17:59:20 2022 +0200

    i2c: smbus: Check for parent device before dereference
    
    commit 8302532f47bb6c3aa1ed2043d30187ca307f176a upstream.
    
    An I²C adapter might be instantiated without parent. In such case
    there is no property can be retrieved. Skip SMBus alert setup when
    this happens.
    
    Fixes: a263a84088f6 ("i2c: smbus: Use device_*() functions instead of of_*()")
    Reported-by: [email protected]
    Signed-off-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Wolfram Sang <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

i2c: smbus: Use device_*() functions instead of of_*() [+ + +]
Author: Akhil R <[email protected]>
Date:   Wed Jul 22 06:30:23 2026 -0400

    i2c: smbus: Use device_*() functions instead of of_*()
    
    [ Upstream commit a263a84088f689bf0c1552a510b25d0bcc45fcae ]
    
    Change of_*() functions to device_*() for firmware agnostic usage.
    This allows to have the smbus_alert interrupt without any changes
    in the controller drivers using the ACPI table.
    
    Signed-off-by: Akhil R <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Wolfram Sang <[email protected]>
    Stable-dep-of: 158efa411c57 ("i2c: core: fix adapter probe deferral loop")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ice: fix memory leak in ice_lbtest_prepare_rings() [+ + +]
Author: Dawei Feng <[email protected]>
Date:   Wed Aug 12 05:32:31 2026 -0400

    ice: fix memory leak in ice_lbtest_prepare_rings()
    
    [ Upstream commit 3a9de5590da4ffd9e9c541c4c4d492aa2b54cf6e ]
    
    ice_lbtest_prepare_rings() frees Rx rings only when
    ice_vsi_start_all_rx_rings() fails. If ice_vsi_setup_rx_rings() fails
    after allocating some descriptors, or if ice_vsi_cfg_lan() fails after
    the Rx rings were prepared, the function reaches the Tx cleanup path
    without releasing the initialized Rx resources.
    
    Fix this by adding separate unwind paths for Rx setup failure and LAN
    configuration failure. The Rx setup failure path releases the partially
    prepared Rx rings before freeing Tx rings, while later failures first
    undo the LAN Tx configuration and then release the Rx rings in reverse
    setup order.
    
    The bug was first flagged by an experimental analysis tool we are
    developing for kernel memory-management bugs while analyzing
    v6.13-rc1. The tool is still under development and is not yet publicly
    available. Manual inspection confirms that the bug is still
    present in v7.1-rc7.
    
    An x86_64 allyesconfig build showed no new warnings. As we do not have an
    Intel E800 Series adapter available to run the ethtool offline loopback
    selftest, no runtime testing was able to be performed.
    
    Fixes: 0e674aeb0b77 ("ice: Add handler for ethtool selftest")
    Cc: [email protected]
    Signed-off-by: Dawei Feng <[email protected]>
    Reviewed-by: Jacob Keller <[email protected]>
    Tested-by: Rinitha S <[email protected]> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ice: fix VF interrupts cleanup [+ + +]
Author: Dawid Osuchowski <[email protected]>
Date:   Wed Aug 12 05:20:33 2026 -0400

    ice: fix VF interrupts cleanup
    
    [ Upstream commit fb096882095e5a8d6b5159e43793d4a38a0c5b1f ]
    
    When a virtual function sends an IRQ map command, the PF will set up
    interrupts according to that request. However, because these interrupts are
    never reset, the next time Virtual Function initializes, the interrupts are
    still enabled for a given VF, which leads to performance degradation in
    certain cases due to interrupts being unexpectedly enabled and thus causing
    interrupt floods.
    
    Cc: [email protected]
    Fixes: 1071a8358a28 ("ice: Implement virtchnl commands for AVF support")
    Suggested-by: Vladimir Medvedkin <[email protected]>
    Reviewed-by: Aleksandr Loktionov <[email protected]>
    Signed-off-by: Dawid Osuchowski <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Tested-by: Patryk Holda <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Input: atkbd - skip deactivate for Xiaomi Book Pro 14's internal keyboard [+ + +]
Author: Zhefu Zhang <[email protected]>
Date:   Sun Aug 2 15:36:54 2026 -0700

    Input: atkbd - skip deactivate for Xiaomi Book Pro 14's internal keyboard
    
    commit 3a046db33bb9f28b43a951a7a090db771dc0f8b3 upstream.
    
    The internal keyboard of the Xiaomi Book Pro 14 does not work unless
    atkbd skips deactivating it at the end of atkbd_probe().
    
    Using 'i8042.dumbkbd=1' also makes the keyboard work, but then the driver
    never writes to the keyboard at all, so the Caps Lock LED is lost. The
    atkbd_deactivate_fixup quirk fixes both without a boot parameter.
    
    DMI: XIAOMI Xiaomi Book Pro 14/TM2424, BIOS XMAPT4B0P0909 05/06/2026
    
    Signed-off-by: Zhefu Zhang <[email protected]>
    Reviewed-by: Andrew Zhou <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: [email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: focaltech - fix array out-of-bounds in focaltech_process_rel_packet [+ + +]
Author: Richard Davies <[email protected]>
Date:   Sun Aug 2 17:53:10 2026 -0700

    Input: focaltech - fix array out-of-bounds in focaltech_process_rel_packet
    
    commit 296736076b3fd078742651c719555a488624023a upstream.
    
    Make finger2 (and also finger1) unsigned, so that if the finger index in
    the packet is 0 then subtracting 1 creates an array index which overflows
    above the existing check for FOC_MAX_FINGERS, as the existing comment says
    it should, instead of writing to state->fingers[-1].
    
    Fixes: 05be1d079ec0 ("Input: psmouse - support for the FocalTech PS/2 protocol extensions")
    Signed-off-by: Richard Davies <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: [email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: iforce - validate input packet lengths [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Fri Jul 24 20:46:27 2026 -0700

    Input: iforce - validate input packet lengths
    
    commit 5751c781d3c97ab6ce0e2a966156ed882152c415 upstream.
    
    iforce_process_packet() reads fixed fields from joystick, wheel and
    status packets without first checking their lengths. In particular, the
    shared hats-and-buttons helper unconditionally reads data[6]. The status
    tail is a sequence of 16-bit effect addresses, but an incomplete final
    address is also consumed. A successful zero-length USB URB additionally
    reads the packet ID before the common parser is called.
    
    Reject the zero-length USB transfer, require the seven-byte joystick and
    wheel prefixes and the two-byte status prefix, and consume only complete
    status-tail addresses.
    
    Signed-off-by: Pengpeng Hou <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: [email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: ims-pcu - fix firmware leak in async update [+ + +]
Author: Dmitry Torokhov <[email protected]>
Date:   Mon Jul 27 23:26:08 2026 -0400

    Input: ims-pcu - fix firmware leak in async update
    
    [ Upstream commit d48795b5cd6828d36b707e8d62fc9e5c90e004ab ]
    
    The firmware object was not being released if validation failed.
    Use __free(firmware) to ensure the firmware is always released.
    
    Fixes: 628329d52474 ("Input: add IMS Passenger Control Unit driver")
    Cc: [email protected]
    Reported-by: Sashiko bot <[email protected]>
    Assisted-by: Gemini:gemini-3.1-pro
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: ims-pcu - fix race condition in reset_device sysfs callback [+ + +]
Author: Dmitry Torokhov <[email protected]>
Date:   Mon Jul 27 22:46:20 2026 -0400

    Input: ims-pcu - fix race condition in reset_device sysfs callback
    
    [ Upstream commit 411b8c4b274737c3bf08e1e025801161603cfffc ]
    
    The ims_pcu_reset_device() sysfs callback calls ims_pcu_execute_command()
    without acquiring pcu->cmd_mutex. This can lead to data races and
    corruption of the shared command buffer if triggered concurrently with
    other commands.
    
    Acquire pcu->cmd_mutex before calling ims_pcu_execute_command().
    
    Fixes: 628329d52474 ("Input: add IMS Passenger Control Unit driver")
    Cc: [email protected]
    Reported-by: Sashiko bot <[email protected]>
    Assisted-by: Gemini:gemini-3.1-pro
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: mms114 - reject an oversized device packet size [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Wed Jul 22 07:01:40 2026 -0400

    Input: mms114 - reject an oversized device packet size
    
    [ Upstream commit 66725039f7090afe14c31bd259e2059a68f04023 ]
    
    mms114_interrupt() reads a packet of touch data from the device into a
    fixed-size on-stack buffer
    
            struct mms114_touch touch[MMS114_MAX_TOUCH];
    
    which holds MMS114_MAX_TOUCH (10) events of MMS114_EVENT_SIZE (8) bytes,
    i.e. 80 bytes. The length of the I2C read into it is taken verbatim from
    the device:
    
            packet_size = mms114_read_reg(data, MMS114_PACKET_SIZE);
            if (packet_size <= 0)
                    goto out;
            ...
            error = __mms114_read_reg(data, MMS114_INFORMATION, packet_size,
                            (u8 *)touch);
    
    packet_size is a single device register byte (0x0F) and the only check
    is the lower bound packet_size <= 0; it is never bounded against the
    size of touch[]. A malfunctioning, malicious or counterfeit controller
    (or an attacker tampering with the I2C bus) can report a packet_size of
    up to 255, so __mms114_read_reg() writes up to 175 bytes past the end of
    touch[] on the IRQ-thread stack: a stack out-of-bounds write that can
    overwrite the stack canary, saved registers and the return address.
    
    A well-formed device never reports more than the buffer holds, so reject
    an oversized packet and drop the report, consistent with the handler's
    other error paths, rather than reading past the buffer.
    
    Fixes: 07b8481d4aff ("Input: add MELFAS mms114 touchscreen driver")
    Signed-off-by: Bryam Vargas <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: psxpad-spi - set driver data before use [+ + +]
Author: Linmao Li <[email protected]>
Date:   Fri Jul 24 18:42:06 2026 -0700

    Input: psxpad-spi - set driver data before use
    
    commit 732f38c36059e68ba3b4b89c56911d777fd3185c upstream.
    
    psxpad_spi_suspend() retrieves the controller state with
    spi_get_drvdata(), but probe never stores it, so suspend dereferences a
    NULL pointer. Store it during probe.
    
    Fixes: 8be193c7b1f4 ("Input: add support for PlayStation 1/2 joypads connected via SPI")
    Signed-off-by: Linmao Li <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: sur40 - fix input device registration ordering [+ + +]
Author: Dmitry Torokhov <[email protected]>
Date:   Mon Jun 15 22:12:29 2026 -0700

    Input: sur40 - fix input device registration ordering
    
    commit 9da976eb649c9e2f588a4499410e4d8af687925f upstream.
    
    In sur40_probe(), input_register_device() was previously called early before
    the V4L2 video device and vb2_queue components were fully initialized. If
    userspace opened the input device immediately upon registration, sur40_open()
    would trigger and start the sur40_poll() worker thread. This worker thread
    invokes sur40_process_video() and accesses the uninitialized vb2_queue
    structure, leading to a data race and potential system crash.
    
    Furthermore, if V4L2 or video registration failed after input_register_device()
    succeeded, the error path fell through to calling input_free_device() on a
    successfully registered device instead of input_unregister_device(), corrupting
    input core state.
    
    Move input_register_device() to the very end of sur40_probe(). This ensures
    the V4L2 and video queue structures are fully initialized before polling can
    start, and naturally resolves the error path bug since input_free_device()
    is now only called when input registration has not yet occurred.
    
    To maintain strict LIFO (Last-In, First-Out) teardown ordering, also move
    input_unregister_device() to the very beginning of sur40_disconnect(). This
    guarantees that the input polling worker thread is stopped before V4L2
    video components or control handlers are unregistered.
    
    Reported-by: [email protected]
    Cc: [email protected]
    Assisted-by: Antigravity:gemini-3.5-flash
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: sur40 - fix V4L error path cleanup [+ + +]
Author: Dmitry Torokhov <[email protected]>
Date:   Mon Jun 15 22:12:30 2026 -0700

    Input: sur40 - fix V4L error path cleanup
    
    commit 062dc4693e2c10d77de06f61e6f3faf37c0a8383 upstream.
    
    In sur40_probe(), if video_register_device() fails, the error path jumps to
    err_unreg_video. This incorrectly attempts to unregister a video device
    that was never successfully registered, and fails to free the V4L2 control
    handler (v4l2_ctrl_handler_free) that was initialized immediately prior.
    
    Fix this by introducing an err_free_ctrl label to properly free the V4L2
    control handler and bypass video_unregister_device() when video device
    registration fails.
    
    Reported-by: [email protected]
    Cc: [email protected]
    Assisted-by: Antigravity:gemini-3.5-flash
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: synaptics-rmi4 - block s_input when F54 queue is busy [+ + +]
Author: Dmitry Torokhov <[email protected]>
Date:   Thu Jun 25 22:17:54 2026 -0700

    Input: synaptics-rmi4 - block s_input when F54 queue is busy
    
    commit fbfd76746adc16d64be29ff113f673b70bc3f5c2 upstream.
    
    Changing the input (diagnostic report type) mid-stream changes the
    report size. Since V4L2 buffers are allocated based on the size at
    stream start, changing the input while streaming could lead to a
    heap buffer overflow if the new size is larger than the allocated
    buffers.
    
    Prevent this by blocking VIDIOC_S_INPUT with -EBUSY if the V4L2 queue
    is busy (streaming).
    
    Fixes: 3a762dbd5347 ("[media] Input: synaptics-rmi4 - add support for F54 diagnostics")
    Cc: [email protected]
    Assisted-by: Antigravity:gemini-3.5-flash
    Reviewed-by: Hans Verkuil <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: synaptics-rmi4 - bound the F54 report size to the allocated buffer [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Thu Jun 25 22:17:52 2026 -0700

    Input: synaptics-rmi4 - bound the F54 report size to the allocated buffer
    
    commit 49c5adc2b7d6e43c5cf033e1c86fdb9c16ababb1 upstream.
    
    rmi_f54_work() reads a diagnostics report from the device into
    f54->report_data, sizing the transfer with rmi_f54_get_report_size():
    
            report_size = rmi_f54_get_report_size(f54);
            ...
            for (i = 0; i < report_size; i += F54_REPORT_DATA_SIZE) {
                    int size = min(F54_REPORT_DATA_SIZE, report_size - i);
                    ...
                    rmi_read_block(.., f54->report_data + i, size);
            }
    
    report_data is allocated once at probe from F54's own electrode counts
    (array3_size(f54->num_tx_electrodes, f54->num_rx_electrodes, sizeof(u16))),
    but rmi_f54_get_report_size() computes the size from
    drv_data->num_*_electrodes when those are set, i.e. from the F55
    function's electrode counts. Both counts come straight from device
    queries (F54 and F55 each report up to 255 electrodes) and nothing
    constrains the F55 counts to the F54 ones.
    
    A malicious or malfunctioning RMI4 device that reports larger F55
    electrode counts than its F54 counts makes report_size exceed the
    allocation, so the read loop writes past report_data (and the V4L2
    dequeue memcpy() then reads past it). On conforming hardware the F55
    configured electrodes are a subset of the F54 physical electrodes, so
    report_size never exceeds the buffer and well-behaved devices are
    unaffected.
    
    Record the allocation size and reject a report that does not fit,
    mirroring the existing zero-size check.
    
    Fixes: c762cc68b6a1 ("Input: synaptics-rmi4 - propagate correct number of rx and tx electrodes to F54")
    Cc: [email protected]
    Signed-off-by: Bryam Vargas <[email protected]>
    Assisted-by: Antigravity:gemini-3.5-flash
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: synaptics-rmi4 - fix F55 transmitter electrode count typo [+ + +]
Author: Dmitry Torokhov <[email protected]>
Date:   Thu Jun 25 22:17:50 2026 -0700

    Input: synaptics-rmi4 - fix F55 transmitter electrode count typo
    
    commit 6058f0fea10f3caf63a435677358d1b8e9325114 upstream.
    
    During F55 sensor detection, the transmitter (TX) electrode count was
    incorrectly assigned the value of the receiver (RX) electrode count
    due to copy-paste typos.
    
    This incorrect value was then propagated to the driver data and used
    by F54 to determine the diagnostics report size. On devices with more
    RX than TX electrodes, this inflated the perceived TX count, leading
    to incorrect report size calculations and potential out-of-bounds
    buffer accesses.
    
    Fix the typos by correctly assigning the TX electrode counts.
    
    Fixes: 6adba43fd222 ("Input: synaptics-rmi4 - add support for F55 sensor tuning")
    Fixes: c762cc68b6a1 ("Input: synaptics-rmi4 - propagate correct number of rx and tx electrodes to F54")
    Reported-by: [email protected]
    Cc: [email protected]
    Assisted-by: Antigravity:gemini-3.5-flash
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: synaptics-rmi4 - propagate F54 worker errors to V4L2 queue [+ + +]
Author: Dmitry Torokhov <[email protected]>
Date:   Thu Jun 25 22:17:55 2026 -0700

    Input: synaptics-rmi4 - propagate F54 worker errors to V4L2 queue
    
    commit 8786d74bf50e6797b6f655eb381ef6b25451161f upstream.
    
    Previously, rmi_f54_buffer_queue() waited for the worker thread to
    finish but ignored whether it succeeded. If the worker failed (e.g.,
    due to a timeout or register read failure), the queue thread would
    silently return success, delivering stale or uninitialized memory to
    userspace.
    
    Add a 'report_error' field to struct f54_data to store the worker's exit
    status. Check this field in rmi_f54_buffer_queue() after the worker
    finishes, and mark the buffer as VB2_BUF_STATE_ERROR if an error
    occurred.
    
    Fixes: 3a762dbd5347 ("[media] Input: synaptics-rmi4 - add support for F54 diagnostics")
    Reported-by: [email protected]
    Cc: [email protected]
    Assisted-by: Antigravity:gemini-3.5-flash
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: synaptics-rmi4 - zero report size on F54 work error [+ + +]
Author: Dmitry Torokhov <[email protected]>
Date:   Thu Jun 25 22:17:51 2026 -0700

    Input: synaptics-rmi4 - zero report size on F54 work error
    
    commit dc76c3c8e8ad09362b8c1561f3928288c15cba2e upstream.
    
    In rmi_f54_work(), if an error occurs during report request or command
    verification, the code jumped directly to the 'error' label, bypassing
    the 'abort' label where f54->report_size was normally zeroed out.
    
    This left f54->report_size containing its previous successful payload
    size. If a user then altered the V4L2 format to a smaller size, and a
    subsequent run failed, rmi_f54_buffer_queue() would copy the stale,
    larger payload size into the shrunken V4L2 buffer, causing a heap
    buffer overflow.
    
    Fix this by merging the 'abort' and 'error' labels into a single 'out'
    exit path, and ensuring that f54->report_size is always set to 0 on
    failure by checking for error and zeroing the local report_size first.
    
    Fixes: 3a762dbd5347 ("[media] Input: synaptics-rmi4 - add support for F54 diagnostics")
    Cc: [email protected]
    Reported-by: [email protected]
    Assisted-by: Antigravity:gemini-3.5-flash
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ipvs: separate destination availability state [+ + +]
Author: Yizhou Zhao <[email protected]>
Date:   Tue Aug 18 23:16:38 2026 +0300

    ipvs: separate destination availability state
    
    commit cdcc4e46180df8161f4d2f3c6fd6beaf6990133d upstream.
    
    IPVS configuration paths update destination availability while connection
    accounting updates destination overload state. The two independent states
    share dest->flags, so their read-modify-write updates can race and lose one
    another.
    
    Keep OVERLOAD in flags, where the preceding patch serializes its updates
    with dst_lock, and move AVAILABLE to cflags. This keeps configuration-
    controlled availability out of the scheduler hot cacheline until a
    scheduler needs to check it. It also prevents availability updates from
    clobbering overload state.
    
    The destination status bits are not exposed through the IPVS sockopt or
    netlink interfaces, so keep their definitions in the internal IPVS header.
    
    Readers can still observe stale destination state; this does not provide a
    cross-field snapshot.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Reported-by: Yizhou Zhao <[email protected]>
    Reported-by: Yuxiang Yang <[email protected]>
    Reported-by: Ao Wang <[email protected]>
    Reported-by: Xuewei Feng <[email protected]>
    Reported-by: Qi Li <[email protected]>
    Reported-by: Ke Xu <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]/
    Assisted-by: Claude-Code:GLM-5.2
    Suggested-by: Julian Anastasov <[email protected]>
    Signed-off-by: Yizhou Zhao <[email protected]>
    Acked-by: Julian Anastasov <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    (cherry picked from commit cdcc4e46180df8161f4d2f3c6fd6beaf6990133d)
    [ Julian: Backport by removing the hunks from ip_vs_xmit.c ]
    Signed-off-by: Julian Anastasov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
jbd2: add a helper to find out number of fast commit blocks [+ + +]
Author: Harshad Shirwadkar <[email protected]>
Date:   Thu Jul 23 13:22:00 2026 -0400

    jbd2: add a helper to find out number of fast commit blocks
    
    [ Upstream commit 9bd23c31f392bda88618008f27fd52ee9e0fac38 ]
    
    Add a helper to read number of fast commit blocks from jbd2 superblock
    and also rename the JBD2_MIN_FC_BLKS to
    JBD2_DEFAULT_FAST_COMMIT_BLOCKS since this constant is just the
    default number of fast commit blocks to use in case number of fast
    commit blocks isn't set in jbd2 superblock.
    
    Signed-off-by: Harshad Shirwadkar <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Stable-dep-of: 289a2ca0c9b7 ("jbd2: fix integer underflow in jbd2_journal_initialize_fast_commit()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

jbd2: fix integer underflow in jbd2_journal_initialize_fast_commit() [+ + +]
Author: Junrui Luo <[email protected]>
Date:   Thu Jul 23 13:22:01 2026 -0400

    jbd2: fix integer underflow in jbd2_journal_initialize_fast_commit()
    
    [ Upstream commit 289a2ca0c9b7eae74f93fc213b0b971669b8683d ]
    
    jbd2_journal_initialize_fast_commit() validates journal capacity by
    checking (journal->j_last - num_fc_blks < JBD2_MIN_JOURNAL_BLOCKS).
    Both j_last and num_fc_blks are unsigned, so when num_fc_blks exceeds
    j_last the subtraction wraps to a large value, bypassing the bounds
    check.
    
    The resulting underflow corrupts j_last, j_fc_first, and j_free,
    leading to journal abort.
    
    Fix by checking num_fc_blks against j_last before the subtraction,
    returning -EFSCORRUPTED.
    
    Fixes: 6866d7b3f2bb ("ext4 / jbd2: add fast commit initialization")
    Reported-by: Yuhao Jiang <[email protected]>
    Cc: [email protected]
    Signed-off-by: Junrui Luo <[email protected]>
    Fixes: e029c5f27987 ("ext4: make num of fast commit blocks configurable")
    Reviewed-by: Baokun Li <[email protected]>
    Fixes: e029c5f279872 ("ext4: make num of fast commit blocks configurable")
    Reviewed-by: Zhang Yi <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Link: https://patch.msgid.link/SYBPR01MB7881663C927DE9D7BBF4D1DFAF062@SYBPR01MB7881.ausprd01.prod.outlook.com
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
KVM: Introduce vcpu->wants_to_run [+ + +]
Author: David Matlack <[email protected]>
Date:   Thu Jul 30 15:29:36 2026 -0400

    KVM: Introduce vcpu->wants_to_run
    
    [ Upstream commit a6816314af5749cd88944bfdceb270c627cdf348 ]
    
    Introduce vcpu->wants_to_run to indicate when a vCPU is in its core run
    loop, i.e. when the vCPU is running the KVM_RUN ioctl and immediate_exit
    was not set.
    
    Replace all references to vcpu->run->immediate_exit with
    !vcpu->wants_to_run to avoid TOCTOU races with userspace. For example, a
    malicious userspace could invoked KVM_RUN with immediate_exit=true and
    then after KVM reads it to set wants_to_run=false, flip it to false.
    This would result in the vCPU running in KVM_RUN with
    wants_to_run=false. This wouldn't cause any real bugs today but is a
    dangerous landmine.
    
    Signed-off-by: David Matlack <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Stable-dep-of: e800decd9c0a ("KVM: x86: Only reset TSC Deadline Timer in apic_timer_expired on KVM_RUN")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: x86: Check for in-kernel xAPIC when querying APICv for directed yield [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Jul 30 15:29:34 2026 -0400

    KVM: x86: Check for in-kernel xAPIC when querying APICv for directed yield
    
    [ Upstream commit ae801e1303e939ad5ebd9f390bdcc57275ada33b ]
    
    Use kvm_vcpu_apicv_active() to check if APICv is active when seeing if a
    vCPU is a candidate for directed yield due to a pending ACPIv interrupt.
    This will allow moving apicv_active into kvm_lapic without introducing a
    potential NULL pointer deref (kvm_vcpu_apicv_active() effectively adds a
    pre-check on the vCPU having an in-kernel APIC).
    
    No functional change intended.
    
    Signed-off-by: Sean Christopherson <[email protected]>
    Message-Id: <[email protected]>
    Signed-off-by: Paolo Bonzini <[email protected]>
    Stable-dep-of: e800decd9c0a ("KVM: x86: Only reset TSC Deadline Timer in apic_timer_expired on KVM_RUN")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: x86: Drop @vcpu parameter from kvm_x86_ops.hwapic_isr_update() [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Jul 30 15:29:33 2026 -0400

    KVM: x86: Drop @vcpu parameter from kvm_x86_ops.hwapic_isr_update()
    
    [ Upstream commit d39850f57d2102c6b46feb21237bc23bc42de4f7 ]
    
    Drop the unused @vcpu parameter from hwapic_isr_update().  AMD/AVIC is
    unlikely to implement the helper, and VMX/APICv doesn't need the vCPU as
    it operates on the current VMCS.  The result is somewhat odd, but allows
    for a decent amount of (future) cleanup in the APIC code.
    
    No functional change intended.
    
    Signed-off-by: Sean Christopherson <[email protected]>
    Message-Id: <[email protected]>
    Signed-off-by: Paolo Bonzini <[email protected]>
    Stable-dep-of: e800decd9c0a ("KVM: x86: Only reset TSC Deadline Timer in apic_timer_expired on KVM_RUN")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: x86: Move "apicv_active" into "struct kvm_lapic" [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Jul 30 15:29:35 2026 -0400

    KVM: x86: Move "apicv_active" into "struct kvm_lapic"
    
    [ Upstream commit ce0a58f4756c14d7646cfdf279dbaada9d7712a0 ]
    
    Move the per-vCPU apicv_active flag into KVM's local APIC instance.
    APICv is fully dependent on an in-kernel local APIC, but that's not at
    all clear when reading the current code due to the flag being stored in
    the generic kvm_vcpu_arch struct.
    
    No functional change intended.
    
    Signed-off-by: Sean Christopherson <[email protected]>
    Message-Id: <[email protected]>
    Signed-off-by: Paolo Bonzini <[email protected]>
    Stable-dep-of: e800decd9c0a ("KVM: x86: Only reset TSC Deadline Timer in apic_timer_expired on KVM_RUN")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: x86: Only reset TSC Deadline Timer in apic_timer_expired on KVM_RUN [+ + +]
Author: Venkatesh Srinivas <[email protected]>
Date:   Thu Jul 30 15:29:37 2026 -0400

    KVM: x86: Only reset TSC Deadline Timer in apic_timer_expired on KVM_RUN
    
    [ Upstream commit e800decd9c0ac4349bcd8f8f9b29fd21fe93165e ]
    
    On Intel platforms with a VMX preemption timer and APICv, if a VMM
    calls KVM_GET_LAPIC before KVM_GET_MSRS to save the vCPU state, it is
    possible to lose a pending timer interrupt.
    
    If the thread running these ioctls is migrated to another core after
    calling KVM_GET_LAPIC but before KVM_GET_MSRS and the guest is using
    their LAPIC timer in TSC-deadline mode, not only does the save LAPIC
    state not carry the pending interrupt, the TSCDEADLINE MSR will be
    zeroed.
    
    After migration across CPUs, KVM_GET_MSRS calls vcpu_load, posting the
    interrupt and clearing the MSR:
    vcpu_load() ->
      kvm_arch_vcpu_load() ->
        kvm_lapic_restart_hv_timer() ->
          start_hv_timer() ->
            apic_timer_expired() ->
              kvm_apic_inject_pending_timer_irqs()
                . post interrupt into the LAPIC state
                . clear IA32_TSCDEADLINE
    
    The saved LAPIC state will be missing the pending interrupt and the saved
    MSR will be zero. Oops.
    
    Fix by only posting an interrupt when we're attempting to enter the guest
    (vcpu->wants_to_run == true), not for vcpu_load from other paths.
    
    Assisted-by: gemini:gemini-3.1-pro-preview
    Debugged-by: David Matlack <[email protected]>
    Debugged-by: Sean Christopherson <[email protected]>
    Debugged-by: Jim Mattson <[email protected]>
    Debugged-by: James Houghton <[email protected]>
    Signed-off-by: Venkatesh Srinivas <[email protected]>
    Message-ID: <[email protected]>
    Reviewed-by: James Houghton <[email protected]>
    Reviewed-by: Chao Gao <[email protected]>
    Cc: [email protected]
    Fixes: ae95f566b3d2 ("KVM: X86: TSCDEADLINE MSR emulation fastpath", 2020-05-15)
    Signed-off-by: Paolo Bonzini <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
libceph: add doutc and *_client debug macros support [+ + +]
Author: Xiubo Li <[email protected]>
Date:   Sat Aug 8 10:09:28 2026 -0400

    libceph: add doutc and *_client debug macros support
    
    [ Upstream commit 5c5f0d2b5f92c47baf82b9b211e27edd7d195158 ]
    
    This will help print the fsid and client's global_id in debug logs,
    and also print the function names.
    
    [ idryomov: %lld -> %llu, leading space for doutc(), don't include
      __func__ in pr_*() variants ]
    
    Link: https://tracker.ceph.com/issues/61590
    Signed-off-by: Xiubo Li <[email protected]>
    Reviewed-by: Patrick Donnelly <[email protected]>
    Reviewed-by: Milind Changire <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Stable-dep-of: 50958bb928ba ("ceph: fix hanging __ceph_get_caps() with stale mds_wanted")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

libceph: Amend checking to fix `make W=1` build breakage [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Sat Aug 8 07:25:27 2026 -0400

    libceph: Amend checking to fix `make W=1` build breakage
    
    [ Upstream commit 04d8712b079327409b09dee628378f9583e2e035 ]
    
    In a few cases the code compares 32-bit value to a SIZE_MAX derived
    constant which is much higher than that value on 64-bit platforms,
    Clang, in particular, is not happy about this
    
    net/ceph/osdmap.c:1441:10: error: result of comparison of constant 4611686018427387891 with expression of type 'u32' (aka 'unsigned int') is always false [-Werror,-Wtautological-constant-out-of-range-compare]
     1441 |         if (len > (SIZE_MAX - sizeof(*pg)) / sizeof(u32))
          |             ~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    net/ceph/osdmap.c:1624:10: error: result of comparison of constant 2305843009213693945 with expression of type 'u32' (aka 'unsigned int') is always false [-Werror,-Wtautological-constant-out-of-range-compare]
     1624 |         if (len > (SIZE_MAX - sizeof(*pg)) / (2 * sizeof(u32)))
          |             ~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Fix this by casting to size_t. Note, that possible replacement of SIZE_MAX
    by U32_MAX may lead to the behaviour changes on the corner cases.
    
    Signed-off-by: Andy Shevchenko <[email protected]>
    Reviewed-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Stable-dep-of: 9f00f9cf2be2 ("libceph: bound pg_{temp,upmap,upmap_items} length to CEPH_PG_MAX_SIZE")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

libceph: Avoid using invalid osd indices from primary_temp [+ + +]
Author: Raphael Zimmer <[email protected]>
Date:   Tue Jul 28 10:43:40 2026 +0200

    libceph: Avoid using invalid osd indices from primary_temp
    
    commit 3660b98d1204b419f6a77e9a295f148dcf38d042 upstream.
    
    A corrupted osdmap received from a Ceph monitor or OSD may contain osd
    indices in its pg_temp, primary_temp, pg_upmap, and pg_upmap_items parts
    that don't exist, i.e., that are greater than max_osd or smaller than
    CEPH_HOMELESS_OSD (-1). These indices are used to create the up and
    acting set in ceph_pg_to_up_acting_osds(), called from calc_target().
    While most of these osd indices are checked, the one from primary_temp
    is not. Subsequently, this may lead to calc_target() returning this
    (potentially invalid) index as target osd for a (linger) request.
    Because the osd_state, osd_weight, and osd_addr arrays only contain
    max_osd entries (with indices 0 to max_osd -1), this leads to
    out-of-bounds accesses when trying to read values from these arrays.
    
    This patch fixes the issue by adding a check to get_temp_osds(), so that
    only valid osd indices from primary_temp are used, and it falls back to
    using the primary from pg_temp or the up set if it is invalid.
    
    [ idryomov: changelog ]
    
    Cc: [email protected]
    Fixes: 5e8d4d36bf23 ("libceph: add support for primary_temp mappings")
    Signed-off-by: Raphael Zimmer <[email protected]>
    Reviewed-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

libceph: bound pg_{temp,upmap,upmap_items} length to CEPH_PG_MAX_SIZE [+ + +]
Author: Xiang Mei <[email protected]>
Date:   Sat Aug 8 07:25:28 2026 -0400

    libceph: bound pg_{temp,upmap,upmap_items} length to CEPH_PG_MAX_SIZE
    
    [ Upstream commit 9f00f9cf2be293efe899db67dc5272e3a9c62717 ]
    
    __decode_pg_temp() decodes an user-controlled length but only rejects
    values large enough to overflow the allocation; it does not bound it to
    CEPH_PG_MAX_SIZE. The helper backs both pg_temp and pg_upmap decoding, and
    apply_upmap()/get_temp_osds() later copy the decoded list into the fixed-size
    on-stack array struct ceph_osds.osds[CEPH_PG_MAX_SIZE]. A monitor that sends
    an OSDMap with a pg_temp/pg_upmap entry longer than 32 thus causes a stack
    out-of-bounds write.
    
    An OSD set for a single PG can never exceed CEPH_PG_MAX_SIZE, so reject longer
    entries at decode time. The bound is well below the old overflow threshold, so
    it also covers the allocation-size overflow the previous check guarded against.
    
      BUG: KASAN: stack-out-of-bounds in ceph_pg_to_up_acting_osds
      Write of size 4 ... by task exploit
       kasan_report (mm/kasan/report.c:595)
       ceph_pg_to_up_acting_osds (net/ceph/osdmap.c:2617 net/ceph/osdmap.c:2833)
       calc_target (net/ceph/osd_client.c:1638)
       __submit_request (net/ceph/osd_client.c:2394)
       ceph_osdc_start_request (net/ceph/osd_client.c:2490)
       ceph_osdc_call (net/ceph/osd_client.c:5164)
       rbd_dev_image_probe (drivers/block/rbd.c:6899)
       do_rbd_add (drivers/block/rbd.c:7138)
       ...
      kernel BUG at net/ceph/osdmap.c:2670!
    
    [ idryomov: do the same in __decode_pg_upmap_items() ]
    
    Cc: [email protected]
    Fixes: a303bb0e5834 ("libceph: introduce and switch to decode_pg_mapping()")
    Reported-by: Weiming Shi <[email protected]>
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: Xiang Mei <[email protected]>
    Reviewed-by: Alex Markuze <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

libceph: fix multiple unsafe decodes in decode_locker() [+ + +]
Author: Pavitra Jha <[email protected]>
Date:   Tue Jun 2 01:02:19 2026 -0400

    libceph: fix multiple unsafe decodes in decode_locker()
    
    commit 437b6551cfcc235eea1d735a874f9d421f555e17 upstream.
    
    decode_locker() in cls_lock_client.c contains three unsafe decode
    operations that allow a malicious or compromised OSD to trigger
    slab-out-of-bounds reads:
    
    1. ceph_decode_copy() at the locker_id_t name field has no preceding
       bounds check. With p == end after ceph_start_decoding() accepts
       struct_len=0, this reads sizeof(ceph_entity_name) = 9 bytes past
       the validated buffer boundary.
    
    2. *p += sizeof(struct ceph_timespec) after the locker_info_t header
       is an unchecked pointer advance. A malicious OSD can position p
       past end, causing all subsequent _safe checks to pass against a
       bogus boundary.
    
    3. len = ceph_decode_32(p) has no preceding bounds check, and the
       immediately following *p += len is uncapped. A malicious OSD can
       send len=0xffffffff, advancing p gigabytes past end and escaping
       the decode window entirely.
    
    Fix all three by replacing bare operations with their safe variants:
      ceph_decode_copy   -> ceph_decode_copy_safe
      *p += sizeof(...)  -> ceph_decode_skip_n
      ceph_decode_32(p)  -> ceph_decode_32_safe
      *p += len          -> ceph_decode_skip_n
    
    A new label is added to return -EINVAL on any bounds violation.
    -EINVAL is appropriate here: the data received from the OSD
    is structurally malformed, which is an invalid argument to the decode
    contract regardless of whether the caller or the wire is at fault.
    
    Attacker model: a malicious or compromised OSD in a multi-tenant Ceph
    deployment can trigger this against any kernel client that issues the
    lock.get_info class method (e.g. during RBD exclusive lock acquisition)
    without any further privileges beyond OSD session establishment.
    
    [ idryomov: use ceph_decode_skip_string() to skip description, trim
      changelog ]
    
    Cc: [email protected]
    Fixes: d4ed4a530562 ("libceph: support for lock.lock_info")
    Signed-off-by: Pavitra Jha <[email protected]>
    Reviewed-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

libceph: fix two unsafe bare decodes in decode_lockers() [+ + +]
Author: Pavitra Jha <[email protected]>
Date:   Sat Aug 8 08:05:45 2026 -0400

    libceph: fix two unsafe bare decodes in decode_lockers()
    
    [ Upstream commit a109a556115271ca7896dcda7b4b7e45e156c227 ]
    
    decode_lockers() in cls_lock_client.c contains two bare decode operations
    that allow a malicious or compromised OSD to trigger slab-out-of-bounds
    reads:
    
    1. ceph_decode_32(p) at the num_lockers field has no preceding bounds
       check. ceph_start_decoding() accepts struct_len=0 as valid -- the
       internal ceph_decode_need(p, end, 0, bad) always passes -- so when an
       OSD sends struct_len=0, ceph_start_decoding() returns success with
       p == end. The immediately following bare ceph_decode_32(p) then reads
       4 bytes past the validated buffer boundary. The garbage value is
       passed directly to kzalloc_objs() as the locker count.
    
       The sibling function decode_watchers() in osd_client.c already uses
       ceph_decode_32_safe() after its own ceph_start_decoding() call.
       decode_lockers() was the only site using the bare variant.
    
    2. ceph_decode_8(p) after the decode_locker() loop has no preceding
       bounds check. If an OSD crafts num_lockers such that the loop
       advances p exactly to end, the subsequent bare ceph_decode_8(p) reads
       one byte past the validated buffer boundary. The result is passed
       directly into *type, which is used as a lock type discriminator by
       callers, giving an OSD-controlled one-byte OOB read with direct
       influence over the lock type field.
    
    Fix both by replacing bare operations with their safe variants:
      ceph_decode_32(p) -> ceph_decode_32_safe(p, end, *num_lockers,
                                               err_inval)
      ceph_decode_8(p)  -> ceph_decode_8_safe(p, end, *type,
                                              err_free_lockers)
    
    The goto targets differ intentionally:
      err_inval: is a new label returning -EINVAL directly. It is used for
      the pre-allocation failure path where *lockers is not yet allocated
      and must not be passed to ceph_free_lockers().
    
      err_free_lockers: is the existing label. It is used for the
      post-allocation failure path where *lockers is allocated and must
      be freed.
    
    ret is set to -EINVAL before ceph_decode_8_safe() so that
    err_free_lockers returns the correct error code on bounds violation.
    Without this, err_free_lockers would return a stale ret value (0 from
    the successful decode_locker() loop), silently swallowing the error.
    
    -EINVAL is correct for both failure paths. The data received from the
    OSD is structurally malformed. -ENOMEM would misrepresent the failure
    class to callers and to stable@ backporters triaging error paths.
    
    Attacker model: a malicious or compromised OSD in a multi-tenant Ceph
    deployment can trigger this against any kernel client that issues the
    lock.get_info class method (e.g. during RBD exclusive lock acquisition).
    
    [ idryomov: trim changelog, formatting ]
    
    Cc: [email protected]
    Fixes: d4ed4a530562 ("libceph: support for lock.lock_info")
    Signed-off-by: Pavitra Jha <[email protected]>
    Reviewed-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: Linux 5.10.266 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Sun Aug 23 14:16:30 2026 +0200

    Linux 5.10.266
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Brett A C Sheffield <[email protected]>
    Tested-by: Dominique Martinet <[email protected]>
    Tested-by: Barry K. Nathan <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
lsm: infrastructure management of the sock security [+ + +]
Author: Casey Schaufler <[email protected]>
Date:   Thu Jul 23 21:25:18 2026 -0400

    lsm: infrastructure management of the sock security
    
    [ Upstream commit 2aff9d20d50ac45dd13a013ef5231f4fb8912356 ]
    
    Move management of the sock->sk_security blob out
    of the individual security modules and into the security
    infrastructure. Instead of allocating the blobs from within
    the modules the modules tell the infrastructure how much
    space is required, and the space is allocated there.
    
    Acked-by: Paul Moore <[email protected]>
    Reviewed-by: Kees Cook <[email protected]>
    Reviewed-by: John Johansen <[email protected]>
    Acked-by: Stephen Smalley <[email protected]>
    Signed-off-by: Casey Schaufler <[email protected]>
    [PM: subject tweak]
    Signed-off-by: Paul Moore <[email protected]>
    Stable-dep-of: 56acfeb10019 ("selinux: avoid sk_socket dereference in selinux_sctp_bind_connect()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

lsm: use default hook return value in call_int_hook() [+ + +]
Author: Ondrej Mosnacek <[email protected]>
Date:   Thu Jul 23 21:25:17 2026 -0400

    lsm: use default hook return value in call_int_hook()
    
    [ Upstream commit 260017f31a8c3879be5f9048a46f382b06c1923a ]
    
    Change the definition of call_int_hook() to treat LSM_RET_DEFAULT(...)
    as the "continue" value instead of 0. To further simplify this macro,
    also drop the IRC argument and replace it with LSM_RET_DEFAULT(...).
    
    After this the macro can be used in a couple more hooks, where similar
    logic is currently open-coded. At the same time, some other existing
    call_int_hook() users now need to be open-coded, but overall it's still
    a net simplification.
    
    There should be no functional change resulting from this patch.
    
    Signed-off-by: Ondrej Mosnacek <[email protected]>
    Reviewed-by: Casey Schaufler <[email protected]>
    [PM: merge fuzz due to other hook changes, tweaks from list discussion]
    Signed-off-by: Paul Moore <[email protected]>
    Stable-dep-of: 56acfeb10019 ("selinux: avoid sk_socket dereference in selinux_sctp_bind_connect()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
media: aspeed: fix missing of_reserved_mem_device_release() on probe failure [+ + +]
Author: David Carlier <[email protected]>
Date:   Mon Aug 3 16:47:59 2026 -0400

    media: aspeed: fix missing of_reserved_mem_device_release() on probe failure
    
    [ Upstream commit 253c8ef7d57da0c74db251f385324faaa5ae2257 ]
    
    aspeed_video_init() calls of_reserved_mem_device_init() to associate
    reserved memory regions with the device. When aspeed_video_setup_video()
    subsequently fails in aspeed_video_probe(), the error path frees the
    JPEG buffer and unprepares the clocks but does not release the reserved
    memory association, leaking the rmem_assigned_device entry on the global
    list.
    
    The normal remove path already calls of_reserved_mem_device_release()
    correctly; only the probe error path was missing it.
    
    Add the missing of_reserved_mem_device_release() call to the
    aspeed_video_setup_video() failure cleanup.
    
    Fixes: d2b4387f3bdf ("media: platform: Add Aspeed Video Engine driver")
    Cc: [email protected]
    Signed-off-by: David Carlier <[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: i2c: imx219: Correct the minimum vblanking value [+ + +]
Author: David Plowman <[email protected]>
Date:   Tue Aug 4 20:58:08 2026 -0400

    media: i2c: imx219: Correct the minimum vblanking value
    
    [ Upstream commit e3b82d49bf676f3c873e642038765eac32ab6d39 ]
    
    The datasheet for this sensor documents the minimum vblanking as being
    32 lines. It does fix some problems with occasional black lines at the
    bottom of images (tested on Raspberry Pi).
    
    Signed-off-by: David Plowman <[email protected]>
    Reviewed-by: Jacopo Mondi <[email protected]>
    Reviewed-by: Dave Stevenson <[email protected]>
    Signed-off-by: Jai Luthra <[email protected]>
    Signed-off-by: Sakari Ailus <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Stable-dep-of: 2c4f1ba73543 ("media: imx219: Fix maximum frame length in lines")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: i2c: imx219: Drop IMX219_VTS_* macros [+ + +]
Author: Laurent Pinchart <[email protected]>
Date:   Tue Aug 4 20:58:07 2026 -0400

    media: i2c: imx219: Drop IMX219_VTS_* macros
    
    [ Upstream commit 5ebbdd7aab3321e60a8be23aac1fee4f16644021 ]
    
    The IMX219_VTS_* macros define default VTS values for the modes
    supported by the driver. They are used in a single place, and hinder
    readability compared to using the value directly as a decimal number.
    Drop them.
    
    Signed-off-by: Laurent Pinchart <[email protected]>
    Reviewed-by: Dave Stevenson <[email protected]>
    Reviewed-by: Jacopo Mondi <[email protected]>
    Signed-off-by: Sakari Ailus <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Stable-dep-of: 2c4f1ba73543 ("media: imx219: Fix maximum frame length in lines")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: i2c: imx219: Rename VTS to FRM_LENGTH [+ + +]
Author: Jai Luthra <[email protected]>
Date:   Tue Aug 4 20:58:09 2026 -0400

    media: i2c: imx219: Rename VTS to FRM_LENGTH
    
    [ Upstream commit 04f78503f99ae7e9887c7fe5e4bc54a7cfb10fe0 ]
    
    The IMX219 datasheet refers to the vertical length + blanking as
    FRM_LENGTH instead of VTS.
    
    Reviewed-by: Dave Stevenson <[email protected]>
    Signed-off-by: Jai Luthra <[email protected]>
    Signed-off-by: Sakari Ailus <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Stable-dep-of: 2c4f1ba73543 ("media: imx219: Fix maximum frame length in lines")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: imx219: Fix maximum frame length in lines [+ + +]
Author: Sakari Ailus <[email protected]>
Date:   Tue Aug 4 20:58:10 2026 -0400

    media: imx219: Fix maximum frame length in lines
    
    [ Upstream commit 2c4f1ba7354312ad2d6e34e70a518a51a9344715 ]
    
    The driver used the maximum frame length in lines value of 0xffff, but the
    maximum appears to be 0xfffe instead. Fix it.
    
    Fixes: 1283b3b8f82b ("media: i2c: Add driver for Sony IMX219 sensor")
    Cc: [email protected]
    Signed-off-by: Sakari Ailus <[email protected]>
    Reviewed-by: Dave Stevenson <[email protected]>
    Reviewed-by: Laurent Pinchart <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: marvell-cam: fix missing pci_disable_device() on remove [+ + +]
Author: Guangshuo Li <[email protected]>
Date:   Tue Aug 4 07:21:40 2026 -0400

    media: marvell-cam: fix missing pci_disable_device() on remove
    
    [ Upstream commit 033ff0420e4c9c240ae5523fff39770298efa964 ]
    
    During manual code audit, we found that cafe_pci_probe() enables the
    PCI device with pci_enable_device(), and its probe error path properly
    calls pci_disable_device() on failure.
    
    However, cafe_pci_remove() tears down the controller and frees the
    driver data without disabling the PCI device, leaving the remove path
    inconsistent with probe cleanup.
    
    Add the missing pci_disable_device() call to cafe_pci_remove().
    
    Fixes: abfa3df36c01 ("[media] marvell-cam: Separate out the Marvell camera core")
    Cc: [email protected]
    Signed-off-by: Guangshuo Li <[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: mediatek: vcodec: Fix a resource leak related to the scp device in FW initialization [+ + +]
Author: Jiasheng Jiang <[email protected]>
Date:   Tue Aug 18 12:28:41 2026 +0300

    media: mediatek: vcodec: Fix a resource leak related to the scp device in FW initialization
    
    [ Upstream commit 4936cd5817af35d23e4d283f48fa59a18ef481e4 ]
    
    On Mediatek devices with a system companion processor (SCP) the mtk_scp
    structure has to be removed explicitly to avoid a resource leak.
    Free the structure in case the allocation of the firmware structure fails
    during the firmware initialization.
    
    Fixes: 53dbe0850444 ("media: mtk-vcodec: potential null pointer deference in SCP")
    Cc: [email protected]
    Signed-off-by: Jiasheng Jiang <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    [Andrey Troshin: backport fixs from
     drivers/media/platform/mediatek/vcodec/common/mtk_vcodec_fw_scp.c
     to drivers/media/platform/mtk-vcodec/mtk_vcodec_fw_scp.c]
    Signed-off-by: Andrey Troshin <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: mtk-vcodec: potential null pointer deference in SCP [+ + +]
Author: Fullway Wang <[email protected]>
Date:   Tue Aug 18 12:28:40 2026 +0300

    media: mtk-vcodec: potential null pointer deference in SCP
    
    [ Upstream commit 53dbe08504442dc7ba4865c09b3bbf5fe849681b ]
    
    The return value of devm_kzalloc() needs to be checked to avoid
    NULL pointer deference. This is similar to CVE-2022-3113.
    
    Link: https://lore.kernel.org/linux-media/PH7PR20MB5925094DAE3FD750C7E39E01BF712@PH7PR20MB5925.namprd20.prod.outlook.com
    Signed-off-by: Fullway Wang <[email protected]>
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    [Andrey Troshin: backport fixs from
     drivers/media/platform/mediatek/vcodec/common/mtk_vcodec_fw_scp.c
     to drivers/media/platform/mtk-vcodec/mtk_vcodec_fw_scp.c]
    Signed-off-by: Andrey Troshin <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
media: v4l2-fwnode: Fix subdev owner overwritten in v4l2_async_register_subdev_sensor() [+ + +]
Author: Mirela Rabulea <[email protected]>
Date:   Thu Aug 6 11:26:48 2026 -0400

    media: v4l2-fwnode: Fix subdev owner overwritten in v4l2_async_register_subdev_sensor()
    
    [ Upstream commit 06cb687a5132fcffe624c0070576ab852ac6b568 ]
    
    The v4l2 helper v4l2_async_register_subdev_sensor() calls
    v4l2_async_register_subdev(), which is a macro that expands to
    __v4l2_async_register_subdev(sd,THIS_MODULE). Since the macro is expanded
    inside v4l2-fwnode.c, THIS_MODULE resolves to the v4l2-fwnode module
    rather than the sensor driver module that originally set sd->owner. When
    v4l2-fwnode is built-in, THIS_MODULE evaluates to NULL, which then
    overwrites the sensor driver's owner with NULL.
    
    This causes the problem that the sensor module's reference count is never
    incremented during async registration, so the module can be removed while
    the subdevice is still in use by a notifier (e.g., a CSI-2 receiver
    bridge driver).
    
    Fix this by renaming v4l2_async_register_subdev_sensor() to
    __v4l2_async_register_subdev_sensor() with an added explicit module
    argument and introducing a wrapper macro:
        #define v4l2_async_register_subdev_sensor(sd) \
            __v4l2_async_register_subdev_sensor(sd, THIS_MODULE)
    
    This ensures the sensor driver module is properly referenced even when
    the sensor driver does not init the owner field before calling
    v4l2_async_register_subdev_sensor() and prevents premature module removal.
    
    Fixes: aef69d54755d ("media: v4l: fwnode: Add a convenience function for registering sensors")
    Cc: [email protected]
    Suggested-by: Frank Li <[email protected]>
    Link: https://lore.kernel.org/linux-media/[email protected]/
    Signed-off-by: Mirela Rabulea <[email protected]>
    Reviewed-by: Laurent Pinchart <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Signed-off-by: Sakari Ailus <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: v4l: async: Set owner for async sub-devices [+ + +]
Author: Sakari Ailus <[email protected]>
Date:   Thu Aug 6 11:26:47 2026 -0400

    media: v4l: async: Set owner for async sub-devices
    
    [ Upstream commit 8a718752f5c339137c5b05e54f116cd26d5a4143 ]
    
    Set the owner field of the async sub-devices by making
    v4l2_async_register_subdev() a macro and obtaining THIS_MODULE that way.
    
    Signed-off-by: Sakari Ailus <[email protected]>
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Stable-dep-of: 06cb687a5132 ("media: v4l2-fwnode: Fix subdev owner overwritten in v4l2_async_register_subdev_sensor()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mlxsw: fix refcount leak in mlxsw_sp_port_lag_join() [+ + +]
Author: Wentao Liang <[email protected]>
Date:   Wed Jul 22 22:28:56 2026 -0400

    mlxsw: fix refcount leak in mlxsw_sp_port_lag_join()
    
    [ Upstream commit 41c8c1d65b32beacd8d916a22457b4f6e47f45af ]
    
    When mlxsw_sp_port_lag_index_get() fails, mlxsw_sp_port_lag_join()
    returns an error without releasing the lag reference obtained by
    the earlier mlxsw_sp_lag_get().  All other error paths in the
    function jump to the cleanup label that ends with
    mlxsw_sp_lag_put(), so this is a single missed release.
    
    Fix the leak by replacing the bare 'return err' with a goto to the
    existing error cleanup label, which will drop the reference safely.
    
    Cc: [email protected]
    Fixes: 0d65fc13042f ("mlxsw: spectrum: Implement LAG port join/leave")
    Signed-off-by: Wentao Liang <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mlxsw: spectrum: Apply RIF configuration when joining a LAG [+ + +]
Author: Ido Schimmel <[email protected]>
Date:   Wed Jul 22 22:28:54 2026 -0400

    mlxsw: spectrum: Apply RIF configuration when joining a LAG
    
    [ Upstream commit 31e1de4f1242f338eaa62cc53d582116c83b9dd0 ]
    
    In case a router interface (RIF) is configured for a LAG, make sure its
    configuration is applied on the new LAG member.
    
    Signed-off-by: Ido Schimmel <[email protected]>
    Reviewed-by: Jiri Pirko <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 41c8c1d65b32 ("mlxsw: fix refcount leak in mlxsw_sp_port_lag_join()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mlxsw: spectrum: On port enslavement to a LAG, join upper's bridges [+ + +]
Author: Petr Machata <[email protected]>
Date:   Wed Jul 22 22:28:55 2026 -0400

    mlxsw: spectrum: On port enslavement to a LAG, join upper's bridges
    
    [ Upstream commit 987c7782f0627e1c87617458806a7e6c1995678a ]
    
    Currently it never happens that a netdevice that is already a bridge slave
    would suddenly become mlxsw upper. The only case where this might be
    possible as far as mlxsw is concerned, is with LAG netdevices. But if a LAG
    already has an upper, enslaving mlxsw port to that LAG is forbidden. Thus
    the only way to install a LAG between a bridge and a mlxsw port is by first
    enslaving the port to the LAG, and then enslaving that LAG to a bridge.
    
    However in the following patches, the requirement that ports be only
    enslaved to masters without uppers, is going to be relaxed. It will
    therefore be necessary to join bridges of LAG uppers. Without this replay,
    the mlxsw bridge_port objects are not instantiated, which causes issues
    later, as a lot of code relies on their presence.
    
    Therefore in this patch, when the first mlxsw physical netdevice is
    enslaved to a LAG, consider bridges upper to the LAG (both the direct
    master, if any, and any bridge masters of VLAN uppers), and have the
    relevant netdevices join their bridges.
    
    Signed-off-by: Petr Machata <[email protected]>
    Reviewed-by: Danielle Ratson <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 41c8c1d65b32 ("mlxsw: fix refcount leak in mlxsw_sp_port_lag_join()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/ptdump: always stabilise against page table freeing using init_mm [+ + +]
Author: Lorenzo Stoakes (ARM) <[email protected]>
Date:   Wed Aug 19 19:09:18 2026 -0400

    mm/ptdump: always stabilise against page table freeing using init_mm
    
    [ Upstream commit 27c32e5538344b13c1505a08861e04620c125d47 ]
    
    Previous commits have established the invariant that kernel page table
    freeing is performed while an mmap read lock on init_mm is held, which
    fixes races between ptdump and kernel page table freeing over init_mm.
    
    However, x86 and arm64 can perform a ptdump over an mm other than init_mm
    via ptdump_walk_pgd() and since kernel memory ranges are shared across
    non-kernel mm's, this means that the race still exists for these cases.
    
    Fix this by acquiring a nested mmap write lock for init_mm in
    ptdump_walk_pgd().
    
    This is safe as we take this after mmap write locking the mm, and nothing
    acquires the init_mm lock first before locking an arbitrary mm, so no
    deadlock is possible.
    
    Also update walk_page_range_debug() to assert that init_mm is write
    locked, add a comment explaining why and remove some redundant code, and
    eliminate the unnecessary and confusing invocation of
    walk_kernel_page_table_range().
    
    We can safely remove the non-NULL check for walk.mm, as the mmap lock
    asserts would NULL pointer deref if it was (and of course no callers do
    this).
    
    The first point at which ptdump can race kernel page table freeing is
    commit b6bdb7517c3d ("mm/vmalloc: add interfaces to free unmapped page
    table"), so we target this in the Fixes tag.
    
    Link: https://lore.kernel.org/[email protected]
    Fixes: b6bdb7517c3d ("mm/vmalloc: add interfaces to free unmapped page table")
    Signed-off-by: Lorenzo Stoakes (ARM) <[email protected]>
    Reviewed-by: Mike Rapoport (Microsoft) <[email protected]>
    Acked-by: David Hildenbrand (Arm) <[email protected]>
    Reviewed-by: Kiryl Shutsemau <[email protected]>
    Cc: Andy Lutomirski <[email protected]>
    Cc: "Borah, Chaitanya Kumar" <[email protected]>
    Cc: "Borislav Petkov (AMD)" <[email protected]>
    Cc: Catalin Marinas <[email protected]>
    Cc: Dave Hansen <[email protected]>
    Cc: David Carlier <[email protected]>
    Cc: Dev Jain <[email protected]>
    Cc: "H. Peter Anvin" <[email protected]>
    Cc: Ingo Molnar <[email protected]>
    Cc: Liam R. Howlett <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Ryan Roberts <[email protected]>
    Cc: Shakeel Butt <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: Toshi Kani <[email protected]>
    Cc: "Uladzislau Rezki (Sony)" <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: Will Deacon <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    [ Adapted the hunk to `walk_page_range_novma()` since 5.15 lacks the `walk_page_range_debug()` rename and the `walk_kernel_page_table_range()` dispatch, keeping the existing `!walk.mm` guard. ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/vmstat: fold stranded per-cpu node stats when a node comes online [+ + +]
Author: Gregory Price <[email protected]>
Date:   Tue Aug 11 07:16:48 2026 -0400

    mm/vmstat: fold stranded per-cpu node stats when a node comes online
    
    [ Upstream commit ea3034b2b00fa50c8d2518d0804c9d427bbafa86 ]
    
    A per-node vmstat counter is pgdat->vm_stat[] plus per-cpu deltas.  A
    balanced counter can sit split as global=+N / per-cpu=-N.
    
    The folds reconciling the split only walk online nodes, so when
    try_offline_node() marks a node offline the per-cpu deltas are stranded.
    
    A subsequent online resets the per-cpu area but not pgdat->vm_stat[],
    orphaning the +N permanently.  All NR_VM_NODE_STAT_ITEMS are affected.
    
    The existing code zeroes the per-cpu counters and causes a permanent skew.
    Fold the stranded deltas instead, before the node rejoins the online set.
    The node is not online yet and the hotplug lock is held, so the remote
    access to per-cpu values is safe.
    
    Discovered when node compaction hung for a nearly empty node, as the math
    to determine throttling broke.  Reproduced by repeated memory
    hotplug/unplug cycles on a node under pressure: NR_ISOLATED_ANON ratchets
    up and never returns to zero.
    
    Link: https://lore.kernel.org/[email protected]
    Fixes: 75ef71840539 ("mm, vmstat: add infrastructure for per-node vmstats")
    Signed-off-by: Gregory Price <[email protected]>
    Cc: Johannes Weiner <[email protected]>
    Cc: Mel Gorman <[email protected]>
    Cc: Mike Rapoport <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mmc: omap_hsmmc: fix busy_timeout overflow in ns conversion on 32-bit [+ + +]
Author: Zhan Xusheng <[email protected]>
Date:   Tue Aug 4 10:25:00 2026 +0800

    mmc: omap_hsmmc: fix busy_timeout overflow in ns conversion on 32-bit
    
    commit f64ea900e4bda3055ef24a2c906f8d049cf1c3bd upstream.
    
    omap_hsmmc_prepare_data() converts the command busy timeout to nanoseconds
    with:
    
            timeout = req->cmd->busy_timeout * NSEC_PER_MSEC;
    
    busy_timeout is an unsigned int (milliseconds) and timeout is a u64, but
    NSEC_PER_MSEC is 1000000L.  On 32-bit builds the multiplication is
    performed in 32-bit arithmetic and wraps for busy_timeout values above
    ~4294 ms, before the result is assigned to the u64.
    
    The driver does not set mmc->max_busy_timeout, so the core does not cap the
    busy timeout, and commands such as erase or SANITIZE (MMC_SANITIZE_TIMEOUT_MS
    is 240000 ms) can pass a busy_timeout far larger than 4294 ms.  The wrapped,
    much smaller ns value is then programmed via set_data_timeout(), so the data
    timeout is set too short and the operation can time out prematurely.
    
    Cast busy_timeout to u64 before the multiplication so the conversion is done
    in 64-bit arithmetic.
    
    Fixes: 8cc9a3e73de1 ("mmc: host: omap_hsmmc: use generic_cmd6_time to program timeout value for CMD6")
    Cc: [email protected]
    Signed-off-by: Zhan Xusheng <[email protected]>
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mmc: sdhci: make tuning_err a signed int [+ + +]
Author: Haibo Chen <[email protected]>
Date:   Mon Jul 27 18:38:49 2026 +0800

    mmc: sdhci: make tuning_err a signed int
    
    commit ae31bcc92bb42502bb7c9029e6dc7a824cf6cd14 upstream.
    
    Coverity report INTEGER_OVERFLOW for host->tuning_err.
    The tuning_err field in struct sdhci_host is used to store an error
    code for re-tuning, but it was declared as unsigned int. Several call
    sites store negative error codes into it and later compare against
    negative values:
    
      - sdhci.c, sdhci-of-dwcmshc.c and sdhci-pci-gli.c assign it the
        return value of __sdhci_execute_tuning()/__sdhci_execute_tuning_9750(),
        both of which return a signed int (possibly a negative errno);
      - sdhci-of-esdhc.c assigns host->tuning_err = -EAGAIN and later does
        "ret = host->tuning_err; if (ret == -EAGAIN ...)";
      - sdhci-of-dwcmshc.c prints it with the %d (signed) conversion.
    
    Storing a negative errno in an unsigned int and reading it back as a
    signed int only happens to work because of two's-complement, same-width
    integer conversions. It is misleading and triggers sign-conversion
    warnings. All users treat the value either as a signed error code or as
    a boolean (zero / non-zero), so changing the type to a signed int is
    safe and makes the intent explicit.
    
    Fixes: 7d8bb1f46e13 ("mmc: sdhci: add tuning error codes")
    Assisted-by: Cline:claude-sonnet [read_file, search_files, git]
    Signed-off-by: Haibo Chen <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Cc: [email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mmc: sdhci: unmap the bounce buffer before device release [+ + +]
Author: Myeonghun Pak <[email protected]>
Date:   Mon Jul 27 23:03:22 2026 +0900

    mmc: sdhci: unmap the bounce buffer before device release
    
    commit 9e9f561269dff35e6f84ed21776ec37fd6360b03 upstream.
    
    sdhci_allocate_bounce_buffer() allocates its buffer with devm_kmalloc()
    but maps it with dma_map_single(). The buffer is therefore released by
    devres without the streaming DMA mapping being unmapped.
    
    Register a managed action after dma_map_single() succeeds so the mapping
    is removed before devres releases the buffer. The action is registered
    only for buffers allocated and mapped by the SDHCI core, leaving buffers
    provided by host drivers under their existing ownership.
    
    Fixes: bd9b902798ab ("mmc: sdhci: Implement an SDHCI-specific bounce buffer")
    Cc: [email protected]
    Co-developed-by: Ijae Kim <[email protected]>
    Signed-off-by: Ijae Kim <[email protected]>
    Signed-off-by: Myeonghun Pak <[email protected]>
    Reviewed-by: Linus Walleij <[email protected]>
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mmc: vub300: fix use-after-free on disconnect [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Jul 27 23:26:03 2026 -0400

    mmc: vub300: fix use-after-free on disconnect
    
    The vub300 driver maintains an explicit reference count for the
    controller and its driver data and the last reference can in theory be
    dropped after the driver has been unbound.
    
    This specifically means that the controller allocation must not be
    device managed as that can lead to use-after-free.
    
    Note that the lifetime is currently also incorrectly tied the parent USB
    device rather than interface, which can lead to memory leaks if the
    driver is unbound without its device being physically disconnected (e.g.
    on probe deferral).
    
    Fix both issues by reverting to non-managed allocation of the controller.
    
    Fixes: dcfdd698dc52 ("mmc: vub300: Use devm_mmc_alloc_host() helper")
    Cc: [email protected] # 6.17+
    Cc: Binbin Zhou <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Ulf Hansson <[email protected]>
    (cherry picked from commit 8f4d20a710225ec7a565f6a0459862d3b1f32330)
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mmc: vub300: fix use-after-free on probe failure [+ + +]
Author: Guangshuo Li <[email protected]>
Date:   Mon Jul 27 23:26:05 2026 -0400

    mmc: vub300: fix use-after-free on probe failure
    
    The vub300 driver lifetime-manages its controller state using
    vub300->kref, with vub300_delete() freeing the mmc host when the last
    reference is dropped. The probe error path after the inactivity timer has
    been armed still bypasses that lifetime rule, however, and falls through
    to mmc_free_host() directly if mmc_add_host() fails.
    
    The race window is between arming the inactivity timer and reaching the
    probe error unwind after mmc_add_host() fails:
    
            probe thread                     timer/workqueue
            ------------                     ---------------
            kref_init(&vub300->kref)         ref = 1
            kref_get(&vub300->kref)          ref = 2, timer ref
            add_timer(inactivity_timer)      fires after one second
            |
            |   race window
            |<---------------------------------------------------->
            |
            mmc_add_host(mmc)
                                             inactivity timer fires
                                             vub300_queue_dead_work()
                                               kref_get()          ref = 3
                                               queue_work(deadwork)
            mmc_add_host() fails
            timer_delete_sync()
            mmc_free_host(mmc)
              frees vub300
                                             deadwork runs
                                               use-after-free
    
    The inactivity timeout is one second, so this would require
    mmc_add_host() to both fail and take more than one second to do so. This
    is unlikely to happen in practice, but the error path is still wrong.
    
    timer_delete_sync() only waits for the timer callback itself. It does
    not flush deadwork that the callback may already have queued. As a
    result, queued deadwork can still hold a kref while the probe error path
    directly frees the backing mmc host, including the vub300 storage.
    
    Fix this by using the same lifetime mechanism as disconnect. Clear
    vub300->interface so that the timer callback and any queued deadwork
    return early and drop their references, then drop the initial probe
    reference and return without falling through to err_free_host.
    
    Fixes: 0613ad2401f8 ("mmc: vub300: fix return value check of mmc_add_host()")
    Signed-off-by: Guangshuo Li <[email protected]>
    Reviewed-by: Johan Hovold <[email protected]>
    Cc: [email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    (cherry picked from commit a3b5f242997a3be7404112fd48784881560aea57)
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mmc: vub300: rename probe error labels [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Jul 27 23:26:04 2026 -0400

    mmc: vub300: rename probe error labels
    
    Error labels should be named after what they do.
    
    Rename the probe error labels.
    
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Ulf Hansson <[email protected]>
    (cherry picked from commit 5b8b35d6f4fa758dd5e8ae18526ea1c73f6787e0)
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mptcp: decrement subflows counter on failed passive join [+ + +]
Author: Chenguang Zhao <[email protected]>
Date:   Fri Aug 7 07:48:17 2026 -0400

    mptcp: decrement subflows counter on failed passive join
    
    [ Upstream commit f3ca0ee2cc308e33896536789cbc5f3a12ca7b30 ]
    
    mptcp_pm_allow_new_subflow() increments extra_subflows before
    __mptcp_finish_join() on the passive MP_JOIN path.
    
    In case of race conditions, the subflow is dropped without calling
    mptcp_close_ssk(), so the counter is not rolled back.
    
    Call mptcp_pm_close_subflow() when the join completion fails to
    decrement the subflows counter.
    
    Fixes: 10f6d46c943d ("mptcp: fix race between MP_JOIN and close")
    Cc: [email protected]
    Signed-off-by: Chenguang Zhao <[email protected]>
    Reviewed-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/20260722-net-mptcp-misc-fixes-7-2-rc5-v1-1-6fb595bc86ef@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: fix subflow accounting on close [+ + +]
Author: Paolo Abeni <[email protected]>
Date:   Fri Aug 7 07:48:16 2026 -0400

    mptcp: fix subflow accounting on close
    
    [ Upstream commit 95d686517884a403412b000361cee2b08b2ed1e6 ]
    
    If the PM closes a fully established MPJ subflow or the subflow
    creation errors out in it's early stage the subflows counter is
    not bumped accordingly.
    
    This change adds the missing accounting, additionally taking care
    of updating accordingly the 'accept_subflow' flag.
    
    Fixes: a88c9e496937 ("mptcp: do not block subflows creation on errors")
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Mat Martineau <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: f3ca0ee2cc30 ("mptcp: decrement subflows counter on failed passive join")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: only set DATA_FIN when a mapping is present [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Thu Aug 6 14:59:52 2026 -0400

    mptcp: only set DATA_FIN when a mapping is present
    
    [ Upstream commit b2ff91b752b0d85e8815e7f44fd85205c4268094 ]
    
    mptcp_get_options() clears only the status group of struct
    mptcp_options_received; data_seq, subflow_seq and data_len are filled in
    by mptcp_parse_option() exclusively inside the DSS mapping block, which
    runs only when the DSS M (mapping present) bit is set.
    
    A peer can send a DSS option with the DATA_FIN flag set but the mapping
    bit clear. The parser then records mp_opt->data_fin while leaving
    data_len and data_seq uninitialized. For a zero-length segment
    mptcp_incoming_options() evaluates
    
            if (mp_opt.data_fin && mp_opt.data_len == 1 &&
                mptcp_update_rcv_data_fin(msk, mp_opt.data_seq, mp_opt.dsn64))
    
    which reads the uninitialized data_len and data_seq; KMSAN reports an
    uninit-value in mptcp_incoming_options(). The stale data_seq can also be
    fed into the receive-side DATA_FIN sequence tracking.
    
    Record the DATA_FIN flag only when the DSS option carries a mapping, so
    data_fin is never set without data_seq and data_len also being present.
    data_fin is part of the status group that mptcp_get_options() clears up
    front, so on the no-map path it stays zero and the zero-length DATA_FIN
    branch is simply skipped. A DATA_FIN is always transmitted together with
    a mapping (mptcp_write_data_fin() sets use_map along with data_seq and
    data_len), so legitimate DATA_FIN handling is unaffected.
    
    Move the pr_debug() that logs the parsed DSS flags below the mapping
    block, so it reports the final data_fin value instead of the stale one
    it would otherwise print before the assignment.
    
    Fixes: 43b54c6ee382 ("mptcp: Use full MPTCP-level disconnect state machine")
    Suggested-by: Paolo Abeni <[email protected]>
    Cc: [email protected]
    Signed-off-by: Michael Bommarito <[email protected]>
    Reviewed-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: options: reset DSS fields in case of unexpected size [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Mon Aug 3 18:16:33 2026 +0200

    mptcp: options: reset DSS fields in case of unexpected size
    
    commit 35772b4981f38ba8059372cde8753e8e477e98ec upstream.
    
    A remote peer could send a malformed DSS with a wrong size, followed by
    another DSS or MPC + Data. In this case, the first suboption will be
    ignored, but leaving some fields written, which could lead to
    inconsistency or access uninitialized data.
    
    Explicitly reset the fields that could have been modified in case of
    unexpected size.
    
    Link: https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20260728-net-mptcp-misc-fixes-7-2-rc6-v1-0-f7e2d229159d%40kernel.org?part=1
    Fixes: 648ef4b88673 ("mptcp: Implement MPTCP receive path")
    Cc: [email protected]
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/20260803-net-mptcp-misc-fixes-7-2-rc6-v2-1-b8f496d71664@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mtd: maps: vmu-flash: fix fault in unaligned fixup [+ + +]
Author: Florian Fuchs <[email protected]>
Date:   Sun Jul 26 08:00:41 2026 -0400

    mtd: maps: vmu-flash: fix fault in unaligned fixup
    
    [ Upstream commit 79d1661502c6e4b6f626185cef72cf2fa78116e1 ]
    
    Use kzalloc_obj() / kzalloc_objs() to allocate the memcard structs,
    instead of kmalloc_obj() / kmalloc_objs() to prevent access to
    uninitialized data.
    
    Fixes runtime error: Fault in unaligned fixup: 0000 [#1] at
    mtd_get_fact_prot_info.
    
    Fixes: 47a72688fae7 ("mtd: flash mapping support for Dreamcast VMU.")
    Cc: [email protected]
    Signed-off-by: Florian Fuchs <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mtd: spi-nor: Fix spi_nor_try_unlock_all() [+ + +]
Author: Michael Walle <[email protected]>
Date:   Sun Jul 26 09:35:26 2026 -0400

    mtd: spi-nor: Fix spi_nor_try_unlock_all()
    
    [ Upstream commit 2e3a7476ec3989e77270b9481e76e137824b17c0 ]
    
    Commit ff67592cbdfc ("mtd: spi-nor: Introduce spi_nor_set_mtd_info()")
    moved all initialization of the mtd fields at the end of spi_nor_scan().
    Normally, the mtd info is only needed for the mtd ops on the device,
    with one exception: spi_nor_try_unlock_all(), which will also make use
    of the mtd->size parameter. With that commit, the size will always be
    zero because it is not initialized. Fix that by not using the size of
    the mtd_info struct, but use the size from struct spi_nor_flash_parameter.
    
    Fixes: ff67592cbdfc ("mtd: spi-nor: Introduce spi_nor_set_mtd_info()")
    Cc: [email protected]
    Reported-by: Jean-Marc Ranger <[email protected]>
    Closes: https://lore.kernel.org/all/DM6PR06MB561177323DC5207E34AF2A06C547A@DM6PR06MB5611.namprd06.prod.outlook.com/
    Tested-by: Jean-Marc Ranger <[email protected]>
    Signed-off-by: Michael Walle <[email protected]>
    Reviewed-by: Pratyush Yadav <[email protected]>
    Signed-off-by: Pratyush Yadav <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: e1d456b26bf2 ("mtd: spi-nor: swp: Improve locking user experience")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mtd: spi-nor: intel: remove global protection flag [+ + +]
Author: Michael Walle <[email protected]>
Date:   Sun Jul 26 09:35:24 2026 -0400

    mtd: spi-nor: intel: remove global protection flag
    
    [ Upstream commit afcf93e9d63fc1e15935a2df9457f803394e4f20 ]
    
    For the Atmel and SST parts this flag was already moved to individual
    flash parts because it is considered bad esp. because newer flash chips
    will automatically inherit the "has locking" support. While this won't
    likely be the case for the Intel parts, we do it for consistency
    reasons.
    
    Signed-off-by: Michael Walle <[email protected]>
    Signed-off-by: Vignesh Raghavendra <[email protected]>
    Reviewed-by: Tudor Ambarus <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: e1d456b26bf2 ("mtd: spi-nor: swp: Improve locking user experience")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mtd: spi-nor: Move Software Write Protection logic out of the core [+ + +]
Author: Tudor Ambarus <[email protected]>
Date:   Sun Jul 26 09:35:25 2026 -0400

    mtd: spi-nor: Move Software Write Protection logic out of the core
    
    [ Upstream commit c4c795105f2924c80752c30ffd3c7029a8e0ef28 ]
    
    It makes the core file a bit smaller and provides better separation
    between the Software Write Protection features and the core logic.
    All the next generic software write protection features (e.g. Individual
    Block Protection) will reside in swp.c.
    
    Signed-off-by: Tudor Ambarus <[email protected]>
    Reviewed-by: Michael Walle <[email protected]>
    Acked-by: Pratyush Yadav <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: e1d456b26bf2 ("mtd: spi-nor: swp: Improve locking user experience")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mtd: spi-nor: sst: remove global protection flag [+ + +]
Author: Michael Walle <[email protected]>
Date:   Sun Jul 26 09:35:23 2026 -0400

    mtd: spi-nor: sst: remove global protection flag
    
    [ Upstream commit a833383732116c2afe665520bbe6951999631ef1 ]
    
    This is considered bad for the following reasons:
     (1) We only support the block protection with BPn bits for write
         protection. Not all SST parts support this.
     (2) Newly added flash chip will automatically inherit the "has
         locking" support and thus needs to explicitly tested. Better
         be opt-in instead of opt-out.
     (3) There are already supported flashes which doesn't support
         the locking scheme. So I assume this wasn't properly tested
         before adding that chip; which enforces my previous argument
         that locking support should be an opt-in.
    
    Remove the global flag and add individual flags to all flashes
    which supports BP locking. In particular the following flashes
    don't support the BP scheme:
     - SST26VF016B
     - SST26WF016B
     - SST26VF064B
    
    Signed-off-by: Michael Walle <[email protected]>
    Signed-off-by: Vignesh Raghavendra <[email protected]>
    Reviewed-by: Tudor Ambarus <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: e1d456b26bf2 ("mtd: spi-nor: swp: Improve locking user experience")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mtd: spi-nor: swp: Improve locking user experience [+ + +]
Author: Miquel Raynal <[email protected]>
Date:   Sun Jul 26 09:35:27 2026 -0400

    mtd: spi-nor: swp: Improve locking user experience
    
    [ Upstream commit e1d456b26bf23e30db305a6184e8abd9ab68bbf2 ]
    
    In the case of the first block being locked (or the few first blocks),
    if the user want to fully unlock the device it has two possibilities:
    - either it asks to unlock the entire device, and this works;
    - or it asks to unlock just the block(s) that are currently locked,
      which fails.
    
    It fails because the conditions "can_be_top" and "can_be_bottom" are
    true. Indeed, in this case, we unlock everything, so the TB bit does not
    matter. However in the current implementation, use_top would be true (as
    this is the favourite option) and lock_len, which in practice should be
    reduced down to 0, is set to "nor->params->size - (ofs + len)" which is
    a positive number. This is wrong.
    
    An easy way is to simply add an extra condition. In the unlock() path,
    if we can achieve the same result from both sides, it means we unlock
    everything and lock_len must simply be 0. A comment is added to clarify
    that logic.
    
    Fixes: 3dd8012a8eeb ("mtd: spi-nor: add TB (Top/Bottom) protect support")
    Cc: [email protected]
    Signed-off-by: Miquel Raynal <[email protected]>
    Reviewed-by: Michael Walle <[email protected]>
    Signed-off-by: Pratyush Yadav <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/9p: fix infinite loop in p9_client_rpc on fatal signal [+ + +]
Author: Vasiliy Kovalev <[email protected]>
Date:   Sat Jul 25 06:55:26 2026 -0400

    net/9p: fix infinite loop in p9_client_rpc on fatal signal
    
    [ Upstream commit 6b4f48728faa8bb514368f7eacda05565dea8696 ]
    
    When p9_client_rpc() is called with type P9_TFLUSH and the transport
    has no peer (e.g. fd transport backed by pipes with no 9p server),
    a fatal signal causes an infinite loop:
    
      again:
            err = io_wait_event_killable(req->wq, ...)
            /* SIGKILL wakes the task, returns -ERESTARTSYS */
    
            if (err == -ERESTARTSYS && c->status == Connected &&
                    type == P9_TFLUSH) {
                    sigpending = 1;
                    clear_thread_flag(TIF_SIGPENDING);
                    goto again;
            }
    
    clear_thread_flag() clears TIF_SIGPENDING before jumping back to
    io_wait_event_killable(). signal_pending_state() checks TIF_SIGPENDING,
    finds it zero, and the task goes to sleep again. The task can only wake
    on the next signal delivery that calls signal_wake_up() and sets
    TIF_SIGPENDING again. When that happens the loop repeats, clears
    TIF_SIGPENDING, and sleeps again indefinitely.
    
    This is triggered in practice by coredump_wait(): when a thread in a
    multi-threaded process causes a coredump (e.g. via SIGSYS from Syscall
    User Dispatch), coredump_wait() sends SIGKILL to all other threads and
    waits for them to call mm_release(). If one of those threads is blocked
    in p9_client_rpc() over an fd transport with no peer, it enters the
    P9_TFLUSH loop and never calls mm_release(), so coredump_wait() stalls
    forever:
    
    INFO: task syz.0.18:676 blocked for more than 143 seconds.
          Not tainted 6.12.77+ #1
    task:syz.0.18 state:D stack:27600 pid:676 tgid:673 ppid:630 flags:0x00000004
    Call Trace:
     <TASK>
     context_switch kernel/sched/core.c:5344 [inline]
     __schedule+0xcb4/0x5d50 kernel/sched/core.c:6724
     __schedule_loop kernel/sched/core.c:6801 [inline]
     schedule+0xe5/0x350 kernel/sched/core.c:6816
     schedule_timeout+0x253/0x290 kernel/time/timer.c:2593
     do_wait_for_common kernel/sched/completion.c:95 [inline]
     __wait_for_common+0x409/0x600 kernel/sched/completion.c:116
     wait_for_common kernel/sched/completion.c:127 [inline]
     wait_for_completion_state+0x1d/0x40 kernel/sched/completion.c:264
     coredump_wait fs/coredump.c:448 [inline]
     do_coredump+0x854/0x4350 fs/coredump.c:629
     get_signal+0x1425/0x2730 kernel/signal.c:2903
     arch_do_signal_or_restart+0x81/0x880 arch/x86/kernel/signal.c:337
     exit_to_user_mode_loop kernel/entry/common.c:111 [inline]
     exit_to_user_mode_prepare include/linux/entry-common.h:328 [inline]
     __syscall_exit_to_user_mode_work kernel/entry/common.c:207 [inline]
     syscall_exit_to_user_mode+0xf9/0x160 kernel/entry/common.c:218
     do_syscall_64+0x102/0x220 arch/x86/entry/common.c:84
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
     </TASK>
    
    Fix: check fatal_signal_pending() before clearing TIF_SIGPENDING in the
    P9_TFLUSH retry loop. At that point TIF_SIGPENDING is still set, so
    fatal_signal_pending() works correctly. If a fatal signal is pending,
    jump to recalc_sigpending to restore TIF_SIGPENDING and return
    -ERESTARTSYS to the caller.
    
    The same defect is present in stable kernels back to 5.4. On those
    kernels the infinite loop is broken earlier by a second SIGKILL from
    the parent process (e.g. kill_and_wait() retrying after a timeout),
    resulting in a zombie process and a shutdown delay rather than a
    permanent D-state hang, but the underlying flaw is the same.
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: 91b8534fa8f5 ("9p: make rpc code common and rework flush code")
    Closes: https://syzkaller.appspot.com/bug?extid=3ce7863f8fc836a427e7
    Cc: [email protected]
    Signed-off-by: Vasiliy Kovalev <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Dominique Martinet <[email protected]>
    [ adjusted context to match the older parenthesized `if ((err == -ERESTARTSYS) && ...)` condition style ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/sched: act_gact, act_police: range check the fallback control action [+ + +]
Author: Hyunjung Ko <[email protected]>
Date:   Wed Aug 19 11:54:45 2026 -0400

    net/sched: act_gact, act_police: range check the fallback control action
    
    [ Upstream commit 883b56ae58fe657d8497806c7059646e9ba6dbd0 ]
    
    tcf_action_check_ctrlact() range checks the primary control action:
    
            if (!opcode)
                    ret = action > TC_ACT_VALUE_MAX ? -EINVAL : 0;
    
    TC_ACT_VALUE_MAX is TC_ACT_TRAP, so kernel-internal verdicts above it
    cannot be set that way. But act_gact and act_police each carry a second,
    independent control action supplied by user space that never reaches that
    helper - TCA_GACT_PROB.paction and TCA_POLICE_RESULT. Both only reject
    TC_ACT_GOTO_CHAIN, so any other value is stored verbatim and returned
    verbatim from the action.
    
    In particular user space can store TC_ACT_CONSUMED, which is
    TC_ACT_VALUE_MAX + 1 and is deliberately not part of the UAPI value
    range. That verdict tells every caller the action took ownership of the
    skb, so nobody frees it: sch_handle_ingress(), sch_handle_egress() and
    tcf_qevent_handle() all deliberately skip the free for it. The result is
    one leaked sk_buff plus its data buffer per packet traversing the filter,
    unbounded, for all traffic on the chain including kernel-generated
    packets.
    
    Both are trivially deterministic. act_gact clamps tcfg_pval to >= 1, so
    with pval = 1 gact_determ() returns the fallback for every packet.
    act_police has no mandatory rate, so rate = 0 leaves tcfp_mtu = ~0 and
    tcf_police_mtu_check() always passes.
    
    TC_ACT_CONSUMED was added by commit 720f22fed81b ("net: sched: refactor
    reinsert action"), after both goto-chain guards were written:
    commit 9469f375ab09 ("net/sched: act_gact: disallow 'goto chain' on
    fallback control action") and
    commit c08f5ed5d625 ("net/sched: act_police: disallow 'goto chain' on
    fallback control action"). Neither guard was widened when the new
    verdict appeared.
    
    Factor the existing range test out of tcf_action_check_ctrlact() as
    tcf_action_valid() and apply it to both fallbacks. The helper cannot call
    tcf_action_check_ctrlact() directly because that also allocates a
    goto_chain, which is exactly what these two sites must not do.
    
    Reproduced on v7.2-rc6: kmemleak reports one leaked 232-byte
    skbuff_head_cache object plus its 704-byte data buffer per packet. With
    this patch both configurations are rejected with -EINVAL and kmemleak
    reports none.
    
    Fixes: 720f22fed81b ("net: sched: refactor reinsert action")
    Cc: [email protected] # v5.3+
    Signed-off-by: Hyunjung Ko <[email protected]>
    Acked-by: Jamal Hadi Salim <[email protected]>
    Tested-by: Victor Nogueira <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ Kept only the new helper lines and dropped the surrounding upstream-only context (CONFIG_INET/tcf_frag_xmit_count block) absent in 5.10. ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net/sched: sch_taprio: Replace direct dequeue call with peek and qdisc_dequeue_peeked [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Tue Jul 28 18:17:38 2026 -0400

    net/sched: sch_taprio: Replace direct dequeue call with peek and qdisc_dequeue_peeked
    
    [ Upstream commit e056e1dfcddca877dd46d704e8ec9860cfc9ec44 ]
    
    When taprio's software path peeks a non-work-conserving child qdisc, the
    child stashes the peeked skb in its gso_skb; taprio_dequeue_from_txq()
    then takes the packet with a direct child ->dequeue() call, which ignores
    that stash, orphans the peeked skb and desyncs the child's qlen/backlog.
    With a qfq child this re-enters the child on an emptied list and
    dereferences NULL, panicking the kernel from softirq on ordinary egress.
    
    Take the packet through qdisc_dequeue_peeked(), as sch_red and sch_sfb
    now do. The helper returns the child's stashed skb first and is a no-op
    when there is none, so a work-conserving child is unaffected and the
    gated path now consumes the skb whose length was charged to the budget.
    
    Fixes: 5a781ccbd19e ("tc: Add support for configuring the taprio scheduler")
    Cc: [email protected]
    Cc: Vladimir Oltean <[email protected]>
    Signed-off-by: Bryam Vargas <[email protected]>
    Reviewed-by: Victor Nogueira <[email protected]>
    Acked-by: Jamal Hadi Salim <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net/sched: serialize qdisc_rtab_list against concurrent get/put [+ + +]
Author: Aldo Ariel Panzardo <[email protected]>
Date:   Sat Aug 8 12:47:06 2026 -0400

    net/sched: serialize qdisc_rtab_list against concurrent get/put
    
    [ Upstream commit f43ee0c0730d6191629b5ee1ceae27b1ebfdc047 ]
    
    qdisc_get_rtab() and qdisc_put_rtab() mutate the process-global singly
    linked list qdisc_rtab_list and a plain non-atomic 'int refcnt' with no
    lock. This was only safe because every caller historically held the RTNL
    mutex, which serialized all rate-table lookups, inserts and frees.
    
    That invariant no longer holds. cls_flower sets
    TCF_PROTO_OPS_DOIT_UNLOCKED, so tc_new_tfilter() keeps rtnl_held == false
    for it and sets TCA_ACT_FLAGS_NO_RTNL. That flag propagates through
    tcf_exts_validate_ex() -> tcf_action_init() -> tcf_action_init_1() ->
    tcf_police_init(), which calls qdisc_get_rtab()/qdisc_put_rtab() with the
    RTNL mutex NOT held. Two RTM_NEWTFILTER requests on different CPUs, each
    adding a flower filter with a police action carrying the same rate, then
    race on qdisc_rtab_list and on the non-atomic refcnt, leading to a
    use-after-free / double-free of the kmalloc-2k struct qdisc_rate_table.
    qdisc_rtab_list is a single global (not per-netns), so the corrupted
    object is shared system-wide.
    
      BUG: KASAN: slab-use-after-free in qdisc_put_rtab+0x12f/0x160
       qdisc_put_rtab+0x12f/0x160
       tcf_police_init+0xda9/0x1590
       tcf_action_init_1+0x460/0x6b0
       tcf_action_init+0x439/0xa40
       tcf_exts_validate_ex+0x42d/0x550
       fl_change+0xddd/0x7da0
       tc_new_tfilter+0xaa7/0x2420
       rtnetlink_rcv_msg+0x95e/0xe90
      which belongs to the cache kmalloc-2k of size 2048
    
    Protect qdisc_rtab_list and the refcount with a dedicated spinlock. The
    (sleeping, GFP_KERNEL) allocation in qdisc_get_rtab() is performed before
    taking the lock; if a concurrent inserter added an identical table in the
    meantime the freshly allocated one is freed under the lock, so no
    duplicate is leaked. qdisc_put_rtab() now decrements the refcount and
    unlinks under the same lock.
    
    Fixes: 470502de5bdb ("net: sched: unlock rules update API")
    Suggested-by: Eric Dumazet <[email protected]>
    Signed-off-by: Aldo Ariel Panzardo <[email protected]>
    Cc: [email protected]
    Acked-by: Jamal Hadi Salim <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net/sched: taprio: avoid calling child->ops->dequeue(child) twice [+ + +]
Author: Vladimir Oltean <[email protected]>
Date:   Tue Jul 28 18:17:37 2026 -0400

    net/sched: taprio: avoid calling child->ops->dequeue(child) twice
    
    [ Upstream commit 4c22942734f0814d3c928c25a80f48df0a6ce45e ]
    
    Simplify taprio_dequeue_from_txq() by noticing that we can goto one call
    earlier than the previous skb_found label. This is possible because
    we've unified the treatment of the child->ops->dequeue(child) return
    call, we always try other TXQs now, instead of abandoning the root
    dequeue completely if we failed in the peek() case.
    
    Signed-off-by: Vladimir Oltean <[email protected]>
    Reviewed-by: Kurt Kanzenbach <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: e056e1dfcddc ("net/sched: sch_taprio: Replace direct dequeue call with peek and qdisc_dequeue_peeked")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/smc: rdma write inline if qp has sufficient inline space [+ + +]
Author: Guangguan Wang <[email protected]>
Date:   Mon May 16 13:51:37 2022 +0800

    net/smc: rdma write inline if qp has sufficient inline space
    
    commit 793a7df63071eb09e5b88addf2a569d7bfd3c973 upstream.
    
    Rdma write with inline flag when sending small packages,
    whose length is shorter than the qp's max_inline_data, can
    help reducing latency.
    
    In my test environment, which are 2 VMs running on the same
    physical host and whose NICs(ConnectX-4Lx) are working on
    SR-IOV mode, qperf shows 0.5us-0.7us improvement in latency.
    
    Test command:
    server: smc_run taskset -c 1 qperf
    client: smc_run taskset -c 1 qperf <server ip> -oo \
                    msg_size:1:2K:*2 -t 30 -vu tcp_lat
    
    The results shown below:
    msgsize     before       after
    1B          11.2 us      10.6 us (-0.6 us)
    2B          11.2 us      10.7 us (-0.5 us)
    4B          11.3 us      10.7 us (-0.6 us)
    8B          11.2 us      10.6 us (-0.6 us)
    16B         11.3 us      10.7 us (-0.6 us)
    32B         11.3 us      10.6 us (-0.7 us)
    64B         11.2 us      11.2 us (0 us)
    128B        11.2 us      11.2 us (0 us)
    256B        11.2 us      11.2 us (0 us)
    512B        11.4 us      11.3 us (-0.1 us)
    1KB         11.4 us      11.5 us (0.1 us)
    2KB         11.5 us      11.5 us (0 us)
    
    Signed-off-by: Guangguan Wang <[email protected]>
    Reviewed-by: Tony Lu <[email protected]>
    Tested-by: kernel test robot <[email protected]>
    Acked-by: Karsten Graul <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 5d9686af2976 ("net: smc: fix splice entry lifetime imbalance in smc_rx_splice")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net/smc: reject CHID-0 ACCEPT that matches an empty ism_dev slot [+ + +]
Author: Xiang Mei <[email protected]>
Date:   Sun May 10 23:21:38 2026 -0700

    net/smc: reject CHID-0 ACCEPT that matches an empty ism_dev slot
    
    commit 277740023def559a4a2ddc3e8e784ee37a0f16a9 upstream.
    
    On the SMC-D client, slot 0 of ini->ism_dev[]/ini->ism_chid[] is
    reserved for an SMC-Dv1 device. smc_find_ism_v2_device_clnt()
    populates V2 entries starting at index 1, so when no V1 device is
    selected slot 0 is left in its kzalloc()'ed state with ism_dev[0] ==
    NULL and ism_chid[0] == 0.
    
    smc_v2_determine_accepted_chid() then matches the peer's CHID against
    the array starting from index 0 using the CHID alone. A malicious
    peer replying to a SMC-Dv2-only proposal with d1.chid == 0 matches
    the empty slot, ini->ism_selected becomes 0, and the subsequent
    ism_dev[0]->lgr_lock dereference in smc_conn_create() faults at
    offsetof(struct smcd_dev, lgr_lock) == 0x68:
    
      BUG: KASAN: null-ptr-deref in _raw_spin_lock_bh+0x79/0xe0
      Write of size 4 at addr 0000000000000068 by task exploit/144
      Call Trace:
       _raw_spin_lock_bh
       smc_conn_create (net/smc/smc_core.c:1997)
       __smc_connect (net/smc/af_smc.c:1447)
       smc_connect (net/smc/af_smc.c:1720)
       __sys_connect
       __x64_sys_connect
       do_syscall_64
    
    Require ism_dev[i] to be non-NULL before accepting a CHID match.
    
    Fixes: a7c9c5f4af7f ("net/smc: CLC accept / confirm V2")
    Reported-by: Weiming Shi <[email protected]>
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Xiang Mei <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Andrey Troshin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net: Add helper function to parse netlink msg of ip_tunnel_encap [+ + +]
Author: Liu Jian <[email protected]>
Date:   Tue Jul 28 08:16:45 2026 -0400

    net: Add helper function to parse netlink msg of ip_tunnel_encap
    
    [ Upstream commit 537dd2d9fb9f4aa7939fb4fcf552ebe4f497bd7e ]
    
    Add ip_tunnel_netlink_encap_parms to parse netlink msg of ip_tunnel_encap.
    Reduces duplicate code, no actual functional changes.
    
    Signed-off-by: Liu Jian <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 8211a2632466 ("net: ipip: require CAP_NET_ADMIN in the device netns for changelink")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: atlantic: free stranded TX buffers on ring deinit [+ + +]
Author: Yangyu Chen <[email protected]>
Date:   Sun Aug 2 23:46:00 2026 +0800

    net: atlantic: free stranded TX buffers on ring deinit
    
    commit 452636ea5410a96e02ebaaf80b21e3620b98e0dd upstream.
    
    aq_vec_deinit() drains the TX rings with a single aq_ring_tx_clean()
    call, which frees at most AQ_CFG_TX_CLEAN_BUDGET (256) descriptors and
    stops at hw_head, which no longer moves once aq_vec_stop() has stopped
    the hardware and NAPI. Completed descriptors beyond the budget and
    everything still posted in [hw_head, sw_tail) keep their skb or
    xdp_frame when the interface goes down: aq_vec_ring_free() then frees
    the buffer ring and the references are lost for good.
    
    Today this is a silent memory leak on every interface down under
    TX/XDP_TX load. With the conversion of the RX path to page_pool posted
    for net-next it becomes much more visible: XDP_TX frames carry fragment
    references on the RX ring's page_pool, so a single stranded frame keeps
    the pool's inflight count above zero forever. page_pool_destroy() then
    never completes, the pool is leaked together with its pages, and
    "page_pool_release_retry() stalled pool shutdown" is warned every 60
    seconds from that point on, on every ifdown, XDP detach or ring resize
    under XDP_TX load.
    
    Bring back aq_ring_tx_deinit() as it was before the removal and use it
    for teardown again, with one extension: TX rings can hold xdp_frames
    nowadays, so release those too. They are returned with
    xdp_return_frame() since this runs in process context.
    
    Fixes: eb36bedf28be ("net: aquantia: remove function aq_ring_tx_deinit")
    Cc: [email protected] # v4.11+
    Reviewed-by: Sukhdeep Singh <[email protected]>
    Signed-off-by: Yangyu Chen <[email protected]>
    Acked-by: Mina Almasry <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ Dropped the XDP frame arm from the new teardown loop since `buff->xdpf` and `xdp_return_frame()` don't exist in 5.15, and omitted the `aq_xdp_xmit()` context line in the header hunk. ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: ethernet: ti: am65-cpsw-nuss: Fix port_id extraction from SRC TAG [+ + +]
Author: Siddharth Vadapalli <[email protected]>
Date:   Fri Aug 7 16:47:37 2026 +0530

    net: ethernet: ti: am65-cpsw-nuss: Fix port_id extraction from SRC TAG
    
    [ Upstream commit 36a05d2820077bb3955acb8111e1041d39148037 ]
    
    On the packet reception path, the ID of the MAC Port on which the packet
    was received, is embedded in the RX DMA Descriptor's metadata. The ID is
    extracted using the helper function cppi5_desc_get_tags_ids() which fills
    in the 16-bit Source Tag into the 'port_id' variable. However, it is only
    the lower 8-bits of the 16-bit Source Tag that represent the MAC Port ID,
    while the upper 8-bits are Hardware-Reserved and carry an arbitrary value.
    With the existing logic, sporadic kernel crash is observed due to the
    subsequent driver code accessing out-of-bound memory because of an invalid
    port_id.
    
    Hence, fix the port_id extraction logic to use only the lower 8-bits of the
    Source Tag as the MAC Port ID.
    
    Fixes: 93a76530316a ("net: ethernet: ti: introduce am65x/j721e gigabit eth subsystem driver")
    Signed-off-by: Siddharth Vadapalli <[email protected]>
    Reviewed-by: Chintan Vankar <[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]>

net: ethernet: ti: am65-cpsw: add multi port support in mac-only mode [+ + +]
Author: Grygorii Strashko <[email protected]>
Date:   Fri Oct 30 22:07:06 2020 +0200

    net: ethernet: ti: am65-cpsw: add multi port support in mac-only mode
    
    [ Upstream commit 84b4aa4932490c9f88f13d8f3b3cd1f3b6116991 ]
    
    This patch adds final multi-port support to TI AM65x CPSW driver path in
    preparation for adding support for multi-port devices, like Main CPSW0 on
    K3 J721E SoC or future CPSW3g on K3 AM64x SoC.
    - the separate netdev is created for every enabled external Port;
    - DMA channels are common/shared for all external Ports and the RX/TX NAPI
    and DMA processing assigned to first available netdev;
    - external Ports are configured in mac-only mode, which is similar to TI
    "dual-mac" mode for legacy TI CPSW - packets are sent to the Host port only
    in ingress and directly to the Port on egress. No packet switching between
    external ports happens.
    - every port supports the same features as current AM65x CPSW on external
    device.
    
    Signed-off-by: Grygorii Strashko <[email protected]>
    Reviewed-by: Jesse Brandeburg <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 36a05d282007 ("net: ethernet: ti: am65-cpsw-nuss: Fix port_id extraction from SRC TAG")
    Signed-off-by: Sasha Levin <[email protected]>

net: ethernet: ti: am65-cpsw: fix error handling in am65_cpsw_nuss_probe() [+ + +]
Author: Zhang Changzhong <[email protected]>
Date:   Thu Nov 24 11:03:08 2022 +0800

    net: ethernet: ti: am65-cpsw: fix error handling in am65_cpsw_nuss_probe()
    
    commit 46fb6512538d201d9a5b2bd7138b6751c37fdf0b upstream.
    
    The am65_cpsw_nuss_cleanup_ndev() function calls unregister_netdev()
    even if register_netdev() fails, which triggers WARN_ON(1) in
    unregister_netdevice_many(). To fix it, make sure that
    unregister_netdev() is called only on registered netdev.
    
    Compile tested only.
    
    Fixes: 84b4aa493249 ("net: ethernet: ti: am65-cpsw: add multi port support in mac-only mode")
    Signed-off-by: Zhang Changzhong <[email protected]>
    Reviewed-by: Maciej Fijalkowski <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: ethernet: ti: am65-cpsw: move ale selection in pdata [+ + +]
Author: Grygorii Strashko <[email protected]>
Date:   Fri Oct 30 22:06:58 2020 +0200

    net: ethernet: ti: am65-cpsw: move ale selection in pdata
    
    [ Upstream commit 7747d4b72f7702b2f19b9f91cc783eb38a2028bf ]
    
    In preparation of adding more multi-port K3 CPSW versions move ALE
    selection in am65_cpsw_pdata, so it can be selected basing on DT
    compatibility property.
    
    Signed-off-by: Grygorii Strashko <[email protected]>
    Reviewed-by: Jesse Brandeburg <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 36a05d282007 ("net: ethernet: ti: am65-cpsw-nuss: Fix port_id extraction from SRC TAG")
    Signed-off-by: Sasha Levin <[email protected]>

net: ethernet: ti: am65-cpsw: move free desc queue mode selection in pdata [+ + +]
Author: Grygorii Strashko <[email protected]>
Date:   Fri Oct 30 22:06:59 2020 +0200

    net: ethernet: ti: am65-cpsw: move free desc queue mode selection in pdata
    
    [ Upstream commit c6275c02a09730b365fffe3372fbe768cef8eb37 ]
    
    In preparation of adding more multi-port K3 CPSW versions move free
    descriptor queue mode selection in am65_cpsw_pdata, so it can be selected
    basing on DT compatibility property.
    
    Signed-off-by: Grygorii Strashko <[email protected]>
    Reviewed-by: Jesse Brandeburg <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 36a05d282007 ("net: ethernet: ti: am65-cpsw-nuss: Fix port_id extraction from SRC TAG")
    Signed-off-by: Sasha Levin <[email protected]>

net: gro: fix double aggregation of flush-marked skbs [+ + +]
Author: Shiming Cheng <[email protected]>
Date:   Sat Aug 8 20:48:06 2026 -0400

    net: gro: fix double aggregation of flush-marked skbs
    
    [ Upstream commit e751256486d0ded20f5a9f9863467f1dce65142f ]
    
    Commit 0ab03f353d36 ("net-gro: Fix GRO flush when receiving a GSO
    packet.") added a flush check to skb_gro_receive(), but
    skb_gro_receive_list() lacks the same validation.
    
    As a result, packets marked with NAPI_GRO_CB(skb)->flush may still be
    re-aggregated.
    
    This allows already-GRO'd packets with existing frag_list to be
    re-aggregated into a new GRO session, corrupting the frag_list chain
    structure. When skb_segment() attempts to unpack these malformed packets,
    it encounters invalid state and triggers a kernel panic.
    
    Scenario (Tethering/Device forwarding):
      1. Driver: Generated aggregated packet P1 via LRO with frag_list
      2. Dev A: Receives aggregated fraglist packet and flush flag set
      3. Dev A: Re-enters GRO, skb_gro_receive_list() is called
      4. Missing flush check allows re-aggregation despite flush flag
      5. Frag_list chain becomes corrupted (loops or dangling refs)
      6. Dev B: TX path calls skb_segment(), crashes on corrupted frag_list
    
    Root cause in skb_segment():
      The check at line ~4891:
        if (hsize <= 0 && i >= nfrags && skb_headlen(list_skb) &&
            (skb_headlen(list_skb) == len || sg)) {
    
      When frag_list is corrupted by double aggregation, when list_skb is
      a NULL pointer from skb->next, skb_headlen(list_skb) dereference
      NULL/corrupted pointers occurs.
    
    Call Trace:
     skb_headlen(NULL skb)
     skb_segment
     tcp_gso_segment
     tcp4_gso_segment
     inet_gso_segment
     skb_mac_gso_segment
     __skb_gso_segment
     skb_gso_segment
     validate_xmit_skb
     validate_xmit_skb_list
     sch_direct_xmit
     qdisc_restart
     __qdisc_run
     qdisc_run
     net_tx_action
    
    Fix: Add NAPI_GRO_CB(skb)->flush validation to the early-return check in
    skb_gro_receive_list(), matching the defensive programming pattern of
    skb_gro_receive().
    
    Fixes: 3a1296a38d0c ("net: Support GRO/GSO fraglist chaining.")
    Cc: [email protected]
    Signed-off-by: Shiming Cheng <[email protected]>
    Reviewed-by: Willem de Bruijn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: ip6_tunnel: require CAP_NET_ADMIN in the device netns for changelink [+ + +]
Author: Maoyi Xie <[email protected]>
Date:   Tue Jul 28 11:43:29 2026 -0400

    net: ip6_tunnel: require CAP_NET_ADMIN in the device netns for changelink
    
    [ Upstream commit 2496fa0b7d180b3ad356b514e7ff93bb14e6140a ]
    
    ip6_tnl_changelink() operates on at most two netns, dev_net(dev) and the
    tunnel link netns t->net. They differ once the device is created in or
    moved to a netns other than the one the request runs in. The rtnl
    changelink path checks CAP_NET_ADMIN only against dev_net(dev), so a
    caller privileged there but not in t->net can rewrite a tunnel that
    lives in t->net.
    
    Gate ip6_tnl_changelink() on rtnl_dev_link_net_capable() at its top,
    before any attribute is parsed.
    
    Reported-by: Xiao Liang <[email protected]>
    Closes: https://lore.kernel.org/netdev/CABAhCOSzP1vaThGV35_VnsRCb=87_CPjPVsTHbq905k8A+BuUg@mail.gmail.com/
    Fixes: 0bd8762824e7 ("ip6tnl: add x-netns support")
    Cc: [email protected]
    Signed-off-by: Maoyi Xie <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: ipa: fix SMEM state handle leaks in SMP2P init [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Tue Jul 28 23:53:05 2026 -0400

    net: ipa: fix SMEM state handle leaks in SMP2P init
    
    [ Upstream commit 96ca1e658ae459276292bd6d971ab5d8c7e0379a ]
    
    ipa_smp2p_init() acquires two Qualcomm SMEM state handles with
    qcom_smem_state_get(). However, neither the init error paths
    nor ipa_smp2p_exit() release them.
    
    Release both handles with qcom_smem_state_put() in the init
    error paths and in ipa_smp2p_exit().
    
    Fixes: 530f9216a953 ("soc: qcom: ipa: AP/modem communications")
    Cc: [email protected]
    Signed-off-by: Haoxiang Li <[email protected]>
    Reviewed-by: Larysa Zaremba <[email protected]>
    Reviewed-by: Alex Elder <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ kzalloc_obj() context line kept as kzalloc(sizeof(*smp2p), GFP_KERNEL) since ipa_smp2p.c was not yet converted in this tree ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: ipip: require CAP_NET_ADMIN in the device netns for changelink [+ + +]
Author: Maoyi Xie <[email protected]>
Date:   Tue Jul 28 08:16:46 2026 -0400

    net: ipip: require CAP_NET_ADMIN in the device netns for changelink
    
    [ Upstream commit 8211a26324667980a463c069469a818e71207e02 ]
    
    ipip_changelink() operates on at most two netns, dev_net(dev) and the
    tunnel link netns t->net. They differ once the device is created in or
    moved to a netns other than the one the request runs in. The rtnl
    changelink path checks CAP_NET_ADMIN only against dev_net(dev), so a
    caller privileged there but not in t->net can rewrite a tunnel that
    lives in t->net.
    
    Gate ipip_changelink() on rtnl_dev_link_net_capable() at its top,
    before any attribute is parsed.
    
    Reported-by: Xiao Liang <[email protected]>
    Closes: https://lore.kernel.org/netdev/CABAhCOSzP1vaThGV35_VnsRCb=87_CPjPVsTHbq905k8A+BuUg@mail.gmail.com/
    Fixes: 6c742e714d8c ("ipip: add x-netns support")
    Cc: [email protected]
    Signed-off-by: Maoyi Xie <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: packet: fix wrong transport_header when sending VLAN-tagged frame [+ + +]
Author: Wei Fang <[email protected]>
Date:   Fri Aug 7 14:34:04 2026 +0800

    net: packet: fix wrong transport_header when sending VLAN-tagged frame
    
    [ Upstream commit 01fdecc0480d916c799dbee584833a4a37e94d06 ]
    
    In packet_parse_headers(), when processing a VLAN-tagged frame,
    skb_set_network_header() is called to advance network_header past the
    VLAN tag to the inner protocol header. skb_probe_transport_header() is
    then called with skb->protocol still set to the outer VLAN EtherType
    (e.g. ETH_P_8021Q), while nhoff (derived from skb_network_offset())
    already points past the VLAN tag to the inner protocol header.
    
    In __skb_flow_dissect(), proto is initialized to ETH_P_8021Q and nhoff
    points past the VLAN tag. When the dissector hits case ETH_P_8021Q, it
    reads a struct vlan_hdr at nhoff via __skb_header_pointer(), but that
    offset contains the inner protocol header (e.g. an IP header). The bytes
    are misinterpreted as a VLAN header, yielding a garbage encapsulated
    EtherType that matches no known protocol. The dissector returns false,
    so skb_probe_transport_header() never calls skb_set_transport_header(),
    leaving transport_header at its uninitialized sentinel value (~0U).
    
    Move skb_probe_transport_header() to before skb_set_network_header(). At
    the time skb_probe_transport_header() is called, network_header still
    points to the VLAN header, so nhoff correctly points to the VLAN header.
    The flow dissector can then parse the VLAN header, extract the inner
    EtherType, and advance nhoff to the inner protocol header, allowing
    transport_header to be set correctly.
    
    Fixes: dfed913e8b55 ("net/af_packet: add VLAN support for AF_PACKET SOCK_RAW GSO")
    Assisted-by: WChat:claude-opus-4-8
    Signed-off-by: Wei Fang <[email protected]>
    Reviewed-by: Willem de Bruijn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: pktgen: fix code style (WARNING: Block comments) [+ + +]
Author: Peter Seiderer <[email protected]>
Date:   Tue Aug 11 09:14:20 2026 -0400

    net: pktgen: fix code style (WARNING: Block comments)
    
    [ Upstream commit 870b856cb478bc02fffe4d89897e62c692efb09a ]
    
    Fix checkpatch code style warnings:
    
      WARNING: Block comments use a trailing */ on a separate line
      +                                * removal by worker thread */
    
      WARNING: Block comments use * on subsequent lines
      +       __u8 tos;            /* six MSB of (former) IPv4 TOS
      +                               are for dscp codepoint */
    
      WARNING: Block comments use a trailing */ on a separate line
      +                               are for dscp codepoint */
    
      WARNING: Block comments use * on subsequent lines
      +       __u8 traffic_class;  /* ditto for the (former) Traffic Class in IPv6
      +                               (see RFC 3260, sec. 4) */
    
      WARNING: Block comments use a trailing */ on a separate line
      +                               (see RFC 3260, sec. 4) */
    
      WARNING: Block comments use * on subsequent lines
      +       /* = {
      +          0x00, 0x80, 0xC8, 0x79, 0xB3, 0xCB,
    
      WARNING: Block comments use * on subsequent lines
      +       /* Field for thread to receive "posted" events terminate,
      +          stop ifs etc. */
    
      WARNING: Block comments use a trailing */ on a separate line
      +          stop ifs etc. */
    
      WARNING: Block comments should align the * on each line
      + * we go look for it ...
      +*/
    
      WARNING: Block comments use a trailing */ on a separate line
      +        * we resolve the dst issue */
    
      WARNING: Block comments use a trailing */ on a separate line
      +        * with proc_create_data() */
    
    Signed-off-by: Peter Seiderer <[email protected]>
    Reviewed-by: Toke Høiland-Jørgensen <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 817ff6efdb7f ("net: pktgen: fix proc entry use-after-free")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: pktgen: fix proc entry use-after-free [+ + +]
Author: Chengfeng Ye <[email protected]>
Date:   Tue Aug 11 09:14:21 2026 -0400

    net: pktgen: fix proc entry use-after-free
    
    [ Upstream commit 817ff6efdb7f484ea547218e11e17d8e43daa3b4 ]
    
    pktgen_change_name() replaces pkt_dev->entry while holding t->if_lock.
    pktgen_remove_device() removes the same entry before
    _rem_dev_from_if_list() takes that lock.
    
    This allows the following interleaving:
    
      CPU 0 (NETDEV_CHANGENAME)       CPU 1 (kpktgend)
      if_lock(t)
      proc_remove(pkt_dev->entry)
                                      proc_remove(pkt_dev->entry)
      pkt_dev->entry = proc_create_data(...)
      if_unlock(t)
    
    The kthread can pass the stale proc_dir_entry to proc_remove() after the
    rename path has freed it. A reproducer with a widened race window reports:
    
      BUG: KASAN: slab-use-after-free in proc_remove+0x78/0x80
      Read of size 8 at addr ffff8881478fea70 by task kpktgend_0/67
      Call Trace:
       proc_remove+0x78/0x80
       pktgen_remove_device.isra.0+0x11c/0x4c0
       pktgen_thread_worker+0x1214/0x6bc0
       kthread+0x2c6/0x3b0
      Allocated by task 95:
       __proc_create+0x204/0x790
       proc_create_data+0x72/0xe0
       pktgen_thread_write+0xd61/0x1510
      Freed by task 28:
       kmem_cache_free+0xcb/0x3d0
       proc_free_inode+0x5b/0x80
       rcu_core+0x50a/0x1850
      The buggy address belongs to the object at ffff8881478fea00
       which belongs to the cache proc_dir_entry of size 192
    
    Move proc_remove() into the if_lock-protected list removal helper. Keep it
    before list_del_rcu() to preserve the ordering required by add_device().
    The rename path must then finish replacing the entry before removal, or
    it observes that the device is no longer on the list.
    
    Fixes: 39df232f1a9b ("[PKTGEN]: fix device name handling")
    Cc: [email protected]
    Signed-off-by: Chengfeng Ye <[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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: smc: fix splice entry lifetime imbalance in smc_rx_splice [+ + +]
Author: Daming Li <[email protected]>
Date:   Thu Jul 30 22:55:52 2026 +0800

    net: smc: fix splice entry lifetime imbalance in smc_rx_splice
    
    commit 5d9686af2976741bbd79b150d1c9e60b81e7f12e upstream.
    
    smc_rx_splice() passes pages to splice_to_pipe() before taking the
    references that cover the lifetime of each splice entry. In the
    VM-backed RMB path, splice_to_pipe() may drop unqueued entries through
    smc_rx_spd_release(), while queued entries are released later via the
    pipe buffer callback.
    
    The old post-splice accounting also derives the number of queued VM pages
    from an offset mutated while building the descriptor, and a multi-page
    splice pairs one sock_hold() with multiple sock_put() calls.
    
    Take the page and socket references for every candidate entry before
    splice_to_pipe(), and drop the matching private state, page reference,
    and socket reference from smc_rx_spd_release() for entries that never
    get queued. This fixes a refcount imbalance that can underflow page
    refcounts and trigger a use-after-free.
    
    Fixes: 9014db202cb7 ("smc: add support for splice()")
    Cc: [email protected]
    Reported-by: Vega <[email protected]>
    Co-developed-by: Xiao Liu <[email protected]>
    Signed-off-by: Xiao Liu <[email protected]>
    Signed-off-by: Daming Li <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Reviewed-by: Dust Li <[email protected]>
    Reviewed-by: Sidraya Jayagond <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ collapsed the multi-page get_page()/sock_hold() loop to a single get_page()/sock_hold() pair and dropped the trailing kfree() calls, as 5.15 lacks the multi-page pages[]/partial[]/priv[] arrays ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: thunderbolt: Fix frags[] overflow by bounding frame_count [+ + +]
Author: Maoyi Xie <[email protected]>
Date:   Sun Jul 26 08:00:57 2026 -0400

    net: thunderbolt: Fix frags[] overflow by bounding frame_count
    
    [ Upstream commit 55d9895f89970501fe126d1026b586b04a224c27 ]
    
    tbnet_poll() assembles a multi-frame ThunderboltIP packet into one skb. The
    first frame goes into the skb linear area and every further frame is added as
    a page fragment.
    
            skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
                            page, hdr_size, frame_size,
                            TBNET_RX_PAGE_SIZE - hdr_size);
    
    A packet of frame_count frames therefore ends up with frame_count - 1
    fragments. tbnet_check_frame() only bounds the peer supplied frame_count to
    TBNET_RING_SIZE / 4 (64), which is far above MAX_SKB_FRAGS (17 by default). A
    peer that sends a packet of 19 or more small frames pushes nr_frags past
    MAX_SKB_FRAGS, so skb_add_rx_frag() writes past skb_shinfo()->frags[] and
    corrupts memory after the shared info.
    
    Tighten the start of packet bound to MAX_SKB_FRAGS + 1 so a packet can never
    produce more fragments than frags[] can hold. This matches the recent skb
    frags overflow fixes in other receive paths, for example f0813bcd2d9d ("net:
    wwan: t7xx: fix potential skb->frags overflow in RX path") and 600dc40554dc
    ("net: usb: cdc-phonet: fix skb frags[] overflow in rx_complete()").
    
    Fixes: e69b6c02b4c3 ("net: Add support for networking over Thunderbolt cable")
    Cc: [email protected]
    Signed-off-by: Maoyi Xie <[email protected]>
    Acked-by: Mika Westerberg <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
netfilter: flowtable: publish GC-visible tuple last [+ + +]
Author: Jérémy Jean <[email protected]>
Date:   Sat Aug 8 12:40:02 2026 +0000

    netfilter: flowtable: publish GC-visible tuple last
    
    [ Upstream commit 2014ac62df9d45bb9a004a043e85df7be09ed780 ]
    
    nf_flow_table_iterate() only treats original-direction tuple nodes as
    owning entries. Publishing the original node first lets GC observe and
    free a flow while flow_offload_add() is still inserting the reply node.
    Publish the reply node first and the original node last so GC never
    sees a partially installed flow.
    
    KASAN can trigger slab-use-after-free read and write reports in the
    flowtable/rhashtable path (rht_deferred_worker, jhash, flow_offload_del,
    flow_offload_lookup, etc.).
    
    Fixes: ac2a66665e23 ("netfilter: add generic flow table infrastructure")
    Signed-off-by: Jérémy Jean <[email protected]>
    Assisted-by: Codex:gpt-5
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: ipset: fix list type element drift bug [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Thu Aug 6 15:53:41 2026 +0200

    netfilter: ipset: fix list type element drift bug
    
    [ Upstream commit 4cbd69766b35a089664cadb1f613bb85f7ef77a9 ]
    
    If list_set_uadd() calls list_set_replace() to swap an expired entry,
    the element count remains the same, therefore the increment must be elided.
    
    Fixes: 702b71e7c666 ("netfilter: ipset: Add element count to all set types header")
    Link: https://sashiko.dev/#/patchset/20260806101947.2802-1-fw%40strlen.de
    Signed-off-by: Florian Westphal <[email protected]>
    Acked-by: Jozsef Kadlecsik <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: ipset: fix refcount race between list:set GC and swap [+ + +]
Author: Xiang Mei (Microsoft) <[email protected]>
Date:   Wed Jul 22 22:38:32 2026 +0000

    netfilter: ipset: fix refcount race between list:set GC and swap
    
    [ Upstream commit 0c88868271653537ed443272dd8e7d13634d214b ]
    
    __ip_set_put_byindex() resolved the index to a set pointer under RCU,
    then took ip_set_ref_lock in __ip_set_put() to decrement set->ref.
    ip_set_swap() holds that same lock while swapping both the ip_set_list
    slots and the two sets' ref counters, so it can interleave between the
    dereference and the lock acquisition, leaving the caller to decrement a
    set whose reference already moved to the other index and hit
    BUG_ON(set->ref == 0). list_set_gc() reaches this from timer softirq,
    which the nfnl mutex does not serialize against swap: an expiring
    list:set member calls list_set_del() -> ip_set_put_byindex() while
    IPSET_CMD_SWAP runs on the referenced sets.
    
    Resolve the index and decrement under ip_set_ref_lock, as ip_set_swap()
    already does, keeping the refcount tied to the index rather than to a
    stale set pointer.
    
      kernel BUG at net/netfilter/ipset/ip_set_core.c:685!
      Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI
      RIP: 0010:ip_set_put_byindex (net/netfilter/ipset/ip_set_core.c:870)
      Call Trace:
       <IRQ>
       list_set_del (net/netfilter/ipset/ip_set_list_set.c:159)
       set_cleanup_entries (net/netfilter/ipset/ip_set_list_set.c:181)
       list_set_gc (net/netfilter/ipset/ip_set_list_set.c:578)
       call_timer_fn (kernel/time/timer.c:1748)
       __run_timers (kernel/time/timer.c:1799 kernel/time/timer.c:2374)
       run_timer_softirq (kernel/time/timer.c:2405)
       </IRQ>
      Kernel panic - not syncing: Fatal exception in interrupt
    
    Fixes: 9076aea76538 ("netfilter: ipset: Increase the number of maximal sets automatically")
    Reported-by: [email protected]
    Signed-off-by: Xiang Mei (Microsoft) <[email protected]>
    Acked-by: Jozsef Kadlecsik <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_conntrack_sip: remove net variable shadowing [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Thu Jul 23 12:57:44 2026 -0400

    netfilter: nf_conntrack_sip: remove net variable shadowing
    
    [ Upstream commit 7970d6aaf710db166de98c5356a260089896fae5 ]
    
    net is already set, derived from nf_conn.
    I don't see how the device could be living in a different netns
    than the conntrack entry.
    
    Remove the extra variable and re-use existing one.
    
    Signed-off-by: Florian Westphal <[email protected]>
    Stable-dep-of: e5e24a365a5e ("netfilter: nf_conntrack_sip: validate skb_dst() before accessing it")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: nf_conntrack_sip: validate skb_dst() before accessing it [+ + +]
Author: Pablo Neira Ayuso <[email protected]>
Date:   Thu Jul 23 12:57:45 2026 -0400

    netfilter: nf_conntrack_sip: validate skb_dst() before accessing it
    
    [ Upstream commit e5e24a365a5e024efef63cc49abb345fbd4852c5 ]
    
    tc ingress and openvswitch do not guarantee routing information to be
    available. These subsystems use the conntrack helper infrastructure, and
    the SIP helper relies on the skb_dst() to be present if
    sip_external_media is set to 1 (which is disabled by default as a module
    parameter).
    
    This effectively disables the sip_external_media toggle for these
    subsystems without resulting in a crash.
    
    Fixes: cae3a2627520 ("openvswitch: Allow attaching helpers to ct action")
    Fixes: b57dc7c13ea9 ("net/sched: Introduce action ct")
    Cc: [email protected]
    Reported-by: Ren Wei <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: nf_tables_offload: suppress WARN_ON_ONCE for ENOMEM in abort path [+ + +]
Author: Alexey Velichayshiy <[email protected]>
Date:   Thu Aug 6 19:11:38 2026 +0300

    netfilter: nf_tables_offload: suppress WARN_ON_ONCE for ENOMEM in abort path
    
    [ Upstream commit d02f592064347e0c1e0d84f24941ad338838cc48 ]
    
    In nft_flow_rule_offload_abort(), WARN_ON_ONCE(err) is triggered on every
    error during rollback, including -ENOMEM. Memory allocation failures are
    expected under low-memory conditions and do not indicate a kernel bug.
    
    Trace for example:
    nft_flow_offload_chain() // FLOW_BLOCK_BIND
      nft_flow_block_chain()
        nft_chain_offload_cmd()
          nft_block_offload_cmd()
            ->ndo_setup_tc()
            nsim_setup_tc()
              flow_block_cb_setup_simple()
                flow_block_cb_alloc() // fails to -ENOMEM
    
    The warning was reproduced on the 5.10 stable kernel under memory pressure
    via fault injection, but the underlying bug exists in mainline as well,
    as demonstrated by the ENOMEM trace above. The following splat was
    triggered during nf_tables transaction processing:
    
    WARNING: CPU: 0 PID: 8567 at net/netfilter/nf_tables_offload.c:532 nft_flow_rule_offload_abort net/netfilter/nf_tables_offload.c:532 [inline]
    WARNING: CPU: 0 PID: 8567 at net/netfilter/nf_tables_offload.c:532 nft_flow_rule_offload_commit+0x971/0xcd0 net/netfilter/nf_tables_offload.c:591
    Modules linked in:
    CPU: 0 PID: 8567 Comm: syz-executor.0 Not tainted 5.10.260-syzkaller #0
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014
    RIP: 0010:nft_flow_rule_offload_abort net/netfilter/nf_tables_offload.c:532 [inline]
    RIP: 0010:nft_flow_rule_offload_commit+0x971/0xcd0 net/netfilter/nf_tables_offload.c:591
    Call Trace:
     nf_tables_commit+0x3bd/0x4bd0 net/netfilter/nf_tables_api.c:8604
     nfnetlink_rcv_batch+0xb1e/0x1f20 net/netfilter/nfnetlink.c:509
     nfnetlink_rcv_skb_batch net/netfilter/nfnetlink.c:579 [inline]
     nfnetlink_rcv+0x3b3/0x420 net/netfilter/nfnetlink.c:597
     netlink_unicast_kernel net/netlink/af_netlink.c:1314 [inline]
     netlink_unicast+0x6cd/0xa00 net/netfilter/af_netlink.c:1340
     netlink_sendmsg+0x906/0xe10 net/netfilter/af_netlink.c:1919
     sock_sendmsg_nosec net/socket.c:651 [inline]
     __sock_sendmsg+0x155/0x190 net/socket.c:663
     ____sys_sendmsg+0x705/0x870 net/socket.c:2379
     ___sys_sendmsg+0x100/0x170 net/socket.c:2433
     __sys_sendmsg+0xe9/0x1c0 net/socket.c:2462
     do_syscall_64+0x33/0x40 arch/x86/entry/common.c:46
     entry_SYSCALL_64_after_hwframe+0x67/0xd1
    
    Change the condition to WARN_ON_ONCE(err && err != -ENOMEM) so that
    warnings are only emitted for unexpected errors. This aligns with the
    common kernel practice of not warning on -ENOMEM.
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: 63b48c73ff56 ("netfilter: nf_tables_offload: undo updates if transaction fails")
    Signed-off-by: Alexey Velichayshiy <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
octeontx2-pf: clear stale mailbox IRQ state before request_irq() [+ + +]
Author: Runyu Xiao <[email protected]>
Date:   Thu Jul 23 07:36:35 2026 -0400

    octeontx2-pf: clear stale mailbox IRQ state before request_irq()
    
    [ Upstream commit f918554fb7246e89b98ef90abe80801f038258b3 ]
    
    otx2_register_mbox_intr() currently installs the PF mailbox IRQ handler
    before clearing stale mailbox interrupt state. The function itself then
    comments that the local interrupt bits must be cleared first to avoid
    spurious interrupts, but that clear happens only after request_irq() has
    already exposed the handler to irq delivery.
    
    A running system can reach this during PF mailbox interrupt registration
    while stale or latched RVU_PF_INT state is still present. If delivery
    happens in the request_irq()-to-clear window,
    otx2_pfaf_mbox_intr_handler() can run before local quiesce and touch
    the same pf->mbox and pf->mbox_wq carrier that probe and teardown later
    reuse or destroy.
    
    Move the stale mailbox interrupt clear ahead of request_irq(), but keep
    interrupt enabling after the handler is installed. This closes the
    pre-clear early-IRQ window without creating a new enable-before-handler
    window.
    
    Fixes: 5a6d7c9daef3 ("octeontx2-pf: Mailbox communication with AF")
    Cc: [email protected]
    Signed-off-by: Runyu Xiao <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Reviewed-by: Ratheesh Kannoth <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

octeontx2-pf: fix SQB pointer leak on init failure [+ + +]
Author: Dawei Feng <[email protected]>
Date:   Wed Jul 29 12:24:18 2026 -0400

    octeontx2-pf: fix SQB pointer leak on init failure
    
    [ Upstream commit 62e7df6d042aeebd5efb581074e28865c04477be ]
    
    otx2_init_hw_resources() initializes SQ aura and pool resources before
    several later setup steps. On failure, err_free_sq_ptrs only frees SQB
    pages, leaving the per-SQ sqb_ptrs arrays behind.
    
    Use otx2_free_sq_res() for the SQ unwind path and let it free sqb_ptrs
    even when sq->sqe has not been allocated yet.
    
    The bug was first flagged by an experimental analysis tool we are
    developing for kernel memory-management bugs while analyzing
    v6.13-rc1. The tool is still under development and is not yet publicly
    available. Manual inspection confirms that the bug is still
    present in v7.1.1.
    
    An x86_64 allyesconfig build showed no new warnings. As we do not have an
    OcteonTX2 PF device and the corresponding AF mailbox setup to test with,
    no runtime testing was able to be performed.
    
    Fixes: caa2da34fd25 ("octeontx2-pf: Initialize and config queues")
    Cc: [email protected]
    Reviewed-by: Ratheesh Kannoth <[email protected]>
    Signed-off-by: Dawei Feng <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
octeontx2-vf: clear stale mailbox IRQ state before request_irq() [+ + +]
Author: Runyu Xiao <[email protected]>
Date:   Thu Jul 23 07:36:55 2026 -0400

    octeontx2-vf: clear stale mailbox IRQ state before request_irq()
    
    [ Upstream commit 0b352f04b9be2c83c0240aa6dae7257fefa90464 ]
    
    otx2vf_register_mbox_intr() currently installs the VF mailbox IRQ
    handler before clearing stale mailbox interrupt state. The code then says
    that local interrupt bits should be cleared first to avoid spurious
    interrupts, but that clear still happens only after request_irq() has
    already made the handler reachable.
    
    A running system can reach this during VF mailbox interrupt registration
    while stale or latched RVU_VF_INT state is still present. If delivery
    happens in the request_irq()-to-clear window,
    otx2vf_vfaf_mbox_intr_handler() can run before local quiesce and touch
    the same vf->mbox and vf->mbox_wq carrier that probe and teardown later
    reuse or destroy.
    
    Move the stale mailbox interrupt clear ahead of request_irq(), but keep
    interrupt enabling after the handler is installed. This closes the
    pre-clear early-IRQ window without creating a new enable-before-handler
    window.
    
    Fixes: 3184fb5ba96e ("octeontx2-vf: Virtual function driver support")
    Cc: [email protected]
    Signed-off-by: Runyu Xiao <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Reviewed-by: Ratheesh Kannoth <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
octeontx2: Annotate mmio regions as __iomem [+ + +]
Author: Subbaraya Sundeep <[email protected]>
Date:   Thu Jul 23 07:36:34 2026 -0400

    octeontx2: Annotate mmio regions as __iomem
    
    [ Upstream commit d0976b43956ee8c8bd093223df9115bfcf63dfe5 ]
    
    This patch removes unnecessary typecasts by marking the
    mbox_regions array as __iomem since it is used to store
    pointers to memory-mapped I/O (MMIO) regions. Also simplified
    the call to readq() in PF driver by removing redundant type casts.
    
    Signed-off-by: Subbaraya Sundeep <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: f918554fb724 ("octeontx2-pf: clear stale mailbox IRQ state before request_irq()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
openrisc: signal: do not restore privileged SR bits on sigreturn [+ + +]
Author: Ali Ahmet Memis <[email protected]>
Date:   Fri Aug 7 23:42:30 2026 +0000

    openrisc: signal: do not restore privileged SR bits on sigreturn
    
    commit 32ef1b30ad736519f7a207bcc2986f3d4129d972 upstream.
    
    restore_sigcontext() copies the whole supervision register (SR) from the
    signal frame and only clears SPR_SR_SM before the value is reloaded into
    the hardware SR (through ESR and l.rfe) on the return to user space.  All
    other SR bits are left under user control.
    
    An unprivileged task can thus return from a signal handler through a
    crafted sigframe that clears SPR_SR_DME.  With the data MMU disabled the
    CPU performs no translation or protection on data accesses, so the task
    gains read and write access to arbitrary physical memory, a local
    privilege escalation.  SPR_SR_IME, SPR_SR_SUMRA, SPR_SR_LEE, SPR_SR_EPH
    and the cache-enable bits are exposed the same way.  The ptrace GPR regset
    already refuses any change to SR for exactly this reason.
    
    Restore only the arithmetic flag bits (F, CY, OV) from the signal frame
    and take every privileged control bit from the SR the kernel saved on
    signal entry.
    
    Verified with qemu-system-or1k -M or1k-sim: before this change an
    unprivileged PoC clears SPR_SR_DME in rt_sigreturn and writes a marker to
    physical address 0x03000000 (beyond the kernel's mem=32M); afterwards the
    same PoC receives SIGSEGV and physical memory is unchanged.
    
    Fixes: ac689eb7f9d4 ("OpenRISC: Signal handling")
    Cc: [email protected]
    Signed-off-by: Ali Ahmet Memis <[email protected]>
    Signed-off-by: Stafford Horne <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ovl: use linked upper dentry in copy-up tmpfile [+ + +]
Author: Souvik Banerjee <[email protected]>
Date:   Mon Jul 27 15:51:02 2026 -0400

    ovl: use linked upper dentry in copy-up tmpfile
    
    [ Upstream commit e348eecd4d8fa8d18a5157ff59f7be1dc59c5928 ]
    
    ovl_copy_up_tmpfile() stores the disconnected O_TMPFILE dentry as the
    overlay's upper dentry reference via ovl_inode_update().  vfs_tmpfile()
    allocated this dentry via d_alloc(parentpath->dentry, &slash_name), so
    d_name is "/" and d_parent is c->workdir.  Local upper filesystems
    (ext4, btrfs, xfs, ...) immediately rename it to "#<inum>" via
    d_mark_tmpfile() inside their ->tmpfile() op; FUSE and virtiofs do
    not, so both fields stay that way.  Neither identifies the destination
    directory and filename where ovl_do_link() actually linked the file.
    
    When the upper filesystem implements ->d_revalidate() (e.g. FUSE or
    virtiofs), ovl_revalidate_real() calls it with the dentry's parent
    inode and a snapshot of d_name.  The server tries to look up "/" inside
    c->workdir, fails, and overlayfs reports -ESTALE.
    
    This causes persistent ESTALE errors for any file that was copied up via
    the tmpfile path, breaking dpkg, apt, and other tools that do
    rename-over-existing on overlayfs with a FUSE/virtiofs upper.
    
    Before commit 6b52243f633e ("ovl: fold copy-up helpers into callers"),
    the tmpfile copy-up path used a dedicated helper ovl_link_tmpfile()
    that captured the linked destination dentry returned by ovl_do_link():
    
        err = ovl_do_link(temp, udir, upper);
        ...
        if (!err)
            *newdentry = dget(upper);
    
    and published it via ovl_inode_update(d_inode(c->dentry), newdentry).
    The fold inlined ovl_do_link() into ovl_copy_up_tmpfile() but dropped
    the dget(upper) capture, and rewrote the publish line as
    ovl_inode_update(d_inode(c->dentry), dget(temp)) — where temp is the
    disconnected O_TMPFILE dentry.
    
    Fix by keeping a reference to the linked destination dentry after
    ovl_do_link() succeeds, and publishing that dentry at the existing
    ovl_inode_update() call site.  The non-tmpfile/workdir path continues to
    publish the renamed temporary dentry.
    
    Reproducer:
      - Mount overlayfs with virtiofs (or a FUSE fs whose server advertises
        FUSE_TMPFILE) as upper
      - Run: dpkg -i <any .deb>
      - Observe: "error installing new file '...': Stale file handle"
    
    Fixes: 6b52243f633e ("ovl: fold copy-up helpers into callers")
    Cc: [email protected] # v4.20+
    Signed-off-by: Souvik Banerjee <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Amir Goldstein <[email protected]>
    Reviewed-by: Miklos Szeredi <[email protected]>
    Signed-off-by: Christian Brauner (Amutable) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
PCI: Add pci_find_vsec_capability() to find a specific VSEC [+ + +]
Author: Gustavo Pimentel <[email protected]>
Date:   Sun Jul 26 17:28:16 2026 -0400

    PCI: Add pci_find_vsec_capability() to find a specific VSEC
    
    [ Upstream commit c124fd9a969acaa83f6dfa5e160a99a500af9e4b ]
    
    Add pci_find_vsec_capability() to locate a Vendor-Specific Extended
    Capability with the specified VSEC ID.
    
    The Vendor-Specific Extended Capability (VSEC) allows one or more
    proprietary capabilities defined by the vendor which aren't standard
    or shared between vendors.
    
    Signed-off-by: Gustavo Pimentel <[email protected]>
    Acked-by: Bjorn Helgaas <[email protected]>
    Link: https://lore.kernel.org/r/d89506834fb11c6fa0bd5d515c0dd55b13ac6958.1613674948.git.gustavo.pimentel@synopsys.com
    Signed-off-by: Vinod Koul <[email protected]>
    Stable-dep-of: 8ffba0171c6b ("dmaengine: dw-edma: Add spinlock to protect DONE_INT_MASK and ABORT_INT_MASK")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
powerpc/pseries: lparcfg - fix kbuf[] underflow [+ + +]
Author: George Wilson <[email protected]>
Date:   Fri Aug 7 11:59:00 2026 -0500

    powerpc/pseries: lparcfg - fix kbuf[] underflow
    
    commit fb442a6673ff1046bf67754957d95880fdb394b5 upstream.
    
    In lparcfg_write(), a count of 0 results in kbuf[] being indexed at -1.
    Check for count == 0 in the existing check for count > sizeof(kbuf) and
    return -EINVAL if true.
    
    Fixes: 74422e2b1939 ("powerpc/pseries: Remove VLA from lparcfg_write()")
    Acked-by: Nayna Jain <[email protected]>
    Tested-by: R Nageswara Sastry <[email protected]>
    Cc: [email protected] # 4.20
    Signed-off-by: George Wilson <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

powerpc/pseries: pci - logic bug [+ + +]
Author: George Wilson <[email protected]>
Date:   Fri Aug 7 11:58:36 2026 -0500

    powerpc/pseries: pci - logic bug
    
    commit 649c10bff5cb7a514bf299094833ec8c9190aac3 upstream.
    
    The checks on num_vfs in pseries_pci_sriov_enable() are ANDed where OR
    was apparently intended.  Change it to OR.
    
    Fixes: 9a7f6b438664 ("powerpc/pseries/pci: Associate PEs to VFs in configure SR-IOV")
    Acked-by: Nayna Jain <[email protected]>
    Tested-by: R Nageswara Sastry <[email protected]>
    Cc: [email protected] # 4.16
    Signed-off-by: George Wilson <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
RDMA/rtrs-srv: Bound RDMA-Write length to chunk size in rdma_write_sg [+ + +]
Author: Zhenhao Wan <[email protected]>
Date:   Wed Jul 22 06:42:01 2026 -0400

    RDMA/rtrs-srv: Bound RDMA-Write length to chunk size in rdma_write_sg
    
    [ Upstream commit 963af8d97a8c6a117134a8d0db1415e0489200b1 ]
    
    When the server answers an RTRS READ, rdma_write_sg() builds the source
    scatter/gather entry for the IB_WR_RDMA_WRITE that returns data to the
    peer. Its length is taken directly from the wire descriptor:
    
      plist->length = le32_to_cpu(id->rd_msg->desc[0].len);
    
    rd_msg points into the chunk buffer that the remote peer filled via
    RDMA-WRITE-WITH-IMM (rtrs_srv_rdma_done() -> process_io_req() ->
    process_read()), so desc[0].len is attacker-controlled and, before this
    change, was only rejected when zero. The source address is the fixed
    chunk start (dma_addr[msg_id]) and the source lkey is the PD-wide
    local_dma_lkey, which is not tied to the chunk's MR mapping, so the verbs
    layer does not constrain the transfer length to max_chunk_size. msg_id
    and off are bounded against queue_depth and max_chunk_size in
    rtrs_srv_rdma_done(), but desc[0].len is a separate field that was not
    checked against the chunk size.
    
    A peer that advertises desc[0].len larger than max_chunk_size can make
    the posted RDMA write read past the chunk's mapped region. The resulting
    behaviour depends on the IOMMU configuration: with no IOMMU or in
    passthrough mode the read may extend into memory adjacent to the chunk
    and be returned to the peer, which can disclose host memory; with a
    translating IOMMU the out-of-range access is expected to fault and abort
    the connection. In either case the transfer exceeds what the protocol
    permits and is driven by a remote peer.
    
    Reject a descriptor length above max_chunk_size, mirroring the existing
    off >= max_chunk_size bound in rtrs_srv_rdma_done(). Legitimate clients
    do not exceed it: the client sets desc[0].len to its MR length, which is
    capped at the negotiated max_io_size (max_chunk_size - MAX_HDR_SIZE).
    
    Fixes: 9cb837480424 ("RDMA/rtrs: server: main functionality")
    Link: https://patch.msgid.link/r/[email protected]
    Reported-by: Yuhao Jiang <[email protected]>
    Cc: [email protected]
    Signed-off-by: Zhenhao Wan <[email protected]>
    Reviewed-by: Md Haris Iqbal <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ring-buffer: Remove jump to out label in ring_buffer_swap_cpu() [+ + +]
Author: Steven Rostedt <[email protected]>
Date:   Tue May 27 14:57:53 2025 -0400

    ring-buffer: Remove jump to out label in ring_buffer_swap_cpu()
    
    [ Upstream commit f115d2b70bff2665f67fa8e8dc5ed9452b696c44 ]
    
    The function ring_buffer_swap_cpu() has a bunch of jumps to the label out
    that simply returns "ret". There's no reason to jump to a label that
    simply returns a value. Just return directly from there.
    
    This goes back to almost the beginning when commit 8aabee573dff
    ("ring-buffer: remove unneeded get_online_cpus") was introduced. That
    commit removed a put_online_cpus() from that label, but never updated all
    the jumps to it that now no longer needed to do anything but return a
    value.
    
    Cc: Mathieu Desnoyers <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Reviewed-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Stable-dep-of: f27bdc43077e ("ring-buffer: Use current_context for safe per-CPU buffer swap")
    Signed-off-by: Sasha Levin <[email protected]>

ring-buffer: Use current_context for safe per-CPU buffer swap [+ + +]
Author: Tengda Wu <[email protected]>
Date:   Mon Aug 3 00:56:39 2026 +0000

    ring-buffer: Use current_context for safe per-CPU buffer swap
    
    [ Upstream commit f27bdc43077e4fcb5557dfc315ee8d91e741f483 ]
    
    The ring_buffer_swap_cpu() function currently checks the per-CPU
    committing counter to determine if a buffer is actively being written to
    before performing the swap. However, there exists a race window where
    this check can be bypassed:
    
        ring_buffer_lock_reserve
            cpu_buffer = buffer->buffers[cpu];       // cpu_buffer_a
            rb_reserve_next_event
                rb_start_commit // inc committing
                if (unlikely(READ_ONCE(cpu_buffer->buffer) != buffer)) {...}
                __rb_reserve_next
                    rb_move_tail
                        rb_end_commit(cpu_buffer);   // dec committing => 0
                        /* interrupt hits here, successfully swaps! */
                        local_inc(&cpu_buffer->committing);
    
        ring_buffer_unlock_commit
            cpu_buffer = buffer->buffers[cpu];      // cpu_buffer_b
            rb_commit
                rb_end_commit
                RB_WARN_ON(cpu_buffer, !local_read(&cpu_buffer->committing))
                                                    // triggers warning
    
    The committing counter can temporarily drop to 0 during a single write
    operation (within rb_move_tail), creating a window where swap can
    succeed even though the write is still in progress. This leads to
    inconsistent buffer state and triggers the RB_WARN_ON in rb_commit().
    
    Replace the committing counter check with current_context checks, which
    are set at the entry of ring_buffer_lock_reserve() and remain valid
    throughout the entire write operation, providing a reliable indicator of
    buffer busy state during swap.
    
    Cc: [email protected]
    Fixes: 4239c38fe0b3 ("ring-buffer: Process commits whenever moving to a new page.")
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Tengda Wu <[email protected]>
    Signed-off-by: Steven Rostedt <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
rxrpc: Fix notification vs call-release vs recvmsg [+ + +]
Author: David Howells <[email protected]>
Date:   Wed Jul 22 19:21:32 2026 -0400

    rxrpc: Fix notification vs call-release vs recvmsg
    
    [ Upstream commit 2fd895842d49c23137ae48252dd211e5d6d8a3ed ]
    
    When a call is released, rxrpc takes the spinlock and removes it from
    ->recvmsg_q in an effort to prevent racing recvmsg() invocations from
    seeing the same call.  Now, rxrpc_recvmsg() only takes the spinlock when
    actually removing a call from the queue; it doesn't, however, take it in
    the lead up to that when it checks to see if the queue is empty.  It *does*
    hold the socket lock, which prevents a recvmsg/recvmsg race - but this
    doesn't prevent sendmsg from ending the call because sendmsg() drops the
    socket lock and relies on the call->user_mutex.
    
    Fix this by firstly removing the bit in rxrpc_release_call() that dequeues
    the released call and, instead, rely on recvmsg() to simply discard
    released calls (done in a preceding fix).
    
    Secondly, rxrpc_notify_socket() is abandoned if the call is already marked
    as released rather than trying to be clever by setting both pointers in
    call->recvmsg_link to NULL to trick list_empty().  This isn't perfect and
    can still race, resulting in a released call on the queue, but recvmsg()
    will now clean that up.
    
    Fixes: 17926a79320a ("[AF_RXRPC]: Provide secure RxRPC sockets for use by userspace and kernel both")
    Signed-off-by: David Howells <[email protected]>
    Reviewed-by: Jeffrey Altman <[email protected]>
    cc: Marc Dionne <[email protected]>
    cc: Junvyyang, Tencent Zhuque Lab <[email protected]>
    cc: LePremierHomme <[email protected]>
    cc: Simon Horman <[email protected]>
    cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: e66f8f32f501 ("rxrpc: Fix socket notification race")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

rxrpc: Fix recv-recv race of completed call [+ + +]
Author: David Howells <[email protected]>
Date:   Wed Jul 22 19:21:31 2026 -0400

    rxrpc: Fix recv-recv race of completed call
    
    [ Upstream commit 962fb1f651c2cf2083e0c3ef53ba69e3b96d3fbc ]
    
    If a call receives an event (such as incoming data), the call gets placed
    on the socket's queue and a thread in recvmsg can be awakened to go and
    process it.  Once the thread has picked up the call off of the queue,
    further events will cause it to be requeued, and once the socket lock is
    dropped (recvmsg uses call->user_mutex to allow the socket to be used in
    parallel), a second thread can come in and its recvmsg can pop the call off
    the socket queue again.
    
    In such a case, the first thread will be receiving stuff from the call and
    the second thread will be blocked on call->user_mutex.  The first thread
    can, at this point, process both the event that it picked call for and the
    event that the second thread picked the call for and may see the call
    terminate - in which case the call will be "released", decoupling the call
    from the user call ID assigned to it (RXRPC_USER_CALL_ID in the control
    message).
    
    The first thread will return okay, but then the second thread will wake up
    holding the user_mutex and, if it sees that the call has been released by
    the first thread, it will BUG thusly:
    
            kernel BUG at net/rxrpc/recvmsg.c:474!
    
    Fix this by just dequeuing the call and ignoring it if it is seen to be
    already released.  We can't tell userspace about it anyway as the user call
    ID has become stale.
    
    Fixes: 248f219cb8bc ("rxrpc: Rewrite the data and ack handling code")
    Reported-by: Junvyyang, Tencent Zhuque Lab <[email protected]>
    Signed-off-by: David Howells <[email protected]>
    Reviewed-by: Jeffrey Altman <[email protected]>
    cc: LePremierHomme <[email protected]>
    cc: Marc Dionne <[email protected]>
    cc: Simon Horman <[email protected]>
    cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: e66f8f32f501 ("rxrpc: Fix socket notification race")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

rxrpc: Fix socket notification race [+ + +]
Author: David Howells <[email protected]>
Date:   Wed Jul 22 19:21:33 2026 -0400

    rxrpc: Fix socket notification race
    
    [ Upstream commit e66f8f32f50116670dbbee5bc9e692cd2cd0c8f8 ]
    
    There's a race between rxrpc_recvmsg() and rxrpc_notify_socket(), whereby
    the latter's attempt to avoid disabling interrupts and taking the socket's
    recvmsg_lock if the call is already queued may happen simultaneously with
    the former's discarding of a call that has nothing queued.
    
    Fix this by removing the shortcut.  Note that this only affects userspace's
    use of AF_RXRPC; the AFS filesystem driver doesn't use the socket queue.
    
    Fixes: 248f219cb8bc ("rxrpc: Rewrite the data and ack handling code")
    Link: https://sashiko.dev/#/patchset/20260616155749.2125907-1-dhowells%40redhat.com
    Signed-off-by: David Howells <[email protected]>
    cc: Marc Dionne <[email protected]>
    cc: Jeffrey Altman <[email protected]>
    cc: Simon Horman <[email protected]>
    cc: [email protected]
    cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

rxrpc: serialize kernel accept preallocation with socket teardown [+ + +]
Author: Li Daming <[email protected]>
Date:   Wed Jul 22 13:29:43 2026 -0400

    rxrpc: serialize kernel accept preallocation with socket teardown
    
    [ Upstream commit dc175389b18c29a5303ee83169ec653adfae3e17 ]
    
    rxrpc_kernel_charge_accept() reads rx->backlog without any
    socket/backlog synchronization and passes that raw pointer into
    rxrpc_service_prealloc_one(). A concurrent rxrpc_discard_prealloc()
    sets rx->backlog = NULL and frees the backlog rings, so a kernel
    preallocation worker can keep using a freed struct rxrpc_backlog
    while updating *_backlog_head/tail and array slots.
    
    Serialize the state check and backlog lookup with the socket lock,
    and reject kernel preallocation once teardown has disabled
    listening or discarded the service backlog.
    
    Fixes: 00e907127e6f ("rxrpc: Preallocate peers, conns and calls for incoming service requests")
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Signed-off-by: Li Daming <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: David Howells <[email protected]>
    cc: Marc Dionne <[email protected]>
    cc: Jeffrey Altman <[email protected]>
    cc: Simon Horman <[email protected]>
    cc: [email protected]
    cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ kept 6.1's extra user_attach_call argument in the rxrpc_service_prealloc_one() call ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
s390/qeth: validate user buffer length in SNMP and ARP query ioctls [+ + +]
Author: Hidayath Khan <[email protected]>
Date:   Thu Jul 30 16:22:16 2026 +0200

    s390/qeth: validate user buffer length in SNMP and ARP query ioctls
    
    commit d141f087b1af656f055d7c5793a3e87817ba0bbe upstream.
    
    qeth_snmp_command() and qeth_l3_arp_query() allocate a buffer sized by
    a user-supplied length (udata_len) without checking a lower bound, then
    set udata_offset to a fixed non-zero value and pass both to a reply
    callback. The callback bounds-checks the copy with
    
            if ((udata_len - udata_offset) < len)
    
    Both fields are u32, so a udata_len smaller than udata_offset makes the
    subtraction wrap and the check pass, and the following memcpy() writes
    past the allocation. A udata_len of 0 also yields ZERO_SIZE_PTR from
    kzalloc(), which the existing NULL check does not catch.
    
    Reject buffers smaller than udata_offset before allocating, so the
    callback subtraction can no longer underflow.
    
    Fixes: 4a71df50047f ("qeth: new qeth device driver")
    Cc: [email protected]
    Reviewed-by: Alexandra Winter <[email protected]>
    Signed-off-by: Hidayath Khan <[email protected]>
    Reviewed-by: Joe Damato <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
s390/vfio_ccw: Fix out of bounds check on CCW array [+ + +]
Author: Eric Farman <[email protected]>
Date:   Tue Jul 28 05:30:15 2026 +0200

    s390/vfio_ccw: Fix out of bounds check on CCW array
    
    commit a005b7f1a491ffda61bff0fd0f6548f8986fb977 upstream.
    
    The routine ccwchain_calc_length() counts the number of channel
    command words (CCWs) that are chained together in a single channel
    program, and rejects anything larger than CCWCHAIN_LEN_MAX (256) CCWs.
    
    The loop itself is "do..while (count < 257)", and while the logic in
    is_cpa_within_range() correctly adjusts between the 0-index array of
    CCWs and the count of CCWs starting at 1, this means it would look
    at a possible 257th CCW before ending the loop and (correctly)
    returning an error.
    
    Fix this by restructuring the loop to break as soon as 256 CCWs
    (thus indexes 0-255) are examined, without looking at memory
    outside the range.
    
    Fixes: 0a19e61e6d4c ("vfio: ccw: introduce channel program interfaces")
    Cc: [email protected]
    Reviewed-by: Matthew Rosato <[email protected]>
    Signed-off-by: Eric Farman <[email protected]>
    Signed-off-by: Christian Borntraeger <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sc16is7xx: Properly resume TX after stop [+ + +]
Author: Tomasz Moń <[email protected]>
Date:   Thu Aug 6 23:34:44 2026 -0400

    sc16is7xx: Properly resume TX after stop
    
    [ Upstream commit cc4c1d05eb10c3ad4c6315f1897bc56b1e7429aa ]
    
    sc16is7xx_stop_tx() clears THRI bit and thus disables THRI interrupt.
    This makes it possible for transmission to cease indefinitely when more
    than 64 characters are being sent.
    
    The sc16is7xx_handle_tx() call executed by sc16is7xx_tx_proc() can send
    up to FIFO length (64) characters. If more characters are written to the
    output buffer, then the THRI interrupt is needed.
    
    Solve the issue by enabling THRI interrupt in sc16is7xx_tx_proc().
    
    Signed-off-by: Tomasz Moń <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: af071d9e07e5 ("serial: sc16is7xx: implement gpio get_direction() callback")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sched/psi: Shut down rtpoll_timer in psi_cgroup_free() [+ + +]
Author: Tejun Heo <[email protected]>
Date:   Wed Aug 19 07:14:59 2026 -0400

    sched/psi: Shut down rtpoll_timer in psi_cgroup_free()
    
    [ Upstream commit 5457025fa8ca3c0d2732109513de839e3e797190 ]
    
    psi_schedule_rtpoll_work() is called locklessly from the scheduler hotpath
    and can race psi_trigger_destroy() taking down the last rtpoll trigger under
    rtpoll_trigger_lock:
    
      psi_schedule_rtpoll_work()        psi_trigger_destroy()
    
      rcu_read_lock();
      task = rcu_dereference(rtpoll_task);
                                        rcu_assign_pointer(rtpoll_task, NULL);
                                        timer_delete(&rtpoll_timer);
      mod_timer(&rtpoll_timer, ...);
      rcu_read_unlock();
                                        synchronize_rcu();
                                        kthread_stop(task_to_destroy);
    
    The group can then be freed with the re-armed timer still pending, and
    poll_timer_fn() runs on freed memory.
    
    461daba06bdc ("psi: eliminate kthread_worker from psi trigger scheduling
    mechanism") deleted the timer synchronously after the synchronize_rcu(),
    which prevented this but raced trigger creation instead: the deletion could
    cancel the timer that a new trigger set armed during the grace period and,
    as creation also reinitialized the timer at the time, corrupt it.
    8f91efd870ea ("psi: Fix race between psi_trigger_create/destroy") moved the
    initialization into group_init() and the deletion into the locked section,
    trading the creation races for the window above.
    
    Neither placement in the destruction path works. A pending timer firing
    while the group is alive is harmless though. poll_timer_fn() just wakes the
    rtpoll waitqueue and doesn't re-arm itself. Bind the timer to the group's
    lifetime instead and shut it down in psi_cgroup_free(). Nothing can arm it
    by then. timer_shutdown_sync() because the timer is never armed again.
    
    Fixes: 8f91efd870ea ("psi: Fix race between psi_trigger_create/destroy")
    Cc: [email protected] # v5.10+
    Reported-by: Sashiko AI <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Tejun Heo <[email protected]>
    Acked-by: Johannes Weiner <[email protected]>
    Tested-by: Matt Fleming <[email protected]>
    Acked-by: Suren Baghdasaryan <[email protected]>
    [ Adapted `cgroup->psi->` to embedded `cgroup->psi.`, `rtpoll_timer` to `poll_timer`, and `timer_shutdown_sync()` to `timer_delete_sync()`. ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
scsi: lpfc: Fix memory leak in lpfc_sli4_driver_resource_setup() [+ + +]
Author: Abdun Nihaal <[email protected]>
Date:   Mon Jul 27 15:50:55 2026 -0400

    scsi: lpfc: Fix memory leak in lpfc_sli4_driver_resource_setup()
    
    [ Upstream commit 1bd28625e25be549ee7c47532e7c3ef91c682410 ]
    
    The memory allocated for mboxq using mempool_alloc() is not freed in
    some of the early exit error paths. Fix that by moving the
    mempool_free() call to an earlier point after last use.
    
    Fixes: d79c9e9d4b3d ("scsi: lpfc: Support dynamic unbounded SGL lists on G7 hardware.")
    Cc: [email protected]
    Signed-off-by: Abdun Nihaal <[email protected]>
    Reviewed-by: Justin Tee <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: scsi_debug: Fix REPORT ZONES alloc_len underflow OOB write [+ + +]
Author: Ibrahim Hashimov <[email protected]>
Date:   Wed Aug 12 05:11:53 2026 -0400

    scsi: scsi_debug: Fix REPORT ZONES alloc_len underflow OOB write
    
    resp_report_zones() sizes the reply buffer from the CDB allocation
    length. The v3 fix rounds alloc_len up with ALIGN() before deriving the
    descriptor count:
    
            rep_max_zones = (ALIGN((u64)alloc_len, RZONES_DESC_HD) -
                             RZONES_DESC_HD) >> ilog2(RZONES_DESC_HD);
            arr_len = (u64)RZONES_DESC_HD * (rep_max_zones + 1);
    
    For alloc_len in 0xFFFFFFC1..0xFFFFFFFF, ALIGN() rounds up to
    0x100000000, so arr_len is 4 GB. On 32-bit, kzalloc()'s size_t is 32-bit
    and truncates 0x100000000 to 0; kzalloc(0) returns ZERO_SIZE_PTR, which
    passes the !arr check, and desc = arr + 64 is then dereferenced in the
    loop -> out-of-bounds write / panic.
    
    Clamp rep_max_zones to devip->nr_zones. The loop already stops at
    sdebug_capacity (after nr_zones zones), so a report can never hold more
    than nr_zones descriptors; the clamp does not change the report, it only
    bounds arr_len to (nr_zones + 1) * RZONES_DESC_HD, a real device
    property that can never reach 0x100000000.
    
    Fixes: 7db0e0c8190a ("scsi: scsi_debug: Fix buffer size of REPORT ZONES command")
    Suggested-by: Damien Le Moal <[email protected]>
    Cc: [email protected]
    Signed-off-by: Ibrahim Hashimov <[email protected]>
    Assisted-by: AuditCode-AI:2026.07
    Reviewed-by: Damien Le Moal <[email protected]>
    Reviewed-by: Bart Van Assche <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    [ Adjusted for 5.10: resp_report_zones() here predates commit 4a5fc1c6d752
      ("scsi: scsi_debug: Add gap zone support"), so it still computes
    
            max_zones = devip->nr_zones - (zs_lba >> devip->zsize_shift);
    
      and bounds the descriptor loop with it. Keep that existing, tighter
      clamp instead of introducing a second one against devip->nr_zones:
      max_zones is by construction <= devip->nr_zones and is the actual
      number of descriptors the loop can emit, so it satisfies the upstream
      requirement that arr_len be bounded by a real device property while
      leaving the reported zone list unchanged.
    
      Without the fix 5.10 has the same class of bug from the other end of
      the range: for alloc_len in 1..63 the unsigned (alloc_len - 64)
      underflows, kzalloc(alloc_len) returns a sub-64-byte buffer, and both
      the report header at arr + 0 and desc = arr + 64 are written out of
      bounds. Sizing the allocation from rep_max_zones rather than from
      alloc_len fixes that too. ]
    (cherry picked from commit 93dde0bf2f39a0f9f57fd610aa3201ce5b753433)
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: scsi_debug: Rename zone type constants [+ + +]
Author: Damien Le Moal <[email protected]>
Date:   Wed Aug 12 05:11:52 2026 -0400

    scsi: scsi_debug: Rename zone type constants
    
    [ Upstream commit 35dbe2b9a7b0c92777c855c6a2cca8390f4c166b ]
    
    Rename the scsi_debug zone type constants to prevent a conflict with the
    ZBC_ZONE_TYPE_GAP constant from include/scsi/scsi_proto.h.
    
    Link: https://lore.kernel.org/r/[email protected]
    Cc: Douglas Gilbert <[email protected]>
    Acked-by: Douglas Gilbert <[email protected]>
    Signed-off-by: Damien Le Moal <[email protected]>
    [ bvanassche: Extracted these changes from a larger patch ]
    Signed-off-by: Bart Van Assche <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Stable-dep-of: 93dde0bf2f39 ("scsi: scsi_debug: Fix REPORT ZONES alloc_len underflow OOB write")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: sd: sd_zbc: Improve source code documentation [+ + +]
Author: Bart Van Assche <[email protected]>
Date:   Wed Aug 12 05:11:49 2026 -0400

    scsi: sd: sd_zbc: Improve source code documentation
    
    [ Upstream commit aa96bfb4caff59c93f0637092efe3a714cab0fe6 ]
    
    Add several kernel-doc headers. Declare input arrays const. Specify the
    array size in function declarations.
    
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Damien Le Moal <[email protected]>
    Reviewed-by: Himanshu Madhani <[email protected]>
    Acked-by: Douglas Gilbert <[email protected]>
    Signed-off-by: Bart Van Assche <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Stable-dep-of: 93dde0bf2f39 ("scsi: scsi_debug: Fix REPORT ZONES alloc_len underflow OOB write")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: sd: sd_zbc: Return early in sd_zbc_check_zoned_characteristics() [+ + +]
Author: Damien Le Moal <[email protected]>
Date:   Wed Aug 12 05:11:51 2026 -0400

    scsi: sd: sd_zbc: Return early in sd_zbc_check_zoned_characteristics()
    
    [ Upstream commit 60caf3758103b8edc90724ba781ff119f739162a ]
    
    Return early in sd_zbc_check_zoned_characteristics() for host-aware
    disks. This patch does not change any functionality but makes a later patch
    easier to read.
    
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Himanshu Madhani <[email protected]>
    Acked-by: Douglas Gilbert <[email protected]>
    Signed-off-by: Damien Le Moal <[email protected]>
    [ bvanassche: extracted this change from a larger patch ]
    Signed-off-by: Bart Van Assche <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Stable-dep-of: 93dde0bf2f39 ("scsi: scsi_debug: Fix REPORT ZONES alloc_len underflow OOB write")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: sd: sd_zbc: Use logical blocks as unit when querying zones [+ + +]
Author: Damien Le Moal <[email protected]>
Date:   Wed Aug 12 05:11:50 2026 -0400

    scsi: sd: sd_zbc: Use logical blocks as unit when querying zones
    
    [ Upstream commit 43af5da09efb8abe450ec859d3063adeb7d1eb54 ]
    
    When querying zones, track the position in logical blocks instead of in
    sectors. This change slightly simplifies sd_zbc_report_zones().
    
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Himanshu Madhani <[email protected]>
    Acked-by: Douglas Gilbert <[email protected]>
    Signed-off-by: Damien Le Moal <[email protected]>
    [ bvanassche: extracted this change from a larger patch ]
    Signed-off-by: Bart Van Assche <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Stable-dep-of: 93dde0bf2f39 ("scsi: scsi_debug: Fix REPORT ZONES alloc_len underflow OOB write")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: target: Bound PR-OUT TransportID parsing to the received buffer [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Mon Jul 27 16:59:51 2026 -0400

    scsi: target: Bound PR-OUT TransportID parsing to the received buffer
    
    [ Upstream commit d04a179085c262c9ed577d0a4cbc6482ff1fd9a3 ]
    
    core_scsi3_decode_spec_i_port() and core_scsi3_emulate_register_and_move()
    hand the raw PERSISTENT RESERVE OUT parameter buffer to
    target_parse_pr_out_transport_id() without telling it how many bytes are
    valid.  For an iSCSI TransportID (FORMAT CODE 01b),
    iscsi_parse_pr_out_transport_id() locates the ",i,0x" ISID separator with
    an unbounded strstr() (and on the error path prints the name with a further
    unbounded "%s").  An initiator can submit a TransportID whose iSCSI name
    contains neither a ",i,0x" substring nor a NUL terminator, filling the
    parameter list to its end, so the scan runs off the end of the buffer.
    
    When the parameter list spans more than one page the buffer is a multi-page
    vmap (transport_kmap_data_sg()), so the over-read walks into the trailing
    vmalloc guard page and oopses (KASAN: vmalloc-out-of-bounds in strstr).  It
    is reachable by any fabric that delivers a PR OUT to a device exported
    through an iSCSI TPG, including a guest via vhost-scsi.
    
    Pass the number of received bytes down to the parser and validate the iSCSI
    TransportID's own self-described length (ADDITIONAL LENGTH + 4) once, up
    front: reject it if it is below the spc4r17 minimum or larger than the
    received buffer, then bound the separator search, the ISID walk and the
    name copy by that length.  This is the length check the callers already
    perform after the parse (core_scsi3_decode_spec_i_port() compares tid_len
    against tpdl, core_scsi3_emulate_register_and_move() validates it against
    data_length), moved ahead of the scan.  Also drop the unbounded "%s" of the
    unterminated name.
    
    Add per-format explicit name-length checks before copying into i_str,
    rather than silently truncating with min_t: for FORMAT CODE 00b reject if
    the descriptor body (tid_len - 4 bytes) cannot fit in
    i_str[TRANSPORT_IQN_LEN]; for FORMAT CODE 01b reject if the name portion
    (from &buf[4] up to the separator) cannot fit.  Both checks make the bounds
    intent explicit at each format branch.
    
    While here, also reject a FORMAT CODE 01b TransportID whose ",i,0x"
    separator sits at the very end of the descriptor: that leaves an empty ISID
    and points the returned port nexus pointer at buf + tid_len, one past the
    descriptor, which the registration code (__core_scsi3_locate_pr_reg(),
    __core_scsi3_alloc_registration()) then dereferences as the ISID string --
    the same over-read of the parameter buffer for a malformed descriptor.
    
    Fixes: c66ac9db8d4a ("[SCSI] target: Add LIO target core v4.0.0-rc6")
    Cc: [email protected]
    Signed-off-by: Bryam Vargas <[email protected]>
    Reviewed-by: John Garry <[email protected]>
    Reviewed-by: David Disseldorp <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: target: core: Generate correct identifiers for PR OUT transport IDs [+ + +]
Author: Maurizio Lombardi <[email protected]>
Date:   Mon Jul 27 16:59:50 2026 -0400

    scsi: target: core: Generate correct identifiers for PR OUT transport IDs
    
    [ Upstream commit 6e0f6aa44b68335df404a2df955055f416b5f2aa ]
    
    Fix target_parse_pr_out_transport_id() to return a string representing
    the transport ID in a human-readable format (e.g., naa.xxxxxxxx...)  for
    various SCSI protocol types (SAS, FCP, SRP, SBP).
    
    Previously, the function returned a pointer to the raw binary buffer,
    which was incorrectly compared against human-readable strings, causing
    comparisons to fail.  Now, the function writes a properly formatted
    string into a buffer provided by the caller.  The output format depends
    on the transport protocol:
    
    * SAS: 64-bit identifier, "naa." prefix.
    * FCP: 64-bit identifier, colon separated values.
    * SBP: 64-bit identifier, no prefix.
    * SRP: 128-bit identifier, "0x" prefix.
    * iSCSI: IQN string.
    
    Signed-off-by: Maurizio Lombardi <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Dmitry Bogdanov <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Stable-dep-of: d04a179085c2 ("scsi: target: Bound PR-OUT TransportID parsing to the received buffer")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: target: core: pr: Initialize arrays at declaration time [+ + +]
Author: Chaitanya Kulkarni <[email protected]>
Date:   Mon Jul 27 16:59:49 2026 -0400

    scsi: target: core: pr: Initialize arrays at declaration time
    
    [ Upstream commit 4db6dfe62c5f76ce9eef28967c2e2000efde10d5 ]
    
    Avoids calling memset().
    
    Link: https://lore.kernel.org/r/[email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Mike Christie <[email protected]>
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Signed-off-by: Chaitanya Kulkarni <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Stable-dep-of: d04a179085c2 ("scsi: target: Bound PR-OUT TransportID parsing to the received buffer")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sctp: avoid auth_enable sysctl UAF during netns teardown [+ + +]
Author: Zhiling Zou <[email protected]>
Date:   Fri Aug 7 15:17:23 2026 -0400

    sctp: avoid auth_enable sysctl UAF during netns teardown
    
    [ Upstream commit f8d5e7846025f4ab15a461235f8ebae9094a361a ]
    
    proc_sctp_do_auth() updates the SCTP control socket after changing
    net.sctp.auth_enable. The handler gets the per-net SCTP state from
    ctl->data, so an already opened sysctl file can still target a network
    namespace while that namespace is being torn down.
    
    SCTP previously registered its per-net sysctls from sctp_defaults_init(),
    while the control socket is created later from sctp_ctrlsock_init(). This
    exposed a window during initialization where auth_enable was writable
    before net->sctp.ctl_sock existed, and a teardown window where auth_enable
    stayed writable after inet_ctl_sock_destroy() had released the control
    socket.
    
    Move the per-net SCTP sysctl registration into sctp_ctrlsock_init() after
    sctp_ctl_sock_init() succeeds, and unregister the sysctl table before
    destroying the control socket in sctp_ctrlsock_exit(). If sysctl
    registration fails after the control socket was created, destroy the
    control socket in the same init path.
    
    Make sctp_sysctl_net_unregister() tolerate a missing header and clear the
    saved pointer so init-error and exit paths can safely share the unregister
    helper.
    
    Fixes: 15649fd5415e ("sctp: sysctl: auth_enable: avoid using current->nsproxy")
    Cc: [email protected]
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Co-developed-by: Qi Tang <[email protected]>
    Signed-off-by: Qi Tang <[email protected]>
    Signed-off-by: Zhiling Zou <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Acked-by: Xin Long <[email protected]>
    Link: https://patch.msgid.link/390cd5e91ed60eea27b0b64d0468301a9e73b808.1784033357.git.roxy520tt@gmail.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ dropped the missing `l3mdev_accept` context block and kept 6.1's non-const `struct ctl_table *table` declaration ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
selinux: avoid sk_socket dereference in selinux_sctp_bind_connect() [+ + +]
Author: Tristan Madani <[email protected]>
Date:   Thu Jul 23 21:25:19 2026 -0400

    selinux: avoid sk_socket dereference in selinux_sctp_bind_connect()
    
    [ Upstream commit 56acfeb10019e200ab6787d01f8d7cbe0f01526f ]
    
    selinux_sctp_bind_connect() dereferences sk->sk_socket to pass a
    struct socket * to selinux_socket_bind() and
    selinux_socket_connect_helper().  However, when the hook is invoked
    from the ASCONF softirq path (sctp_process_asconf), there is no file
    reference guaranteeing that sk->sk_socket is non-NULL.  The setsockopt
    callers (bindx, connectx, set_primary, sendmsg connect) hold a file
    reference and are not affected.
    
    Both selinux_socket_bind() and selinux_socket_connect_helper()
    immediately resolve sock->sk, never using the struct socket * for
    anything else.  Refactor the inner logic into helpers that take a
    struct sock * directly so that selinux_sctp_bind_connect() never needs
    to touch sk->sk_socket at all.
    
    Cc: [email protected]
    Fixes: d452930fd3b9 ("selinux: Add SCTP support")
    Suggested-by: Stephen Smalley <[email protected]>
    Signed-off-by: Tristan Madani <[email protected]>
    Reviewed-by: Stephen Smalley <[email protected]>
    Tested-by: Stephen Smalley <[email protected]>
    Signed-off-by: Paul Moore <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

selinux: do not cancel a policy conversion that never started [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Fri Jul 31 12:44:09 2026 -0500

    selinux: do not cancel a policy conversion that never started
    
    commit e5c0235a3c4e9eb047a16cd02323fe4ecf2f570e upstream.
    
    sel_write_load() calls selinux_policy_cancel() when sel_make_policy_nodes()
    fails, and that helper dereferences the outgoing policy to cancel its
    sidtab conversion. On the first policy load there is no outgoing policy:
    security_load_policy() returns early for that case, before it converts
    anything, and state->policy is still NULL. A first load that fails while
    building the selinuxfs tree therefore takes a NULL dereference in
    selinux_policy_cancel(), reached from a write(2) to /sys/fs/selinux/load.
    
    Skip the cancel when there is no old policy, mirroring the check
    security_load_policy() already makes before it converts.
    
    Cc: [email protected]
    Fixes: 02a52c5c8c3b ("selinux: move policy commit after updating selinuxfs")
    Signed-off-by: Bryam Vargas <[email protected]>
    Acked-by: Stephen Smalley <[email protected]>
    Signed-off-by: Paul Moore <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

selinux: reject a class permission count below its inherited common [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Mon Jul 27 20:30:59 2026 -0500

    selinux: reject a class permission count below its inherited common
    
    commit 9a82dcd98b6e6e11cfd162410967951f12152528 upstream.
    
    security_get_permissions() maps an inherited common's permissions into
    an array sized by the class's own permissions.nprim, but class_read()
    takes that nprim verbatim from the policy image and never checks that it
    covers the common.  A class that inherits a common of N permissions while
    declaring a smaller nprim is accepted, and on load the common's
    permissions are written past the class-sized array -- an out-of-bounds
    heap write.
    
    Reject a class whose permission count is below its inherited common's.
    Well-formed policies, where the class count already includes the
    inherited permissions, are unaffected.
    
    Cc: [email protected]
    Fixes: 55fcf09b3fe4 ("selinux: add support for querying object classes and permissions from the running policy")
    Signed-off-by: Bryam Vargas <[email protected]>
    Acked-by: Stephen Smalley <[email protected]>
    Signed-off-by: Paul Moore <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

selinux: require every boolean value to be defined [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Fri Jul 31 12:44:12 2026 -0500

    selinux: require every boolean value to be defined
    
    commit a93d37a09b863810653f93d371fb197457d59deb upstream.
    
    p_bools.nprim comes from the policy image independently of how many
    booleans follow it, and cond_index_bool() fills bool_val_to_struct[] at
    value - 1, so a count larger than the values present leaves NULL entries.
    Every user of that array then walks it by index and dereferences each
    entry: cond_evaluate_expr() on the access-vector path,
    security_get_bools() and security_get_bool_value() behind selinuxfs, and
    security_set_bools(). A sparse class value is absorbed by
    policydb_class_isvalid() and its siblings; booleans have no such
    predicate, and no consumer that could use one.
    
    Reject a boolean value that no boolean defines, once, where the array is
    built. Conforming policies define every boolean they declare and are
    unaffected.
    
    Cc: [email protected]
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Bryam Vargas <[email protected]>
    Acked-by: Stephen Smalley <[email protected]>
    Signed-off-by: Paul Moore <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
serial: 8250_mid: Fix NULL function pointer dereference on DNV/ICX-D/SNR platforms [+ + +]
Author: Jiangshan Yi <[email protected]>
Date:   Thu Aug 6 13:48:29 2026 -0400

    serial: 8250_mid: Fix NULL function pointer dereference on DNV/ICX-D/SNR platforms
    
    [ Upstream commit 7fb13fd7e9a59a37cd911efff83abe19e3ee029d ]
    
    Commit b1b4efea05a5 ("serial: 8250_mid: Disable DMA for selected
    platforms") replaced the dnv_board setup and exit callbacks with
    PTR_IF(false, ...), which evaluates to NULL. However, the three call
    sites in mid8250_probe() and mid8250_remove() unconditionally
    dereference these function pointers without NULL checks, causing a NULL
    pointer dereference (kernel oops) on any Denverton (DNV), Ice Lake Xeon
    D (ICX-D/CDF), or Snowridge (SNR) platform.
    
    Fix this by adding the missing NULL checks before calling the setup and
    exit callbacks.
    
    Fixes: b1b4efea05a5 ("serial: 8250_mid: Disable DMA for selected platforms")
    Cc: stable <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Jiangshan Yi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

serial: 8250_mid: Remove unneeded test for ->setup() presence [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Thu Aug 6 13:48:28 2026 -0400

    serial: 8250_mid: Remove unneeded test for ->setup() presence
    
    [ Upstream commit 324facd1ccb353a213ea2c2785604f2507f79297 ]
    
    All supported platforms by this driver require ->setup() and ->exit().
    Remove unneeded test for ->setup() presence.
    
    Signed-off-by: Andy Shevchenko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: 7fb13fd7e9a5 ("serial: 8250_mid: Fix NULL function pointer dereference on DNV/ICX-D/SNR platforms")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

serial: max310x: implement gpio_chip::get_direction() [+ + +]
Author: Tapio Reijonen <[email protected]>
Date:   Wed Jul 22 12:08:00 2026 -0400

    serial: max310x: implement gpio_chip::get_direction()
    
    [ Upstream commit a483b1a91b33b7533280e7c3efd2bc1275caef18 ]
    
    It's strongly recommended for GPIO drivers to always implement the
    .get_direction() callback - even when the direction is tracked in
    software. The GPIO core emits a warning when the callback is missing
    and a user reads the direction of a line, e.g. via
    /sys/kernel/debug/gpio.
    
    The MAX310X keeps the GPIO direction in the GPIOCFG register (a set bit
    selects output), which the existing direction_input/output callbacks
    already program, so the current direction can be read back directly.
    
    Fixes: f65444187a66 ("serial: New serial driver MAX310X")
    Cc: stable <[email protected]>
    Signed-off-by: Tapio Reijonen <[email protected]>
    Reviewed-by: Linus Walleij <[email protected]>
    Reviewed-by: Bartosz Golaszewski <[email protected]>
    Reviewed-by: Hugo Villeneuve <[email protected]>
    Link: https://patch.msgid.link/20260615-b4-serial-max310x-gpio-get-direction-v2-1-4704ba2b181a@vaisala.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

serial: max310x: replace bare use of 'unsigned' with 'unsigned int' (checkpatch) [+ + +]
Author: Hugo Villeneuve <[email protected]>
Date:   Wed Jul 22 12:07:59 2026 -0400

    serial: max310x: replace bare use of 'unsigned' with 'unsigned int' (checkpatch)
    
    [ Upstream commit 79b69eb09cf5b6a77e621b2838b7e0d38113debb ]
    
    Fixes the following checkpatch warnings:
    
        WARNING: Prefer 'unsigned int' to bare use of 'unsigned'
    
    With this change, the affected functions now match the prototypes in
    struct gpio_chip.
    
    Reviewed-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Hugo Villeneuve <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: a483b1a91b33 ("serial: max310x: implement gpio_chip::get_direction()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

serial: sc16is7xx: Fill in rs485_supported [+ + +]
Author: Ilpo Järvinen <[email protected]>
Date:   Thu Aug 6 23:34:45 2026 -0400

    serial: sc16is7xx: Fill in rs485_supported
    
    [ Upstream commit 267913ecf73745ca3e8fc8282671b0b4f24df5fe ]
    
    Add information on supported serial_rs485 features.
    
    This driver does not support delay_rts_after_send but the pre-existing
    behavior is to return -EINVAL if delay_rts_after_send is non-zero. In
    contrast, other drivers that do not support delay_rts_after_send either
    zero delay_rts_after_send or do not care (leave the inaccurate value).
    As changing this would cause userspace visible impact, the change is
    not attempted here. But perhaps it should be still tried (maybe nobody
    finds that kind of API oddity significant)?
    
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: af071d9e07e5 ("serial: sc16is7xx: implement gpio get_direction() callback")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

serial: sc16is7xx: fix regression with GPIO configuration [+ + +]
Author: Hugo Villeneuve <[email protected]>
Date:   Thu Aug 6 23:34:47 2026 -0400

    serial: sc16is7xx: fix regression with GPIO configuration
    
    [ Upstream commit 0499942928341d572a42199580433c2b0725211e ]
    
    Commit 679875d1d880 ("sc16is7xx: Separate GPIOs from modem control lines")
    and commit 21144bab4f11 ("sc16is7xx: Handle modem status lines")
    changed the function of the GPIOs pins to act as modem control
    lines without any possibility of selecting GPIO function.
    
    As a consequence, applications that depends on GPIO lines configured
    by default as GPIO pins no longer work as expected.
    
    Also, the change to select modem control lines function was done only
    for channel A of dual UART variants (752/762). This was not documented
    in the log message.
    
    Allow to specify GPIO or modem control line function in the device
    tree, and for each of the ports (A or B).
    
    Do so by using the new device-tree property named
    "nxp,modem-control-line-ports" (property added in separate patch).
    
    When registering GPIO chip controller, mask-out GPIO pins declared as
    modem control lines according to this new DT property.
    
    Fixes: 679875d1d880 ("sc16is7xx: Separate GPIOs from modem control lines")
    Fixes: 21144bab4f11 ("sc16is7xx: Handle modem status lines")
    Cc: [email protected]
    Signed-off-by: Hugo Villeneuve <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Reviewed-by: Lech Perczak <[email protected]>
    Tested-by: Lech Perczak <[email protected]>
    Acked-by: Rob Herring <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: af071d9e07e5 ("serial: sc16is7xx: implement gpio get_direction() callback")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

serial: sc16is7xx: implement gpio get_direction() callback [+ + +]
Author: Hugo Villeneuve <[email protected]>
Date:   Thu Aug 6 23:34:48 2026 -0400

    serial: sc16is7xx: implement gpio get_direction() callback
    
    [ Upstream commit af071d9e07e57cfff239e8d09d2f3b05ebc9c667 ]
    
    It's strongly recommended for GPIO drivers to always implement the
    .get_direction() callback - even when the direction is tracked in
    software. The GPIO core emits a warning when the callback is missing
    and a user reads the direction of a line, e.g. via
    /sys/kernel/debug/gpio.
    
    Fixes: dfeae619d781 ("serial: sc16is7xx")
    Cc: stable <[email protected]>
    Signed-off-by: Hugo Villeneuve <[email protected]>
    Acked-by: Bartosz Golaszewski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

serial: sc16is7xx: remove obsolete out_thread label [+ + +]
Author: Hugo Villeneuve <[email protected]>
Date:   Thu Aug 6 23:34:46 2026 -0400

    serial: sc16is7xx: remove obsolete out_thread label
    
    [ Upstream commit dabc54a45711fe77674a6c0348231e00e66bd567 ]
    
    Commit c8f71b49ee4d ("serial: sc16is7xx: setup GPIO controller later
    in probe") moved GPIO setup code later in probe function. Doing so
    also required to move ports cleanup code (out_ports label) after the
    GPIO cleanup code.
    
    After these moves, the out_thread label becomes misplaced and makes
    part of the cleanup code illogical.
    
    This patch remove the now obsolete out_thread label and make GPIO
    setup code jump to out_ports label if it fails.
    
    Signed-off-by: Hugo Villeneuve <[email protected]>
    Reviewed-by: Lech Perczak <[email protected]>
    Tested-by: Lech Perczak <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: af071d9e07e5 ("serial: sc16is7xx: implement gpio get_direction() callback")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
skbuff: introduce skb_pull_data [+ + +]
Author: Luiz Augusto von Dentz <[email protected]>
Date:   Mon Aug 10 09:34:31 2026 -0400

    skbuff: introduce skb_pull_data
    
    [ Upstream commit 13244cccc2b61ec715f0ac583d3037497004d4a5 ]
    
    Like skb_pull but returns the original data pointer before pulling the
    data after performing a check against sbk->len.
    
    This allows to change code that does "struct foo *p = (void *)skb->data;"
    which is hard to audit and error prone, to:
    
            p = skb_pull_data(skb, sizeof(*p));
            if (!p)
                    return;
    
    Which is both safer and cleaner.
    
    Acked-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Dan Carpenter <[email protected]>
    Signed-off-by: Marcel Holtmann <[email protected]>
    Stable-dep-of: 47778d2c2087 ("Bluetooth: HIDP: reject frames without a transaction header")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
smb: client: use kvzalloc() for megabyte buffer in simple fallocate [+ + +]
Author: Fredric Cover <[email protected]>
Date:   Sun Jul 26 10:39:41 2026 -0400

    smb: client: use kvzalloc() for megabyte buffer in simple fallocate
    
    [ Upstream commit 806c00c23e3ce8eae397a40ced536ef88ae4e012 ]
    
    Currently in smb3_simple_fallocate_range(), a 1 MB buffer is allocated
    using kzalloc(). Under heavy memory fragmentation, a contiguous 1 MB block
    of physical memory (an order-8 allocation) may not be available,
    causing the allocation to fail.
    
    This failure was observed during xfstests generic/013 on a 4GB RAM
    test machine running fsstress:
    
    fsstress: page allocation failure: order:8,
    mode:0x40dc0(GFP_KERNEL|__GFP_ZERO|__GFP_COMP),
    nodemask=(null),cpuset=/,mems_allowed=0
    
    Call Trace:
     <TASK>
     dump_stack_lvl+0x5d/0x80
     warn_alloc+0x163/0x190
     __alloc_pages_slowpath.constprop.0+0x71b/0x12f0
     __alloc_frozen_pages_noprof+0x2f6/0x340
     alloc_pages_mpol+0xb6/0x170
     ___kmalloc_large_node+0xb3/0xd0
     __kmalloc_large_noprof+0x1e/0xc0
     smb3_simple_falloc.isra.0+0x62b/0x960
     cifs_fallocate+0xed/0x180
     vfs_fallocate+0x165/0x3c0
     __x64_sys_fallocate+0x48/0xa0
     do_syscall_64+0xe1/0x640
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
     </TASK>
    
    Node 0 Normal: 3375*4kB ... 7*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB
    
    Since this scratch buffer does not require physically contiguous memory,
    switch the allocation to kvzalloc(). This retains the performance
    benefits of kmalloc() under normal conditions, while gracefully falling
    back to virtually contiguous memory when physical allocation fails.
    
    Fixes: 966a3cb7c7db ("cifs: improve fallocate emulation")
    Cc: [email protected]
    Signed-off-by: Fredric Cover <[email protected]>
    Tested-by: Fredric Cover <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
super: fix emergency thaw deadlock on frozen block devices [+ + +]
Author: Christian Brauner <[email protected]>
Date:   Sun Aug 9 09:53:55 2026 -0400

    super: fix emergency thaw deadlock on frozen block devices
    
    [ Upstream commit 749d7aa0377aae32af8c0a4ad43371e7bf830ab5 ]
    
    do_thaw_all_callback() calls bdev_thaw() while holding sb->s_umount
    exclusively. If the block device was frozen via bdev_freeze() dropping
    the last block layer freeze reference calls fs_bdev_thaw() which
    reacquires s_umount:
    
      do_thaw_all_callback(sb)
        super_lock_excl(sb)                     # holds sb->s_umount
        bdev_thaw(sb->s_bdev)
          mutex_lock(&bdev->bd_fsfreeze_mutex)
          # bd_fsfreeze_count drops 1 -> 0
          bd_holder_ops->thaw == fs_bdev_thaw
            get_bdev_super(bdev)
              bdev_super_lock(bdev, true)
                super_lock(sb, true)
                  down_write(&sb->s_umount)     # same task: deadlock
    
    The emergency thaw worker deadlocks against itself holding both
    s_umount and bd_fsfreeze_mutex. That fscks any subsequent unmount,
    freeze, or thaw of that filesystem and block device.
    
      [   81.878470] sysrq: Show Blocked State
      [   81.880140] task:kworker/0:1     state:D stack:0     pid:11    tgid:11    ppid:2      task_flags:0x4208060 flags:0x00080000
      [   81.884876] Workqueue: events do_thaw_all
      [   81.886656] Call Trace:
      [   81.887759]  <TASK>
      [   81.888763]  __schedule+0x579/0x1420
      [   81.890372]  schedule+0x3a/0x100
      [   81.891794]  schedule_preempt_disabled+0x15/0x30
      [   81.893848]  rwsem_down_write_slowpath+0x1ea/0x900
      [   81.895191]  ? __pfx_do_thaw_all_callback+0x10/0x10
      [   81.896528]  down_write+0xbd/0xc0
      [   81.897505]  super_lock+0x91/0x180
      [   81.898457]  ? __mutex_lock+0xa99/0x1140
      [   81.900748]  ? __mutex_unlock_slowpath+0x1f/0x400
      [   81.902069]  bdev_super_lock+0x5b/0x150
      [   81.903132]  get_bdev_super+0x10/0x60
      [   81.904042]  fs_bdev_thaw+0x23/0xf0
      [   81.904755]  bdev_thaw+0x82/0x100
      [   81.905484]  do_thaw_all_callback+0x2c/0x50
      [   81.906298]  __iterate_supers+0x5d/0x130
      [   81.907067]  do_thaw_all+0x20/0x40
      [   81.907739]  process_one_work+0x206/0x5e0
      [   81.908545]  worker_thread+0x1e2/0x3c0
      [   81.909339]  ? __pfx_worker_thread+0x10/0x10
      [   81.910171]  kthread+0xf4/0x130
      [   81.910799]  ? __pfx_kthread+0x10/0x10
      [   81.911528]  ret_from_fork+0x2e2/0x3b0
      [   81.912259]  ? __pfx_kthread+0x10/0x10
      [   81.913010]  ret_from_fork_asm+0x1a/0x30
      [   81.913806]  </TASK>
    
    bdev_super_lock() even documents the violated requirement with
    lockdep_assert_not_held(&sb->s_umount).
    
    Acquiring bd_fsfreeze_mutex under s_umount also inverts the
    bd_fsfreeze_mutex vs. s_umount ordering established by
    bdev_{freeze,thaw}() and can thus ABBA against a concurrent block-layer
    freeze even when the recursive path isn't hit.
    
    Fix this by not holding s_umount around the bdev_thaw() loop at all. Pin
    the superblock with an active reference instead as
    filesystems_freeze_callback() does. The active reference keeps the
    superblock from being shut down and so ->s_bdev stays valid without
    holding s_umount. The block-layer-held freeze is dropped by
    fs_bdev_thaw() with FREEZE_MAY_NEST | FREEZE_HOLDER_USERSPACE exactly as
    a regular unfreeze would and thaw_super_locked() handles
    filesystem-level freezes as before.
    
    The emergency thaw path has deadlocked like this in one form or
    another for a long long time but the current exclusively-held
    shape dates back to commit [1] where thaw_bdev() already ended in
    thaw_super() with s_umount held by do_thaw_all_callback().
    
    Fixes: 08fdc8a0138a ("buffer.c: call thaw_super during emergency thaw") [1]
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Christian Brauner (Amutable) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
taskstats: fill_stats_for_tgid: use for_each_thread() [+ + +]
Author: Oleg Nesterov <[email protected]>
Date:   Sun Jul 26 09:35:19 2026 -0400

    taskstats: fill_stats_for_tgid: use for_each_thread()
    
    [ Upstream commit ed5378a387fd7c382497f2abcf4605e030b64044 ]
    
    do/while_each_thread should be avoided when possible.
    
    Plus I _think_ this change allows to avoid lock_task_sighand() but I am
    not sure, I forgot everything about taskstats.  In any case, this code
    does not look right in that the same thread can be accounted twice:
    taskstats_exit() can account the exiting thread in signal->stats and drop
    ->siglock but this thread is still on the thread-group list, so
    lock_task_sighand() can't help.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Oleg Nesterov <[email protected]>
    Cc: Eric W. Biederman <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Stable-dep-of: b3e4fbb04220 ("taskstats: retain dead thread stats in TGID queries")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

taskstats: retain dead thread stats in TGID queries [+ + +]
Author: Yiyang Chen <[email protected]>
Date:   Sun Jul 26 09:35:20 2026 -0400

    taskstats: retain dead thread stats in TGID queries
    
    [ Upstream commit b3e4fbb04220efc3bc022bcf31b5689d39c6b111 ]
    
    Patch series "taskstats: fix TGID dead-thread stat retention", v3.
    
    This series fixes a taskstats TGID aggregation bug where fields added in
    the TGID query path were not preserved after thread exit, and adds a
    kselftest covering the regression.
    
    The first patch keeps the cached TGID aggregate used for dead threads in
    step with the fields already accumulated for live threads, and also fixes
    the final TGID exit notification emitted when group_dead is true.
    
    The second patch adds a kselftest that verifies TGID CPU stats do not
    regress after a worker thread exits and has been reaped.
    
    This patch (of 2):
    
    fill_stats_for_tgid() builds TGID stats from two sources: the cached
    aggregate in signal->stats and a scan of the live threads in the group.
    
    However, fill_tgid_exit() only accumulates delay accounting into
    signal->stats.  This means that once a thread exits, TGID queries lose the
    fields that fill_stats_for_tgid() adds for live threads.
    
    This gap was introduced incrementally by two earlier changes that extended
    fill_stats_for_tgid() but did not make the corresponding update to
    fill_tgid_exit():
    
    - commit 8c733420bdd5 ("taskstats: add e/u/stime for TGID command")
      added ac_etime, ac_utime, and ac_stime to the TGID query path.
    - commit b663a79c1915 ("taskstats: add context-switch counters")
      added nvcsw and nivcsw to the TGID query path.
    
    As a result, those fields were accounted for live threads in TGID queries,
    but were dropped from the cached TGID aggregate after thread exit.  The
    final TGID exit notification emitted when group_dead is true also copies
    that cached aggregate, so it loses the same fields.
    
    Factor the per-task TGID accumulation into tgid_stats_add_task() and use
    it in both fill_stats_for_tgid() and fill_tgid_exit().  This keeps the
    cached aggregate used for dead threads aligned with the live-thread
    accumulation used by TGID queries.
    
    Link: https://lore.kernel.org/[email protected]
    Link: https://lore.kernel.org/abd2a15d33343636ab5ba43d540bcfe508bd66c7.1776094300.git.cyyzero16@gmail.com
    Fixes: 8c733420bdd5 ("taskstats: add e/u/stime for TGID command")
    Fixes: b663a79c1915 ("taskstats: add context-switch counters")
    Signed-off-by: Yiyang Chen <[email protected]>
    Acked-by: Balbir Singh <[email protected]>
    Cc: Dr. Thomas Orgis <[email protected]>
    Cc: Oleg Nesterov <[email protected]>
    Cc: Wang Yaxin <[email protected]>
    Cc: Yang Yang <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
thunderbolt: Keep XDomain reference during the lifetime of a service [+ + +]
Author: Mika Westerberg <[email protected]>
Date:   Mon Jul 27 14:05:26 2026 -0400

    thunderbolt: Keep XDomain reference during the lifetime of a service
    
    [ Upstream commit 8b4060998637f06975fceee9b73845d8672d411e ]
    
    This is needed because we release the service ID in tb_service_release()
    and the ID array is owned by the parent XDomain.
    
    Signed-off-by: Mika Westerberg <[email protected]>
    Stable-dep-of: 2c5d2d3c3f70 ("thunderbolt: Prevent XDomain delayed work use-after-free on disconnect")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

thunderbolt: Prevent XDomain delayed work use-after-free on disconnect [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Mon Jul 27 14:05:28 2026 -0400

    thunderbolt: Prevent XDomain delayed work use-after-free on disconnect
    
    [ Upstream commit 2c5d2d3c3f70cde2565d7b279b544893a2035842 ]
    
    tb_xdp_handle_request() runs on system_wq and queues
    xd->state_work via queue_delayed_work() in three request handlers:
    PROPERTIES_CHANGED_REQUEST, UUID_REQUEST (via start_handshake),
    and LINK_STATE_CHANGE_REQUEST.  Similarly, update_xdomain() queues
    xd->properties_changed_work when local properties change.
    
    Concurrently, tb_xdomain_remove() calls stop_handshake() which does
    cancel_delayed_work_sync() on both delayed works.  Later,
    tb_xdomain_unregister() calls device_unregister() which eventually
    frees the xdomain.  Since commit 559c1e1e0134 ("thunderbolt: Run
    tb_xdp_handle_request() in system workqueue") moved the request
    handler off tb->wq, the handler and the remove path are no longer
    serialized.  If queue_delayed_work() executes after
    cancel_delayed_work_sync() but before the xdomain is freed, the
    delayed work fires on a freed object.
    
    Add xd->removing that tb_xdomain_remove() sets under xd->lock
    before calling stop_handshake().  Each external queue site holds
    the same lock and checks removing before calling
    queue_delayed_work().  This provides the mutual exclusion needed:
    either the queue site acquires the lock first and queues work that
    the subsequent cancel will see, or the remove path acquires the
    lock first and the queue site observes removing == true and skips
    the queue.
    
    Fixes: 559c1e1e0134 ("thunderbolt: Run tb_xdp_handle_request() in system workqueue")
    Cc: [email protected]
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <[email protected]>
    Signed-off-by: Mika Westerberg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

thunderbolt: Remove XDomain from the bus without holding tb->lock [+ + +]
Author: Mika Westerberg <[email protected]>
Date:   Mon Jul 27 14:05:27 2026 -0400

    thunderbolt: Remove XDomain from the bus without holding tb->lock
    
    [ Upstream commit a8937f35cf39c39c64325aa84d0463d866850857 ]
    
    Currently we call device_unregister() for services and the XDomain
    itself with tb->lock held. This prevents the service drivers from
    calling any functions that may take it. For this reason separate
    removing the XDomain from the topology data structures (where we need
    the lock) from unregistering the device from the bus (where remove
    callbacks of the drivers are being called).
    
    Signed-off-by: Mika Westerberg <[email protected]>
    Stable-dep-of: 2c5d2d3c3f70 ("thunderbolt: Prevent XDomain delayed work use-after-free on disconnect")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tipc: restrict socket queue dumps in enqueue tracepoints [+ + +]
Author: Li Xiasong <[email protected]>
Date:   Wed Jul 22 14:20:07 2026 -0400

    tipc: restrict socket queue dumps in enqueue tracepoints
    
    [ Upstream commit acd7df8d955480a6f6e5bb809da67b1500cc3cf4 ]
    
    tipc_sk_enqueue() runs with sk->sk_lock.slock held while the socket is
    owned by user context. The spinlock protects the backlog queue in this
    path, but it does not serialize against the socket owner consuming or
    purging sk_receive_queue.
    
    KASAN reported:
    
      CPU: 14 UID: 0 PID: 1050 Comm: tipc3 Not tainted 7.1.0-rc6+ #126 PREEMPT(lazy)
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
      Call Trace:
        <TASK>
        dump_stack_lvl+0x76/0xa0 lib/dump_stack.c:123
        print_report+0xce/0x5b0 mm/kasan/report.c:482
        kasan_report+0xc6/0x100 mm/kasan/report.c:597
        __asan_report_load4_noabort+0x14/0x30 mm/kasan/report_generic.c:380
        tipc_skb_dump+0x1327/0x16f0 net/tipc/trace.c:73
        tipc_list_dump+0x208/0x2e0 net/tipc/trace.c:187
        tipc_sk_dump+0xaf6/0xd60 net/tipc/socket.c:3996
        trace_event_raw_event_tipc_sk_class+0x312/0x5a0 net/tipc/trace.h:188
        tipc_sk_rcv+0xb1d/0x1d50 net/tipc/socket.c:2497
        tipc_node_xmit+0x1c3/0x1440 net/tipc/node.c:1689
        __tipc_sendmsg+0x97a/0x1440 net/tipc/socket.c:1512
        tipc_sendmsg+0x52/0x80 net/tipc/socket.c:1400
        sock_sendmsg+0x2f6/0x3e0 net/socket.c:825
        splice_to_socket+0x7f9/0x1010 fs/splice.c:884
        do_splice+0xe21/0x2330 fs/splice.c:936
        __do_splice+0x153/0x260 fs/splice.c:1431
        __x64_sys_splice+0x150/0x230 fs/splice.c:1616
        x64_sys_call+0xeb5/0x2790 arch/x86/entry/syscall_64.c:41
        do_syscall_64+0xf3/0x620 arch/x86/entry/syscall_64.c:63
        entry_SYSCALL_64_after_hwframe+0x76/0x7e arch/x86/entry/entry_64.S:130
      RIP: 0033:0x71624e8aafe2
      Code: 08 0f 85 71 3a ff ff 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> 66 2e 0f 1f 84 00 00 00 00 00 66 2e 0f 1f 84 00 00 00 00 00 66
      RSP: 002b:0000716157ffed68 EFLAGS: 00000246 ORIG_RAX: 0000000000000113
      RAX: ffffffffffffffda RBX: 0000716157fff6c0 RCX: 000071624e8aafe2
      RDX: 000000000000005f RSI: 0000000000000000 RDI: 0000000000000066
      RBP: 0000716157ffed90 R08: 0000000000008000 R09: 0000000000000001
      R10: 0000000000000000 R11: 0000000000000246 R12: ffffffffffffff00
      R13: 0000000000000021 R14: 0000000000000000 R15: 00007fff89799c40
        </TASK>
    
    The TIPC_DUMP_ALL tracepoints in tipc_sk_enqueue() also dump
    sk_receive_queue and can therefore dereference skbs that the socket
    owner has already dequeued or freed. Restrict these dumps to
    TIPC_DUMP_SK_BKLGQ, which matches the queue protected by the held
    spinlock.
    
    Keep the change limited to the enqueue path, where the unsafe queue dump
    is reachable while the socket is owned by user context.
    
    Fixes: 01e661ebfbad ("tipc: add trace_events for tipc socket")
    Cc: [email protected]
    Signed-off-by: Li Xiasong <[email protected]>
    Reviewed-by: Tung Nguyen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tpm: tpm_tis_spi: Use wait_woken() in wait_for_tmp_stat() [+ + +]
Author: Jarkko Sakkinen <[email protected]>
Date:   Sun Jul 26 10:44:21 2026 -0400

    tpm: tpm_tis_spi: Use wait_woken() in wait_for_tmp_stat()
    
    [ Upstream commit c0c9cfb3b75def8bf200a2d4db09015806acfeaf ]
    
    wait_event_interruptible_timeout() evaluates its condition after setting
    the current task state to TASK_INTERRUPTIBLE.
    
    With CONFIG_DEBUG_ATOMIC_SLEEP this triggers a warning when the IRQ wait
    path is used:
    
        tpm_tis_status()
          tpm_tis_spi_read_bytes()
            tpm_tis_spi_transfer_full()
              spi_bus_lock()
                mutex_lock()
    
    Address this with the following measures:
    
    1. Call wait_tpm_stat_cond() only while tasking is running.
    2. Use wait_woken() to wait for changes.
    
    Cc: [email protected] # v4.19+
    Cc: Linus Walleij <[email protected]>
    Reported-by: Stefan Wahren <[email protected]>
    Closes: https://lore.kernel.org/linux-integrity/[email protected]/
    Fixes: 1a339b658d9d ("tpm_tis_spi: Pass the SPI IRQ down to the driver")
    Reviewed-by: Linus Walleij <[email protected]>
    Tested-by: Stefan Wahren <[email protected]>
    Signed-off-by: Jarkko Sakkinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
udmabuf: Do not create malformed scatterlists [+ + +]
Author: Jason Gunthorpe <[email protected]>
Date:   Tue Jul 21 15:13:55 2026 -0400

    udmabuf: Do not create malformed scatterlists
    
    [ Upstream commit 5bf888673e0dda5a53220fa0c4956271a46c353c ]
    
    Using a sg_set_folio() loop for every 4K results in a malformed scatterlist
    because sg_set_folio() has an issue with offsets > PAGE_SIZE and because
    scatterlist expects the creator to build a list which consolidates any
    physical contiguity.
    
    sg_alloc_table_from_pages() creates a valid scatterlist directly from a
    struct page array, so go back to that.
    
    Remove the offsets allocation and just store an array of tail pages as it
    did before the below commit. Everything wants that anyhow.
    
    Fixes: 0c8b91ef5100 ("udmabuf: add back support for mapping hugetlb pages")
    Reported-by: Julian Orth <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Reviewed-by: Vivek Kasireddy <[email protected]>
    Signed-off-by: Vivek Kasireddy <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Stable-dep-of: 504e2b4ab97a ("dma-buf/udmabuf: skip redundant cpu sync to fix cacheline EEXIST warning")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

udmabuf: Ensure to perform cache synchronisation in begin_cpu_udmabuf() [+ + +]
Author: Robert Mader <[email protected]>
Date:   Sat Jun 27 12:57:25 2026 +0200

    udmabuf: Ensure to perform cache synchronisation in begin_cpu_udmabuf()
    
    commit 1d0e25c1ddf2063c499264fb2ba0fa6a3e4f8a00 upstream.
    
    The message of commit 504e2b4ab97a ("dma-buf/udmabuf: skip redundant cpu sync to
    fix cacheline EEXIST warning") says:
    
    > The CPU sync at map/unmap time is also redundant for udmabuf:
    > begin_cpu_udmabuf() and end_cpu_udmabuf() already perform explicit
    > cache synchronization via dma_sync_sgtable_for_cpu/device() when CPU
    > access is requested through the dma-buf interface.
    
    This, however, does not apply to the first time begin_cpu_udmabuf() is
    called on an udmabuf, in which case the implementation previously relied on
    get_sg_table() to perform the cache synchronisation.
    
    Ensure to call dma_sync_sgtable_for_cpu() in that case as well.
    
    Fixes: 504e2b4ab97a ("dma-buf/udmabuf: skip redundant cpu sync to fix cacheline EEXIST warning")
    Signed-off-by: Robert Mader <[email protected]>
    Reviewed-by: Mikhail Gavrilov <[email protected]>
    Signed-off-by: Vivek Kasireddy <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: gadget: bdc: fix checkpatch.pl spacing error [+ + +]
Author: Chunfeng Yun <[email protected]>
Date:   Thu Jul 30 08:15:48 2026 -0400

    usb: gadget: bdc: fix checkpatch.pl spacing error
    
    [ Upstream commit 14a46f82d74e9bd8ce03cdbfcdb9f8408c1fc205 ]
    
    fix checkpatch.pl error:
    ERROR:SPACING: space prohibited before that ','
    
    Cc: Florian Fainelli <[email protected]>
    Acked-by: Florian Fainelli <[email protected]>
    Acked-by: Felipe Balbi <[email protected]>
    Signed-off-by: Chunfeng Yun <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: 0583f2fbf8f8 ("usb: gadget: udc: bdc: free IRQ and drain func_wake_notify before teardown")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: f_tcm: synchronize delayed set_alt with teardown [+ + +]
Author: Cen Zhang <[email protected]>
Date:   Fri Jul 31 07:16:08 2026 -0400

    usb: gadget: f_tcm: synchronize delayed set_alt with teardown
    
    [ Upstream commit 79e2d75725c85607f8a9d87ae9cace62a19f767d ]
    
    The f_tcm set_alt() path defers endpoint setup to a work item and
    completes the delayed status response from process context. The delayed
    work uses f_tcm private state and may complete the setup request after
    disconnect or function teardown has already moved on.
    
    Cancel and drain the delayed set_alt work when the function is unbound or
    freed. For disable paths, which are reached under the composite device
    lock, use a small state machine and a non-sleeping cancellation path
    instead of cancel_work_sync(). If the work is already running, mark it
    cancelled and let the worker own the cleanup; otherwise tcm_disable() can
    cancel the queued work and clean up immediately.
    
    Also serialize the final delayed-status completion with the cancellation
    check while holding the composite device lock. This prevents a disconnect
    from clearing delayed_status while the worker is about to complete the
    control request.
    
    Validation reproduced this kernel report:
    BUG: KASAN: slab-use-after-free in tcm_delayed_set_alt+0x6c/0xef0
    
    Call Trace:
     <TASK>
     dump_stack_lvl+0x66/0xa0
     print_report+0xce/0x630
     ? tcm_delayed_set_alt+0x6c/0xef0
     ? srso_alias_return_thunk+0x5/0xfbef5
     ? __virt_addr_valid+0x188/0x320
     ? tcm_delayed_set_alt+0x6c/0xef0
     kasan_report+0xe0/0x110
     ? tcm_delayed_set_alt+0x6c/0xef0
     tcm_delayed_set_alt+0x6c/0xef0
     ? __pfx_tcm_delayed_set_alt+0x10/0x10
     ? process_one_work+0x4cb/0xb90
     ? rcu_is_watching+0x20/0x50
     ? tcm_delayed_set_alt+0x9/0xef0
     process_one_work+0x4d7/0xb90
     ? __pfx_process_one_work+0x10/0x10
     ? srso_alias_return_thunk+0x5/0xfbef5
     ? __list_add_valid_or_report+0x37/0xf0
     ? __pfx_tcm_delayed_set_alt+0x10/0x10
     ? srso_alias_return_thunk+0x5/0xfbef5
     worker_thread+0x2d8/0x570
     ? __pfx_worker_thread+0x10/0x10
     kthread+0x1ad/0x1f0
     ? __pfx_kthread+0x10/0x10
     ret_from_fork+0x3c9/0x540
     ? __pfx_ret_from_fork+0x10/0x10
     ? srso_alias_return_thunk+0x5/0xfbef5
     ? __switch_to+0x2e9/0x730
     ? __pfx_kthread+0x10/0x10
     ret_from_fork_asm+0x1a/0x30
     </TASK>
    
    Allocated by task 544:
     kasan_save_stack+0x33/0x60
     kasan_save_track+0x14/0x30
     __kasan_kmalloc+0x8f/0xa0
     tcm_alloc+0x68/0x180
     usb_get_function+0x36/0x60
     config_usb_cfg_link+0x125/0x1b0
     configfs_symlink+0x322/0x890
     vfs_symlink+0xc2/0x270
     filename_symlinkat+0x295/0x2f0
     __x64_sys_symlinkat+0x62/0x90
     do_syscall_64+0x115/0x6a0
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Freed by task 661:
     kasan_save_stack+0x33/0x60
     kasan_save_track+0x14/0x30
     kasan_save_free_info+0x3b/0x60
     __kasan_slab_free+0x43/0x70
     kfree+0x2f9/0x530
     config_usb_cfg_unlink+0x173/0x1e0
     configfs_unlink+0x1fa/0x340
     vfs_unlink+0x15c/0x510
     filename_unlinkat+0x2ba/0x450
     __x64_sys_unlinkat+0x63/0x90
     do_syscall_64+0x115/0x6a0
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Fixes: c52661d60f63 ("usb-gadget: Initial merge of target module for UASP + BOT")
    Cc: stable <[email protected]>
    Assisted-by: Codex:gpt-5.5
    Signed-off-by: Cen Zhang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    [ adjusted context for 6.12's scalar `struct usbg_cdb cmd` and missing `stream_hash`, dropping the `hash_init()` context line ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: udc: bdc: free IRQ and drain func_wake_notify before teardown [+ + +]
Author: Fan Wu <[email protected]>
Date:   Thu Jul 30 08:15:49 2026 -0400

    usb: gadget: udc: bdc: free IRQ and drain func_wake_notify before teardown
    
    [ Upstream commit 0583f2fbf8f86ae3a0ce054f96783dd83e65d9bb ]
    
    The Broadcom BDC UDC driver registers its IRQ handler with
    devm_request_irq() in bdc_udc_init(), so the IRQ is released by devm
    only after bdc_remove() returns.  devm releases resources in reverse
    LIFO order, but bdc_remove() runs bdc_udc_exit() and bdc_hw_exit() ->
    bdc_mem_free() manually before returning: bdc_udc_exit() tears down
    individual endpoint objects via bdc_free_ep(), while bdc_hw_exit() ->
    bdc_mem_free() frees and NULLs the DMA-coherent status-report ring
    (bdc->srr.sr_bds) and kfree()s bdc->bdc_ep_array.  Both happen while
    the IRQ handler (bdc_udc_interrupt, requested with IRQF_SHARED)
    remains deliverable in the window up to the post-remove devm
    free_irq().
    
    On receipt of a shared interrupt in that window, bdc_udc_interrupt()
    dereferences bdc->srr.sr_bds[bdc->srr.dqp_index] (NULL or freed DMA)
    and dispatches sr_handler callbacks that index into bdc_ep_array,
    causing a NULL-deref or use-after-free.
    
    The same window affects the delayed_work bdc->func_wake_notify, which is
    armed from the IRQ handler via bdc_sr_uspc() -> handle_link_state_change()
    -> schedule_delayed_work() and may self-rearm from its own callback
    bdc_func_wake_timer().  No cancel exists anywhere in the driver, so a
    queued work item that fires after bdc_remove() returns and the bdc
    structure is devm-freed dereferences freed memory.
    
    Replace devm_request_irq() with request_irq() and add an explicit
    free_irq(bdc->irq, bdc) in bdc_remove().  Clear BDC_GIE before
    free_irq() to stop the device from asserting interrupts, then
    free_irq() drains any in-flight handler, then cancel_delayed_work_sync()
    drains the func_wake_notify delayed work.  This ordering ensures the
    IRQ handler and delayed work cannot interfere with the subsequent
    endpoint and DMA teardown in bdc_udc_exit() and bdc_hw_exit().  Wire the
    matching free_irq() into the bdc_udc_init() error path so the IRQ is
    released on probe failure, and route the bdc_init_ep() failure through
    err0 instead of returning directly.
    
    This issue was found by an in-house static analysis tool.
    
    Fixes: efed421a94e6 ("usb: gadget: Add UDC driver for Broadcom USB3.0 device controller IP BDC")
    Cc: stable <[email protected]>
    Assisted-by: Codex:gpt-5.5
    Signed-off-by: Fan Wu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
USB: serial: keyspan_pda: add write-fifo support [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Thu Jul 30 12:01:20 2026 -0400

    USB: serial: keyspan_pda: add write-fifo support
    
    [ Upstream commit 034e38e8f68767fb5438ae3e608ee82919674177 ]
    
    Use the port write fifo and generic chars_and_buffer and write_room
    implementations when writing. This not only allows for more efficient
    transfers, but more importantly fixes the remaining issues related to
    the conservative write_room() implementation which could prevent the
    line discipline from making forward progress (e.g. waiting for n > 1
    bytes of space to become available).
    
    Note that this also allows using the driver for the system console
    without dropping data when the write URB is busy (including when adding
    carriage return on line feed).
    
    Acked-by: Sebastian Andrzej Siewior <[email protected]>
    Reviewed-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Stable-dep-of: 42a97c0480f9 ("USB: serial: keyspan_pda: fix data loss on receive throttling")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: keyspan_pda: clean up comments and whitespace [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Thu Jul 30 12:01:21 2026 -0400

    USB: serial: keyspan_pda: clean up comments and whitespace
    
    [ Upstream commit 491d6927f0de587c1d322d8b29a1187b7e06a221 ]
    
    Clean up comment style, remove some stale or redundant comments and drop
    superfluous white space.
    
    Acked-by: Sebastian Andrzej Siewior <[email protected]>
    Reviewed-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Stable-dep-of: 42a97c0480f9 ("USB: serial: keyspan_pda: fix data loss on receive throttling")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: keyspan_pda: fix data loss on receive throttling [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Thu Jul 30 12:01:22 2026 -0400

    USB: serial: keyspan_pda: fix data loss on receive throttling
    
    [ Upstream commit 42a97c0480f96a2977e6d51ce512adc780f1ef5d ]
    
    Killing the interrupt-in urb when the line disciple requests throttling
    may lead to data loss if an ongoing transfer is cancelled.
    
    Instead set a flag to prevent the completion handler from resubmitting
    the urb until the port is unthrottled.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: keyspan_pda: fix information leak [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Jun 29 14:45:26 2026 +0200

    USB: serial: keyspan_pda: fix information leak
    
    commit 6bfc8d01ac4068eced509f8fc74d0cd205e4dcec upstream.
    
    The write() callback is supposed to return the number of characters
    accepted or a negative errno. Since the addition of write fifo support
    the keyspan_pda implementation will however return the number characters
    submitted to the device if the write urb is not already in use. If this
    number is larger than the number of characters passed to write(), the
    line discipline continues writing data from beyond the tty write buffer.
    
    Fix the information leak by making sure that keyspan_pda_write_start()
    returns zero on success as intended.
    
    Fixes: 034e38e8f687 ("USB: serial: keyspan_pda: add write-fifo support")
    Cc: [email protected]      # 5.11
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: keyspan_pda: fix write implementation [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Thu Jul 30 12:01:19 2026 -0400

    USB: serial: keyspan_pda: fix write implementation
    
    [ Upstream commit 7184933b52a6b3e64171819b77f0bab018696cb2 ]
    
    Fix stalled writes by checking the available buffer space after
    requesting an unthrottle notification in case the device buffer is
    already empty so that no notification is ever sent (e.g. when doing
    single character writes).
    
    This also means we can drop the room query from write() which was
    conditioned on in_interrupt() and prevented writing using this driver
    from atomic contexts (e.g. PPP).
    
    Acked-by: Sebastian Andrzej Siewior <[email protected]>
    Reviewed-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Stable-dep-of: 42a97c0480f9 ("USB: serial: keyspan_pda: fix data loss on receive throttling")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: keyspan_pda: refactor write-room handling [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Thu Jul 30 12:01:18 2026 -0400

    USB: serial: keyspan_pda: refactor write-room handling
    
    [ Upstream commit 79fe6826a5ebee2724d432a736ec04d8dca143ba ]
    
    Add helper to retrieve the available device transfer-buffer space.
    
    Acked-by: Sebastian Andrzej Siewior <[email protected]>
    Reviewed-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Stable-dep-of: 42a97c0480f9 ("USB: serial: keyspan_pda: fix data loss on receive throttling")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
VFS/audit: introduce kern_path_parent() for audit [+ + +]
Author: NeilBrown <[email protected]>
Date:   Wed Jul 22 09:55:03 2026 -0400

    VFS/audit: introduce kern_path_parent() for audit
    
    [ Upstream commit 76a53de6f7ff0641570364234fb4489f4d4fc8e9 ]
    
    audit_alloc_mark() and audit_get_nd() both need to perform a path
    lookup getting the parent dentry (which must exist) and the final
    target (following a LAST_NORM name) which sometimes doesn't need to
    exist.
    
    They don't need the parent to be locked, but use kern_path_locked() or
    kern_path_locked_negative() anyway.  This is somewhat misleading to the
    casual reader.
    
    This patch introduces a more targeted function, kern_path_parent(),
    which returns not holding locks.  On success the "path" will
    be set to the parent, which must be found, and the return value is the
    dentry of the target, which might be negative.
    
    This will clear the way to rename kern_path_locked() which is
    otherwise only used to prepare for removing something.
    
    It also allows us to remove kern_path_locked_negative(), which is
    transformed into the new kern_path_parent().
    
    Signed-off-by: NeilBrown <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    Stable-dep-of: 81905b5acbe7 ("audit: fix recursive locking deadlock in audit_dupe_exe()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
wifi: ath6kl: fix use-after-free in aggr_reset_state() [+ + +]
Author: Daniel Hodges <[email protected]>
Date:   Thu Aug 6 10:28:37 2026 -0400

    wifi: ath6kl: fix use-after-free in aggr_reset_state()
    
    [ Upstream commit ba7debb4dd6427386862220e8335a53a4bfc235d ]
    
    The aggr_reset_state() function uses timer_delete() (non-synchronous)
    for the aggregation timer before proceeding to delete TID state and
    before the structure is freed by callers like aggr_module_destroy().
    
    If the timer callback (aggr_timeout) is executing when aggr_reset_state()
    is called, the callback will continue to access aggr_conn fields like
    rx_tid[] and stat[] which may be freed immediately after by
    kfree(aggr_info->aggr_conn) in aggr_module_destroy().
    
    Additionally, the timer callback can re-arm itself via mod_timer() while
    aggr_reset_state() is running, creating a more complex race condition.
    
    Use timer_delete_sync() instead to ensure any running timer callback
    has completed before returning.
    
    Fixes: bdcd81707973 ("Add ath6kl cleaned up driver")
    Cc: [email protected]
    Signed-off-by: Daniel Hodges <[email protected]>
    Reviewed-by: Vasanthakumar Thiagarajan <[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]>

wifi: brcmfmac: drain bus_reset work on device removal [+ + +]
Author: Fan Wu <[email protected]>
Date:   Thu Aug 6 13:02:05 2026 -0400

    wifi: brcmfmac: drain bus_reset work on device removal
    
    [ Upstream commit 43b25879f004c98defa2776bedc6ca4763c51945 ]
    
    brcmf_fw_crashed() and the debugfs "reset" entry both schedule
    drvr->bus_reset, whose callback recovers drvr through container_of()
    and dereferences it.  The removal path frees drvr (brcmf_free ->
    wiphy_free) without draining the work, so a bus_reset callback pending
    or running during removal can outlive drvr.
    
    Cancellation cannot live in brcmf_detach() or brcmf_free(): the work
    callback reaches teardown through the bus .reset op (PCIe
    brcmf_pcie_reset -> brcmf_detach; SDIO brcmf_sdio_bus_reset ->
    brcmf_sdiod_remove -> brcmf_free), so cancelling there would wait for
    the running work and deadlock.
    
    Add a per-bus mutex (bus_reset_lock) and route all arming through
    brcmf_bus_schedule_reset(), which under the lock skips when the bus is
    marked removing.  Each bus remove entry calls
    brcmf_bus_cancel_reset_work(), which under the same lock sets removing
    and cancels the work.  Holding the mutex across cancel_work_sync() makes
    the set-removing + drain step atomic.  Every producer reaches the arming
    path from process context -- the PCIe firmware-halt notification runs in
    the threaded IRQ handler (brcmf_pcie_isr_thread) and the SDIO hostmail
    path runs from the data workqueue -- so the mutex is taken only in
    sleepable contexts.  Where applicable the remove entry first stops the
    firmware-crash producer: on PCIe mask the mailbox and synchronize_irq;
    on SDIO unregister the bus interrupt and cancel the data worker, which
    also reports firmware halts through brcmf_fw_crashed().  The mutex is
    initialized at bus allocation.  The SDIO suspend power-off path frees
    drvr through the same brcmf_sdiod_remove() and takes the same lock;
    resume re-allows the work only on a successful re-probe.
    
    Also guard brcmf_fw_crashed() against a NULL bus_if/drvr: it can fire
    before brcmf_attach() wires up drvr, and it dereferences drvr
    (bphy_err/brcmf_dev_coredump) before reaching the arming gate.
    
    The bus_reset work is shared across buses, so the drain is applied to
    every remove path: PCIe (the .reset op introduced by the Fixes commit),
    SDIO (arms the same work through brcmf_fw_crashed()), and USB (via the
    debugfs "reset" entry).  cancel_work_sync() drains a running or pending
    bus_reset work item before removal frees drvr, and patch 1/2 makes the
    scratch-buffer release safe when reset teardown has already released
    those DMA buffers.
    
    This patch fixes the lifetime of the bus_reset work item itself.  It does
    not attempt to address the separate, pre-existing lifetime of the
    asynchronous firmware completion started by the PCIe reset path.  That
    callback needs its own lifetime/ownership protocol and is being tracked
    separately.
    
    This issue was found by an in-house static analysis tool.
    
    Fixes: 4684997d9eea ("brcmfmac: reset PCIe bus on a firmware crash")
    Cc: [email protected]
    Signed-off-by: Fan Wu <[email protected]>
    Assisted-by: Codex:gpt-5.6
    Acked-by: Arend van Spriel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: libertas_tf: fix use-after-free in lbtf_free_adapter() [+ + +]
Author: Maoyi Xie <[email protected]>
Date:   Mon Jul 27 23:26:02 2026 -0400

    wifi: libertas_tf: fix use-after-free in lbtf_free_adapter()
    
    [ Upstream commit aa6dcd5c8dd9ba1d7d0f60093bcda41c0d6d438d ]
    
    lbtf_free_adapter() calls timer_delete(&priv->command_timer), which does
    not wait for a running command_timer_fn() callback. lbtf_free_adapter()
    runs on the teardown path right before ieee80211_free_hw() frees priv,
    both in lbtf_remove_card() and in the probe error path. command_timer is
    armed by mod_timer() in lbtf_cmd() whenever a firmware command is sent.
    command_timer_fn() dereferences priv. If a command times out as the
    device is removed, command_timer_fn() runs concurrently with teardown and
    dereferences priv after it has been freed.
    
    This is the same use-after-free that commit 03cc8f90d053 ("wifi: libertas:
    fix use-after-free in lbs_free_adapter()") fixed in the sibling libertas
    driver. The libertas_tf variant has the identical pattern and was left
    unchanged. Use timer_delete_sync() so any in-flight callback completes
    before priv is freed.
    
    Fixes: 06b16ae53192 ("libertas_tf: main.c, data paths and mac80211 handlers")
    Cc: [email protected]
    Signed-off-by: Maoyi Xie <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
xfs: check v5 superblock features early [+ + +]
Author: Christoph Hellwig <[email protected]>
Date:   Wed Jul 29 15:00:58 2026 +0200

    xfs: check v5 superblock features early
    
    commit eb6b2cc1fc8ad566d746d128a559989ff0bba5cc upstream.
    
    When working on a new features that reuses the existing pad in the
    superblock, I noticed that mounting such a file system on an old kernel
    logs a rather confusing warning:
    
        XFS (vdc): Metadir superblock padding fields must be zero.
    
    This is because we only validate the various feature fields in v5
    superblocks after the common superblock validation helper is called.
    
    Fix this by calling the feature validation first.
    
    Fixes: eca383fcd63b ("xfs: refactor superblock verifiers")
    Cc: <[email protected]> # v4.19
    Signed-off-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Darrick J. Wong <[email protected]>
    Signed-off-by: Carlos Maiolino <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>