Changelog in Linux kernel 6.6.142

 
accel/qaic: Add overflow check to remap_pfn_range during mmap [+ + +]
Author: Zack McKevitt <[email protected]>
Date:   Thu Apr 30 12:39:01 2026 -0700

    accel/qaic: Add overflow check to remap_pfn_range during mmap
    
    [ Upstream commit aa16b2bc0f02709919e2435f531406531e5bcc69 ]
    
    The call to remap_pfn_range in qaic_gem_object_mmap is susceptible to
    (re)mapping beyond the VMA if the BO is too large. This can cause use
    after free issues when munmap() unmaps only the VMA region and not the
    additional mappings. To prevent this, check the remaining size of the
    VMA before remapping and truncate the remapped length if sg->length is
    too large.
    
    Reported-by: Lukas Maar <[email protected]>
    Fixes: ff13be830333 ("accel/qaic: Add datapath")
    Reviewed-by: Karol Wachowski <[email protected]>
    Signed-off-by: Zack McKevitt <[email protected]>
    Reviewed-by: Jeff Hugo <[email protected]>
    [jhugo: fix braces from checkpatch --strict]
    Signed-off-by: Jeff Hugo <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
af_unix: Give up GC if MSG_PEEK intervened. [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Tue May 26 13:47:44 2026 +0800

    af_unix: Give up GC if MSG_PEEK intervened.
    
    [ Upstream commit e5b31d988a41549037b8d8721a3c3cae893d8670 ]
    
    Igor Ushakov reported that GC purged the receive queue of
    an alive socket due to a race with MSG_PEEK with a nice repro.
    
    This is the exact same issue previously fixed by commit
    cbcf01128d0a ("af_unix: fix garbage collect vs MSG_PEEK").
    
    After GC was replaced with the current algorithm, the cited
    commit removed the locking dance in unix_peek_fds() and
    reintroduced the same issue.
    
    The problem is that MSG_PEEK bumps a file refcount without
    interacting with GC.
    
    Consider an SCC containing sk-A and sk-B, where sk-A is
    close()d but can be recv()ed via sk-B.
    
    The bad thing happens if sk-A is recv()ed with MSG_PEEK from
    sk-B and sk-B is close()d while GC is checking unix_vertex_dead()
    for sk-A and sk-B.
    
      GC thread                    User thread
      ---------                    -----------
      unix_vertex_dead(sk-A)
      -> true   <------.
                        \
                         `------   recv(sk-B, MSG_PEEK)
                  invalidate !!    -> sk-A's file refcount : 1 -> 2
    
                                   close(sk-B)
                                   -> sk-B's file refcount : 2 -> 1
      unix_vertex_dead(sk-B)
      -> true
    
    Initially, sk-A's file refcount is 1 by the inflight fd in sk-B
    recvq.  GC thinks sk-A is dead because the file refcount is the
    same as the number of its inflight fds.
    
    However, sk-A's file refcount is bumped silently by MSG_PEEK,
    which invalidates the previous evaluation.
    
    At this moment, sk-B's file refcount is 2; one by the open fd,
    and one by the inflight fd in sk-A.  The subsequent close()
    releases one refcount by the former.
    
    Finally, GC incorrectly concludes that both sk-A and sk-B are dead.
    
    One option is to restore the locking dance in unix_peek_fds(),
    but we can resolve this more elegantly thanks to the new algorithm.
    
    The point is that the issue does not occur without the subsequent
    close() and we actually do not need to synchronise MSG_PEEK with
    the dead SCC detection.
    
    When the issue occurs, close() and GC touch the same file refcount.
    If GC sees the refcount being decremented by close(), it can just
    give up garbage-collecting the SCC.
    
    Therefore, we only need to signal the race during MSG_PEEK with
    a proper memory barrier to make it visible to the GC.
    
    Let's use seqcount_t to notify GC when MSG_PEEK occurs and let
    it defer the SCC to the next run.
    
    This way no locking is needed on the MSG_PEEK side, and we can
    avoid imposing a penalty on every MSG_PEEK unnecessarily.
    
    Note that we can retry within unix_scc_dead() if MSG_PEEK is
    detected, but we do not do so to avoid hung task splat from
    abusive MSG_PEEK calls.
    
    Fixes: 118f457da9ed ("af_unix: Remove lock dance in unix_peek_fds().")
    Reported-by: Igor Ushakov <[email protected]>
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ Using include/net/af_unix.h instead of net/unix/af_unix.h on 6.6 ]
    Signed-off-by: Leon Chen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ALSA: asihpi: Fix potential OOB array access at reading cache [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Fri May 15 10:55:58 2026 +0200

    ALSA: asihpi: Fix potential OOB array access at reading cache
    
    commit 7b7d6572145c1dab2dd9bfb550b188e5f0ff3c3f upstream.
    
    find_control() to retrieve a cached info accesses the array with the
    given index blindly, which may lead to an OOB array access.
    Add a sanity check for avoiding it.
    
    Link: https://sashiko.dev/#/patchset/20260511230121.28606-1-rosenp%40gmail.com
    Cc: <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: hda: cs35l56: Put ACPI device after setting companion [+ + +]
Author: Shuhao Fu <[email protected]>
Date:   Tue Apr 28 16:01:39 2026 +0800

    ALSA: hda: cs35l56: Put ACPI device after setting companion
    
    [ Upstream commit aa2fbece1b07954ef26488c800d126a36a8ab93e ]
    
    acpi_dev_get_first_match_dev() returns a refcounted ACPI device and
    callers are expected to balance it with acpi_dev_put().
    
    When no companion is already attached, cs35l56_hda_read_acpi() looks
    up an ACPI device and sets it with ACPI_COMPANION_SET(), but leaves
    the lookup reference held.
    
    ACPI_COMPANION_SET() does not take ownership of that reference, so
    drop it with acpi_dev_put() after attaching the companion.
    
    Fixes: 73cfbfa9caea ("ALSA: hda/cs35l56: Add driver for Cirrus Logic CS35L56 amplifier")
    Signed-off-by: Shuhao Fu <[email protected]>
    Tested-by: Simon Trimmer <[email protected]>
    Signed-off-by: Takashi Iwai <[email protected]>
    Link: https://patch.msgid.link/20260428080139.GA1649104@chcpu16
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: pcm: Don't setup bogus iov_iter for silencing [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Sun May 17 18:51:20 2026 +0200

    ALSA: pcm: Don't setup bogus iov_iter for silencing
    
    commit e4d3386b74fba8e01280484b67ee481ece00201e upstream.
    
    At transition to the iov_iter for PCM data transfer, we blindly
    applied the iov_iter setup also for silencing (i.e. data = NULL), and
    it leads to a calculation of bogus iov_iter.  Fortunately this didn't
    cause troubles on most of architectures but it goes wrong on RISC-V
    now, causing a NULL dereference.
    
    Handle the NULL data case to treat the silencing in interleaved_copy()
    for addressing the bug above.  noninterleaved_copy() has already the
    NULL data handling, so it doesn't need changes.
    
    Reported-by: Jiakai Xu <[email protected]>
    Closes: https://lore.kernel.org/[email protected]
    Fixes: cf393babb37a ("ALSA: pcm: Add copy ops with iov_iter")
    Cc: <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: seq: Serialize UMP output teardown with event_input [+ + +]
Author: Zhang Cen <[email protected]>
Date:   Wed May 20 18:32:49 2026 +0800

    ALSA: seq: Serialize UMP output teardown with event_input
    
    [ Upstream commit 60a1969fae6209644698fca91c185d153674f631 ]
    
    seq_ump_process_event() borrows client->out_rfile.output without
    synchronizing with the first-open and last-close transition in
    seq_ump_client_open() and seq_ump_client_close().
    
    The last output unuse can therefore drop opened[STR_OUT] to zero and
    release the rawmidi file while an in-flight event_input callback is still
    inside snd_rawmidi_kernel_write(). That leaves the rawmidi substream
    runtime exposed to teardown before the write path has taken its own
    buffer reference.
    
    Add a per-client rwlock for the event_input-visible output file. Publish
    a newly opened output file under the write side, and hold the read side
    from the output lookup through snd_rawmidi_kernel_write(). The last
    output close copies and clears the visible output file under the write
    side, then drops the lock and releases the saved rawmidi file. Use
    IRQ-safe rwlock guards because event_input can also be reached from
    atomic sequencer delivery.
    
    The buggy scenario involves two paths, with each column showing the
    order within that path:
    
    path A label: event_input path         path B label: last unuse path
    1. seq_ump_process_event() reads       1. seq_ump_client_close()
       client->out_rfile.output.              drops opened[STR_OUT] to zero.
    2. snd_rawmidi_kernel_write1()         2. snd_rawmidi_kernel_release()
       has not yet pinned runtime.            closes the output file.
    3. The writer continues using          3. close_substream() frees
       the borrowed substream.                substream->runtime.
    
    This keeps the output substream and runtime alive for the full
    event_input write while keeping rawmidi release outside the rwlock.
    
    KASAN reproduced this as a slab-use-after-free in
    snd_rawmidi_kernel_write1(), with allocation through
    seq_ump_use()/snd_seq_port_connect() and free through
    seq_ump_unuse()/snd_seq_port_disconnect().
    
    Suggested-by: Takashi Iwai <[email protected]>
    
    Validation reproduced this kernel report:
    KASAN slab-use-after-free in snd_rawmidi_kernel_write1+0x9d/0x400
    RIP: 0033:0x7f5528af837f
    Read of size 8
    Call trace:
      dump_stack_lvl+0x73/0xb0 (?:?)
      print_report+0xd1/0x650 (?:?)
      srso_alias_return_thunk+0x5/0xfbef5 (?:?)
      __virt_addr_valid+0x1a7/0x340 (?:?)
      kasan_complete_mode_report_info+0x64/0x200 (?:?)
      kasan_report+0xf7/0x130 (?:?)
      snd_rawmidi_kernel_write1+0x9d/0x400 (?:?)
      __asan_load8+0x82/0xb0 (?:?)
      update_stack_state+0x1ef/0x2d0 (?:?)
      snd_rawmidi_kernel_write+0x1a/0x20 (?:?)
      seq_ump_process_event+0xd4/0x120 (sound/core/seq/seq_ump_client.c:82)
      __snd_seq_deliver_single_event+0x8a/0xe0 (?:?)
      snd_seq_deliver_from_ump+0x2b2/0xd60 (?:?)
      lock_acquire+0x14e/0x2e0 (?:?)
      find_held_lock+0x31/0x90 (?:?)
      snd_seq_port_use_ptr+0xa6/0xe0 (?:?)
      __kasan_check_write+0x18/0x20 (?:?)
      do_raw_read_unlock+0x32/0xa0 (?:?)
      _raw_read_unlock+0x26/0x50 (?:?)
      snd_seq_deliver_single_event+0x45c/0x4b0 (?:?)
      snd_seq_deliver_event+0x10d/0x1b0 (?:?)
      snd_seq_client_enqueue_event+0x192/0x240 (?:?)
      snd_seq_write+0x2cd/0x450 (?:?)
      apparmor_file_permission+0x20/0x30 (?:?)
      security_file_permission+0x51/0x60 (?:?)
      vfs_write+0x1ce/0x850 (?:?)
      __fget_files+0x12b/0x220 (?:?)
      lock_release+0xc8/0x2a0 (?:?)
      __rcu_read_unlock+0x74/0x2d0 (?:?)
      __fget_files+0x135/0x220 (?:?)
      ksys_write+0x15a/0x180 (?:?)
      rcu_is_watching+0x24/0x60 (?:?)
      __x64_sys_write+0x46/0x60 (?:?)
      x64_sys_call+0x7d/0x20d0 (?:?)
      do_syscall_64+0xc1/0x360 (arch/x86/entry/syscall_64.c:87)
      entry_SYSCALL_64_after_hwframe+0x77/0x7f (?:?)
    
    Fixes: 81fd444aa371 ("ALSA: seq: Bind UMP device")
    Signed-off-by: Zhang Cen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: seq: ump: Use guard() for locking [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Tue Feb 27 09:53:00 2024 +0100

    ALSA: seq: ump: Use guard() for locking
    
    [ Upstream commit 6487e363714c28c4b62ac149e7d907cfeeedb3ad ]
    
    We can simplify the code gracefully with new guard() macro and co for
    automatic cleanup of locks.
    
    Only the code refactoring, and no functional changes.
    
    Signed-off-by: Takashi Iwai <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: 60a1969fae62 ("ALSA: seq: Serialize UMP output teardown with event_input")
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: ua101: Reject too-short USB descriptors [+ + +]
Author: Cássio Gabriel <[email protected]>
Date:   Tue May 19 00:32:15 2026 -0300

    ALSA: ua101: Reject too-short USB descriptors
    
    commit b59d5c51bb328a60749b4dd5fe7e649bfb4089b4 upstream.
    
    find_format_descriptor() walks the class-specific interface extras by
    advancing with bLength. It rejects descriptors that extend past the
    remaining buffer, but it does not reject descriptor lengths smaller than
    a USB descriptor header.
    
    Reject too-short descriptors before using bLength to advance the local
    scan. This keeps the UA-101 parser robust against malformed descriptor
    data and matches the usual USB descriptor walking rules.
    
    Fixes: 63978ab3e3e9 ("sound: add Edirol UA-101 support")
    Cc: [email protected]
    Signed-off-by: Cássio Gabriel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
arm64: probes: Handle probes on hinted conditional branch instructions [+ + +]
Author: Vladimir Murzin <[email protected]>
Date:   Fri May 15 14:37:29 2026 +0100

    arm64: probes: Handle probes on hinted conditional branch instructions
    
    commit 2ccd8ff980b50e842481bae71102fa3883fc4377 upstream.
    
    BC.cond instructions introduced by FEAT_HBC cannot be executed
    out-of-line, like other branch instructions. However, they can be
    simulated in the same way as B.cond instructions.
    
    Extend the B.cond decoder mask to match BC.cond instructions as well,
    and handle them using the existing B.cond simulation path.
    
    Fixes: 7f86d128e437 ("arm64: add HWCAP for FEAT_HBC (hinted conditional branches)")
    Cc: <[email protected]>
    Signed-off-by: Vladimir Murzin <[email protected]>
    Signed-off-by: Catalin Marinas <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ARM: integrator: Fix early initialization [+ + +]
Author: Guenter Roeck <[email protected]>
Date:   Tue May 5 21:15:37 2026 +0200

    ARM: integrator: Fix early initialization
    
    [ Upstream commit 90d77b30a666049ad24df463f52e5d529c44e8cd ]
    
    Starting with commit bdb249fce9ad4 ("ARM: integrator: read counter using
    syscon/regmap"), intcp_init_early calls syscon_regmap_lookup_by_compatible
    which in turn calls of_syscon_register. This function allocates memory.
    Since the memory management code has not been initialized at that time,
    the call always fails. It either returns -ENOMEM or crashes as follows.
    
    Unable to handle kernel NULL pointer dereference at virtual address 0000000c when read
    [0000000c] *pgd=00000000
    Internal error: Oops: 5 [#1] ARM
    Modules linked in:
    CPU: 0 UID: 0 PID: 0 Comm: swapper Not tainted 6.15.0-rc5-00026-g5fcc9bf84ee5 #1 PREEMPT
    Hardware name: ARM Integrator/CP (Device Tree)
    PC is at __kmalloc_cache_noprof+0xec/0x39c
    LR is at __kmalloc_cache_noprof+0x34/0x39c
    ...
    Call trace:
     __kmalloc_cache_noprof from of_syscon_register+0x7c/0x310
     of_syscon_register from device_node_get_regmap+0xa4/0xb0
     device_node_get_regmap from intcp_init_early+0xc/0x40
     intcp_init_early from start_kernel+0x60/0x688
     start_kernel from 0x0
    
    The crash is seen due to a dereferenced pointer which is not supposed to be
    NULL but is NULL if the memory management subsystem has not been
    initialized. The crash is not seen with all versions of gcc. Some versions
    such as gcc 9.x apparently do not dereference the pointer, presumably if
    tracing is disabled. The problem has been reproduced with gcc 10.x, 11.x,
    and 13.x. Either case, if the crash is not seen, the call to
    syscon_regmap_lookup_by_compatible returns -ENOMEM, and
    sched_clock_register is never called.
    
    Fix the problem by moving the early initialization code into the standard
    machine initialization code.
    
    Fixes: bdb249fce9ad4 ("ARM: integrator: read counter using syscon/regmap")
    Cc: Linus Walleij <[email protected]>
    Signed-off-by: Guenter Roeck <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Linus Walleij <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ASoC: cs35l56: Fix flushing of IRQ work in cs35l56_sdw_remove() [+ + +]
Author: Richard Fitzgerald <[email protected]>
Date:   Thu May 21 13:30:57 2026 +0100

    ASoC: cs35l56: Fix flushing of IRQ work in cs35l56_sdw_remove()
    
    [ Upstream commit 18e7bd9f2446664053f8c34b72abd4606d22d858 ]
    
    Use flush_work() instead of cancel_work_sync() to terminate pending IRQ
    work in cs35l56_sdw_remove(). And flush_work() again after masking the
    interrupts to flush any queueing that was racing with the masking. This is
    the same sequence as cs35l56_sdw_system_suspend().
    
    cs35l56_sdw_interrupt() takes the pm_runtime to prevent the bus powering-
    down before the interrupt status can be read and handled. The work releases
    this pm_runtime. So cancelling it, instead of flushing, could leave an
    unbalanced pm_runtime.
    
    Signed-off-by: Richard Fitzgerald <[email protected]>
    Fixes: e49611252900 ("ASoC: cs35l56: Add driver for Cirrus Logic CS35L56")
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
batman-adv: bla: fix report_work leak on backbone_gw purge [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Sun May 10 11:43:20 2026 +0200

    batman-adv: bla: fix report_work leak on backbone_gw purge
    
    commit 0459430add32ea41f3e2ef9351610e6d33627a6b upstream.
    
    batadv_bla_purge_backbone_gw() removes stale backbone gateway entries,
    but fails to properly handle their associated report_work:
    
    - If report_work is running, the purge must wait for it to finish before
      freeing the backbone_gw, otherwise the worker may access freed memory
      (e.g. bat_priv).
    - If report_work is pending, the purge must cancel it and release the
      reference held for that pending work item.
    
    The previous implementation called hlist_for_each_entry_safe() inside a
    spin_lock_bh() section, but cancel_work_sync() may sleep and therefore
    cannot be called from within a spinlock-protected region.
    
    Restructure the loop to handle one entry per spinlock critical section:
    acquire the lock, find the next entry to purge, remove it from the hash
    list, then release the lock before calling cancel_work_sync() and
    dropping the hash_entry reference. Repeat until no more entries require
    purging.
    
    Cc: [email protected]
    Fixes: 23721387c409 ("batman-adv: add basic bridge loop avoidance code")
    Reviewed-by: Simon Wunderlich <[email protected]>
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: clear current gateway during teardown [+ + +]
Author: Ruijie Li <[email protected]>
Date:   Thu May 14 16:13:25 2026 +0800

    batman-adv: clear current gateway during teardown
    
    commit a340a51ed801eab7bb454150c226323b865263cc upstream.
    
    batadv_gw_node_free() removes the gateway list entries during mesh teardown,
    but it does not clear the currently selected gateway. This leaves stale
    gateway state behind across cleanup and can break a later mesh recreation.
    
    Clear bat_priv->gw.curr_gw before walking the gateway list so the selected
    gateway reference is dropped as part of teardown.
    
    Fixes: 2265c1410864 ("batman-adv: gateway election code refactoring")
    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]>
    Signed-off-by: Ruijie Li <[email protected]>
    Signed-off-by: Zhanpeng Li <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: dat: handle forward allocation error [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Wed May 13 09:01:34 2026 +0200

    batman-adv: dat: handle forward allocation error
    
    commit 2d8826a2d3657cea66fb0370f9e521575a673871 upstream.
    
    batadv_dat_forward_data() calls pskb_copy_for_clone() to duplicate an skb
    for each DHT candidate, but does not check the return value before passing
    it to batadv_send_skb_prepare_unicast_4addr(). That function dereferences
    the skb unconditionally, so a failed allocation triggers a NULL pointer
    dereference.
    
    Skip forwarding to the current DHT candidate on allocation failure.
    
    Cc: [email protected]
    Fixes: 785ea1144182 ("batman-adv: Distributed ARP Table - create DHT helper functions")
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Reviewed-by: Yuan Tan <[email protected]>
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: fix fragment reassembly length accounting [+ + +]
Author: Ruide Cao <[email protected]>
Date:   Wed May 13 11:58:15 2026 +0800

    batman-adv: fix fragment reassembly length accounting
    
    commit 9cd3f16c320bfdadd4509358122368deb56a5741 upstream.
    
    batman-adv keeps a running payload length for queued fragments and uses it
    to validate a fragment chain before reassembly.
    
    That accounting currently allows the accumulated fragment length to be
    truncated during updates. As a result, malformed fragment chains can
    bypass the intended validation and drive reassembly with inconsistent
    length state, leading to a local denial of service.
    
    Fix the accounting by storing the accumulated length in a length-typed
    field and rejecting update overflows before the existing validation logic
    runs.
    
    The fix was verified against the original reproducer and against valid
    fragment reassembly paths.
    
    Fixes: 610bfc6bc99b ("batman-adv: Receive fragmented packets and merge")
    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]>
    Signed-off-by: Ruide Cao <[email protected]>
    Tested-by: Ren Wei <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: fix tp_meter counter underflow during shutdown [+ + +]
Author: Luxiao Xu <[email protected]>
Date:   Mon May 11 18:52:09 2026 +0200

    batman-adv: fix tp_meter counter underflow during shutdown
    
    commit 94f3b133168d1c49895e7cc6afbcf1cc0b354602 upstream.
    
    batadv_tp_sender_shutdown() unconditionally decrements the "sending"
    atomic counter. If multiple paths (e.g. timeout, user cancel, and
    normal finish) call this function, the counter can underflow to -1.
    
    Since the sender logic treats any non-zero value as "still sending",
    a negative value causes the sender kthread to loop indefinitely.
    This leads to a use-after-free when the interface is removed while
    the zombie thread is still active.
    
    Fix this by using atomic_xchg() to ensure the counter only transitions
    from 1 to 0 once.
    
    Fixes: 33a3bb4a3345 ("batman-adv: throughput meter implementation")
    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]>
    Signed-off-by: Luxiao Xu <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    [sven: added missing change in batadv_tp_send]
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: frag: disallow unicast fragment in fragment [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Wed May 13 09:01:36 2026 +0200

    batman-adv: frag: disallow unicast fragment in fragment
    
    commit bc62216dc8e221e3781afa14430f45208bfa9af9 upstream.
    
    batadv_frag_skb_buffer() is called by batadv_batman_skb_recv() when a
    BATADV_UNICAST_FRAG packet is received. Once all fragments are collected
    and the packet is reassembled, batadv_recv_frag_packet() calls
    batadv_batman_skb_recv() again to process the defragmented payload.
    
    A malicious sender can craft a BATADV_UNICAST_FRAG packet whose reassembled
    payload is itself a BATADV_UNICAST_FRAG packet (matryoshka-style nesting).
    Each nesting level recurses through batadv_batman_skb_recv() without bound,
    growing the kernel stack until it is exhausted.
    
    Since refragmentation or fragments in fragments are not actually allowed,
    discard all packets which are still BATADV_UNICAST_FRAG packets after the
    defragmentation process.
    
    Cc: [email protected]
    Fixes: 610bfc6bc99b ("batman-adv: Receive fragmented packets and merge")
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Reviewed-by: Yuan Tan <[email protected]>
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: mcast: fix use-after-free in orig_node RCU release [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Thu May 14 19:22:02 2026 +0200

    batman-adv: mcast: fix use-after-free in orig_node RCU release
    
    commit 20c2d6a20ca936f5aaa6dd40f73f262ac45c87cc upstream.
    
    batadv_mcast_purge_orig() removes entries from RCU-protected hlists but
    does not wait for an RCU grace period before returning. Concurrent RCU
    readers may still accesses references to those entries at the point of
    removal. RCU-protected readers trying to operate on entries like
    orig->mcast_want_all_ipv6_node will then access already freed memory.
    
    Fix this by moving batadv_mcast_purge_orig() to batadv_orig_node_release(),
    just before the call_rcu() invocation. This ensures RCU readers that were
    active at purge time have drained before the orig_node memory is reclaimed.
    
    Cc: [email protected]
    Fixes: ab49886e3da7 ("batman-adv: Add IPv4 link-local/IPv6-ll-all-nodes multicast support")
    Acked-by: Linus Lüssing <[email protected]>
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: tp_meter: avoid use of uninit sender vars [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Wed May 13 09:01:35 2026 +0200

    batman-adv: tp_meter: avoid use of uninit sender vars
    
    commit 6c65cf23d4c6170fcf5714c32aa64689718cb142 upstream.
    
    batadv_tp_recv_ack() and batadv_tp_stop() are only valid for tp_vars in the
    BATADV_TP_SENDER role. When called with a BATADV_TP_RECEIVER role, it
    proceeds to read sender-only members that were never initialized, leading
    to undefined behavior.
    
    This can be triggered when a node that is currently acting as a receiver in
    an ongoing tp_meter session receives a malicious ACK packet.
    
    Guard against this by checking tp_vars->role immediately after the
    lookup and bailing out if it is not BATADV_TP_SENDER, before any of
    those members are accessed.
    
    Cc: [email protected]
    Fixes: 33a3bb4a3345 ("batman-adv: throughput meter implementation")
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Reviewed-by: Yuan Tan <[email protected]>
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: tp_meter: fix race condition in send error reporting [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Wed May 13 23:38:54 2026 +0200

    batman-adv: tp_meter: fix race condition in send error reporting
    
    commit 71dce47f0758537fff78fddb5fb0d4632d29b29f upstream.
    
    batadv_tp_sender_shutdown() previously used two separate variables to track
    session state: sending (an atomic flag indicating whether the session was
    active) and reason (a plain enum storing the stop reason). This introduced
    a race window between the two writes: after sending was cleared to 0,
    batadv_tp_send() could observe the stopped state and call
    batadv_tp_sender_end() before reason was written, causing the wrong stop
    reason to be reported to the caller.
    
    Fix this by consolidating both variables into a single atomic send_result,
    which holds 0 while the session is running and the stop reason once it
    ends.
    
    Cc: [email protected]
    Fixes: 33a3bb4a3345 ("batman-adv: throughput meter implementation")
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: tp_meter: fix tp_vars reference leak in receiver shutdown [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Sun May 10 11:31:03 2026 +0200

    batman-adv: tp_meter: fix tp_vars reference leak in receiver shutdown
    
    commit 77098e4bea37af51d3962efa88a5af2ea5e1ac57 upstream.
    
    The receiver shutdown timer handler, batadv_tp_receiver_shutdown(), is
    responsible for releasing the tp_vars reference it holds. However, the
    existing logic for coordinating this release with batadv_tp_stop_all() was
    flawed.
    
    timer_shutdown_sync() guarantees the timer will not fire again after it
    returns, but it returns non-zero only when the timer was pending at the
    time of the call. If the timer had already expired (and
    batadv_tp_stop_all() would unsucessfully try to  rearm itself),
    batadv_tp_stop_all() skips its batadv_tp_vars_put(), and
    batadv_tp_receiver_shutdown() fails to put its own reference as well.
    
    Fix this by introducing a new atomic variable receiving that is set to 1
    when the receiver is initialized and cleared atomically with atomic_xchg()
    by whichever side claims it first. Only the side that observes the
    transition from 1 to 0 is responsible for releasing the tp_vars timer
    reference, eliminating the uncertainty.
    
    Cc: [email protected]
    Fixes: 3d3cf6a7314a ("batman-adv: stop tp_meter sessions during mesh teardown")
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: tt: fix negative last_changeset_len [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Sat May 2 19:53:21 2026 +0200

    batman-adv: tt: fix negative last_changeset_len
    
    commit fc92cdfcb295cefa4344d71a527d61b638b7bfc4 upstream.
    
    batadv_piv_tt::last_changeset_len len was declared as s16, but the field is
    never intended to hold a negative value. When a value greater than 32767 is
    assigned, it wraps to a negative signed integer.
    
    In batadv_send_my_tt_response(), last_changeset_len is temporarily widened
    to s32. The incorrectly negative s16 value propagates into the s32, causing
    batadv_tt_prepare_tvlv_local_data() to allocate a full sized buffer but
    populates only a small portion of it with the collected changeset. All
    remaining bits are kept uninitialized.
    
    Using an u16 avoids this type confusion and ensures that no (negative) sign
    extension is performed in batadv_send_my_tt_response().
    
    Cc: [email protected]
    Fixes: a73105b8d4c7 ("batman-adv: improved client announcement mechanism")
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: tt: fix negative tt_buff_len [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Sat May 2 19:53:21 2026 +0200

    batman-adv: tt: fix negative tt_buff_len
    
    commit b64963a2ceeb7529310b6cf253a1e540784422f4 upstream.
    
    batadv_orig_node::tt_buff_len was declared as s16, but the field is never
    intended to hold a negative value. When a value greater than 32767 is
    assigned, it wraps to a negative signed integer.
    
    In batadv_send_other_tt_response(), tt_buff_len is temporarily widened to
    s32. The incorrectly negative s16 value propagates into the s32, causing
    batadv_tt_prepare_tvlv_global_data() to allocate a full sized buffer but
    populates only a small portion of it with the collected changeset. All
    remaining bits are kept uninitialized.
    
    Using an u16 avoids this type confusion and ensures that no (negative) sign
    extension is performed in batadv_send_other_tt_response().
    
    Cc: [email protected]
    Fixes: a73105b8d4c7 ("batman-adv: improved client announcement mechanism")
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Bluetooth: bnep: Fix UAF read of dev->name [+ + +]
Author: Jann Horn <[email protected]>
Date:   Tue May 12 22:15:39 2026 +0200

    Bluetooth: bnep: Fix UAF read of dev->name
    
    commit 59e932ded949fa6f0340bf7c6d7818f962fa4fd2 upstream.
    
    bnep_add_connection() needs to keep holding the bnep_session_sem while
    reading dev->name (just like bnep_get_connlist() does); otherwise the
    bnep_session() thread can concurrently free the net_device, which can for
    example be triggered by a concurrent bnep_del_connection().
    
    (This UAF is fairly uninteresting from a security perspective;
    calling bnep_add_connection() requires passing a capable(CAP_NET_ADMIN)
    check. It also requires completely tearing down a netdev during a fairly
    tight race window.)
    
    Cc: [email protected]
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Jann Horn <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Bluetooth: btmtk: add the function to get the fw name [+ + +]
Author: Sean Wang <[email protected]>
Date:   Wed May 15 16:15:17 2024 -0700

    Bluetooth: btmtk: add the function to get the fw name
    
    [ Upstream commit 00f993fdec06c8f036a1b9c8ee6b004c17143bd1 ]
    
    Include a shared function to get the firmware name, to prevent repeating
    code for similar chipsets.
    
    Signed-off-by: Sean Wang <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Stable-dep-of: dd1dda6b8d6e ("Bluetooth: btmtk: fix urb->setup_packet leak in error paths")
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: btmtk: fix urb->setup_packet leak in error paths [+ + +]
Author: Jiajia Liu <[email protected]>
Date:   Mon May 18 10:24:02 2026 +0800

    Bluetooth: btmtk: fix urb->setup_packet leak in error paths
    
    [ Upstream commit dd1dda6b8d6e1f4376a5b3055a04f0ecbdb4d6bd ]
    
    The setup_packet of control urb is not freed if usb_submit_urb fails or
    the submitted urb is killed. Add free in these two paths.
    
    Fixes: a1c49c434e150 ("Bluetooth: btusb: Add protocol support for MediaTek MT7668U USB devices")
    Signed-off-by: Jiajia Liu <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: btmtk: move btusb_mtk_hci_wmt_sync to btmtk.c [+ + +]
Author: Chris Lu <[email protected]>
Date:   Thu Jul 4 14:01:13 2024 +0800

    Bluetooth: btmtk: move btusb_mtk_hci_wmt_sync to btmtk.c
    
    [ Upstream commit d019930b0049fc2648a6b279893d8ad330596e81 ]
    
    Move btusb_mtk_hci_wmt_sync from btusb.c to btmtk.c which holds
    vendor specific stuff and would make btusb.c clean.
    
    Add usb.h header to btmtksdio.c/btmtkuart.c for usb related element
    defined in btmtk.h
    
    Signed-off-by: Sean Wang <[email protected]>
    Signed-off-by: Chris Lu <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Stable-dep-of: dd1dda6b8d6e ("Bluetooth: btmtk: fix urb->setup_packet leak in error paths")
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: btmtk: rename btmediatek_data [+ + +]
Author: Chris Lu <[email protected]>
Date:   Thu Jul 4 14:01:11 2024 +0800

    Bluetooth: btmtk: rename btmediatek_data
    
    [ Upstream commit d3e6236053958a8f1c7c7a885d9cecdd383e4615 ]
    
    Rename btmediatek_data to have a consistent prefix throughout the driver.
    
    Signed-off-by: Sean Wang <[email protected]>
    Signed-off-by: Chris Lu <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Stable-dep-of: dd1dda6b8d6e ("Bluetooth: btmtk: fix urb->setup_packet leak in error paths")
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: btusb: mediatek: refactor the function btusb_mtk_reset [+ + +]
Author: Hao Qin <[email protected]>
Date:   Wed May 15 16:15:19 2024 -0700

    Bluetooth: btusb: mediatek: refactor the function btusb_mtk_reset
    
    [ Upstream commit 4c0c28f2bbec0c51395fd1f13c697da67483964b ]
    
    Extract the function btusb_mtk_subsys_reset from the btusb_mtk_reset
    for the future handling of resetting bluetooth controller without
    the USB reset.
    
    Co-developed-by: Sean Wang <[email protected]>
    Signed-off-by: Sean Wang <[email protected]>
    Signed-off-by: Hao Qin <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Stable-dep-of: dd1dda6b8d6e ("Bluetooth: btmtk: fix urb->setup_packet leak in error paths")
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: fix UAF in l2cap_sock_cleanup_listen() vs l2cap_conn_del() [+ + +]
Author: Safa Karakuş <[email protected]>
Date:   Sat May 16 21:15:04 2026 +0300

    Bluetooth: fix UAF in l2cap_sock_cleanup_listen() vs l2cap_conn_del()
    
    commit ab1513597c6cf17cd1ad2a21e3b045421b48e022 upstream.
    
    bt_accept_dequeue() unlinks a not-yet-accepted child from the parent
    accept queue and release_sock()s it before returning, so the returned
    sk has no caller reference and is unlocked.
    
    l2cap_sock_cleanup_listen() walks these children on listening-socket
    close.  A concurrent HCI disconnect drives hci_rx_work ->
    l2cap_conn_del() which runs l2cap_chan_del() + l2cap_sock_kill() and
    frees the child sk and its l2cap_chan; cleanup_listen() then uses both:
    
      BUG: KASAN: slab-use-after-free in l2cap_sock_kill
        l2cap_sock_kill / l2cap_sock_cleanup_listen / __x64_sys_close
      Freed by: l2cap_conn_del -> l2cap_sock_close_cb -> l2cap_sock_kill
    
    This is distinct from the two fixes already in this area: commit
    e83f5e24da741 ("Bluetooth: serialize accept_q access") serialises the
    accept_q list/poll and takes temporary refs inside bt_accept_dequeue(),
    and CVE-2025-39860 serialises the userspace close()/accept() race by
    calling cleanup_listen() under lock_sock() in l2cap_sock_release().
    Neither covers l2cap_conn_del() running from hci_rx_work, so this UAF
    still reproduces on current bluetooth/master.
    
    Take the reference at the source: bt_accept_dequeue() does sock_hold()
    while sk is still locked, before release_sock(); callers sock_put().
    cleanup_listen() pins the chan with l2cap_chan_hold_unless_zero() under
    a brief child sk lock (serialising vs l2cap_sock_teardown_cb()), drops
    it before l2cap_chan_lock(), and skips a duplicate l2cap_sock_kill() on
    SOCK_DEAD.  conn->lock is not taken here: cleanup_listen() runs under
    the parent sk lock and that would invert
    conn->lock -> chan->lock -> sk_lock (lockdep).
    
    KASAN/SMP: an unprivileged listen/close vs HCI-disconnect race produced
    12 use-after-free reports per run before this change; 0, and no lockdep
    report, over 1600+ raced iterations after it on bluetooth/master.
    
    Fixes: 15f02b910562 ("Bluetooth: L2CAP: Add initial code for Enhanced Credit Based Mode")
    Cc: [email protected]
    Reported-by: Siwei Zhang <[email protected]>
    Reviewed-by: Siwei Zhang <[email protected]>
    Signed-off-by: Safa Karakuş <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Bluetooth: hci_uart: fix UAFs and race conditions in close and init paths [+ + +]
Author: Mingyu Wang <[email protected]>
Date:   Mon May 18 10:49:49 2026 +0800

    Bluetooth: hci_uart: fix UAFs and race conditions in close and init paths
    
    commit c1bb9336ae6b54a5f6a353c4bd4ed9a4307e429b upstream.
    
    Vulnerabilities leading to Use-After-Free (UAF) and Null Pointer
    Dereference (NPD) conditions were observed in the lifecycle management
    of hci_uart.
    
    The primary issue arises because the workqueues (init_ready and
    write_work) are only flushed/cancelled if the HCI_UART_PROTO_READY
    flag is set during TTY close. If a hangup occurs before setup completes,
    hci_uart_tty_close() skips the teardown of these workqueues and
    proceeds to free the `hu` struct. When the scheduled work executes
    later, it blindly dereferences the freed `hu` struct.
    
    Furthermore, several data races and UAFs were identified in the teardown
    sequence:
    1. Calling hci_uart_flush() from hci_uart_close() without effectively
       disabling write_work causes a race condition where both can concurrently
       double-free hu->tx_skb. This happens because protocol timers can
       concurrently invoke hci_uart_tx_wakeup() and requeue write_work.
    2. Calling hci_free_dev(hdev) before hu->proto->close(hu) causes a UAF
       when vendor specific protocol close callbacks dereference hu->hdev.
    3. In the initialization error paths, failing to take the proto_lock
       write lock before clearing PROTO_READY leads to races with active
       readers. Additionally, hci_uart_tty_receive() accesses hu->hdev
       outside the read lock, leading to UAFs if the initialization error
       path frees hdev concurrently.
    
    Fix these synchronization and lifecycle issues by:
    1. Re-ordering hci_uart_tty_close() to clear HCI_UART_PROTO_READY first,
       followed immediately by a cancel_work_sync(&hu->write_work). Clearing
       the flag locks out concurrent protocol timers from successfully invoking
       hci_uart_tx_wakeup(), effectively rendering the cancellation permanent
       and preventing the tx_skb double-free.
    2. Note: Clearing PROTO_READY early causes hci_uart_close() to skip
       hu->proto->flush(). This is perfectly safe in the tty_close path
       because hu->proto->close() executes shortly after, which intrinsically
       purges all protocol SKB queues and tears down the state.
    3. Relocating hu->proto->close(hu) strictly prior to hci_free_dev(hdev)
       across all close and error paths to prevent vendor-level UAFs.
    4. Moving the hdev->stat.byte_rx increment in hci_uart_tty_receive()
       inside the proto_lock read-side critical section to safely synchronize
       with device unregistration.
    5. Adding cancel_work_sync(&hu->write_work) to hci_uart_close() to safely
       flush the workqueue before hci_uart_flush() is invoked via the HCI core.
    6. Utilizing cancel_work_sync() instead of disable_work_sync() across
       all paths to prevent permanently breaking user-space retry capabilities.
    
    Fixes: 3b799254cf6f ("Bluetooth: hci_uart: Cancel init work before unregistering")
    Cc: [email protected]
    Signed-off-by: Mingyu Wang <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Bluetooth: ISO: drop ISO_END frames received without prior ISO_START [+ + +]
Author: David Carlier <[email protected]>
Date:   Fri May 15 07:25:25 2026 +0100

    Bluetooth: ISO: drop ISO_END frames received without prior ISO_START
    
    commit 84c24fb151fc1179355296d7ff29129ac7c42129 upstream.
    
    ISO data PDUs carry a packet-boundary flag indicating START, CONT, END
    or SINGLE. The ISO_CONT branch of iso_recv() guards against a missing
    ISO_START by checking conn->rx_len before touching conn->rx_skb, but
    ISO_END does not.
    
    If a peer sends an ISO_END as the first packet on a fresh ISO
    connection, conn->rx_skb is still NULL and conn->rx_len is zero, so
    skb_put(conn->rx_skb, ...) dereferences NULL and oopses. For BIS,
    where receivers sync to a broadcaster without pairing, any broadcaster
    on the air can trigger this.
    
    Mirror the ISO_CONT check at the top of ISO_END so a stray end fragment
    is logged and dropped instead of crashing the host.
    
    Fixes: ccf74f2390d6 ("Bluetooth: Add BTPROTO_ISO socket type")
    Cc: [email protected]
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: David Carlier <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Bluetooth: MGMT: validate Add Extended Advertising Data length [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Fri May 15 10:38:19 2026 -0400

    Bluetooth: MGMT: validate Add Extended Advertising Data length
    
    commit d3f7d17960ed50df3a6709c5158caff989c8c905 upstream.
    
    MGMT_OP_ADD_EXT_ADV_DATA is registered as a variable-length command,
    with MGMT_ADD_EXT_ADV_DATA_SIZE as the fixed header size.  The handler
    then uses cp->adv_data_len and cp->scan_rsp_len to validate and copy
    cp->data, but it never checks that those bytes are part of the mgmt
    command payload.
    
    A short command can therefore make add_ext_adv_data() pass an
    out-of-bounds pointer into tlv_data_is_valid().  If the bytes beyond
    the command buffer are addressable, they can also be copied into the
    advertising instance as scan response data, where the caller can read
    them back via MGMT_OP_GET_ADV_INSTANCE.  The trigger requires
    CAP_NET_ADMIN in the initial user namespace; KASAN reports an 8-byte
    slab-out-of-bounds read.
    
    Reject commands whose length does not match the fixed header plus both
    advertising data lengths before parsing cp->data.
    
    Fixes: 12410572833a ("Bluetooth: Break add adv into two mgmt commands")
    Cc: [email protected]
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Bluetooth: serialize accept_q access [+ + +]
Author: Jiexun Wang <[email protected]>
Date:   Wed May 6 19:43:30 2026 +0800

    Bluetooth: serialize accept_q access
    
    commit e83f5e24da741fa9405aeeff00b08c5ee7c37b88 upstream.
    
    bt_sock_poll() walks the accept queue without synchronization, while
    child teardown can unlink the same socket and drop its last reference.
    The unsynchronized accept queue walk has existed since the initial
    Bluetooth import.
    
    Protect accept_q with a dedicated lock for queue updates and polling.
    Also rework bt_accept_dequeue() to take temporary child references under
    the queue lock before dropping it and locking the child socket.
    
    Fixes: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Reported-by: Jann Horn <[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]>
    Signed-off-by: Jiexun Wang <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Jiexun Wang <[email protected]>
    Reviewed-by: Jann Horn <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
bpf, skmsg: fix verdict sk_data_ready racing with ktls rx [+ + +]
Author: Xingwang Xiang <[email protected]>
Date:   Sun May 17 23:56:26 2026 +0900

    bpf, skmsg: fix verdict sk_data_ready racing with ktls rx
    
    [ Upstream commit ddf8029623a1af20e984c040e89ff918158397ab ]
    
    sk_psock_strp_data_ready() already checks tls_sw_has_ctx_rx() and
    defers to psock->saved_data_ready when a TLS RX context is present,
    avoiding a conflict with the TLS strparser's ownership of the receive
    queue (commit e91de6afa81c, "bpf: Fix running sk_skb program types
    with ktls").
    
    sk_psock_verdict_data_ready() has no equivalent guard.  When a socket
    is inserted into a sockmap (BPF_SK_SKB_VERDICT) before TLS RX is
    configured, tls_sw_strparser_arm() saves sk_psock_verdict_data_ready
    as rx_ctx->saved_data_ready.  On data arrival:
    
      tls_data_ready -> tls_strp_data_ready -> tls_rx_msg_ready
        -> saved_data_ready() = sk_psock_verdict_data_ready()
          -> tcp_read_skb() drains sk_receive_queue via __skb_unlink()
             without calling tcp_eat_skb(), so copied_seq is not advanced.
    
    tls_strp_msg_load() then finds tcp_inq() >= full_len (stale), calls
    tcp_recv_skb() on the now-empty queue, hits WARN_ON_ONCE(!first), and
    returns with rx_ctx->strp.anchor.frag_list pointing at a psock-owned
    (potentially freed) skb.  tls_decrypt_sg() subsequently walks that
    frag_list: use-after-free.
    
    Apply the same fix as sk_psock_strp_data_ready(): if a TLS RX context
    is present, call psock->saved_data_ready (sock_def_readable) to wake
    recv() waiters and return immediately, leaving the receive queue
    untouched.  TLS retains sole ownership of the queue and decrypts the
    record normally through tls_sw_recvmsg().
    
    Fixes: ef5659280eb1 ("bpf, sockmap: Allow skipping sk_skb parser program")
    Signed-off-by: Xingwang Xiang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bridge: mcast: Fix a possible use-after-free when removing a bridge port [+ + +]
Author: Ido Schimmel <[email protected]>
Date:   Sun May 17 15:11:21 2026 +0300

    bridge: mcast: Fix a possible use-after-free when removing a bridge port
    
    [ Upstream commit 4df78ff02629c7729168f0696a7a2123c389818d ]
    
    When per-VLAN multicast snooping is enabled, the bridge iterates over
    all the bridge ports, disables the per-port multicast context on each
    port and enables the per-{port, VLAN} multicast contexts instead. The
    reverse happens when per-VLAN multicast snooping is disabled.
    
    When global multicast snooping is enabled, the bridge iterates over all
    the bridge ports and enables the per-port multicast context on each
    port. The reverse happens when multicast snooping is disabled.
    
    The above scheme can result in a situation where both types of contexts
    (per-port and per-{port, VLAN}) are enabled on a single bridge port:
    
     # ip link add name br1 up type bridge mcast_snooping 1 mcast_querier 1 vlan_filtering 1
     # ip link add name dummy1 up master br1 type dummy
     # ip link set dev br1 type bridge mcast_vlan_snooping 1
     # ip link set dev br1 type bridge mcast_snooping 0
     # ip link set dev br1 type bridge mcast_snooping 1
    
    This is not intended and it is a problem since the commit cited below.
    Prior to this commit, when removing a bridge port,
    br_multicast_disable_port() would disable the per-port multicast context
    and the per-{port, VLAN} multicast contexts would get disabled when
    flushing VLANs.
    
    After this commit, br_multicast_disable_port() only disables the
    per-port multicast context if per-VLAN multicast snooping is disabled.
    If both types of contexts were enabled on the port when it was removed,
    the per-port multicast context would remain enabled when freeing the
    bridge port, leading to a use-after-free [1].
    
    Fix by preventing the bridge from enabling / disabling the per-port
    multicast contexts when toggling global multicast snooping if per-VLAN
    multicast snooping is enabled.
    
    [1]
    ODEBUG: free active (active state 0) object: ffff88810f8bda78 object type: timer_list hint: br_ip6_multicast_port_query_expired (net/bridge/br_multicast.c:1927)
    WARNING: lib/debugobjects.c:629 at debug_print_object+0x1b1/0x3e0, CPU#5: swapper/5/0
    [...]
    Call Trace:
    <IRQ>
    __debug_check_no_obj_freed (lib/debugobjects.c:1116)
    kfree (mm/slub.c:2620 mm/slub.c:6250 mm/slub.c:6565)
    kobject_cleanup (lib/kobject.c:689)
    rcu_do_batch (kernel/rcu/tree.c:2617)
    rcu_core (kernel/rcu/tree.c:2869)
    handle_softirqs (kernel/softirq.c:622)
    __irq_exit_rcu (kernel/softirq.c:656 kernel/softirq.c:496 kernel/softirq.c:735)
    irq_exit_rcu (kernel/softirq.c:752)
    sysvec_apic_timer_interrupt (arch/x86/kernel/apic/apic.c:1061 (discriminator 47) arch/x86/kernel/apic/apic.c:1061 (discriminator 47))
    </IRQ>
    
    Fixes: 4b30ae9adb04 ("net: bridge: mcast: re-implement br_multicast_{enable, disable}_port functions")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/87qznowlfs.ffs@tglx/
    Reported-by: Thomas Gleixner <[email protected]>
    Acked-by: Nikolay Aleksandrov <[email protected]>
    Signed-off-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]>

 
btrfs: tracepoints: fix sleep while in atomic context in btrfs_sync_file() [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Tue Apr 28 16:58:56 2026 +0100

    btrfs: tracepoints: fix sleep while in atomic context in btrfs_sync_file()
    
    [ Upstream commit c73370c677646e86fc4b1780fb07027bdf847375 ]
    
    The trace event btrfs_sync_file() is called in an atomic context (all trace
    events are) and its call to dput(), which is needed due to the call to
    dget_parent(), can sleep, triggering a kernel splat.
    
    This can be reproduced by enabling the trace event and running btrfs/056
    from fstests for example. The splat shown in dmesg is the following:
    
      [53.919] BUG: sleeping function called from invalid context at fs/dcache.c:970
      [53.947] in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 32773, name: xfs_io
      [53.988] preempt_count: 2, expected: 0
      [53.967] RCU nest depth: 0, expected: 0
      [53.943] Preemption disabled at:
      [53.944] [<0000000000000000>] 0x0
      [54.078] CPU: 0 UID: 0 PID: 32773 Comm: xfs_io Tainted: G        W           7.1.0-rc1-btrfs-next-232+ #1 PREEMPT(full)
      [54.070] Tainted: [W]=WARN
      [54.071] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.2-0-gea1b7a073390-prebuilt.qemu.org 04/01/2014
      [54.072] Call Trace:
      [54.074]  <TASK>
      [54.076]  dump_stack_lvl+0x56/0x80
      [54.079]  __might_resched.cold+0xd6/0x10f
      [54.072]  dput.part.0+0x24/0x110
      [54.078]  trace_event_raw_event_btrfs_sync_file+0x75/0x140 [btrfs]
      [54.089]  btrfs_sync_file+0x1ed/0x530 [btrfs]
      [54.087]  ? __handle_mm_fault+0x8ae/0xed0
      [54.089]  btrfs_do_write_iter+0x172/0x210 [btrfs]
      [54.091]  vfs_write+0x21f/0x450
      [54.094]  __x64_sys_pwrite64+0x8d/0xc0
      [54.096]  ? do_user_addr_fault+0x20c/0x670
      [54.099]  do_syscall_64+0x60/0xf20
      [54.092]  ? clear_bhb_loop+0x60/0xb0
      [54.094]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    So stop using dget_parent() and dput() and access the parent dentry
    directly as dentry->d_parent. This is also what ext4 is doing in
    its equivalent trace event ext4_sync_file_enter().
    
    Fixes: a85b46db143f ("btrfs: tracepoints: get correct superblock from dentry in event btrfs_sync_file()")
    Reviewed-by: Boris Burkov <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
cifs: Fix busy dentry used after unmounting [+ + +]
Author: Zhihao Cheng <[email protected]>
Date:   Tue May 19 17:18:05 2026 +0800

    cifs: Fix busy dentry used after unmounting
    
    commit c68337442f03953237a94577beb468ab2662a851 upstream.
    
    Since commit 340cea84f691c ("cifs: open files should not hold ref on
    superblock"), cifs file only holds the dentry ref_cnt, the cifs file
    close work(cfile->deferred) could be executed after unmounting, which
    will trigger a warning in generic_shutdown_super:
     BUG: Dentry 00000000a14a6845{i=c,n=file}  still in use (1) [unmount of
     cifs cifs]
    
    The detailed processs is:
       process A           process B           kworker
     fd = open(PATH)
      vfs_open
       file->__f_path = *path // dentry->d_lockref.count = 1
       cifs_open
        cifs_new_fileinfo
         cfile->dentry = dget(dentry) // dentry->d_lockref.count = 2
     close(fd)
      __fput
      cifs_close
       queue_delayed_work(deferredclose_wq, cfile->deferred)
      dput(dentry) // dentry->d_lockref.count = 1
                                             smb2_deferred_work_close
                                              _cifsFileInfo_put
                                               list_del(&cifs_file->flist)
                        umount
                         cleanup_mnt
                          deactivate_super
                           cifs_kill_sb
                            cifs_close_all_deferred_files_sb
                             cifs_close_all_deferred_files
                              // cannot find cfile, skip _cifsFileInfo_put
                            kill_anon_super
                             generic_shutdown_super
                              shrink_dcache_for_umount
                               umount_check
                                WARN ! // dentry->d_lockref.count = 1
                                               cifsFileInfo_put_final
                                                dput(cifs_file->dentry)
                                                // dentry->d_lockref.count = 0
    
    Fix it by flushing 'deferredclose_wq' before calling kill_anon_super.
    
    Fetch a reproducer in https://bugzilla.kernel.org/show_bug.cgi?id=221548.
    
    Fixes: 340cea84f691c ("cifs: open files should not hold ref on superblock")
    Cc: [email protected]
    Reviewed-by: Shyam Prasad N <[email protected]>
    Signed-off-by: Zhihao Cheng <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
device property: set fwnode->secondary to NULL in fwnode_init() [+ + +]
Author: Bartosz Golaszewski <[email protected]>
Date:   Wed May 6 13:57:00 2026 +0200

    device property: set fwnode->secondary to NULL in fwnode_init()
    
    commit 215c90ee656114f5e8c32408228d97082f8e0eef upstream.
    
    If a firmware node is allocated on the stack (for instance: temporary
    software node whose life-time we control) or on the heap - but using a
    non-zeroing allocation function - and initialized using fwnode_init(),
    its secondary pointer will contain uninitalized memory which likely will
    be neither NULL nor IS_ERR() and so may end up being dereferenced (for
    example: in dev_to_swnode()). Set fwnode->secondary to NULL on
    initialization.
    
    Cc: stable <[email protected]>
    Fixes: 01bb86b380a3 ("driver core: Add fwnode_init()")
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Reviewed-by: Rafael J. Wysocki (Intel) <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Reviewed-by: Sakari Ailus <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
driver core: generalize driver_override in struct device [+ + +]
Author: Danilo Krummrich <[email protected]>
Date:   Wed May 20 14:01:59 2026 +0000

    driver core: generalize driver_override in struct device
    
    [ Upstream commit cb3d1049f4ea77d5ad93f17d8ac1f2ed4da70501 ]
    
    Currently, there are 12 busses (including platform and PCI) that
    duplicate the driver_override logic for their individual devices.
    
    All of them seem to be prone to the bug described in [1].
    
    While this could be solved for every bus individually using a separate
    lock, solving this in the driver-core generically results in less (and
    cleaner) changes overall.
    
    Thus, move driver_override to struct device, provide corresponding
    accessors for busses and handle locking with a separate lock internally.
    
    In particular, add device_set_driver_override(),
    device_has_driver_override(), device_match_driver_override() and
    generalize the sysfs store() and show() callbacks via a driver_override
    feature flag in struct bus_type.
    
    Until all busses have migrated, keep driver_set_override() in place.
    
    Note that we can't use the device lock for the reasons described in [2].
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=220789 [1]
    Link: https://lore.kernel.org/driver-core/[email protected]/ [2]
    Tested-by: Gui-Dong Han <[email protected]>
    Co-developed-by: Gui-Dong Han <[email protected]>
    Signed-off-by: Gui-Dong Han <[email protected]>
    Reviewed-by: Greg Kroah-Hartman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [ Use dev->bus instead of sp->bus for consistency; fix commit message to
      refer to the struct bus_type's driver_override feature flag. - Danilo ]
    Signed-off-by: Danilo Krummrich <[email protected]>
    Stable-dep-of: 2b38efc05bf7 ("driver core: platform: use generic driver_override infrastructure")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: David Sauerwein <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

driver core: platform: use generic driver_override infrastructure [+ + +]
Author: Danilo Krummrich <[email protected]>
Date:   Wed May 20 14:02:00 2026 +0000

    driver core: platform: use generic driver_override infrastructure
    
    [ Upstream commit 2b38efc05bf7a8568ec74bfffea0f5cfa62bc01d ]
    
    When a driver is probed through __driver_attach(), the bus' match()
    callback is called without the device lock held, thus accessing the
    driver_override field without a lock, which can cause a UAF.
    
    Fix this by using the driver-core driver_override infrastructure taking
    care of proper locking internally.
    
    Note that calling match() from __driver_attach() without the device lock
    held is intentional. [1]
    
    Link: https://lore.kernel.org/driver-core/[email protected]/ [1]
    Reported-by: Gui-Dong Han <[email protected]>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220789
    Fixes: 3d713e0e382e ("driver core: platform: add device binding path 'driver_override'")
    Reviewed-by: Greg Kroah-Hartman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Danilo Krummrich <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: David Sauerwein <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drivers/base/memory: fix memory block reference leak in poison accounting [+ + +]
Author: Muchun Song <[email protected]>
Date:   Tue Apr 28 16:52:18 2026 +0800

    drivers/base/memory: fix memory block reference leak in poison accounting
    
    commit 03a2cc1756a0570f887d624cd6c535ea0cbd4951 upstream.
    
    memblk_nr_poison_inc() and memblk_nr_poison_sub() look up a memory block
    via find_memory_block_by_id(), which acquires a reference to the memory
    block device.
    
    Both helpers use the returned memory block without dropping that
    reference, leaking the device reference on each successful lookup.  Drop
    the reference after updating nr_hwpoison.
    
    Link: https://lore.kernel.org/[email protected]
    Fixes: 5033091de814 ("mm/hwpoison: introduce per-memory_block hwpoison counter")
    Signed-off-by: Muchun Song <[email protected]>
    Reviewed-by: Miaohe Lin <[email protected]>
    Acked-by: Oscar Salvador <[email protected]>
    Acked-by: David Hildenbrand (Arm) <[email protected]>
    Cc: Danilo Krummrich <[email protected]>
    Cc: Greg Kroah-Hartman <[email protected]>
    Cc: "Huang, Ying" <[email protected]>
    Cc: Naoya Horiguchi <[email protected]>
    Cc: "Rafael J. Wysocki" <[email protected]>
    Cc: Vishal Verma <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amd/display: Fix integer overflow in bios_get_image() [+ + +]
Author: Harry Wentland <[email protected]>
Date:   Mon May 4 11:14:45 2026 -0400

    drm/amd/display: Fix integer overflow in bios_get_image()
    
    commit cd86529ec61474a38c3837fb7823790a7c3f8cce upstream.
    
    [Why&How]
    The bounds check in bios_get_image() computes 'offset + size' using
    unsigned 32-bit arithmetic before comparing against bios_size. If a
    VBIOS image contains a near-UINT32_MAX offset the addition wraps to a
    small value, the comparison passes, and the function returns a wild
    pointer past the VBIOS mapping.
    
    Additionally, the comparison uses '<' (strict), which incorrectly
    rejects the valid exact-fit case where offset + size == bios_size.
    
    Fix both issues by restructuring the check to avoid the addition
    entirely: first reject if offset alone exceeds bios_size, then check
    size against the remaining space (bios_size - offset). This eliminates
    the overflow and correctly permits exact-fit accesses.
    
    Assisted-by: GitHub Copilot:claude-opus-4.6
    Reviewed-by: Alex Hung <[email protected]>
    Signed-off-by: Harry Wentland <[email protected]>
    Signed-off-by: Ivan Lipski <[email protected]>
    Tested-by: Dan Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit d40fb392af659c4a02b560319f226842f6ec1a95)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amd/display: Validate GPIO pin LUT table size before iterating [+ + +]
Author: Harry Wentland <[email protected]>
Date:   Mon May 4 16:14:11 2026 -0400

    drm/amd/display: Validate GPIO pin LUT table size before iterating
    
    commit 86d2b20644b11d21fe52c596e6e922b4590a3e3f upstream.
    
    [Why&How]
    The GPIO pin table parsers in get_gpio_i2c_info() and
    bios_parser_get_gpio_pin_info() derive an element count from the VBIOS
    table_header.structuresize field, then iterate over gpio_pin[] entries.
    However, GET_IMAGE() only validates that the table header itself fits
    within the BIOS image. If the VBIOS reports a structuresize larger than
    the actual mapped data, the loop reads past the end of the BIOS image,
    causing an out-of-bounds read.
    
    Fix this by calling bios_get_image() to validate that the full claimed
    structuresize is accessible within the BIOS image before entering the
    loop in both functions.
    
    Assisted-by: GitHub Copilot:claude-opus-4-6
    Reviewed-by: Alex Hung <[email protected]>
    Signed-off-by: Harry Wentland <[email protected]>
    Signed-off-by: Ivan Lipski <[email protected]>
    Tested-by: Dan Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit ba5e95b43b773ae1bf1f66ee6b31eb774e65afe3)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amd/display: Validate payload length and link_index in dc_process_dmub_aux_transfer_async [+ + +]
Author: Harry Wentland <[email protected]>
Date:   Thu May 7 16:26:31 2026 -0400

    drm/amd/display: Validate payload length and link_index in dc_process_dmub_aux_transfer_async
    
    commit 6c92f6d9600efa3ef0d9e560a2b52776d9803c29 upstream.
    
    [Why&How]
    dc_process_dmub_aux_transfer_async() copies payload->length bytes into a
    16-byte stack buffer (dpaux.data[16]) guarded only by an ASSERT(), which
    is a no-op in release builds. If a caller ever passes length > 16 this
    results in a stack buffer overflow via memcpy.
    
    Additionally, link_index is used to dereference dc->links[] without
    bounds checking against dc->link_count, risking an out-of-bounds access.
    
    Replace the ASSERT with a hard runtime check that returns false when
    payload->length exceeds the destination buffer size, and add a bounds
    check for link_index before it is used.
    
    Assisted-by: GitHub Copilot:Claude claude-4-opus
    Reviewed-by: Alex Hung <[email protected]>
    Signed-off-by: Harry Wentland <[email protected]>
    Signed-off-by: Ivan Lipski <[email protected]>
    Tested-by: Dan Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit ba4caa9fecdf7a38f98c878ad05a8a64148b6881)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/bridge: chipone-icn6211: use devm_drm_bridge_add in i2c probe [+ + +]
Author: Osama Abdelkader <[email protected]>
Date:   Thu Apr 30 21:49:42 2026 +0200

    drm/bridge: chipone-icn6211: use devm_drm_bridge_add in i2c probe
    
    commit 73d01051e8040c0b1de7fd26b3b8d0c2ffa6895c upstream.
    
    Use devm_drm_bridge_add() so the bridge is released if probe
    fails after registration, and drop drm_bridge_remove() in chipone_i2c_probe.
    
    Signed-off-by: Osama Abdelkader <[email protected]>
    Fixes: 8dde6f7452a1 ("drm: bridge: icn6211: Add I2C configuration support")
    Cc: [email protected]
    Reviewed-by: Luca Ceresoli <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Luca Ceresoli <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/bridge: it66121: acquire reset GPIO in probe [+ + +]
Author: Julien Chauveau <[email protected]>
Date:   Tue Mar 24 20:30:11 2026 +0100

    drm/bridge: it66121: acquire reset GPIO in probe
    
    commit e02b5262fd288cc235f14e12233ea54e78c04611 upstream.
    
    The it66121_ctx structure has a gpio_reset field, and it66121_hw_reset()
    calls gpiod_set_value() on it. However, the GPIO descriptor is never
    acquired via devm_gpiod_get(), leaving gpio_reset as NULL throughout
    the driver lifetime.
    
    gpiod_set_value() silently returns when passed a NULL descriptor, so
    the hardware reset sequence in it66121_hw_reset() is a no-op. This
    leaves the chip in an undefined state at probe time, which can prevent
    it from responding on the I2C bus.
    
    The DT binding marks reset-gpios as a required property, so all
    compliant device trees provide this GPIO. Add the missing
    devm_gpiod_get() call after enabling power supplies and before the
    hardware reset, so the chip is properly reset with power applied.
    
    Fixes: 988156dc2fc9 ("drm: bridge: add it66121 driver")
    Cc: [email protected]
    Signed-off-by: Julien Chauveau <[email protected]>
    Reviewed-by: Javier Martinez Canillas <[email protected]>
    Tested-by: Javier Martinez Canillas <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Javier Martinez Canillas <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/bridge: megachips: remove bridge when irq request fails [+ + +]
Author: Osama Abdelkader <[email protected]>
Date:   Thu Apr 30 21:56:59 2026 +0200

    drm/bridge: megachips: remove bridge when irq request fails
    
    commit d45d5c819f2cd0b6b5d76a194a537a5f4aeefecb upstream.
    
    If devm_request_threaded_irq() fails after drm_bridge_add(), remove the
    bridge before returning.
    
    Keep drm_bridge_add() rather than devm_drm_bridge_add(): registration is
    tied to the STDP4028 device while ge_b850v3_register() may complete from
    either I2C probe; devm would not unwind the bridge if the other client's
    probe fails.
    
    Signed-off-by: Osama Abdelkader <[email protected]>
    Fixes: fcfa0ddc18ed ("drm/bridge: Drivers for megachips-stdpxxxx-ge-b850v3-fw (LVDS-DP++)")
    Cc: [email protected]
    Reviewed-by: Luca Ceresoli <[email protected]>
    Tested-by: Ian Ray <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Luca Ceresoli <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/msm/dsi: don't dump registers past the mapped region [+ + +]
Author: Dmitry Baryshkov <[email protected]>
Date:   Tue Apr 28 20:21:38 2026 +0300

    drm/msm/dsi: don't dump registers past the mapped region
    
    [ Upstream commit 5b49a46baa853b26dbefa65c6c75dd9ff69f63d4 ]
    
    On DSI 6G platforms the IO address space is internally adjusted by
    io_offset. Later this adjusted address might be used for memory dumping.
    However the size that is used for memory dumping isn't adjusted to
    account for the io_offset, leading to the potential access to the
    unmapped region. Lower ctrl_size by the io_offset value to prevent
    access past the mapped area.
    
     msm_disp_snapshot_add_block+0x1d4/0x3c8 [msm] (P)
     msm_dsi_host_snapshot+0x4c/0x78 [msm]
     msm_dsi_snapshot+0x28/0x50 [msm]
     msm_disp_snapshot_capture_state+0x74/0x140 [msm]
     msm_disp_snapshot_state_sync+0x60/0x90 [msm]
     _msm_disp_snapshot_work+0x30/0x90 [msm]
     kthread_worker_fn+0xdc/0x460
     kthread+0x120/0x140
    
    Fixes: bac2c6a62ed9 ("drm/msm: get rid of msm_iomap_size")
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/721747/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/msm/snapshot: fix dumping of the unaligned regions [+ + +]
Author: Dmitry Baryshkov <[email protected]>
Date:   Sat May 16 14:53:45 2026 +0300

    drm/msm/snapshot: fix dumping of the unaligned regions
    
    [ Upstream commit 76824d2467feb1828b745d6add2541918d7be3da ]
    
    The snapshotting code internally aligns data segment to 16 bytes. This
    works fine for DPU code (where most of the regions are aligned), but
    fails for snapshotting of the DSI data (because DSI data region is
    shifted by 4 bytes). Fix the code by removing length alignment and by
    accurately printing last registers in the region. While reworking the
    code also fix the 16x memory overallocation in
    msm_disp_state_dump_regs().
    
    Fixes: 98659487b845 ("drm/msm: add support to take dpu snapshot")
    Reported-by: Salendarsingh Gaud <[email protected]>
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/725449/
    Message-ID: <[email protected]>
    Signed-off-by: Rob Clark <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/msm: Fix iommu_map_sgtable() return value check and avoid WARN [+ + +]
Author: Mikko Perttunen <[email protected]>
Date:   Tue Apr 21 13:02:38 2026 +0900

    drm/msm: Fix iommu_map_sgtable() return value check and avoid WARN
    
    [ Upstream commit 55e0f0d1c1a4ee1e46da7da4d443eb3044fb3851 ]
    
    Commit "iommu: return full error code from iommu_map_sg[_atomic]()"
    changed iommu_map_sgtable() to return an ssize_t and negative values
    in error cases, rather than a size_t and a zero.
    
    Store the return value in the appropriate type and in case of error,
    return it rather than WARNing.
    
    Fixes: ad8f36e4b6b1 ("iommu: return full error code from iommu_map_sg[_atomic]()")
    Signed-off-by: Mikko Perttunen <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/719685/
    Message-ID: <[email protected]>
    Signed-off-by: Rob Clark <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/virtio: use uninterruptible resv lock for plane updates [+ + +]
Author: Deepanshu Kartikey <[email protected]>
Date:   Tue May 19 13:52:47 2026 +0530

    drm/virtio: use uninterruptible resv lock for plane updates
    
    commit 9af1b6e175c82daf4b423da339a722d8e67a735a upstream.
    
    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: Greg Kroah-Hartman <[email protected]>

 
efi: Allocate runtime workqueue before ACPI init [+ + +]
Author: Ard Biesheuvel <[email protected]>
Date:   Tue May 19 10:03:00 2026 +0200

    efi: Allocate runtime workqueue before ACPI init
    
    commit 13c6da02e767152c9ac4330962247a5e47011035 upstream.
    
    Since commit
    
      5894cf571e14 ("acpi/prmt: Use EFI runtime sandbox to invoke PRM handlers")
    
    ACPI PRM calls are delegated to a workqueue which runs in a kernel
    thread, making it easier to detect and mitigate faulting memory accesses
    performed by the firmware.
    
    Rafael reports that such PRM accesses may occur before efisubsys_init()
    executes, which is where the workqueue is allocated, leading to NULL
    pointer dereferences. Since acpi_init() [which triggers the early PRM
    accesses] executes as a subsys_initcall() as well, and has its own
    dependencies that may be sensitive to initcall ordering, deferring
    acpi_init() is not an option.
    
    So instead, split off the workqueue allocation into its own postcore
    initcall, as this is the only missing piece to allow EFI runtime calls
    to be made. This ensures that EFI runtime call (including PRM calls) are
    accessible to all code running at subsys_initcall() level.
    
    Cc: <[email protected]>
    Fixes: 5894cf571e14 ("acpi/prmt: Use EFI runtime sandbox to invoke PRM handlers")
    Reviewed-by: Rafael J. Wysocki (Intel) <[email protected]>
    Signed-off-by: Ard Biesheuvel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ethtool: fix ethnl_bitmap32_not_zero() bit interval semantics [+ + +]
Author: Chenguang Zhao <[email protected]>
Date:   Mon May 11 09:43:43 2026 +0800

    ethtool: fix ethnl_bitmap32_not_zero() bit interval semantics
    
    [ Upstream commit 3d042592ebd4c7e44974d556de0b727cb7db4dab ]
    
    ethnl_bitmap32_not_zero() should return true if some bit in [start, end)
    is set:
    
    - Fix inverted memchr_inv() sense: return true when the scan finds a
      non-zero byte, not when the middle words are all zero.
    - Return false for an empty interval (end <= start).
    - When end is 32-bit aligned, indices in [start, end) do not include any
      bits from map[end_word]; return false after earlier checks found no
      non-zero data.
    
    Fixes: 10b518d4e6dd ("ethtool: netlink bitset handling")
    Signed-off-by: Chenguang Zhao <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
firmware: arm_ffa: Check for NULL FF-A ID table while driver registration [+ + +]
Author: Sudeep Holla <[email protected]>
Date:   Tue Apr 28 19:33:25 2026 +0100

    firmware: arm_ffa: Check for NULL FF-A ID table while driver registration
    
    [ Upstream commit 0a5e695095c557d2380131b613dea4e8d90371be ]
    
    The bus match callback assumes that every FF-A driver provides an
    id_table and dereferences it unconditionally. Enforce that contract at
    registration time so a buggy client driver cannot crash the bus during
    match.
    
    Fixes: 92743071464f ("firmware: arm_ffa: Ensure drivers provide a probe function")
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sudeep Holla <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

firmware: arm_ffa: Skip free_pages on RX buffer alloc failure [+ + +]
Author: Sudeep Holla <[email protected]>
Date:   Tue Apr 28 19:33:26 2026 +0100

    firmware: arm_ffa: Skip free_pages on RX buffer alloc failure
    
    [ Upstream commit 09527e2c534911619d7e098729711100290bc3e1 ]
    
    If the RX buffer allocation fails in ffa_init(), the error path jumps to
    free_pages even though no buffer has been allocated yet. Route that case
    directly to free_drv_info so the cleanup path is only used after at
    least one RX/TX buffer allocation has succeeded.
    
    Fixes: 3bbfe9871005 ("firmware: arm_ffa: Add initial Arm FFA driver support")
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sudeep Holla <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
gpio: cdev: check if uAPI v2 config attributes are correctly zeroed [+ + +]
Author: Bartosz Golaszewski <[email protected]>
Date:   Thu May 21 10:42:16 2026 +0200

    gpio: cdev: check if uAPI v2 config attributes are correctly zeroed
    
    [ Upstream commit 3e6ccd790ed69bedd3d9626d01dd35cf9821c121 ]
    
    We check the padding of other uAPI v2 structures but not that of line
    config attributes. For used attributes: check if their padding is
    zeroed, for unused: check if the entire structure is zeroed.
    
    Fixes: 3c0d9c635ae2 ("gpiolib: cdev: support GPIO_V2_GET_LINE_IOCTL and GPIO_V2_LINE_GET_VALUES_IOCTL")
    Reviewed-by: Kent Gibson <[email protected]>
    Link: https://patch.msgid.link/20260521-gpio-cdev-attr-padding-check-v3-1-ec3bcbe2e358@oss.qualcomm.com
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
gpiolib: cdev: use !mem_is_zero() instead of memchr_inv(s, 0, n) [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Sun Nov 10 22:16:15 2024 +0200

    gpiolib: cdev: use !mem_is_zero() instead of memchr_inv(s, 0, n)
    
    [ Upstream commit e106b1dd38e723ec2bb2bf57ea9b2aff464b9423 ]
    
    Use the mem_is_zero() helper where possible.
    
    Signed-off-by: Andy Shevchenko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Stable-dep-of: 3e6ccd790ed6 ("gpio: cdev: check if uAPI v2 config attributes are correctly zeroed")
    Signed-off-by: Sasha Levin <[email protected]>

 
HID: quirks: really enable the intended work around for appledisplay [+ + +]
Author: Lukas Bulwahn <[email protected]>
Date:   Thu Feb 5 09:11:31 2026 +0100

    HID: quirks: really enable the intended work around for appledisplay
    
    [ Upstream commit 5f90dcfa8dc32a488581b78e575cdd7808ba5c78 ]
    
    Commit c7fabe4ad921 ("HID: quirks: work around VID/PID conflict for
    appledisplay") intends to add a quirk for kernels built with Apple Cinema
    Display support, but it refers to the non-existing config option
    CONFIG_APPLEDISPLAY, whereas the config option for Apple Cinema Display
    support is named CONFIG_USB_APPLEDISPLAY.
    
    Refer to the intended config option CONFIG_USB_APPLEDISPLAY in the ifdef
    directive.
    
    Fixes: c7fabe4ad921 ("HID: quirks: work around VID/PID conflict for appledisplay")
    Signed-off-by: Lukas Bulwahn <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

HID: uclogic: Fix regression of input name assignment [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Tue Apr 28 10:33:16 2026 +0200

    HID: uclogic: Fix regression of input name assignment
    
    [ Upstream commit 487359284509a6745e14b8c0518768bc277809b0 ]
    
    The previous fix for adding the devm_kasprintf() return check in the
    commit bd07f751208b ("HID: uclogic: Add NULL check in
    uclogic_input_configured()") changed the condition of hi->input->name
    assignment, and it resulted in missing the proper input device name
    when no custom suffix is defined.
    
    Restore the conditional to the original content to address the
    regression.
    
    Fixes: bd07f751208b ("HID: uclogic: Add NULL check in uclogic_input_configured()")
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
hwmon: (pmbus/adm1266) bounce blackbox records through a protocol-sized buffer [+ + +]
Author: Abdurrahman Hussain <[email protected]>
Date:   Fri May 15 15:11:51 2026 -0700

    hwmon: (pmbus/adm1266) bounce blackbox records through a protocol-sized buffer
    
    commit 43cae21424ff8e33894a0f86c6b80b840c049fd7 upstream.
    
    adm1266_pmbus_block_xfer() copies the device-supplied block payload
    into the caller-provided buffer using the device-supplied length:
    
            memcpy(data_r, &msgs[1].buf[1], msgs[1].buf[0]);
    
    The helper does not know how large data_r is and trusts the device to
    return at most one record's worth of bytes.  adm1266_nvmem_read_blackbox()
    violates that contract: it advances read_buff inside data->dev_mem in
    ADM1266_BLACKBOX_SIZE (64-byte) strides while the helper is willing to
    write up to ADM1266_PMBUS_BLOCK_MAX (255) bytes.  A device that returns
    more than 64 bytes on the trailing record (read_buff offset 1984 in
    the 2048-byte dev_mem allocation) overflows dev_mem by up to 191 bytes
    before the post-call
    
            if (ret != ADM1266_BLACKBOX_SIZE)
                    return -EIO;
    
    can reject the response.
    
    Contain the fix in the caller without changing the helper signature:
    read each record into a 255-byte local bounce buffer that matches the
    helper's maximum output, validate the returned length, and only then
    copy exactly ADM1266_BLACKBOX_SIZE bytes into the dev_mem slot.
    
    Fixes: 407dc802a9c0 ("hwmon: (pmbus/adm1266) Add Block process call")
    Cc: [email protected]
    Signed-off-by: Abdurrahman Hussain <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (pmbus/adm1266) cap PDIO scan in get_multiple at ADM1266_PDIO_NR [+ + +]
Author: Abdurrahman Hussain <[email protected]>
Date:   Mon May 18 17:52:25 2026 -0700

    hwmon: (pmbus/adm1266) cap PDIO scan in get_multiple at ADM1266_PDIO_NR
    
    commit d7834d92251baade796812876e95555e2066fa9f upstream.
    
    adm1266_gpio_get_multiple() iterates the PDIO portion of the
    caller-supplied mask using
    
            for_each_set_bit_from(gpio_nr, mask,
                                  ADM1266_GPIO_NR + ADM1266_PDIO_STATUS) {
                    ...
            }
    
    where ADM1266_PDIO_STATUS is the PMBus command code (0xE9, i.e. 233),
    not the number of PDIO pins.  The intended upper bound is
    ADM1266_GPIO_NR + ADM1266_PDIO_NR = 25.
    
    gpiolib hands in a mask sized for gc.ngpio (= 25 bits on this chip),
    so the iteration walks find_next_bit() up to 242, reading up to 217
    extra bits (a handful of unsigned-long words: four on 64-bit, seven
    on 32-bit) of whatever lives past the end of the mask in the
    caller's stack.  Any incidental set bit in that range then drives a
    set_bit(gpio_nr, bits) call that writes past the end of the
    caller-supplied bits array too -- both out-of-bounds.
    
    Substitute ADM1266_PDIO_NR for the constant so the scan stops at the
    last real PDIO bit.
    
    Fixes: d98dfad35c38 ("hwmon: (pmbus/adm1266) Add support for GPIOs")
    Cc: [email protected]
    Signed-off-by: Abdurrahman Hussain <[email protected]>
    Reviewed-by: Bartosz Golaszewski <[email protected]>
    Reviewed-by: Linus Walleij <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (pmbus/adm1266) don't clobber GPIO bits before PDIO read in get_multiple [+ + +]
Author: Abdurrahman Hussain <[email protected]>
Date:   Mon May 18 17:52:26 2026 -0700

    hwmon: (pmbus/adm1266) don't clobber GPIO bits before PDIO read in get_multiple
    
    commit 3327a12aee9e10ffa903e28b8445dfd1af5307c0 upstream.
    
    adm1266_gpio_get_multiple() zeroes *bits before the GPIO_STATUS loop
    and then a second time before the PDIO_STATUS loop:
    
            *bits = 0;
            for_each_set_bit(gpio_nr, mask, ADM1266_GPIO_NR) {
                    ...
                    set_bit(gpio_nr, bits);
            }
    
            ret = i2c_smbus_read_block_data(data->client, ADM1266_PDIO_STATUS, ...);
            ...
            *bits = 0;
            for_each_set_bit_from(gpio_nr, mask, ADM1266_GPIO_NR + ADM1266_PDIO_NR) {
                    ...
                    set_bit(gpio_nr, bits);
            }
    
    The second *bits = 0 throws away every GPIO bit the first loop just
    populated, so callers asking for any combination of GPIO and PDIO
    pins always see the GPIO portion of the returned bits as zero.
    
    Drop the redundant second assignment so both halves of the result
    survive.
    
    Fixes: d98dfad35c38 ("hwmon: (pmbus/adm1266) Add support for GPIOs")
    Cc: [email protected]
    Signed-off-by: Abdurrahman Hussain <[email protected]>
    Reviewed-by: Bartosz Golaszewski <[email protected]>
    Reviewed-by: Linus Walleij <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (pmbus/adm1266) include PEC byte in pmbus_block_xfer read buffer [+ + +]
Author: Abdurrahman Hussain <[email protected]>
Date:   Fri May 15 15:11:50 2026 -0700

    hwmon: (pmbus/adm1266) include PEC byte in pmbus_block_xfer read buffer
    
    commit 487566cb1ccdf3756fdd7bf8d875e612ff3169bb upstream.
    
    adm1266_pmbus_block_xfer() sets up the read transaction with
    
            .buf = data->read_buf,
            .len = ADM1266_PMBUS_BLOCK_MAX + 2,
    
    but read_buf in struct adm1266_data is declared as
    
            u8 read_buf[ADM1266_PMBUS_BLOCK_MAX + 1];
    
    For a max-length block response (length byte = 255 + up to 1 PEC
    byte), the i2c controller is told to write 257 bytes into a 256-byte
    buffer, putting one byte past the end of read_buf.  The same response
    also makes the subsequent PEC compare
    
            if (crc != msgs[1].buf[msgs[1].buf[0] + 1])
    
    read a byte beyond the array.
    
    Bump the read_buf declaration to ADM1266_PMBUS_BLOCK_MAX + 2 so the
    buffer can hold the length byte, up to 255 payload bytes, and the PEC
    byte the i2c_msg length already accounts for.
    
    Fixes: 407dc802a9c0 ("hwmon: (pmbus/adm1266) Add Block process call")
    Cc: [email protected]
    Signed-off-by: Abdurrahman Hussain <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (pmbus/adm1266) register the gpio_chip after pmbus_do_probe() [+ + +]
Author: Abdurrahman Hussain <[email protected]>
Date:   Mon May 18 17:52:28 2026 -0700

    hwmon: (pmbus/adm1266) register the gpio_chip after pmbus_do_probe()
    
    commit 491403b9b76cf66abd81301c5901aa4a4549f1e8 upstream.
    
    adm1266_probe() calls adm1266_config_gpio() -- which goes on to
    devm_gpiochip_add_data() and exposes the gpio_chip callbacks to
    gpiolib -- before pmbus_do_probe() has initialised the per-client
    PMBus state (notably the pmbus_lock mutex the core hands out via
    pmbus_get_data()).
    
    That ordering is already a latent hazard: any GPIO access that lands
    between adm1266_config_gpio() and the end of pmbus_do_probe() (for
    example a sysfs read from a user space agent that opens the gpiochip
    the instant gpiolib advertises it) races pmbus_do_probe()'s own
    device accesses with no serialisation.
    
    Move adm1266_config_gpio() down past pmbus_do_probe() so the chip
    isn't reachable from userspace until the PMBus state it depends on
    is fully initialised.
    
    Fixes: d98dfad35c38 ("hwmon: (pmbus/adm1266) Add support for GPIOs")
    Cc: [email protected]
    Signed-off-by: Abdurrahman Hussain <[email protected]>
    Reviewed-by: Bartosz Golaszewski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (pmbus/adm1266) register the nvmem device after pmbus_do_probe() [+ + +]
Author: Abdurrahman Hussain <[email protected]>
Date:   Mon May 18 17:52:29 2026 -0700

    hwmon: (pmbus/adm1266) register the nvmem device after pmbus_do_probe()
    
    commit 6af713af91d5c34ec049eb3cc2c5b3f5eba953b8 upstream.
    
    adm1266_probe() calls adm1266_config_nvmem() -- which goes on to
    devm_nvmem_register() and exposes adm1266_nvmem_read() to userspace --
    before pmbus_do_probe() has initialised the per-client PMBus state.
    
    Same latent hazard as the gpio_chip one fixed in the previous patch:
    once the nvmem device is registered, gpiolib's nvmem char-dev / sysfs
    interface is reachable, and any concurrent read triggers
    adm1266_nvmem_read() -> adm1266_nvmem_read_blackbox(), which issues
    PMBus traffic that races pmbus_do_probe()'s own device accesses with
    no serialisation.
    
    Move adm1266_config_nvmem() down past pmbus_do_probe() so the nvmem
    device isn't reachable from userspace until the PMBus state the
    nvmem accessors depend on is fully initialised.
    
    Fixes: 15609d189302 ("hwmon: (pmbus/adm1266) read blackbox")
    Cc: [email protected]
    Signed-off-by: Abdurrahman Hussain <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (pmbus/adm1266) reject implausible blackbox record_count [+ + +]
Author: Abdurrahman Hussain <[email protected]>
Date:   Fri May 15 15:11:49 2026 -0700

    hwmon: (pmbus/adm1266) reject implausible blackbox record_count
    
    commit 4afca954622d672ea65ed961bed01cf91caa034e upstream.
    
    adm1266_nvmem_read_blackbox() loops over a record_count that comes
    straight from byte 3 of the BLACKBOX_INFO response.  The destination
    buffer is data->dev_mem, sized for the nvmem cell's declared 2048
    bytes (ADM1266_BLACKBOX_MAX_RECORDS * ADM1266_BLACKBOX_SIZE = 32 * 64).
    A device that reports a record_count greater than 32 -- whether due
    to firmware bugs, bus corruption, or a non-responsive slave returning
    0xff -- would walk read_buff past the end of the dev_mem allocation
    on the trailing iterations.
    
    Cap record_count at ADM1266_BLACKBOX_MAX_RECORDS (introduced here)
    before entering the loop and return -EIO on any larger value, so a
    malformed BLACKBOX_INFO response cannot drive the loop out of bounds.
    
    Fixes: 15609d189302 ("hwmon: (pmbus/adm1266) read blackbox")
    Cc: [email protected]
    Signed-off-by: Abdurrahman Hussain <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (pmbus/adm1266) reject short block-read responses in the GPIO accessors [+ + +]
Author: Abdurrahman Hussain <[email protected]>
Date:   Mon May 18 17:52:27 2026 -0700

    hwmon: (pmbus/adm1266) reject short block-read responses in the GPIO accessors
    
    commit a7232f68c43ca62f545049b7f5fbfc75137b843b upstream.
    
    adm1266_gpio_get() and adm1266_gpio_get_multiple() both compose the
    pin-status word as
    
            pins_status = read_buf[0] + (read_buf[1] << 8);
    
    right after i2c_smbus_read_block_data(), guarding only against an
    error return.  A well-behaved device returns 2 bytes for
    GPIO_STATUS/PDIO_STATUS, but the helper happily reports a 0- or
    1-byte response too.  If the device returns 0 bytes, both read_buf
    slots are uninitialized stack memory; if it returns 1 byte, read_buf[1]
    is.
    
    The composed value then flows through set_bit() into the caller's
    *bits in adm1266_gpio_get_multiple(), or into the return value of
    adm1266_gpio_get(), and ends up in userspace via gpiolib (sysfs and
    the char-dev ioctls).  That leaks a few bits of kernel stack per
    request on any device whose firmware glitch, bus error, or hostile
    slave produces a short block-read response.
    
    Add the missing length check to both call sites and surface a short
    response as -EIO.
    
    Fixes: d98dfad35c38 ("hwmon: (pmbus/adm1266) Add support for GPIOs")
    Cc: [email protected]
    Signed-off-by: Abdurrahman Hussain <[email protected]>
    Reviewed-by: Bartosz Golaszewski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (pmbus/adm1266) seed timestamp from the real-time clock [+ + +]
Author: Abdurrahman Hussain <[email protected]>
Date:   Fri May 15 15:11:47 2026 -0700

    hwmon: (pmbus/adm1266) seed timestamp from the real-time clock
    
    commit b86095e3d7dcf2bf80c747349a35912a87a85098 upstream.
    
    adm1266_set_rtc() seeds the chip's SET_RTC register from
    ktime_get_seconds(), which returns CLOCK_MONOTONIC -- i.e. seconds
    since the host last booted, not seconds since the Unix epoch.
    
    The chip stamps that value into every blackbox record it captures.
    Userspace reading those timestamps back expects wall-clock seconds:
    that's what the SET_RTC frame layout documents (datasheet Rev. D,
    Table 84) and what every other consumer of "seconds since epoch"
    assumes.  Seeding from CLOCK_MONOTONIC gives blackbox records a
    timestamp that is only meaningful within a single boot of the host
    and silently resets to small values on every reboot.
    
    Switch to ktime_get_real_seconds() so the seed matches what the
    register is documented to hold.
    
    Fixes: 15609d189302 ("hwmon: (pmbus/adm1266) read blackbox")
    Cc: [email protected]
    Signed-off-by: Abdurrahman Hussain <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (pmbus/adm1266) widen blackbox-info buffer to I2C_SMBUS_BLOCK_MAX [+ + +]
Author: Abdurrahman Hussain <[email protected]>
Date:   Fri May 15 15:11:48 2026 -0700

    hwmon: (pmbus/adm1266) widen blackbox-info buffer to I2C_SMBUS_BLOCK_MAX
    
    commit eee213daa1e1b402eb631bcd1b8c5aa340a6b081 upstream.
    
    adm1266_nvmem_read_blackbox() declares a 5-byte stack buffer and
    passes it to i2c_smbus_read_block_data() to retrieve the 4-byte
    BLACKBOX_INFO response.  i2c_smbus_read_block_data() does not honour
    caller buffer sizes -- it memcpy()s data.block[0] bytes from the
    SMBus transaction (where data.block[0] is the length byte returned by
    the slave device, up to I2C_SMBUS_BLOCK_MAX = 32):
    
            memcpy(values, &data.block[1], data.block[0]);
    
    If the device returns any block length above 5, the call overflows
    the caller's 5-byte stack buffer before the post-call
    
            if (ret != 4)
                    return -EIO;
    
    check has a chance to reject the response.
    
    Widen the local buffer to I2C_SMBUS_BLOCK_MAX so the helper has room
    for any well-formed SMBus block response, matching the convention used
    by the other i2c_smbus_read_block_data() callers in this driver.
    
    Fixes: 15609d189302 ("hwmon: (pmbus/adm1266) read blackbox")
    Cc: [email protected]
    Signed-off-by: Abdurrahman Hussain <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ice: fix locking in ice_dcb_rebuild() [+ + +]
Author: Bart Van Assche <[email protected]>
Date:   Wed May 6 14:48:15 2026 -0700

    ice: fix locking in ice_dcb_rebuild()
    
    [ Upstream commit 0ded1f36ba4021cba50513e80be6b6e173710168 ]
    
    Move the mutex_lock() call up to prevent that DCB settings change after
    the first ice_query_port_ets() call. The second ice_query_port_ets()
    call in ice_dcb_rebuild() is already protected by pf->tc_mutex.
    
    This also fixes a bug in an error path, as before taking the first
    "goto dcb_error" in the function jumped over mutex_lock() to
    mutex_unlock().
    
    This bug has been detected by the clang thread-safety analyzer.
    
    Cc: [email protected]
    Fixes: 242b5e068b25 ("ice: Fix DCB rebuild after reset")
    Signed-off-by: Bart Van Assche <[email protected]>
    Reviewed-by: Aleksandr Loktionov <[email protected]>
    Reviewed-by: Przemek Kitszel <[email protected]>
    Tested-by: Arpana Arland <[email protected]>
    Signed-off-by: Jacob Keller <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ice: fix setting promisc mode while adding VID filter [+ + +]
Author: Marcin Szycik <[email protected]>
Date:   Fri May 15 11:24:10 2026 -0700

    ice: fix setting promisc mode while adding VID filter
    
    commit ebc8de716c9ec2be384abdc2dd866da26c6580d1 upstream.
    
    There are at least two paths through which VSI promiscuous mode can be
    independently configured via ice_fltr_set_vsi_promisc():
    - ice_vlan_rx_add_vid() (netdev op)
    - ice_service_task() -> ... -> ice_set_promisc()
    
    Both paths may try to program promiscuous mode concurrently. One such
    scenario is:
    
    1. Add ice netdev to bond
    2. Add the bond netdev to bridge
    3. ice netdev enters allmulticast mode (IFF_ALLMULTI)
    4. Service task programs promisc mode filter
    5. Bridge -> bond calls ice_vlan_rx_add_vid()
    
    Crucially, ice_vlan_rx_add_vid() fails if ice_fltr_set_vsi_promisc()
    returns any error, including -EEXIST. This causes VLAN filtering setup
    to fail on the bond interface. ice_set_promisc() already handles -EEXIST
    correctly.
    
    Fix by adding the same -EEXIST check to ice_vlan_rx_add_vid(): if the
    promisc filter is already programmed, continue without returning error.
    
    Fixes: 1273f89578f2 ("ice: Fix broken IFF_ALLMULTI handling")
    Cc: [email protected]
    Signed-off-by: Marcin Szycik <[email protected]>
    Signed-off-by: Aleksandr Loktionov <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Tested-by: Rinitha S <[email protected]> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ipv4: raw: reject IP_HDRINCL packets with ihl < 5 [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Tue May 12 16:51:14 2026 -0400

    ipv4: raw: reject IP_HDRINCL packets with ihl < 5
    
    commit 915fab69823a14c170dbaa3b41978768e0fe62fc upstream.
    
    raw_send_hdrinc() validates that the caller-supplied IPv4 header
    fits within the message length:
    
        iphlen = iph->ihl * 4;
        err = -EINVAL;
        if (iphlen > length)
            goto error_free;
    
        if (iphlen >= sizeof(*iph)) {
            /* fix up saddr, tot_len, id, csum, transport_header */
        }
    
    It does not, however, reject ihl < 5.  For such a packet the
    "if (iphlen >= sizeof(*iph))" branch is skipped, leaving the
    crafted iphdr untouched, but the packet is still handed to
    __ip_local_out() and onward.  Downstream consumers that read
    iph->ihl assume a sane value: net/ipv4/ah4.c:ah_output() in
    particular subtracts sizeof(struct iphdr) from top_iph->ihl * 4
    and passes the (signed-int-negative, then cast to size_t)
    result to memcpy(), producing an OOB access of length close to
    SIZE_MAX and a host kernel panic.
    
    An IPv4 header with ihl < 5 is malformed by definition (RFC 791:
    "Internet Header Length is the length of the internet header in
    32 bit words ... Note that the minimum value for a correct header
    is 5.").  The kernel should not be willing to inject such a
    packet into its own output path.
    
    Reject "iphlen < sizeof(*iph)" alongside the existing
    "iphlen > length" check.  This matches the principle that locally
    constructed packets that re-enter the IP stack must pass the same
    basic sanity tests that a foreign packet would be subjected to.
    
    Once this lands, the "if (iphlen >= sizeof(*iph))" wrapper around
    the fixup branch becomes redundant; left in place to keep the
    patch minimal and backport-friendly.  A follow-up can unwrap it.
    
    Note that commit 86f4c90a1c5c ("ipv4, ipv6: ensure raw socket
    message is big enough to hold an IP header") ensures the message
    buffer is large enough to hold an iphdr, but does not constrain
    the self-reported iph->ihl.
    
    Reachability: the malformed packet source is any caller with
    CAP_NET_RAW, including an unprivileged process in a user+net
    namespace on a kernel with CONFIG_USER_NS=y.  The reproduced AH
    crash also requires a matching xfrm AH policy on the outgoing
    route; a container granted CAP_NET_ADMIN can install that state
    and policy in its netns.  Loopback bypasses xfrm_output, so the
    trigger uses a real netdev.
    
    Reproduced on UML + KASAN: kernel-mode fault at addr 0x0 with
    memcpy_orig at the crash site.  Same shape reproduces inside a
    rootless Docker container with --cap-add NET_ADMIN on a stock
    distro kernel.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Suggested-by: Herbert Xu <[email protected]>
    Signed-off-by: Michael Bommarito <[email protected]>
    Link: https://patch.msgid.link/77ec2b5e8111961c2c39883c92e8aa2709039c17.1778614451.git.michael.bommarito@gmail.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
irq_work: Fix use-after-free in irq_work_single() on PREEMPT_RT [+ + +]
Author: Jiayuan Chen <[email protected]>
Date:   Mon Mar 30 15:32:29 2026 +0800

    irq_work: Fix use-after-free in irq_work_single() on PREEMPT_RT
    
    [ Upstream commit 91840be8f710370607f949a627e070896faeddb8 ]
    
    On PREEMPT_RT, non-HARD irq_work runs in per-CPU kthreads via
    run_irq_workd(), so irq_work_sync() uses rcuwait() to wait for BUSY==0.
    
    After irq_work_single() clears BUSY via atomic_cmpxchg(), it still
    dereferences @work for irq_work_is_hard() and rcuwait_wake_up().
    
    An irq_work_sync() caller on another CPU that enters after BUSY is cleared
    can observe BUSY==0 immediately, return, and free the work before those
    accesses complete — causing a use-after-free.
    
    Fix this by wrapping run_irq_workd() in guard(rcu)() so that the entire
    irq_work_single() execution is within an RCU read-side critical
    section. Then add synchronize_rcu() in irq_work_sync() after
    rcuwait_wait_event() to ensure the caller waits for the RCU grace period
    before returning, preventing premature frees.
    
    Fixes: 810979682ccc ("irq_work: Allow irq_work_sync() to sleep if irq_work() no IRQ support.")
    Suggested-by: Sebastian Andrzej Siewior <[email protected]>
    Suggested-by: Steven Rostedt <[email protected]>
    Signed-off-by: Jiayuan Chen <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Reviewed-by: Sebastian Andrzej Siewior <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
irqchip/ath79-cpu: Remove unused function [+ + +]
Author: Rosen Penev <[email protected]>
Date:   Wed May 6 01:55:22 2026 -0700

    irqchip/ath79-cpu: Remove unused function
    
    [ Upstream commit 0fa10fb77069fb67aa51384868ef3702b7791465 ]
    
    ath79_cpu_irq_init() was part of the legacy pre-OF code that got removed a
    while back.
    
    Remove it to get rid of a missing prototype warning, reported by the kernel test
    robot.
    
    [ tglx: Fix the subject prefix. Sigh ... ]
    
    Fixes: 51fa4f8912c0 ("MIPS: ath79: drop legacy IRQ code")
    Reported-by: kernel test robot <[email protected]>
    Signed-off-by: Rosen Penev <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Signed-off-by: Sasha Levin <[email protected]>

 
ixgbevf: fix use-after-free in VEPA multicast source pruning [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Fri May 15 11:24:14 2026 -0700

    ixgbevf: fix use-after-free in VEPA multicast source pruning
    
    commit 5d49b568c188dc77199d8d2b959c91da8cc27cf1 upstream.
    
    ixgbevf_clean_rx_irq() prunes frames whose source MAC matches the VF's
    own address (VEPA multicast workaround) by freeing the skb and
    continuing to the next descriptor:
    
        dev_kfree_skb_irq(skb);
        continue;
    
    The skb pointer is declared outside the while loop and persists across
    iterations.  Because the continue skips the "skb = NULL" reset at the
    bottom of the loop, the next iteration enters the "else if (skb)" path
    and calls ixgbevf_add_rx_frag() on the freed skb, dereferencing
    skb_shinfo(skb)->nr_frags - a use-after-free in NAPI softirq context.
    
    The sibling driver iavf already handles this correctly by nulling the
    pointer before continuing.  Apply the same pattern here.
    
    I do not have ixgbevf hardware; the bug was found by static analysis
    (scan_drop_continue_loops.py + semgrep drop_continue_in_loop, multi-tool
    corroboration with the highest score in the scan).  The UAF was confirmed
    under KASAN by loading a test module that reproduces the exact code
    pattern (alloc skb, kfree_skb, then read skb_shinfo(skb)->nr_frags):
    
      BUG: KASAN: slab-use-after-free in ixgbevf_uaf_test_init+0x100/0x1000
      Read of size 8 at addr 000000006163ae78 by task insmod/30
      freed 208-byte region [000000006163adc0, 000000006163ae90)
    
    QEMU emulates igb (82576) but not ixgbe (82599), and the igbvf VF
    driver does not include the VEPA source pruning path, so a full
    end-to-end reproduction with emulated hardware was not possible.
    
    Fixes: bad17234ba70 ("ixgbevf: Change receive model to use double buffered page based receives")
    Cc: [email protected]
    Signed-off-by: Michael Bommarito <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Tested-by: Rafal Romanowski <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
kprobes: skip non-symbol addresses in kprobe_add_ksym_blacklist() [+ + +]
Author: Jianpeng Chang <[email protected]>
Date:   Fri May 8 09:56:36 2026 +0900

    kprobes: skip non-symbol addresses in kprobe_add_ksym_blacklist()
    
    [ Upstream commit 307abfac04a254c09c5705d816b33354acee97a0 ]
    
    When kprobe_add_area_blacklist() iterates through a section like
    .kprobes.text, the start address may not correspond to a named symbol.
    On ARM64 with CONFIG_DYNAMIC_FTRACE_WITH_CALL_OPS=y (introduced by
    commit baaf553d3bc3 ("arm64: Implement
    HAVE_DYNAMIC_FTRACE_WITH_CALL_OPS")), the compiler flag
    -fpatchable-function-entry=4,2 inserts 2 NOPs before each function entry
    point for ftrace call_ops. These pre-function NOPs sit at the section base
    address, before the first named function symbol. The compiler emits a $x
    mapping symbol at offset 0x00 to mark the start of code, but
    find_kallsyms_symbol() ignores mapping symbols.
    
    Without CONFIG_DYNAMIC_FTRACE_WITH_CALL_OPS (e.g. defconfig), no
    pre-function NOPs are inserted, the first function starts at offset
    0x00, and the bug does not trigger.
    
    This only affects modules that have a .kprobes.text section (i.e. those
    using the __kprobes annotation). Modules using NOKPROBE_SYMBOL() instead
    (like kretprobe_example.ko) blacklist exact function addresses via the
    _kprobe_blacklist section and are not affected.
    
    For kprobe_example.ko on ARM64 with -fpatchable-function-entry=4,2,
    the .kprobes.text section layout is:
    
      offset 0x00: $x + 2 NOPs    (mapping symbol + ftrace preamble)
      offset 0x08: handler_post   (64 bytes)
      offset 0x50: handler_pre    (68 bytes)
    
    kprobe_add_area_blacklist() starts iterating from the section base
    address (offset 0x00), which only has the $x mapping symbol.
    kprobe_add_ksym_blacklist() then calls kallsyms_lookup_size_offset()
    for this address, which goes through:
    
      kallsyms_lookup_size_offset()
        -> module_address_lookup()
          -> find_kallsyms_symbol()
    
    find_kallsyms_symbol() scans all module symbols to find the closest
    preceding symbol.
    
    Since no named text symbol exists at offset 0x00,
    find_kallsyms_symbol() picks __UNIQUE_ID_vermagic (a .modinfo symbol
    whose address is in the temporary image) as the "best" match. The
    computed "size" = next_text_symbol - modinfo_symbol spans across
    these two unrelated memory regions, creating a blacklist entry with
    a bogus range of tens of terabytes.
    
    Whether this causes a visible failure depends on address randomization,
    here is what happens on Raspberry Pi 4/5:
    
      - On RPi5, the bogus size was ~35 TB. start + size stayed within
        64-bit range, so the blacklist entry covered the entire kernel
        text. register_kprobe() in the module's own init function failed
        with -EINVAL.
    
      - On RPi4, the bogus size was ~75 TB. start + size overflowed
        64 bits and wrapped to a small address near zero. The range
        check (addr >= start && addr < end) then failed because end
        wrapped around, so the bogus entry was accidentally harmless
        and kprobes worked by luck.
    
    The same bug exists on both machines, but randomization determines whether
    the integer overflow masks it or not.
    
    Fix this by adding notrace to the __kprobes macro. Functions in
    .kprobes.text are kprobe infrastructure handlers that should never be
    traced by ftrace. With notrace, the compiler stops inserting them and the
    non-symbol gap at the section start disappears entirely.
    
    Link: https://lore.kernel.org/all/[email protected]/
    
    Fixes: baaf553d3bc3 ("arm64: Implement HAVE_DYNAMIC_FTRACE_WITH_CALL_OPS")
    Signed-off-by: Jianpeng Chang <[email protected]>
    Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ksmbd: add durable scavenger timer [+ + +]
Author: Namjae Jeon <[email protected]>
Date:   Tue May 26 15:58:40 2026 +0800

    ksmbd: add durable scavenger timer
    
    [ Upstream commit d484d621d40f4a8b8959008802d79bef3609641b ]
    
    Launch ksmbd-durable-scavenger kernel thread to scan durable fps that
    have not been reclaimed by a client within the configured time.
    
    Signed-off-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    [ Minor context conflict resolved. ]
    Signed-off-by: Alva Lan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ksmbd: avoid reclaiming expired durable opens by the client [+ + +]
Author: Namjae Jeon <[email protected]>
Date:   Tue May 26 15:58:39 2026 +0800

    ksmbd: avoid reclaiming expired durable opens by the client
    
    [ Upstream commit 520da3c488c5bb177871634e713eb8a106082e6b ]
    
    The expired durable opens should not be reclaimed by client.
    This patch add ->durable_scavenger_timeout to fp and check it in
    ksmbd_lookup_durable_fd().
    
    Signed-off-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Alva Lan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ksmbd: close durable scavenger races against m_fp_list lookups [+ + +]
Author: DaeMyung Kang <[email protected]>
Date:   Tue May 26 15:58:42 2026 +0800

    ksmbd: close durable scavenger races against m_fp_list lookups
    
    [ Upstream commit bf736184d063da1a552ffeff0481813599a182cc ]
    
    ksmbd_durable_scavenger() has two related races against any walker
    that iterates f_ci->m_fp_list, including ksmbd_lookup_fd_inode()
    (used by ksmbd_vfs_rename) and the share-mode checks in
    fs/smb/server/smb_common.c.
    
    (1) fp->node list-head reuse.  Durable-preserved handles can remain
    linked on f_ci->m_fp_list after session teardown so share-mode checks
    still see them while the handle is reconnectable.  The scavenger
    collected expired handles by adding fp->node to a local
    scavenger_list after removing them from the global durable idr.
    Because fp->node is the same list_head used by m_fp_list,
    list_add(&fp->node, &scavenger_list) overwrites the m_fp_list links
    and corrupts both lists.  CONFIG_DEBUG_LIST can report this on the
    share-mode walk path.
    
    (2) Refcount race against m_fp_list walkers.  The scavenger qualifies
    an expired durable handle with atomic_read(&fp->refcount) > 1 and
    fp->conn under global_ft.lock, removes fp from global_ft, then drops
    global_ft.lock before unlinking fp from m_fp_list and freeing it.
    During that gap fp is still linked on m_fp_list with f_state ==
    FP_INITED.  ksmbd_lookup_fd_inode() under m_lock read calls
    ksmbd_fp_get() (atomic_inc_not_zero on refcount that is still 1) and
    takes a live reference; the scavenger then unlinks and frees fp
    while the holder owns a reference, leading to UAF on the holder's
    subsequent ksmbd_fd_put() and on any field reads performed by a
    concurrent share-mode walker that iterates m_fp_list without taking
    ksmbd_fp_get() (smb_check_perm_dleases-like paths).
    
    Fix both:
    
      * Stop reusing fp->node as a scavenger-private list node.  Remove
        one expired handle from global_ft under global_ft.lock, take an
        explicit transient reference, drop the lock, unlink fp->node
        from m_fp_list under f_ci->m_lock, then drop both the durable
        lifetime and transient references with atomic_sub_and_test(2,
        &fp->refcount).  If the scavenger is the last putter the close
        runs there; otherwise an in-flight holder that already raced
        through the m_fp_list lookup owns the final close via its
        ksmbd_fd_put() path.  The one-at-a-time disposal can rescan the
        durable idr when multiple handles expire in the same pass, but
        durable scavenging is a background expiration path and the final
        full scan recomputes min_timeout before the next wait.
    
      * Clear fp->persistent_id inside __ksmbd_remove_durable_fd() right
        after idr_remove(), so a delayed final close from a holder that
        snatched fp does not re-issue idr_remove() on a persistent id
        that idr_alloc_cyclic() in ksmbd_open_durable_fd() may have
        already handed out to a brand-new durable handle.
    
      * Bypass the per-conn open_files_count decrement in
        __put_fd_final() when fp is detached from any session table
        (fp->conn cleared by session_fd_check() at durable preserve --
        paired with the volatile_id clear at unpublish, so checking
        fp->conn alone is sufficient).  The walker that owns the final
        close runs from an unrelated work->conn whose
        stats.open_files_count never tracked this durable fp; without
        this guard the holder would underflow that unrelated counter.
    
    The two races are folded into one patch because patch (1) alone
    cleans up the corrupted list but leaves a deterministic UAF window
    for m_fp_list walkers that the transient-reference and
    persistent_id discipline in (2) close; bisecting onto an
    intermediate state would land on a UAF that pre-patch chaos merely
    made less reproducible.
    
    Validation:
      * CONFIG_DEBUG_LIST coverage for the list_head reuse path.
      * KASAN-enabled direct SMB2 durable-handle coverage that exercised
        ksmbd_durable_scavenger() and non-NULL ksmbd_lookup_fd_inode()
        returns while durable handles expired under concurrent rename
        lookups, with no KASAN, UAF, list-corruption, ODEBUG, or WARNING
        reports.
      * checkpatch --strict
      * make -j$(nproc) M=fs/smb/server
    
    Fixes: d484d621d40f ("ksmbd: add durable scavenger timer")
    Signed-off-by: DaeMyung Kang <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Alva Lan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ksmbd: fix null pointer dereference in compare_guid_key() [+ + +]
Author: Jeremy Laratro <[email protected]>
Date:   Wed May 13 08:26:16 2026 +0900

    ksmbd: fix null pointer dereference in compare_guid_key()
    
    commit 4b83cbc4c15f09b000cc06f033f64b0824b6dc87 upstream.
    
    session_fd_check() walks the per-inode m_op_list during durable-handle
    session teardown and sets op->conn = NULL for every opinfo whose conn
    matched the closing session's connection. The matching opinfo, however,
    stays linked in its per-ClientGuid lease_table_list entry's lb->lease_list
    because destroy_lease_table() only runs on full TCP-connection teardown,
    not on SESSION_LOGOFF.
    
    If the same TCP connection then negotiates a fresh session with the
    same ClientGuid (ClientGuid is bound to NEGOTIATE, not the session, and
    is unchanged across LOGOFF + SETUP) and issues a SMB2 CREATE with a
    lease context on a different inode, find_same_lease_key() walks
    lb->lease_list, reaches the stale opinfo, and calls compare_guid_key(),
    which unconditionally dereferences opinfo->conn->ClientGUID. The conn
    pointer is NULL and the kernel panics.
    
    Reproducer requires only a successful SMB2 SESSION_SETUP and a share
    configured with 'durable handles = yes'. KASAN report on mainline
    70390501d194:
    
      general protection fault, probably for non-canonical address
      0xdffffc0000000069: 0000 [#1] SMP KASAN PTI
      KASAN: null-ptr-deref in range [0x0000000000000348-0x000000000000034f]
      Workqueue: ksmbd-io handle_ksmbd_work
      RIP: 0010:bcmp+0x5b/0x230
      Call Trace:
       compare_guid_key+0x4b/0xd0
       find_same_lease_key+0x324/0x690
       smb2_open+0x6aea/0x8e60
       handle_ksmbd_work+0x796/0xee0
       ...
    
    Faulting address 0x348 is the offset of ClientGUID within struct
    ksmbd_conn, confirming opinfo->conn was NULL.
    
    Read opinfo->conn once and bail out if it has been cleared by a
    concurrent session_fd_check(). A half-detached opinfo cannot be the
    owner of an active lease, so returning 0 is the correct match result.
    
    Fixes: c8efcc786146 ("ksmbd: add support for durable handles v1/v2")
    Cc: [email protected]
    Signed-off-by: Jeremy Laratro <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ksmbd: fix SID memory leak in set_posix_acl_entries_dacl() on overflow [+ + +]
Author: Ferry Meng <[email protected]>
Date:   Mon May 11 21:18:16 2026 +0800

    ksmbd: fix SID memory leak in set_posix_acl_entries_dacl() on overflow
    
    commit af92ee994cc7f7e83a41c2025f32257a2f82a7ef upstream.
    
    Commit 299f962c0b02 ("ksmbd: use check_add_overflow() to prevent u16
    DACL size overflow") added check_add_overflow() guards that break out
    of the ACE-building loops in set_posix_acl_entries_dacl() when the
    accumulated DACL size would wrap past 65535.
    
    However, each iteration allocates a struct smb_sid via kmalloc_obj()
    at the top of the loop and relies on the kfree(sid) call at the end
    of the loop body (the 'pass_same_sid' label in the first loop, and
    the explicit kfree at the tail of the second loop) to release it.
    The newly introduced 'break' statements bypass those kfree() calls,
    leaking the sid buffer every time an overflow is detected.
    
    A malicious or malformed file with enough POSIX ACL entries to trip
    the overflow check will leak one or more struct smb_sid allocations
    on every request that touches the file's DACL, providing a trivial
    kernel memory exhaustion vector.
    
    Free sid before breaking out of the loops to plug the leak.
    
    Fixes: 299f962c0b02 ("ksmbd: use check_add_overflow() to prevent u16 DACL size overflow")
    Cc: [email protected]
    Signed-off-by: Ferry Meng <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ksmbd: validate owner of durable handle on reconnect [+ + +]
Author: Namjae Jeon <[email protected]>
Date:   Tue May 26 15:58:41 2026 +0800

    ksmbd: validate owner of durable handle on reconnect
    
    [ Upstream commit 49110a8ce654bbe56bef7c5e44cce31f4b102b8a ]
    
    Currently, ksmbd does not verify if the user attempting to reconnect
    to a durable handle is the same user who originally opened the file.
    This allows any authenticated user to hijack an orphaned durable handle
    by predicting or brute-forcing the persistent ID.
    
    According to MS-SMB2, the server MUST verify that the SecurityContext
    of the reconnect request matches the SecurityContext associated with
    the existing open.
    Add a durable_owner structure to ksmbd_file to store the original opener's
    UID, GID, and account name. and catpure the owner information when a file
    handle becomes orphaned. and implementing ksmbd_vfs_compare_durable_owner()
    to validate the identity of the requester during SMB2_CREATE (DHnC).
    
    Fixes: c8efcc786146 ("ksmbd: add support for durable handles v1/v2")
    Reported-by: Davide Ornaghi <[email protected]>
    Reported-by: Navaneeth K <[email protected]>
    Signed-off-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    [ Minor context conflict resolved. ]
    Signed-off-by: Alva Lan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
kunit: config: Enable KUNIT_DEBUGFS by default [+ + +]
Author: David Gow <[email protected]>
Date:   Sat Apr 25 11:41:53 2026 +0800

    kunit: config: Enable KUNIT_DEBUGFS by default
    
    [ Upstream commit 17e4c68ff35090d8cb743e3c82c09f92fda1ebda ]
    
    The KUNIT_DEBUGFS option is currently enabled based on the value of
    KUNIT_ALL_TESTS, but it really doesn't have anything to do with the set of
    enabled tests, so just enable it by default anyway. In particular, this
    shouldn't be only visible if KUNIT_ALL_TESTS is set, which is quite
    confusing.
    
    Link: https://lore.kernel.org/r/[email protected]
    Fixes: beaed42c427d ("kunit: default KUNIT_* fragments to KUNIT_ALL_TESTS")
    Signed-off-by: David Gow <[email protected]>
    Signed-off-by: Shuah Khan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

kunit: config: KUNIT_DEBUGFS should depend on DEBUG_FS [+ + +]
Author: David Gow <[email protected]>
Date:   Sat Apr 25 11:41:54 2026 +0800

    kunit: config: KUNIT_DEBUGFS should depend on DEBUG_FS
    
    [ Upstream commit 8f80b5b227ef9ea422080487715c841856339aed ]
    
    CONFIG_KUNIT_DEBUGFS is totally useless without debugfs, so it should
    depend on CONFIG_DEBUG_FS.
    
    Link: https://lore.kernel.org/r/[email protected]
    Fixes: e2219db280e3 ("kunit: add debugfs /sys/kernel/debug/kunit/<suite>/results display")
    Signed-off-by: David Gow <[email protected]>
    Signed-off-by: Shuah Khan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
KVM: arm64: vgic-its: Reject restored DTE with out-of-range num_eventid_bits [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Tue May 19 09:25:19 2026 -0400

    KVM: arm64: vgic-its: Reject restored DTE with out-of-range num_eventid_bits
    
    commit 9ce754ed8e7ab4e3999767ce1505f85c449ccb07 upstream.
    
    Userspace can restore an ITS Device Table Entry whose Size field encodes
    more EventID bits than the virtual ITS supports.  The live MAPD path
    rejects that state, but vgic_its_restore_dte() accepts it and stores the
    out-of-range value in dev->num_eventid_bits.
    
    Reject restored DTEs with num_eventid_bits > VITS_TYPER_IDBITS before
    allocating the device.  This mirrors the MAPD check and prevents the
    restored state from reaching vgic_its_restore_itt(), where the unchecked
    value can be converted into an oversized scan_its_table() range.
    
    Fixes: 57a9a117154c ("KVM: arm64: vgic-its: Device table save/restore")
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Marc Zyngier <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: Linux 6.6.142 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Mon Jun 1 17:43:16 2026 +0200

    Linux 6.6.142
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Ron Economos <[email protected]>
    Tested-by: Miguel Ojeda <[email protected]>
    Tested-by: Francesco Dolcini <[email protected]>
    Tested-by: Brett A C Sheffield <[email protected]>
    Tested-by: Pavel Machek (CIP) <[email protected]>
    Tested-by: Peter Schneider <[email protected]>
    Tested-by: Wentao Guan <[email protected]>
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
LoongArch: kprobes: Fix handling of fatal unrecoverable recursions [+ + +]
Author: Tiezhu Yang <[email protected]>
Date:   Fri May 22 15:05:07 2026 +0800

    LoongArch: kprobes: Fix handling of fatal unrecoverable recursions
    
    [ Upstream commit 1c856e158fd34ef2c4475a81c1dc386329989938 ]
    
    KPROBE_HIT_SS and KPROBE_REENTER are two types of fatal recursions that
    can not be safely recovered in kprobes.
    
    KPROBE_HIT_SS means that a kprobe is hit during single-stepping. At
    this point, the architecture-specific single-step context is already
    active. Nested single-stepping would corrupt the state, as the kprobe
    control block (kcb) and hardware registers cannot safely store multiple
    levels of stepping state.
    
    KPROBE_REENTER means that a third-level recursion occurs when a probe
    is hit while the system is already handling a nested probe (second-
    level). The kcb only provides a single slot (prev_kprobe) to backup the
    state. When a third probe is hit, there is no more space to save the
    state without corrupting the first-level backup.
    
    Kprobes work by replacing instructions with breakpoints. In order to
    execute the original instruction and continue, it must be moved to a
    temporary "single-step" slot. Since there is no backup space left to
    set up this slot safely, the CPU would be forced to return to the same
    original breakpoint address, triggering an endless loop.
    
    Currently, the code only prints a warning and returns. This leads to
    an infinite re-entry loop as the CPU repeatedly hits the same trap and
    a "stuck" CPU core because preemption was disabled at the start of the
    handler and never re-enabled in this early return path.
    
    Fix the logic by:
    1. Merging KPROBE_HIT_SS and KPROBE_REENTER cases, as both represent
       fatal recursions that cannot be safely recovered.
    2. Replacing WARN_ON_ONCE() with BUG() to terminate the system. This
       aligns LoongArch with other architectures (x86, arm64, riscv) and
       prevents stack overflow while providing diagnostic information.
    
    Fixes: 6d4cc40fb5f5 ("LoongArch: Add kprobes support")
    Signed-off-by: Tiezhu Yang <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

LoongArch: Remove unused code to avoid build warning [+ + +]
Author: Huacai Chen <[email protected]>
Date:   Thu May 21 20:58:40 2026 +0800

    LoongArch: Remove unused code to avoid build warning
    
    commit 0ccc9d47cf020994097ff51827cebd04aa2b0bf4 upstream.
    
    After commit feee6b2989165631b1 ("mm/memory_hotplug: shrink zones when
    offlining memory"), __remove_pages() doesn't need the "zone" parameter
    so the "page" variable is also unused. Remove the unused code to avoid
    such build warning:
    
    arch/loongarch/mm/init.c: In function 'arch_remove_memory':
    arch/loongarch/mm/init.c:134:22: warning: variable 'page' set but not used [-Wunused-but-set-variable=]
      134 |         struct page *page = pfn_to_page(start_pfn);
    
    Cc: <[email protected]>
    Reviewed-by: Guo Ren <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/damon/sysfs-schemes: call missing mem_cgroup_iter_break() [+ + +]
Author: SeongJae Park <[email protected]>
Date:   Sun Apr 26 10:36:12 2026 -0700

    mm/damon/sysfs-schemes: call missing mem_cgroup_iter_break()
    
    commit d4e7b5c4cc353f154d5ab8bb2e1ce7714d77a6e9 upstream.
    
    damon_sysfs_memcg_path_to_id() breaks mem_cgroup_iter() loop without
    calling mem_cgroup_iter_break().  This leaks the cgroup reference.  Fix
    the issue by calling mem_cgroup_iter_break() before the break.
    
    The issue was discovered [1] by Sashiko.
    
    Link: https://lore.kernel.org/[email protected]
    Link: https://lore.kernel.org/[email protected] [1]
    Fixes: 29cbb9a13f05 ("mm/damon/sysfs-schemes: implement scheme filters")
    Signed-off-by: SeongJae Park <[email protected]>
    Cc: <[email protected]> # 6.3.x
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mptcp: pm: ADD_ADDR rtx: allow ID 0 [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Thu May 21 05:19:09 2026 +0200

    mptcp: pm: ADD_ADDR rtx: allow ID 0
    
    commit 03f324f3f1f7619a47b9c91282cb12775ab0a2f1 upstream.
    
    ADD_ADDR can be sent for the ID 0, which corresponds to the local
    address and port linked to the initial subflow.
    
    Indeed, this address could be removed, and re-added later on, e.g. what
    is done in the "delete re-add signal" MPTCP Join selftests. So no reason
    to ignore it.
    
    Fixes: 00cfd77b9063 ("mptcp: retransmit ADD_ADDR when timeout")
    Cc: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ applied to net/mptcp/pm_netlink.c instead of upstream's pm_kernel.c ]
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mptcp: pm: ADD_ADDR rtx: always decrease sk refcount [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Thu May 21 05:19:10 2026 +0200

    mptcp: pm: ADD_ADDR rtx: always decrease sk refcount
    
    commit 9634cb35af17019baec21ca648516ce376fa10e6 upstream.
    
    When an ADD_ADDR is retransmitted, the sk is held in sk_reset_timer().
    It should then be released in all cases at the end.
    
    Some (unlikely) checks were returning directly instead of calling
    sock_put() to decrease the refcount. Jump to a new 'exit' label to call
    __sock_put() (which will become sock_put() in the next commit) to fix
    this potential leak.
    
    While at it, drop the '!msk' check which cannot happen because it is
    never reset, and explicitly mark the remaining one as "unlikely".
    
    Fixes: 00cfd77b9063 ("mptcp: retransmit ADD_ADDR when timeout")
    Cc: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ applied to net/mptcp/pm_netlink.c instead of upstream's pm_kernel.c ]
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mptcp: pm: ADD_ADDR rtx: free sk if last [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Thu May 21 05:19:11 2026 +0200

    mptcp: pm: ADD_ADDR rtx: free sk if last
    
    commit b7b9a461569734d33d3259d58d2507adfac107ed upstream.
    
    When an ADD_ADDR is retransmitted, the sk is held in sk_reset_timer(),
    and released at the end.
    
    If at that moment, it was the last reference being held, the sk would
    not be freed. sock_put() should then be called instead of __sock_put().
    
    But that's not enough: if it is the last reference, sock_put() will call
    sk_free(), which will end up calling sk_stop_timer_sync() on the same
    timer, and waiting indefinitely to finish. So it is needed to mark that
    the timer is done at the end of the timer handler when it has not been
    rescheduled, not to call sk_stop_timer_sync() on "itself".
    
    Fixes: 00cfd77b9063 ("mptcp: retransmit ADD_ADDR when timeout")
    Cc: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ Applied to net/mptcp/pm_netlink.c instead of upstream's pm_kernel.c.
      Also, there were conflicts, because commit 30549eebc4d8 ("mptcp: make
      ADD_ADDR retransmission timeout adaptive") is not in this version and
      changed the context. Also, other conflicts were due to newer patches
      being backported with resolved conflicts before this one. ]
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mptcp: sync the msk->sndbuf at accept() time [+ + +]
Author: Gang Yan <[email protected]>
Date:   Thu May 21 05:19:08 2026 +0200

    mptcp: sync the msk->sndbuf at accept() time
    
    commit fcf04b14334641f4b0b8647824480935e9416d52 upstream.
    
    On passive MPTCP connections, the msk sndbuf is not updated correctly.
    
    The root cause is an order issue in the accept path:
    
    - tcp_check_req() -> subflow_syn_recv_sock() -> mptcp_sk_clone_init()
      calls __mptcp_propagate_sndbuf() to copy the ssk sndbuf into msk
    
    - Later, tcp_child_process() -> tcp_init_transfer() ->
      tcp_sndbuf_expand() grows the ssk sndbuf.
    
    So __mptcp_propagate_sndbuf() runs before the ssk sndbuf has been
    expanded and the msk ends up with a much smaller sndbuf than the
    subflow:
    
      MPTCP: msk->sndbuf:20480, msk->first->sndbuf:2626560
    
    Fix this by moving the __mptcp_propagate_sndbuf() call from
    mptcp_sk_clone_init() -- the ssk sndbuf is not yet finalized there -- to
    __mptcp_propagate_sndbuf() at accept() time, when the ssk sndbuf has
    been fully expanded by tcp_sndbuf_expand().
    
    Fixes: 8005184fd1ca ("mptcp: refactor sndbuf auto-tuning")
    Cc: [email protected]
    Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/602
    Signed-off-by: Gang Yan <[email protected]>
    Acked-by: Paolo Abeni <[email protected]>
    Reviewed-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/20260420-net-mptcp-sync-sndbuf-accept-v1-1-e3523e3aeb44@kernel.org
    Signed-off-by: Paolo Abeni <[email protected]>
    [ No conflicts, but move __mptcp_propagate_sndbuf() above the for-loop
      (mptcp_for_each_subflow()) present in this version, which will modify
      'subflow' used by __mptcp_propagate_sndbuf() in this new patch. ]
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
 
net/mlx5: Do not restore destination-less TC rules [+ + +]
Author: Jeroen Massar <[email protected]>
Date:   Wed May 13 09:33:02 2026 +0300

    net/mlx5: Do not restore destination-less TC rules
    
    [ Upstream commit 8d0a5af8b1ba598e7340761729801624e7a9330e ]
    
    After IPsec policy/state TX rules are added, any TC flow rule, which
    forwards packets to uplink, is modified to forward to IPsec TX tables.
    As these tables are destroyed dynamically, whenever there is no
    reference to them, the destinations of this kind of rules must be
    restored to uplink, unless there is no destination for that rule.
    
    The flow rules FLOW_ACTION_ACCEPT, DROP, TRAP, GOTO and SAMPLE do not
    have a destination port, and thus out_count = 0.
    
    At cleanup time of the rules in mlx5_esw_ipsec_modify_flow_dests
    we call mlx5_eswitch_restore_ipsec_rule but as the above types
    do not have a destination we get an underflow of out_count, as
    the port is passed, which is esw_attr->out_count - 1.
    
    This change avoids calling mlx5_eswitch_restore_ipsec_rule when
    there are no output destinations and thus avoids the underflow.
    
    Fixes: d1569537a837 ("net/mlx5e: Modify and restore TC rules for IPSec TX rules")
    Signed-off-by: Jeroen Massar <[email protected]>
    Reviewed-by: Jianbo Liu <[email protected]>
    Reviewed-by: Cosmin Ratiu <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/smc: avoid NULL deref of conn->lnk in smc_msg_event tracepoint [+ + +]
Author: Xiang Mei <[email protected]>
Date:   Sun May 10 15:26:40 2026 -0700

    net/smc: avoid NULL deref of conn->lnk in smc_msg_event tracepoint
    
    [ Upstream commit 7bf563badd37cb796df5477d2b78bb64148a1268 ]
    
    The smc_msg_event tracepoint class, shared by smc_tx_sendmsg and
    smc_rx_recvmsg, unconditionally dereferences smc->conn.lnk:
    
            __string(name, smc->conn.lnk->ibname)
    
    conn->lnk is only set for SMC-R; for SMC-D it is NULL. Other code on
    these paths already handles this (e.g. !conn->lnk in
    SMC_STAT_RMB_TX_SIZE_SMALL()). With the tracepoint enabled, the first
    sendmsg()/recvmsg() on an SMC-D socket crashes:
    
      Oops: general protection fault, probably for non-canonical address
      KASAN: null-ptr-deref in range [...]
      RIP: 0010:strlen+0x1e/0xa0
      Call Trace:
       trace_event_raw_event_smc_msg_event (net/smc/smc_tracepoint.h:44)
       smc_rx_recvmsg (net/smc/smc_rx.c:515)
       smc_recvmsg (net/smc/af_smc.c:2859)
       __sys_recvfrom (net/socket.c:2315)
       __x64_sys_recvfrom (net/socket.c:2326)
       do_syscall_64
    
    The faulting address 0x3e0 is offsetof(struct smc_link, ibname),
    confirming the NULL ->lnk deref. Enabling the tracepoint requires
    root, but the trigger itself is unprivileged: socket(AF_SMC, ...) has
    no capability check, and SMC-D negotiation needs no admin step on
    s390 or on x86 with the loopback ISM device loaded.
    
    Log an empty device name for SMC-D instead of dereferencing NULL.
    
    Fixes: aff3083f10bf ("net/smc: Introduce tracepoints for tx and rx msg")
    Reported-by: Weiming Shi <[email protected]>
    Signed-off-by: Xiang Mei <[email protected]>
    Reviewed-by: Dust Li <[email protected]>
    Reviewed-by: Sidraya Jayagond <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[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
    
    [ Upstream commit 277740023def559a4a2ddc3e8e784ee37a0f16a9 ]
    
    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: Sasha Levin <[email protected]>

 
net: ag71xx: check error for platform_get_irq [+ + +]
Author: Rosen Penev <[email protected]>
Date:   Sat May 16 14:26:16 2026 -0700

    net: ag71xx: check error for platform_get_irq
    
    [ Upstream commit e7c70bf97e90d974cd575e4c90f8f9b07d056da3 ]
    
    Complete error handling for a failed platform_get_irq() call
    
    Fixes: d51b6ce441d3 ("net: ethernet: add ag71xx driver")
    Signed-off-by: Rosen Penev <[email protected]>
    Reviewed-by: Oleksij Rempel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: bcmgenet: keep RBUF EEE/PM disabled [+ + +]
Author: Nicolai Buchwitz <[email protected]>
Date:   Wed May 20 20:43:20 2026 +0200

    net: bcmgenet: keep RBUF EEE/PM disabled
    
    commit 9a1730245e416d11ad5c0f2c100061d61cc43f60 upstream.
    
    Setting RBUF_EEE_EN | RBUF_PM_EN in RBUF_ENERGY_CTRL breaks the RX
    path on GENET hardware once MAC EEE becomes active. RX traffic stops
    flowing while the link stays up and the usual descriptor/RX error
    counters remain quiet. In that state the MAC still accepts frames
    (rbuf_ovflow_cnt keeps climbing) but RBUF no longer forwards them to
    DMA, so rx_packets is no longer incremented at the netdev level. On
    some boards the corruption ends up as a paging fault in
    skb_release_data via bcmgenet_rx_poll on an LPI exit.
    
    Reproduced on Pi 4B (BCM2711 + BCM54213PE) and confirmed by Florian
    Fainelli on an internal Broadcom 4908-family board with the same crash
    signature. RBUF_PM_EN is not publicly documented.
    
    This shows up more often now that phy_support_eee() enables EEE by
    default, but it also affects older kernels as soon as TX LPI is
    turned on via ethtool, so it is not specific to recent changes.
    
    Always clear RBUF_EEE_EN | RBUF_PM_EN in bcmgenet_eee_enable_set so
    the bits stay off across resets. UMAC and TBUF setup is left alone so
    TX-side EEE keeps working.
    
    Link: https://github.com/raspberrypi/linux/issues/7304
    Fixes: 6ef398ea60d9 ("net: bcmgenet: add EEE support")
    Cc: [email protected]
    Signed-off-by: Nicolai Buchwitz <[email protected]>
    Reviewed-by: Florian Fainelli <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: bridge: Flush multicast groups when snooping is disabled [+ + +]
Author: Petr Machata <[email protected]>
Date:   Thu Oct 23 16:45:37 2025 +0200

    net: bridge: Flush multicast groups when snooping is disabled
    
    [ Upstream commit 68800bbf583f26f71491141e4b3c8582f9cfcbde ]
    
    When forwarding multicast packets, the bridge takes MDB into account when
    IGMP / MLD snooping is enabled. Currently, when snooping is disabled, the
    MDB is retained, even though it is not used anymore.
    
    At the same time, during the time that snooping is disabled, the IGMP / MLD
    control packets are obviously ignored, and after the snooping is reenabled,
    the administrator has to assume it is out of sync. In particular, missed
    join and leave messages would lead to traffic being forwarded to wrong
    interfaces.
    
    Keeping the MDB entries around thus serves no purpose, and just takes
    memory. Note also that disabling per-VLAN snooping does actually flush the
    relevant MDB entries.
    
    This patch flushes non-permanent MDB entries as global snooping is
    disabled.
    
    Signed-off-by: Petr Machata <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Acked-by: Nikolay Aleksandrov <[email protected]>
    Link: https://patch.msgid.link/5e992df1bb93b88e19c0ea5819e23b669e3dde5d.1761228273.git.petrm@nvidia.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 4df78ff02629 ("bridge: mcast: Fix a possible use-after-free when removing a bridge port")
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: mt7530: fix FDB entries not aging out with short timeout [+ + +]
Author: Daniel Golle <[email protected]>
Date:   Thu May 14 15:04:21 2026 +0100

    net: dsa: mt7530: fix FDB entries not aging out with short timeout
    
    [ Upstream commit e824e40d0e841fab66ab7897d6c7b14dc81c66a7 ]
    
    The DSA forwarding selftests bridge_vlan_aware.sh and
    bridge_vlan_unaware.sh configure the bridge with ageing_time set to
    LOW_AGEING_TIME (1000 centiseconds, i.e. 10 seconds) and then run
    learning_test() in lib.sh, which expects a learned FDB entry to be
    removed after ageing_time + 10 seconds. On MT7530/MT7531 the entry
    persisted past the deadline and the "Found FDB record when should
    not" assertion failed.
    
    With msecs=10000, the algorithm in mt7530_set_ageing_time() finds
    AGE_CNT=0 and AGE_UNIT=9 as the first exact match (starting the
    search from tmp_age_count=0). The per-entry aging counter is
    initialized to AGE_CNT when a MAC address is learned, so with
    AGE_CNT=0 new entries start with a counter value of 0, which the
    hardware treats as "already aged" and never removes, effectively
    disabling aging.
    
    Fix this by starting the search from tmp_age_count=1 to ensure
    entries always have a non-zero initial aging counter. For a
    10-second ageing time this yields AGE_CNT=1 and AGE_UNIT=4 instead:
    the timer ticks every 5 seconds and entries are removed after 2
    ticks.
    
    Starting the search at AGE_CNT=1 raises the minimum representable
    ageing time from 1 to 2 seconds. Without bounds, a stale ageing_time
    of 1 second would now make the loop fall through without setting
    age_count and age_unit, leaving them uninitialized when written to
    the MT7530_AAC hardware register. Set ds->ageing_time_min and
    ds->ageing_time_max so the DSA core validates the range before the
    callback is invoked, and drop the now-redundant range check from
    mt7530_set_ageing_time().
    
    Fixes: ea6d5c924e39 ("net: dsa: mt7530: support setting ageing time")
    Signed-off-by: Daniel Golle <[email protected]>
    Link: https://patch.msgid.link/7788ded12dc07b1bce329ec35fa70f4b45f3f9b7.1778766629.git.daniel@makrotopia.org
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: mt7530: preserve VLAN tags on trapped link-local frames [+ + +]
Author: Daniel Golle <[email protected]>
Date:   Thu May 14 15:04:35 2026 +0100

    net: dsa: mt7530: preserve VLAN tags on trapped link-local frames
    
    [ Upstream commit 3ac85bcfd404b588298c95c6fba8aad4ad334f57 ]
    
    The BPC, RGAC1 and RGAC2 registers control the handling of link-local
    frames with reserved MAC DAs (01:80:C2:00:00:0x). These frames are
    correctly trapped to the CPU port, but the egress VLAN tag attribute was
    set to MT7530_VLAN_EG_UNTAGGED which causes the switch to strip any
    VLAN tags from trapped frames before they reach the CPU.
    
    This causes VLAN-tagged link-local frames (STP BPDUs, LLDP, PTP Peer
    Delay Requests) to arrive at the CPU without their VLAN tag, so they
    are delivered to the base network interface instead of the VLAN
    sub-interface. The DSA local_termination selftest confirms this: all
    link-local protocol tests on VLAN upper interfaces fail.
    
    Set the EG_TAG attribute to MT7530_VLAN_EG_DISABLED (system default)
    so that the switch does not modify VLAN tags in trapped frames. This
    way VLAN-tagged frames retain their original tag and are delivered to
    the correct VLAN sub-interface, matching the behavior of non-trapped
    frames which pass through without VLAN tag modification.
    
    Fixes: 69ddba9d170b ("net: dsa: mt7530: fix handling of all link-local frames")
    Signed-off-by: Daniel Golle <[email protected]>
    Acked-by: Chester A. Unal <[email protected]>
    Link: https://patch.msgid.link/891e0cd34db2a5fe20ceb73283a81fb5f71427ca.1778766629.git.daniel@makrotopia.org
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: mt7530: rename mt753x_bpdu_port_fw enum to mt753x_to_cpu_fw [+ + +]
Author: Arınç ÜNAL <[email protected]>
Date:   Mon Apr 22 10:15:11 2024 +0300

    net: dsa: mt7530: rename mt753x_bpdu_port_fw enum to mt753x_to_cpu_fw
    
    [ Upstream commit 7603a0c7d2210a253265394b50567c64fbb977e4 ]
    
    The mt753x_bpdu_port_fw enum is globally used for manipulating the process
    of deciding the forwardable ports, specifically concerning the CPU port(s).
    Therefore, rename it and the values in it to mt753x_to_cpu_fw.
    
    Change FOLLOW_MFC to SYSTEM_DEFAULT to be on par with the switch documents.
    
    Signed-off-by: Arınç ÜNAL <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 3ac85bcfd404 ("net: dsa: mt7530: preserve VLAN tags on trapped link-local frames")
    Signed-off-by: Sasha Levin <[email protected]>

net: ethernet: cortina: Carry over frag counter [+ + +]
Author: Linus Walleij <[email protected]>
Date:   Sat May 9 00:13:38 2026 +0200

    net: ethernet: cortina: Carry over frag counter
    
    [ Upstream commit ebd8ec2b309e3a447851b456ccaf8fb39f3661e7 ]
    
    The gmac_rx() NAPI poll function assembles packets in an
    SKB from a ring buffer.
    
    If the ring buffer gets completely emptied during a poll cycle,
    we exit gmac_rx(), but the packet is not yet completely
    assembled in the SKB, yet the fragment counter frag_nr is
    reset to zero on the next invocation.
    
    Solve this by making the RX fragment counter a part of the
    port struct, and carry it over between invocations.
    
    Reset the fragment counter only right after calling
    napi_gro_frags(), on error (after calling napi_free_frags())
    or if stopping the port.
    
    Reset it in some place where not strictly necessary just to
    emphasize what is going on.
    
    This was found by Sashiko during normal patch review.
    
    Fixes: 4d5ae32f5e1e ("net: ethernet: Add a driver for Gemini gigabit ethernet")
    Link: https://sashiko.dev/#/patchset/20260505-gemini-ethernet-fix-v2-1-997c31d06079%40kernel.org
    Signed-off-by: Linus Walleij <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ethernet: cortina: Drop half-assembled SKB [+ + +]
Author: Andreas Haarmann-Thiemann <[email protected]>
Date:   Tue May 5 23:52:17 2026 +0200

    net: ethernet: cortina: Drop half-assembled SKB
    
    [ Upstream commit b266bacba796ff5c4dcd2ae2fc08aacf7ab39153 ]
    
    In gmac_rx() (drivers/net/ethernet/cortina/gemini.c), when
    gmac_get_queue_page() returns NULL for the second page of a multi-page
    fragment, the driver logs an error and continues — but does not free the
    partially assembled skb that was being assembled via napi_build_skb() /
    napi_get_frags().
    
    Free the in-progress partially assembled skb via napi_free_frags()
    and increase the number of dropped frames appropriately
    and assign the skb pointer NULL to make sure it is not lingering
    around, matching the pattern already used elsewhere in the driver.
    
    Fixes: 4d5ae32f5e1e ("net: ethernet: Add a driver for Gemini gigabit ethernet")
    Signed-off-by: Andreas Haarmann-Thiemann <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    Reviewed-by: Alexander Lobakin <[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: cortina: Make RX SKB per-port [+ + +]
Author: Linus Walleij <[email protected]>
Date:   Sat May 9 00:13:37 2026 +0200

    net: ethernet: cortina: Make RX SKB per-port
    
    [ Upstream commit 06937db21ee311ed07eba47954447245041a982d ]
    
    The SKB used to assemble packets from fragments in gmac_rx()
    is static local, but the Gemini has two ethernet ports, meaning
    there can be races between the ports on a bad day if a device
    is using both.
    
    Make the RX SKB a per-port variable and carry it over between
    invocations in the port struct instead.
    
    Zero the pointer once we call napi_gro_frags(), on error (after
    calling napi_free_frags()) or if the port is stopped.
    
    Zero it in some place where not strictly necessary just to
    emphasize what is going on.
    
    This was found by Sashiko during normal patch review.
    
    Fixes: 4d5ae32f5e1e ("net: ethernet: Add a driver for Gemini gigabit ethernet")
    Link: https://sashiko.dev/#/patchset/20260505-gemini-ethernet-fix-v2-1-997c31d06079%40kernel.org
    Signed-off-by: Linus Walleij <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ethernet: cs89x0: remove stale CONFIG_MACH_MX31ADS reference [+ + +]
Author: Ethan Nelson-Moore <[email protected]>
Date:   Fri May 8 19:37:28 2026 -0700

    net: ethernet: cs89x0: remove stale CONFIG_MACH_MX31ADS reference
    
    [ Upstream commit 36a8d04a8293afcb9304cf0cd3741f67698f2a1a ]
    
    The legacy ARM board file for MACH_MX31ADS was removed in commit
    c93197b0041d ("ARM: imx: Remove i.MX31 board files"), but a reference
    to it remained in the cs89x0 driver. Drop this unused code.
    
    Signed-off-by: Ethan Nelson-Moore <[email protected]>
    Fixes: c93197b0041d ("ARM: imx: Remove i.MX31 board files")
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: gro: don't merge zcopy skbs [+ + +]
Author: Sabrina Dubroca <[email protected]>
Date:   Wed May 20 22:44:42 2026 +0200

    net: gro: don't merge zcopy skbs
    
    [ Upstream commit 4db79a322db8c97f7b73b8a347395ef4d685eb40 ]
    
    skb_gro_receive() can currently copy frags between the source and GRO
    skb, without checking the zerocopy status, and in particular the
    SKBFL_MANAGED_FRAG_REFS flag.
    
    When SKBFL_MANAGED_FRAG_REFS is set, the skb doesn't hold a reference
    on the pages in shinfo->frags. Appending those frags to another skb's
    frags without fixing up the page refcount can lead to UAF.
    
    When either the last skb in the GRO chain (the one we would append
    frags to) or the source skb is zerocopy, don't merge the skbs.
    
    Fixes: 753f1ca4e1e5 ("net: introduce managed frags infrastructure")
    Reported-by: Huzaifa Sidhpurwala <[email protected]>
    Signed-off-by: Sabrina Dubroca <[email protected]>
    Reviewed-by: Willem de Bruijn <[email protected]>
    Link: https://patch.msgid.link/c3b7f906bbfcbdfd7b4fa9d6c18a438870df85be.1779307748.git.sd@queasysnail.net
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ifb: report ethtool stats over num_tx_queues [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Wed May 13 21:37:39 2026 -0400

    net: ifb: report ethtool stats over num_tx_queues
    
    commit 5db89c99566fc4728cc92e941d8e1975711e24b5 upstream.
    
    ifb_dev_init() allocates dp->tx_private to dev->num_tx_queues
    entries via kzalloc_objs(*txp, dev->num_tx_queues). Both IFB
    per-queue RX and TX stats live in those entries: ifb_xmit() updates
    txp->rx_stats using the skb queue mapping, ifb_ri_tasklet() updates
    txp->tx_stats, and ifb_stats64() aggregates both over
    dev->num_tx_queues.
    
    The ethtool stats callbacks instead size and walk the per-queue
    stats with dev->real_num_rx_queues and dev->real_num_tx_queues. With
    an asymmetric device where the RX queue count exceeds the TX queue
    count, for example:
    
        ip link add name ifb10 numtxqueues 1 numrxqueues 8 type ifb
        ethtool -S ifb10
    
    ifb_get_ethtool_stats() indexes past the tx_private allocation and
    copies adjacent slab data through ETHTOOL_GSTATS.
    
    Use dev->num_tx_queues consistently for the stats strings, the
    stats count, and the stats data walks. This reports one RX stats
    group and one TX stats group for each backing ifb_q_private entry,
    which is the queue set IFB can actually populate.
    
    Reproduced under UML+KASAN at v7.1-rc2:
    
      BUG: KASAN: slab-out-of-bounds in ifb_fill_stats_data+0x3c/0xae
      Read of size 8 at addr 0000000062dbd228 by task ethtool/36
      ifb_fill_stats_data+0x3c/0xae
      ifb_get_ethtool_stats+0xc0/0x129
      __dev_ethtool+0x1ca5/0x363c
      dev_ethtool+0x123/0x1b3
      dev_ioctl+0x56c/0x744
      sock_do_ioctl+0x15f/0x1b2
      sock_ioctl+0x4d5/0x50a
      sys_ioctl+0xd8b/0xde9
    
    With the patch applied, the same UML+KASAN repro is silent and
    ethtool -S ifb10 reports only the stats backed by the single
    allocated tx_private entry.
    
    Fixes: a21ee5b2fcb8 ("net: ifb: support ethtools stats")
    Cc: [email protected]
    Signed-off-by: Michael Bommarito <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: lan966x: avoid unregistering netdev on register failure [+ + +]
Author: Myeonghun Pak <[email protected]>
Date:   Wed May 6 21:43:11 2026 +0900

    net: lan966x: avoid unregistering netdev on register failure
    
    [ Upstream commit c4f3d6eb1fcf6cd9ce4644f604d5aad1ce594dfc ]
    
    lan966x_probe_port() stores the newly allocated net_device in the
    port before calling register_netdev(). If register_netdev() fails,
    the probe error path calls lan966x_cleanup_ports(), which sees
    port->dev and calls unregister_netdev() for a device that was never
    registered.
    
    Destroy the phylink instance created for this port and clear port->dev
    before returning the registration error. The common cleanup path now skips
    ports without port->dev before reaching the registered netdev cleanup, so
    it only handles ports that reached the registered-netdev lifetime.
    
    This also avoids treating an uninitialized FDMA netdev and the failed port
    as a NULL == NULL match in the common cleanup path.
    
    Fixes: d28d6d2e37d1 ("net: lan966x: add port module support")
    Co-developed-by: Ijae Kim <[email protected]>
    Signed-off-by: Ijae Kim <[email protected]>
    Signed-off-by: Myeonghun Pak <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: mana: Fix TOCTOU double-fetch of hwc_msg_id from DMA buffer [+ + +]
Author: Erni Sri Satya Vennela <[email protected]>
Date:   Thu May 14 12:41:51 2026 -0700

    net: mana: Fix TOCTOU double-fetch of hwc_msg_id from DMA buffer
    
    [ Upstream commit 35f0f0a2536a4d604b4dbad92c85c4a8fdebb870 ]
    
    In mana_hwc_rx_event_handler(), resp->response.hwc_msg_id is read from
    DMA-coherent memory and bounds-checked, then mana_hwc_handle_resp()
    re-reads the same field from the same DMA buffer for test_bit() and
    pointer arithmetic.
    
    DMA-coherent memory is mapped uncacheable on x86 and is shared,
    unencrypted, in Confidential VMs (SEV-SNP/TDX), so each load goes
    directly to host-visible memory. A H/W can modify the value
    between the check and the use, bypassing the bounds validation.
    
    Fix this by reading hwc_msg_id exactly once using READ_ONCE() into a
    stack-local variable in mana_hwc_rx_event_handler(), and passing the
    validated value as a parameter to mana_hwc_handle_resp().
    
    Fixes: ca9c54d2d6a5 ("net: mana: Add a driver for Microsoft Azure Network Adapter (MANA)")
    Signed-off-by: Erni Sri Satya Vennela <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: mana: validate rx_req_idx to prevent out-of-bounds array access [+ + +]
Author: Aditya Garg <[email protected]>
Date:   Tue May 19 22:15:53 2026 -0700

    net: mana: validate rx_req_idx to prevent out-of-bounds array access
    
    [ Upstream commit b809d0409991b75a6cff846a5ac27c3062953f84 ]
    
    In mana_hwc_rx_event_handler(), rx_req_idx is derived from
    sge->address in DMA-coherent memory. In Confidential VMs
    (SEV-SNP/TDX), this memory is shared unencrypted and HW can modify
    WQE contents at any time. No bounds check exists on rx_req_idx,
    which can lead to an out-of-bounds access into reqs[].
    
    Add bounds check on rx_req_idx in mana_hwc_rx_event_handler() before
    using it to index the reqs[] array.
    
    Fixes: ca9c54d2d6a5 ("net: mana: Add a driver for Microsoft Azure Network Adapter (MANA)")
    Signed-off-by: Aditya Garg <[email protected]>
    Reviewed-by: Haiyang Zhang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: phy: c45: add genphy_c45_pma_read_ext_abilities() function [+ + +]
Author: Oleksij Rempel <[email protected]>
Date:   Tue Dec 12 06:41:43 2023 +0100

    net: phy: c45: add genphy_c45_pma_read_ext_abilities() function
    
    [ Upstream commit 0c476157085fe2ad13b9bec70ea672e86647fa1a ]
    
    Move part of the genphy_c45_pma_read_abilities() code to a separate
    function.
    
    Some PHYs do not implement PMA/PMD status 2 register (Register 1.8) but
    do implement PMA/PMD extended ability register (Register 1.11). To make
    use of it, we need to be able to access this part of code separately.
    
    Signed-off-by: Oleksij Rempel <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Reviewed-by: Russell King (Oracle) <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: c78bdba7b966 ("net: phy: DP83TC811: add reading of abilities")
    Signed-off-by: Sasha Levin <[email protected]>

net: phy: DP83TC811: add reading of abilities [+ + +]
Author: Sven Schuchmann <[email protected]>
Date:   Tue May 12 09:19:47 2026 +0200

    net: phy: DP83TC811: add reading of abilities
    
    [ Upstream commit c78bdba7b9666020c0832150a4fc4c0aebc7c6ac ]
    
    At this time the driver is not listing any speeds
    it supports. This should be ETHTOOL_LINK_MODE_100baseT1_Full_BIT
    for DP83TC811. Add the missing call for phylib to read the abilities.
    
    Fixes: b753a9faaf9a ("net: phy: DP83TC811: Introduce support for the DP83TC811 phy")
    Suggested-by: Andrew Lunn <[email protected]>
    Signed-off-by: Sven Schuchmann <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [[email protected]: dropped revision history]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: tls: fix off-by-one in sg_chain entry count for wrapped sk_msg ring [+ + +]
Author: Jakub Kicinski <[email protected]>
Date:   Mon May 11 10:49:17 2026 -0700

    net: tls: fix off-by-one in sg_chain entry count for wrapped sk_msg ring
    
    [ Upstream commit 285943c6e7ca309bbea84b253745154241d9788a ]
    
    When an sk_msg scatterlist ring wraps (sg.end < sg.start),
    tls_push_record() chains the tail portion of the ring to the head
    using sg_chain(). An extra entry in the sg array is reserved for
    this:
    
      struct sk_msg_sg {
            [...]
            /* The extra two elements:
             * 1) used for chaining the front and sections when the list becomes
             *    partitioned (e.g. end < start). The crypto APIs require the
             *    chaining;
             * 2) to chain tailer SG entries after the message.
             */
            struct scatterlist              data[MAX_MSG_FRAGS + 2];
    
    The current code uses MAX_SKB_FRAGS + 1 as the ring size:
    
        sg_chain(&msg_pl->sg.data[msg_pl->sg.start],
                 MAX_SKB_FRAGS - msg_pl->sg.start + 1,
                 msg_pl->sg.data);
    
    This places the chain pointer at
    
      sg_chain(data[start], (MAX_SKB_FRAGS - msg_start + 1) .. =
      &data[start] + (MAX_SKB_FRAGS - msg_start + 1) - 1 =
      data[start + (MAX_SKB_FRAGS - start + 1) - 1] =
      data[MAX_SKB_FRAGS]
    
    instead of the true last entry. This is likely due to a "race" of
    the commit under Fixes landing close to
    commit 031097d9e079 ("bpf: sk_msg, zap ingress queue on psock down")
    
    Convert to ARRAY_SIZE and drop the data[start] / - start (as suggested
    by Sabrina).
    
    Reported-by: 钱一铭 <[email protected]>
    Fixes: 9aaaa56845a0 ("bpf: Sockmap/tls, skmsg can have wrapped skmsg that needs extra chaining")
    Signed-off-by: Jakub Kicinski <[email protected]>
    Reviewed-by: Sabrina Dubroca <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: tls: prevent chain-after-chain in plain text SG [+ + +]
Author: Jakub Kicinski <[email protected]>
Date:   Mon May 11 10:49:18 2026 -0700

    net: tls: prevent chain-after-chain in plain text SG
    
    [ Upstream commit ff26a0e8377dec07e4a7230db7675bed1b9a6d03 ]
    
    Sashiko points out that if end = 0 (start != 0) the current
    code will create a chain link to content type right after
    the wrap link:
    
      This would create a chain where the wrap link points directly
      to another chain link. The scatterlist API sg_next iterator
      does not recursively resolve consecutive chain links.
    
    meaning this is illegal input to crypto.
    
    The wrapping link is unnecessary if end = 0. end is the entry after
    the last one used so end = 0 means there's nothing pushed after
    the wrap:
    
       end         start            i
        v            v              v
      [   ]...[   ][ d ][ d ][ d ][ d ][rsv for wrap]
    
    Skip the wrapping in this case.
    
    TLS 1.3 can use the "wrapping slot" for it's chaining if end = 0.
    This avoids the chain-after-chain.
    
    Move the wrap chaining before marking END and chaining off content
    type, that feels like more logical ordering to me, but should not
    matter from functional perspective.
    
    Reported-by: Sashiko <[email protected]>
    Fixes: 9aaaa56845a0 ("bpf: Sockmap/tls, skmsg can have wrapped skmsg that needs extra chaining")
    Signed-off-by: Jakub Kicinski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: wwan: iosm: fix potential memory leaks in ipc_imem_init() [+ + +]
Author: Abdun Nihaal <[email protected]>
Date:   Tue May 19 11:57:39 2026 +0530

    net: wwan: iosm: fix potential memory leaks in ipc_imem_init()
    
    commit c5d93b2c40355e999715262a824965aac025a427 upstream.
    
    The memory allocated in ipc_protocol_init() is not freed on the error
    paths that follow in ipc_imem_init(). Fix that by calling the
    corresponding release function ipc_protocol_deinit() in the error path.
    
    Fixes: 3670970dd8c6 ("net: iosm: shared memory IPC interface")
    Cc: [email protected]
    Signed-off-by: Abdun Nihaal <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
netfilter: ip6t_hbh: reject oversized option lists [+ + +]
Author: Zhengchuan Liang <[email protected]>
Date:   Wed May 13 15:57:17 2026 +0800

    netfilter: ip6t_hbh: reject oversized option lists
    
    commit 4322dcde6b4173c2d8e8e6118ed290794263bcc8 upstream.
    
    struct ip6t_opts stores at most IP6T_OPTS_OPTSNR option descriptors,
    but hbh_mt6_check() does not reject larger optsnr values supplied from
    userspace.
    
    Validate optsnr in the rule setup path so only match data that fits the
    fixed-size opts array can be installed. This follows the existing xtables
    pattern of rejecting invalid user-provided counts in checkentry() and
    keeps the packet matching path unchanged.
    
    `struct ip6t_opts` has a fixed `opts[IP6T_OPTS_OPTSNR]` array,
    where `IP6T_OPTS_OPTSNR` is 16, then off-by-one array access is possible:
    
    [  137.924693][ T8692] UBSAN: array-index-out-of-bounds in ../net/ipv6/netfilter/ip6t_hbh.c:110:29
    [  137.926167][ T8692] index 16 is out of range for type '__u16 [16]'
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    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]>
    Signed-off-by: Zhengchuan Liang <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: ipset: stop hash:* range iteration at end [+ + +]
Author: Nan Li <[email protected]>
Date:   Tue May 12 16:50:01 2026 +0800

    netfilter: ipset: stop hash:* range iteration at end
    
    commit 0d3a282ab5f165fc207ff49ea5b6ad8f54616bd6 upstream.
    
    The following hash set variants:
    
    hash:ip,mark
    hash:ip,port
    hash:ip,port,ip
    hash:ip,port,net
    
    iterate IPv4 ranges with a 32-bit iterator.
    
    The iterator must stop once the last address in the requested range has
    been processed. Advancing it once more can move the traversal state past
    the end of the request, so a later retry may continue from an unintended
    position.
    
    Handle the iterator increment explicitly at the end of the loop and stop
    once the upper bound has been processed. This keeps the existing retry
    behaviour intact for valid ranges while preventing traversal from
    continuing past the original boundary.
    
    Fixes: 48596a8ddc46 ("netfilter: ipset: Fix adding an IPv4 range containing more than 2^31 addresses")
    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]>
    Signed-off-by: Nan Li <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: nf_queue: hold bridge skb->dev while queued [+ + +]
Author: Haoze Xie <[email protected]>
Date:   Fri May 15 11:19:02 2026 +0800

    netfilter: nf_queue: hold bridge skb->dev while queued
    
    commit e196115ec330a18de415bdb9f5071aa9f08e53ce upstream.
    
    br_pass_frame_up() rewrites skb->dev from the ingress port to the bridge
    master before queueing bridge LOCAL_IN packets. NFQUEUE only holds
    references on state.in/out and bridge physdevs, so a queued bridge
    packet can retain a freed bridge master in skb->dev until reinjection.
    
    When the verdict is reinjected later, br_netif_receive_skb() re-enters
    the receive path with skb->dev still pointing at the freed bridge master,
    triggering a use-after-free.
    
    Store skb->dev in the queue entry, hold a reference on it for the queue
    lifetime, and use the saved device when dropping queued packets during
    NETDEV_DOWN handling.
    
    Fixes: ac2863445686 ("netfilter: bridge: add nf_afinfo to enable queuing to userspace")
    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]>
    Signed-off-by: Haoze Xie <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: nft_inner: Fix IPv6 inner_thoff desync [+ + +]
Author: Yizhou Zhao <[email protected]>
Date:   Tue May 12 01:30:41 2026 +0800

    netfilter: nft_inner: Fix IPv6 inner_thoff desync
    
    commit b6a91f68ebfed9c38e0e9150f58a9b85da07181c upstream.
    
    In nft_inner_parse_l2l3(), when processing inner IPv6 packets,
    ipv6_find_hdr() correctly computes the transport header offset
    traversing all extension headers, but the result is immediately
    overwritten with nhoff + sizeof(_ip6h) (40 bytes), which only
    accounts for the IPv6 base header. This creates a desync between
    inner_thoff (wrong — points to extension header start) and l4proto
    (correct — e.g., IPPROTO_TCP), enabling transport header forgery
    and potential firewall bypass. This issue affects stable versions
    from Linux 6.2.
    
    For comparison, the normal (non-inner) IPv6 path correctly
    preserves ipv6_find_hdr()'s result. Removing the incorrect overwrite
    ensures that ipv6_find_hdr()'s calculated transport header offset is
    preserved, thereby fixing the desynchronization.
    
    Fixes: 3a07327d10a0 ("netfilter: nft_inner: support for inner tunnel header matching")
    Cc: [email protected]
    Reported-by: Yizhou Zhao <[email protected]>
    Reported-by: Yuxiang Yang <[email protected]>
    Reported-by: Xuewei Feng <[email protected]>
    Reported-by: Qi Li <[email protected]>
    Reported-by: Ke Xu <[email protected]>
    Assisted-by: GLM:5.1 Z.ai
    Signed-off-by: Yizhou Zhao <[email protected]>
    Reviewed-by: Fernando Fernandez Mancera <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: x_tables: unregister the templates first [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Wed May 6 12:07:16 2026 +0200

    netfilter: x_tables: unregister the templates first
    
    [ Upstream commit d338693d778579b676a61346849bebd892427158 ]
    
    When the module is going away we need to zap the template
    first.  Else there is a small race window where userspace
    could instantiate a new table after the pernet exit function
    has removed the current table.
    
    Fixes: fdacd57c79b7 ("netfilter: x_tables: never register tables by default")
    Reported-by: Tristan Madani <[email protected]>
    Reviewed-by: Tristan Madani <[email protected]>
    Closes: https://lore.kernel.org/netfilter-devel/[email protected]/
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
netfs: Fix overrun check in netfs_extract_user_iter() [+ + +]
Author: David Howells <[email protected]>
Date:   Tue May 12 13:33:47 2026 +0100

    netfs: Fix overrun check in netfs_extract_user_iter()
    
    [ Upstream commit 0ef37eef83fad3542ee06db2940433ae1a92b39d ]
    
    Fix netfs_extract_user_iter() so that if iov_iter_extract_pages() overfills
    pages[], then those pages don't get included in the iterator constructed at
    the end of the function.  If there was an overfill, memory corruption has
    already happened.
    
    Fixes: 85dd2c8ff368 ("netfs: Add a function to extract a UBUF or IOVEC into a BVEC iterator")
    Closes: https://sashiko.dev/#/patchset/20260427154639.180684-1-dhowells%40redhat.com
    Signed-off-by: David Howells <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    cc: Paulo Alcantara <[email protected]>
    cc: [email protected]
    cc: [email protected]
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
pds_core: add an error code check in pdsc_dl_info_get [+ + +]
Author: Su Hui <[email protected]>
Date:   Thu Oct 19 16:33:52 2023 +0800

    pds_core: add an error code check in pdsc_dl_info_get
    
    [ Upstream commit a1e4c334cbc9a80578c3784f8a3e7076bb19578d ]
    
    check the value of 'ret' after call 'devlink_info_version_stored_put'.
    
    Signed-off-by: Su Hui <[email protected]>
    Reviewed-by: Shannon Nelson <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 3d4432d34c19 ("pds_core: ensure null-termination for firmware version strings")
    Signed-off-by: Sasha Levin <[email protected]>

pds_core: ensure null-termination for firmware version strings [+ + +]
Author: Nikhil P. Rao <[email protected]>
Date:   Wed May 20 20:58:42 2026 +0000

    pds_core: ensure null-termination for firmware version strings
    
    [ Upstream commit 3d4432d34c1992701289cbe12df9fd024f315998 ]
    
    The driver passes fw_version directly to devlink_info_version_stored_put()
    without ensuring null-termination. While current firmware null-terminates
    these strings, the driver should not rely on this behavior. Add explicit
    null-termination to prevent potential issues if firmware behavior changes.
    
    Fixes: 45d76f492938 ("pds_core: set up device and adminq")
    Signed-off-by: Nikhil P. Rao <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pds_core: fix debugfs_lookup dentry leak and error handling [+ + +]
Author: Nikhil P. Rao <[email protected]>
Date:   Fri May 15 21:29:07 2026 +0000

    pds_core: fix debugfs_lookup dentry leak and error handling
    
    [ Upstream commit dc416e32baaeb620b9809e9e25fc7b30889686e9 ]
    
    debugfs_lookup() returns a dentry with an elevated reference count that
    must be released with dput(). The current code discards the returned
    dentry without calling dput(), causing a reference leak on every
    firmware reset recovery.
    
    Additionally, when CONFIG_DEBUG_FS is disabled, debugfs_lookup()
    returns ERR_PTR(-ENODEV), not NULL. The current check passes for error
    pointers and would call dput() on an invalid pointer, causing a crash.
    
    Fixes: bc90fbe0c318 ("pds_core: Rework teardown/setup flow to be more common")
    Signed-off-by: Nikhil P. Rao <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pds_core: fix error handling in pdsc_devcmd_wait [+ + +]
Author: Nikhil P. Rao <[email protected]>
Date:   Fri May 15 21:29:05 2026 +0000

    pds_core: fix error handling in pdsc_devcmd_wait
    
    [ Upstream commit 0e46b6635b03d29807f810c3b415c4755a3f958d ]
    
    Fix two cases where pdsc_devcmd_wait() returns stale success from
    the completion register instead of an error:
    
    1. FW crash: If firmware stops running, the wait loop breaks early with
       running=false. The condition "if ((!done || timeout) && running)" is
       false, so error handling is bypassed and stale status is returned.
       Check !running first and return -ENXIO.
    
    2. Timeout: If a command times out, err is set to -ETIMEDOUT but then
       overwritten by pdsc_err_to_errno(status) which reads stale status.
       Return -ETIMEDOUT immediately after cleaning up.
    
    Both errors now propagate to pdsc_devcmd_locked() which queues
    health_work for recovery.
    
    Fixes: 45d76f492938 ("pds_core: set up device and adminq")
    Signed-off-by: Nikhil P. Rao <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
phonet/pep: disable BH around forwarded sk_receive_skb() [+ + +]
Author: Zijing Yin <[email protected]>
Date:   Tue May 19 10:26:33 2026 -0700

    phonet/pep: disable BH around forwarded sk_receive_skb()
    
    commit dbc81608e3a653dea6cf403f20cae35468b8ab9c upstream.
    
    The networking receive path is usually run from softirq context, but
    protocols that take the socket lock may have packets stored in the
    backlog and processed later from process context. In that case
    release_sock() -> __release_sock() drops the slock with spin_unlock_bh()
    and then calls sk->sk_backlog_rcv() with bottom halves enabled.
    
    Typical sk_backlog_rcv handlers process the socket whose backlog is
    being drained, so the BH state at entry is irrelevant for the slocks
    they touch. pep_do_rcv() is different: when the inbound skb targets an
    existing PEP pipe, it forwards the skb to a different *child* socket
    via sk_receive_skb(). That helper takes the child slock with
    bh_lock_sock_nested(), which is just spin_lock_nested() and assumes BH
    is already off. The same child slock therefore ends up acquired with
    BH on (process path) and with BH off (softirq path):
    
      process context                   softirq context
      ---------------                   ---------------
      release_sock(listener)            __netif_receive_skb()
       __release_sock()                  phonet_rcv()
        spin_unlock_bh()                  __sk_receive_skb(listener)
        [BH now ENABLED]                  [BH already disabled]
        sk_backlog_rcv:                   sk_backlog_rcv:
         pep_do_rcv()                      pep_do_rcv()
          sk_receive_skb(child)             sk_receive_skb(child)
           bh_lock_sock_nested(child)        bh_lock_sock_nested(child)
           => SOFTIRQ-ON-W                   => IN-SOFTIRQ-W
    
    Lockdep flags this as inconsistent lock state, and it can become a real
    self-deadlock if a softirq on the same CPU tries to receive to the same
    child socket while its slock is held in the BH-enabled path:
    
      WARNING: inconsistent lock state
      inconsistent {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} usage.
       (slock-AF_PHONET/1){+.?.}-{3:3}, at: __sk_receive_skb+0x1cf/0x900
        __sk_receive_skb              net/core/sock.c:563
        sk_receive_skb                include/net/sock.h:2022 [inline]
        pep_do_rcv                    net/phonet/pep.c:675
        sk_backlog_rcv                include/net/sock.h:1190
        __release_sock                net/core/sock.c:3216
        release_sock                  net/core/sock.c:3815
        pep_sock_accept               net/phonet/pep.c:879
    
    Wrap the forwarded sk_receive_skb() in local_bh_disable() /
    local_bh_enable() so the child slock is always acquired with BH off.
    local_bh_disable() nests safely on the softirq path.
    
    Discovered via in-house syzkaller fuzzing; the same root cause also
    on the linux-6.1.y syzbot dashboard as extid 44f0626dd6284f02663c.
    Reproduced under KASAN + LOCKDEP + PROVE_LOCKING, reproducer:
    https://pastebin.com/A3t8xzCR
    
    Fixes: 9641458d3ec4 ("Phonet: Pipe End Point for Phonet Pipes protocol")
    Link: https://syzkaller.appspot.com/bug?extid=44f0626dd6284f02663c
    Cc: [email protected]
    Signed-off-by: Zijing Yin <[email protected]>
    Acked-by: Rémi Denis-Courmont <[email protected]>
    Reported-by: [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: Greg Kroah-Hartman <[email protected]>

 
phy: marvell: mvebu-a3700-utmi: fix incorrect USB2_PHY_CTRL register access [+ + +]
Author: Gabor Juhos <[email protected]>
Date:   Sat Mar 21 15:42:32 2026 +0100

    phy: marvell: mvebu-a3700-utmi: fix incorrect USB2_PHY_CTRL register access
    
    [ Upstream commit 91ddf6f722084383fb05be731c0107814b055c0c ]
    
    The mvebu_a3700_utmi_phy_power_off() function tries to modify the
    USB2_PHY_CTRL register by using the IO address of the PHY IP block along
    with the readl/writel IO accessors. However, the register exist in the
    USB miscellaneous register space, and as such it must be accessed via
    regmap like it is done in the mvebu_a3700_utmi_phy_power_on() function.
    
    Change the code to use regmap_update_bits() for modífying the register
    to fix this.
    
    Fixes: cc8b7a0ae866 ("phy: add A3700 UTMI PHY driver")
    Signed-off-by: Gabor Juhos <[email protected]>
    Reviewed-by: Miquel Raynal <[email protected]>
    Link: https://patch.msgid.link/20260321-a3700-utmi-fix-usb2_phy_ctrl-access-v1-1-6005ff4b5058@gmail.com
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

phy: tegra: xusb: Fix per-pad high-speed termination calibration [+ + +]
Author: Wayne Chang <[email protected]>
Date:   Mon May 4 11:33:05 2026 +0800

    phy: tegra: xusb: Fix per-pad high-speed termination calibration
    
    commit da110228b54f2e2143d97ea7151e0dc22e539d67 upstream.
    
    The existing code reads a single hs_term_range_adj value from bit field
    [10:7] of FUSE_SKU_CALIB_0 and applies it to all USB2 pads uniformly.
    However, on SoCs that support per-pad termination, each pad has its own
    hs_term_range_adj field: pad 0 in FUSE_SKU_CALIB_0[10:7], and pads 1-3
    in FUSE_USB_CALIB_EXT_0 at bit offsets [8:5], [12:9], and [16:13]
    respectively.
    
    Fix the calibration by reading per-pad values from the appropriate fuse
    registers. For SoCs that do not support per-pad termination, replicate
    pad 0's value to all pads to maintain existing behavior.
    
    Add a has_per_pad_term flag to the SoC data to indicate whether per-pad
    termination values are available in FUSE_USB_CALIB_EXT_0.
    
    Fixes: 1ef535c6ba8e ("phy: tegra: xusb: Add Tegra194 support")
    Cc: [email protected]
    Signed-off-by: Wayne Chang <[email protected]>
    Signed-off-by: Wei-Cheng Chen <[email protected]>
    Reviewed-by: Jon Hunter <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
pinctrl: qcom: Fix wakeirq map by removing disconnected irqs for sm8150 [+ + +]
Author: Maulik Shah <[email protected]>
Date:   Tue Apr 28 17:44:58 2026 +0530

    pinctrl: qcom: Fix wakeirq map by removing disconnected irqs for sm8150
    
    [ Upstream commit 52ac35b8a151446481496404af3a8e5e889b3c5a ]
    
    PDC interrupts 122-125 were meant for ibi_i3c wakeup but sm8150 do not
    support i3c. GPIOs 39,51,88 and 144 are also connected to different PDC
    pin and already reflected in the wake irq map.
    
    Remove the unsupported wakeup interrupts from the map.
    
    Fixes: 90337380c809 ("pinctrl: qcom: sm8150: Specify PDC map")
    Reviewed-by: Konrad Dybcio <[email protected]>
    Signed-off-by: Maulik Shah <[email protected]>
    Signed-off-by: Navya Malempati <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
platform/x86: adv_swbutton: Check ACPI_HANDLE() against NULL [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Tue May 12 17:11:49 2026 +0200

    platform/x86: adv_swbutton: Check ACPI_HANDLE() against NULL
    
    [ Upstream commit e7a9a6ea40e352cd7977f6a8c80bdeadf65ad838 ]
    
    Every platform driver can be forced to match a device that doesn't match
    its list of device IDs because of device_match_driver_override(), so
    platform drivers that rely on the existence of a device's ACPI companion
    object need to verify its presence.
    
    Accordingly, add a requisite ACPI_HANDLE() check against NULL to the
    platform/x86 adv_swbutton driver.
    
    Fixes: 3d904005f686 ("platform/x86: add support for Advantech software defined button")
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

platform/x86: hp_accel: Check ACPI_COMPANION() against NULL [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Tue May 12 17:12:40 2026 +0200

    platform/x86: hp_accel: Check ACPI_COMPANION() against NULL
    
    [ Upstream commit abfbe5ee8ae89f1f5449790423d5dd3e423545bd ]
    
    Every platform driver can be forced to match a device that doesn't match
    its list of device IDs because of device_match_driver_override(), so
    platform drivers that rely on the existence of a device's ACPI companion
    object need to verify its presence.
    
    Accordingly, add a requisite ACPI_COMPANION() check against NULL to the
    platform/x86 hp_accel driver.
    
    Fixes: 8ebcb6c94c71 ("platform/x86: hp_accel: Convert to be a platform driver")
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

platform/x86: intel-hid: Check ACPI_HANDLE() against NULL [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Tue May 12 17:13:28 2026 +0200

    platform/x86: intel-hid: Check ACPI_HANDLE() against NULL
    
    [ Upstream commit 5c69e090ae5dd93d910f70db0796357080707d26 ]
    
    Every platform driver can be forced to match a device that doesn't match
    its list of device IDs because of device_match_driver_override(), so
    platform drivers that rely on the existence of a device's ACPI companion
    object need to verify its presence.
    
    Accordingly, add a requisite ACPI_HANDLE() check against NULL to the
    platform/x86 intel-hid driver.
    
    Fixes: ecc83e52b28c ("intel-hid: new hid event driver for hotkeys")
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

platform/x86: intel-vbtn: Check ACPI_HANDLE() against NULL [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Tue May 12 17:16:22 2026 +0200

    platform/x86: intel-vbtn: Check ACPI_HANDLE() against NULL
    
    [ Upstream commit a9f305c5a355efeb240d406d378491d9eec02d07 ]
    
    Every platform driver can be forced to match a device that doesn't match
    its list of device IDs because of device_match_driver_override(), so
    platform drivers that rely on the existence of a device's ACPI companion
    object need to verify its presence.
    
    Accordingly, add a requisite ACPI_HANDLE() check against NULL to the
    platform/x86 intel-vbtn driver.
    
    Fixes: 26173179fae1 ("platform/x86: intel-vbtn: Eval VBDL after registering our notifier")
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc/time: Remove redundant preempt_disable|enable() calls from arch_irq_work_raise() [+ + +]
Author: Sayali Patil <[email protected]>
Date:   Wed May 13 13:44:13 2026 +0530

    powerpc/time: Remove redundant preempt_disable|enable() calls from arch_irq_work_raise()
    
    [ Upstream commit 31467b23823ffec1f6fff407f8e3ca9af8b7491a ]
    
    A kernel panic is observed when handling machine check exceptions from
    real mode.
    
      BUG: Unable to handle kernel data access on read at 0xc00000006be21300
      Oops: Kernel access of bad area, sig: 11 [#1]
      MSR:  8000000000001003 <SF,ME,RI,LE>  CR: 88222248  XER: 00000005
      CFAR: c00000000003ffc4 DAR: c00000006be21300 DSISR: 40000000 IRQMASK: 0
      NIP [c000000000029e40] arch_irq_work_raise+0x10/0x70
      LR [c00000000003ffc8] machine_check_queue_event+0xa8/0x150
      Call Trace:
      [c0000000179d3c70] [c00000000003ff64] machine_check_queue_event+0x44/0x150
      [c0000000179d3d30] [c0000000000084e0] machine_check_early_common+0x1f0/0x2c0
    
    The crash occurs because arch_irq_work_raise() calls preempt_disable()
    from machine check exception (MCE) handlers running in real mode. In
    this context, accessing the preempt_count can fault, leading to the panic.
    
    The preempt_disable()/preempt_enable() pair in arch_irq_work_raise()
    was originally added by commit 0fe1ac48bef0 ("powerpc/perf_event: Fix
    oops due to perf_event_do_pending call") to avoid races while raising
    irq work from exception context.
    
    Later, commit 471ba0e686cb ("irq_work: Do not raise an IPI when
    queueing work on the local CPU") added preemption protection in
    irq_work_queue() path, while commit 20b876918c06 ("irq_work: Use per
    cpu atomics instead of regular atomics") added equivalent
    protection in irq_work_queue_on() before reaching arch_irq_work_raise():
    
      irq_work_queue() / irq_work_queue_on()
        -> preempt_disable()
          -> __irq_work_queue_local()
            -> irq_work_raise()
              -> arch_irq_work_raise()
    
    As a result, callers other than mce_irq_work_raise() already execute
    with preemption disabled, making the additional
    preempt_disable()/preempt_enable() pair in arch_irq_work_raise()
    redundant.
    
    The arch_irq_work_raise() function executes in NMI context when called
    from MCE handler. Hence we will not be preempted or scheduled out since
    we are in NMI context with MSR[EE]=0. Therefore, it is safe to remove
    the preempt_disable()/preempt_enable() calls from here.
    
    Remove it to avoid accessing preempt_count from real mode context.
    
    Fixes: cc15ff327569 ("powerpc/mce: Avoid using irq_work_queue() in realmode")
    Suggested-by: Mahesh Salgaonkar <[email protected]>
    Acked-by: Shrikanth Hegde <[email protected]>
    Reviewed-by: Ritesh Harjani (IBM) <[email protected]>
    Signed-off-by: Sayali Patil <[email protected]>
    [Maddy: Fixed the commit title]
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
ptrace: Convert ptrace_attach() to use lock guards [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Sun Sep 17 13:24:21 2023 +0200

    ptrace: Convert ptrace_attach() to use lock guards
    
    [ Upstream commit 5431fdd2c181dd2eac218e45b44deb2925fa48f0 ]
    
    Created as testing for the conditional guard infrastructure.
    Specifically this makes use of the following form:
    
      scoped_cond_guard (mutex_intr, return -ERESTARTNOINTR,
                         &task->signal->cred_guard_mutex) {
        ...
      }
      ...
      return 0;
    
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Reviewed-by: Oleg Nesterov <[email protected]>
    Link: https://lkml.kernel.org/r/20231102110706.568467727%40infradead.org
    Stable-dep-of: 60a1969fae62 ("ALSA: seq: Serialize UMP output teardown with event_input")
    Signed-off-by: Sasha Levin <[email protected]>

 
qed: fix double free in qed_cxt_tables_alloc() [+ + +]
Author: Dawei Feng <[email protected]>
Date:   Wed May 20 15:03:23 2026 +0800

    qed: fix double free in qed_cxt_tables_alloc()
    
    commit 2bccfb8476ca5f3548afbd623dc7a6980d4e77de upstream.
    
    If one of the later PF or VF CID bitmap allocations fails,
    qed_cid_map_alloc() jumps to cid_map_fail and frees the previously
    allocated CID bitmaps before returning an error. qed_cxt_tables_alloc()
    then calls qed_cxt_mngr_free(), which invokes qed_cid_map_free()
    again.
    
    Fix this by setting each CID bitmap pointer to NULL after bitmap_free()
    to avoid double free.
    
    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-rc3.
    
    Runtime reproduction was not attempted because exercising the failing
    allocation path requires device-specific setup.
    
    Fixes: fe56b9e6a8d9 ("qed: Add module with basic common support")
    Cc: [email protected]
    Signed-off-by: Zilin Guan <[email protected]>
    Signed-off-by: Dawei Feng <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
RDMA/rtrs: Fix use-after-free in path file creation cleanup [+ + +]
Author: Guangshuo Li <[email protected]>
Date:   Thu May 14 19:38:34 2026 +0800

    RDMA/rtrs: Fix use-after-free in path file creation cleanup
    
    [ Upstream commit 5b74373390113fba798a76b483837029ab010fef ]
    
    In the error path of rtrs_srv_create_path_files(), the sysfs root folders
    may already have been created and srv_path->kobj may already have been
    initialized. If a later step fails, the cleanup currently calls
    kobject_put(&srv_path->kobj) before
    rtrs_srv_destroy_once_sysfs_root_folders(srv_path).
    
    kobject_put() may drop the last reference to srv_path->kobj and invoke the
    release callback, rtrs_srv_release(), which frees srv_path. The following
    call to rtrs_srv_destroy_once_sysfs_root_folders(srv_path) then
    dereferences srv_path internally to access srv_path->srv, resulting in a
    use-after-free.
    
    This failure path is reached before rtrs_srv_create_path_files() returns
    success, so the successful-path lifetime handling is not involved.
    
    Fix this by destroying the sysfs root folders before calling
    kobject_put(&srv_path->kobj), so srv_path is still valid while the helper
    accesses it.
    
    This issue was found by a static analysis tool I am developing.
    
    Fixes: ae4c81644e91 ("RDMA/rtrs-srv: Rename rtrs_srv_sess to rtrs_srv_path")
    Signed-off-by: Guangshuo Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/siw: Reject MPA FPDU length underflow before signed receive math [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Wed May 13 13:53:24 2026 -0400

    RDMA/siw: Reject MPA FPDU length underflow before signed receive math
    
    commit 0ce1bc9e46ecabe84772bb561e373c0d9876d6f2 upstream.
    
    A malicious connected siw peer can send an iWARP FPDU whose MPA length
    field (c_hdr->mpa_len, 16 bit big-endian, peer-controlled) is smaller
    than the fixed DDP/RDMAP header for the announced opcode. Soft-iWARP
    parses the full header in siw_get_hdr() based on iwarp_pktinfo[opcode]
    .hdr_len, but never compares mpa_len against that header length.
    
    siw_tcp_rx_data() then derives
    
        srx->fpdu_part_rem = be16_to_cpu(mpa_len) - fpdu_part_rcvd
                             + MPA_HDR_SIZE;
    
    where fpdu_part_rcvd equals iwarp_pktinfo[opcode].hdr_len at this
    point. For a tagged WRITE (hdr_len 16, MPA_HDR_SIZE 2) the smallest
    on-wire mpa_len of 0 yields fpdu_part_rem = -14, and any mpa_len below
    hdr_len - MPA_HDR_SIZE underflows to a negative int.
    
    The signed value then flows into siw_proc_write()/siw_proc_rresp() as
    
        bytes = min(srx->fpdu_part_rem, srx->skb_new);
    
    is handed to siw_check_mem() as an int len (whose interval check
    addr + len > mem->va + mem->len is satisfied for a valid base when
    len is negative), and reaches siw_rx_data() -> siw_rx_kva() /
    siw_rx_umem() -> skb_copy_bits() as a signed copy length. The header
    copy branch in skb_copy_bits() promotes that to size_t, producing a
    multi-gigabyte read.
    
    KASAN under a KUnit harness that drives the real kernel TCP receive
    path -- a loopback AF_INET socketpair, the malformed FPDU written via
    kernel_sendmsg, sk_data_ready firing in softirq, tcp_read_sock
    dispatching to siw_tcp_rx_data -- reports:
    
        BUG: KASAN: use-after-free in skb_copy_bits+0x284/0x480
        Read of size 4294967295 at addr ffff888...
        Call Trace:
         skb_copy_bits
         siw_rx_kva
         siw_rx_data
         siw_check_mem
         siw_proc_write
         siw_tcp_rx_data
         __tcp_read_sock
         siw_qp_llp_data_ready
         tcp_data_ready
         tcp_data_queue
    
    Add the missing invariant at the earliest point where the peer header
    is fully assembled. iwarp_pktinfo[*].hdr_len - MPA_HDR_SIZE is exactly
    the value the siw transmitter uses as the minimum mpa_len for each
    opcode (drivers/infiniband/sw/siw/siw_qp.c:33), so this matches the
    protocol contract. Out-of-range FPDUs terminate the connection with
    TERM_ERROR_LAYER_LLP / LLP_ETYPE_MPA / LLP_ECODE_FPDU_START -- which
    is RFC 5044 Section 8 error code 3 ("Marker and ULPDU Length fields
    do not agree on the start of an FPDU"), the correct framing-error
    class for this inconsistency.
    
    Fixes: 8b6a361b8c48 ("rdma/siw: receive path")
    Link: https://patch.msgid.link/r/[email protected]
    Cc: [email protected]
    Signed-off-by: Michael Bommarito <[email protected]>
    Assisted-by: Claude:claude-opus-4-7
    Acked-by: Bernard Metzler <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "af_unix: Reject SIOCATMARK on non-stream sockets" [+ + +]
Author: Sasha Levin <[email protected]>
Date:   Wed May 27 13:04:10 2026 -0400

    Revert "af_unix: Reject SIOCATMARK on non-stream sockets"
    
    This reverts commit 0d7e7235bc543c6ed7b873e3015db814d8e8c414.
    
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "ice: fix double-free of tx_buf skb" [+ + +]
Author: Sasha Levin <[email protected]>
Date:   Wed May 27 12:55:37 2026 -0400

    Revert "ice: fix double-free of tx_buf skb"
    
    This reverts commit ca6f9d9aee5408c47e6c0fac10955cb6825ecd96.
    
    Signed-off-by: Sasha Levin <[email protected]>

Revert "ice: Remove jumbo_remove step from TX path" [+ + +]
Author: Sasha Levin <[email protected]>
Date:   Wed May 27 12:55:37 2026 -0400

    Revert "ice: Remove jumbo_remove step from TX path"
    
    This reverts commit a753619ffecfe629ee73c821469edd8b37c72d3b.
    
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "s390/cio: Update purge function to unregister the unused subchannels" [+ + +]
Author: Sasha Levin <[email protected]>
Date:   Wed May 27 13:03:59 2026 -0400

    Revert "s390/cio: Update purge function to unregister the unused subchannels"
    
    This reverts commit c34b09cbd6fc06f0f234182e462a1b010d13a5a6.
    
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "x86/vdso: Fix output operand size of RDPID" [+ + +]
Author: Sasha Levin <[email protected]>
Date:   Mon May 25 20:45:55 2026 -0400

    Revert "x86/vdso: Fix output operand size of RDPID"
    
    This reverts commit db82a94b0c109e7697a593f36783e7ef36073983.
    
    Signed-off-by: Sasha Levin <[email protected]>

 
ring-buffer: Fix reporting of missed events in iterator [+ + +]
Author: Steven Rostedt <[email protected]>
Date:   Wed May 20 22:08:01 2026 -0400

    ring-buffer: Fix reporting of missed events in iterator
    
    commit a254b6d13b0edd6272926674d2afc46d46e496b7 upstream.
    
    When tracing is active while reading the trace file, if the iterator
    reading the buffer detects that the writer has passed the iterator head,
    it will reset and set a "missed events" flag. This flag is passed to the
    output processing to show the user that events were missed:
    
      CPU:4 [LOST EVENTS]
    
    The problem is that the flag is reset after it is checked in
    ring_buffer_iter_dropped(). But the "trace" file iterates over all the CPU
    ring buffers and it will check if they are dropped when figuring out which
    buffer to print next. This prematurely clears the missed_events flag if
    the CPU buffer with the missed events is not the one that is printed next.
    
    On the iteration where the CPU buffer with the missed events is printed,
    the check if it had missed events would return false and the output does
    not show that events were missed.
    
    Do not reset the missed_events flag when checking if there were missed
    events, but instead clear it when moving the iterator head to the next
    event.
    
    Cc: [email protected]
    Cc: Mathieu Desnoyers <[email protected]>
    Link: https://patch.msgid.link/20260520220801.4fd09d13@fedora
    Fixes: c9b7a4a72ff64 ("ring-buffer/tracing: Have iterator acknowledge dropped events")
    Acked-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Steven Rostedt <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
s390/debug: Reject zero-length input before trimming a newline [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Thu May 21 10:28:34 2026 +0800

    s390/debug: Reject zero-length input before trimming a newline
    
    [ Upstream commit c366a7b5ed7564e41345c380285bd3f6cb98971b ]
    
    debug_get_user_string() copies the userspace buffer into a newly
    allocated NUL-terminated buffer and then unconditionally looks at
    buffer[user_len - 1] to strip a trailing newline.
    
    A zero-length write reaches this helper unchanged, so the newline trim
    reads before the start of the allocated buffer.
    
    Reject empty writes before accessing the last input byte.
    
    Fixes: 66a464dbc8e0 ("[PATCH] s390: debug feature changes")
    Cc: [email protected]
    Signed-off-by: Pengpeng Hou <[email protected]>
    Reviewed-by: Benjamin Block <[email protected]>
    Reviewed-by: Vasily Gorbik <[email protected]>
    Tested-by: Vasily Gorbik <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vasily Gorbik <[email protected]>
    Signed-off-by: Alexander Gordeev <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
scsi: isci: Fix use-after-free in device removal path [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Sun Apr 19 17:04:20 2026 -0400

    scsi: isci: Fix use-after-free in device removal path
    
    commit b52a8d52c3125ec9a93106ed816582368de34426 upstream.
    
    The ISCI completion tasklet is initialized in isci_host_alloc()
    (drivers/scsi/isci/init.c:496) and scheduled from both MSI-X and legacy
    interrupt handlers (drivers/scsi/isci/host.c:223,613).
    
    isci_host_deinit() stops the controller and waits for stop completion,
    but it never kills completion_tasklet before teardown continues. A
    top-of-function tasklet_kill() is not sufficient here: interrupts are
    only disabled when isci_host_stop_complete() runs, so until
    wait_for_stop() returns the IRQ handlers can still requeue the
    tasklet. The tasklet callback also re-enables interrupts after draining
    completions, so killing the tasklet before the source is quiesced leaves
    the same race open.
    
    Once wait_for_stop() returns, no further IRQ-driven scheduling can
    occur. Kill completion_tasklet there so teardown cannot race a queued
    tasklet running on a dead ihost. On remove or unload, the stale callback
    can otherwise dereference ihost and touch ihost->smu_registers after the
    host lifetime ends.
    
    A UML + KASAN analogue reproduced the failure class both with no
    tasklet_kill() and with tasklet_kill() placed before source quiesce, and
    stayed clean once the kill happened after quiescing the scheduling
    source.
    
    This mirrors commit f6ab594672d4 ("scsi: aic94xx: fix use-after-free in
    device removal path"), but ISCI needs the kill after wait_for_stop().
    
    Fixes: 6f231dda6808 ("isci: Intel(R) C600 Series Chipset Storage Control Unit Driver")
    Cc: [email protected]
    Assisted-by: Claude:claude-opus-4-7
    Assisted-by: Codex:gpt-5-4
    Signed-off-by: Michael Bommarito <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
security/keys: fix missed RCU read section on lookup [+ + +]
Author: Linus Torvalds <[email protected]>
Date:   Thu May 28 11:45:41 2026 -0700

    security/keys: fix missed RCU read section on lookup
    
    commit 43a1e3744548e6fd85873e6fb43e293eb4010694 upstream.
    
    Nicholas Carlini reports that the keyring code calls assoc_array_find()
    in find_key_to_update() without holding the RCU read lock, while the
    assoc_array_gc() code really is designed around removing the node from
    the tree and then freeing it after an RCU grace-period.
    
    The regular key handling doesn't see this because holding the keyring
    semaphore hides any lifetime issues, but the persistent key handling
    uses a different model.
    
    Instead of extending the keyring locking, just do the simple RCU locking
    that the assoc_array was designed for.
    
    Reported-by: Nicholas Carlini <[email protected]>
    Cc: David Howells <[email protected]>
    Cc: Jarkko Sakkinen <[email protected]>
    Cc: Paul Moore <[email protected]>
    Cc: James Morris James Morris <[email protected]>
    Cc: Serge E. Hallyn <[email protected]>
    Signed-off-by: Linus Torvalds <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
smb/server: promote S_DEL_ON_CLS to S_DEL_PENDING when close [+ + +]
Author: ChenXiaoSong <[email protected]>
Date:   Mon May 18 15:23:22 2026 +0000

    smb/server: promote S_DEL_ON_CLS to S_DEL_PENDING when close
    
    commit 4ec9c8e023c79f613fe4d5ad8cc737112efb2e44 upstream.
    
    Reproducer:
    
      1. server: systemctl start ksmbd
      2. client: mount -t cifs //${server_ip}/export /mnt
      3. client: C program: openat(AT_FDCWD, "/mnt", O_RDWR | O_TMPFILE, 0600)
    
    Do not treat `FILE_DELETE_ON_CLOSE_LE` as delete pending while files
    remain open.
    
    This patch fixes xfstests generic/004.
    
    Cc: [email protected]
    Link: https://chenxiaosong.com/en/smb-xfstests-generic-004.html
    Co-developed-by: Huiwen He <[email protected]>
    Signed-off-by: Huiwen He <[email protected]>
    Signed-off-by: ChenXiaoSong <[email protected]>
    Tested-by: Steve French <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
smb: client: protect tc_count increment in smb2_find_smb_sess_tcon_unlocked() [+ + +]
Author: Henrique Carvalho <[email protected]>
Date:   Thu May 14 20:18:25 2026 -0300

    smb: client: protect tc_count increment in smb2_find_smb_sess_tcon_unlocked()
    
    commit 4d8690dace005a38e6dbde9ecce2da3ad85c7c41 upstream.
    
    Commit 96c4af418586 ("cifs: Fix locking usage for tcon fields")
    refactored cifs code to change cifs_tcp_ses_lock for tc_lock around
    tc_count changes.
    
    There was missing lock around tc_count increment inside
    smb2_find_smb_sess_tcon_unlocked().
    
    Cc: [email protected]
    Fixes: 96c4af418586 ("cifs: Fix locking usage for tcon fields")
    Reviewed-by: Shyam Prasad N <[email protected]>
    Signed-off-by: Henrique Carvalho <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

smb: client: reject userspace cifs.spnego descriptions [+ + +]
Author: Asim Viladi Oglu Manizada <[email protected]>
Date:   Sat May 16 21:15:39 2026 +0000

    smb: client: reject userspace cifs.spnego descriptions
    
    commit 3da1fdf4efbc490041eb4f836bf596201203f8f2 upstream.
    
    cifs.spnego key descriptions contain authority-bearing fields such as
    pid, uid, creduid, and upcall_target that cifs.upcall treats as
    kernel-originating inputs. However, userspace can also create keys of
    this type through request_key(2) or add_key(2), allowing those fields to
    be supplied without CIFS origin.
    
    Only accept cifs.spnego descriptions while CIFS is using its private
    spnego_cred to request the key.
    
    Fixes: f1d662a7d5e5 ("[CIFS] Add upcall files for cifs to use spnego/kerberos")
    Assisted-by: avom-custom-harness:gpt-5.5-qwen3.6-mod-mix
    Reviewed-by: David Howells <[email protected]>
    Signed-off-by: Asim Viladi Oglu Manizada <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
spi: mtk-snfi: Fix resource leak in mtk_snand_read_page_cache() [+ + +]
Author: Felix Gu <[email protected]>
Date:   Sun May 10 01:55:37 2026 +0800

    spi: mtk-snfi: Fix resource leak in mtk_snand_read_page_cache()
    
    [ Upstream commit 496ba79b9496b8b3747cbc764ebd33ee7325e806 ]
    
    When DMA read times out in mtk_snand_read_page_cache(), the original code
    erroneously jumped to cleanup label which skips DMA unmapping and ECC
    disable, causing a resource leak.
    
    Fixes: 764f1b748164 ("spi: add driver for MTK SPI NAND Flash Interface")
    Signed-off-by: Felix Gu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

spi: qup: fix error pointer deref after DMA setup failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Tue May 12 09:43:34 2026 +0200

    spi: qup: fix error pointer deref after DMA setup failure
    
    commit a7e8f3efd50a165ba0189f6dc57f7e51a7d149db upstream.
    
    The driver falls back to PIO mode if DMA setup fails during probe.
    
    Make sure to the clear the DMA channel pointers on setup failure to
    avoid dereferencing an error pointer (or attempting to release a channel
    a second time) on later probe errors or driver unbind.
    
    This issue was flagged by Sashiko when reviewing a devres allocation
    conversion patch.
    
    Fixes: 612762e82ae6 ("spi: qup: Add DMA capabilities")
    Link: https://sashiko.dev/#/patchset/20260505072909.618363-1-johan%40kernel.org?part=4
    Cc: [email protected]      # 4.1
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

spi: spidev: fix lock inversion between spi_lock and buf_lock [+ + +]
Author: Fabian Godehardt <[email protected]>
Date:   Thu May 21 14:10:51 2026 +0800

    spi: spidev: fix lock inversion between spi_lock and buf_lock
    
    [ Upstream commit 40534d19ed2afb880ecf202dab26a8e7a5808d16 ]
    
    The spidev driver previously used two mutexes, spi_lock and buf_lock,
    but acquired them in different orders depending on the code path:
    
      write()/read(): buf_lock -> spi_lock
      ioctl():       spi_lock -> buf_lock
    
    This AB-BA locking pattern triggers lockdep warnings and can
    cause real deadlocks:
    
      WARNING: possible circular locking dependency detected
      spidev_ioctl() -> mutex_lock(&spidev->buf_lock)
      spidev_sync_write() -> mutex_lock(&spidev->spi_lock)
      *** DEADLOCK ***
    
    The issue is reproducible with a simple userspace program that
    performs write() and SPI_IOC_WR_MAX_SPEED_HZ ioctl() calls from
    separate threads on the same spidev file descriptor.
    
    Fix this by simplifying the locking model and removing the lock
    inversion entirely. spidev_sync() no longer performs any locking,
    and all callers serialize access using spi_lock.
    
    buf_lock is removed since its functionality is fully covered by
    spi_lock, eliminating the possibility of lock ordering issues.
    
    This removes the lock inversion and prevents deadlocks without
    changing userspace ABI or behaviour.
    
    Signed-off-by: Fabian Godehardt <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    [ Minor context conflict resolved. ]
    Signed-off-by: Wenshan Lan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

spi: sprd: fix error pointer deref after DMA setup failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Tue May 12 09:47:33 2026 +0200

    spi: sprd: fix error pointer deref after DMA setup failure
    
    commit 3d67fffb74267772d461c02c67f1eff893ad547d upstream.
    
    The driver falls back to PIO mode if DMA setup fails during probe.
    
    Make sure to check the dma.enabled flag before trying to release the DMA
    channels also on late probe errors to avoid dereferencing an error
    pointer (or attempting to release a channel a second time).
    
    This issue was flagged by Sashiko when reviewing a devres allocation
    conversion patch.
    
    Fixes: 386119bc7be9 ("spi: sprd: spi: sprd: Add DMA mode support")
    Link: https://sashiko.dev/#/patchset/20260505072909.618363-1-johan%40kernel.org?part=10
    Cc: [email protected]      # 5.1
    Cc: Lanqing Liu <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

spi: ti-qspi: fix use-after-free after DMA setup failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Tue May 12 09:48:09 2026 +0200

    spi: ti-qspi: fix use-after-free after DMA setup failure
    
    commit ea6ec3343e05f7937a53eb6d7617b3abdb4abc19 upstream.
    
    The driver falls back to PIO mode if DMA setup fails during probe.
    
    Make sure to clear the DMA channel pointer also if buffer allocation
    fails to avoid passing a pointer to the released channel to the DMA
    engine (or trying to free the channel a second time on late probe errors
    or driver unbind).
    
    This issue was flagged by Sashiko when reviewing a devres allocation
    conversion patch.
    
    Fixes: c687c46e9e45 ("spi: spi-ti-qspi: Use bounce buffer if read buffer is not DMA'ble")
    Link: https://sashiko.dev/#/patchset/20260505072909.618363-1-johan%40kernel.org?part=17
    Cc: [email protected]      # 4.12
    Cc: Vignesh R <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
string: add mem_is_zero() helper to check if memory area is all zeros [+ + +]
Author: Jani Nikula <[email protected]>
Date:   Wed Aug 14 13:00:34 2024 +0300

    string: add mem_is_zero() helper to check if memory area is all zeros
    
    [ Upstream commit 3942bb49728ad9e1f94d953a88af169a8f5d8099 ]
    
    Almost two thirds of the memchr_inv() usages check if the memory area is
    all zeros, with no interest in where in the buffer the first non-zero
    byte is located. Checking for !memchr_inv(s, 0, n) is also not very
    intuitive or discoverable. Add an explicit mem_is_zero() helper for this
    use case.
    
    Reviewed-by: Kees Cook <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Jani Nikula <[email protected]>
    Stable-dep-of: 3e6ccd790ed6 ("gpio: cdev: check if uAPI v2 config attributes are correctly zeroed")
    Signed-off-by: Sasha Levin <[email protected]>

 
sysfs: don't remove existing directory on update failure [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Wed May 20 15:05:04 2026 +0200

    sysfs: don't remove existing directory on update failure
    
    commit 237557b8a81ab948e8332f7c0058e758f081c0a3 upstream.
    
    When sysfs_update_group() is called for a named group and create_files()
    fails (e.g. -ENOMEM), internal_create_group() calls kernfs_remove(kn) on
    the group directory.  In the update path, kn was obtained via
    kernfs_find_and_get() and refers to a directory that already existed
    before this call.  Removing it silently destroys a sysfs group that the
    caller did not create.
    
    Only remove the directory if we created it ourselves.  On update failure
    the directory remains as it is left empty by remove_files() inside
    create_files(), but can be repopulated by a retry.
    
    Cc: Rajat Jain <[email protected]>
    Fixes: c855cf2759d2 ("sysfs: Fix internal_create_group() for named group updates")
    Cc: stable <[email protected]>
    Assisted-by: gkh_clanker_t1000
    Reviewed-by: Rafael J. Wysocki (Intel) <[email protected]>
    Reviewed-by: Danilo Krummrich <[email protected]>
    Link: https://patch.msgid.link/2026052003-uniquely-hastily-c093@gregkh
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tcp: Fix imbalanced icsk_accept_queue count. [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Wed May 6 03:59:19 2026 +0000

    tcp: Fix imbalanced icsk_accept_queue count.
    
    [ Upstream commit 7eca3292cac7c26dad4c236f51ba225c39a0523f ]
    
    When TCP socket migration happens in reqsk_timer_handler(),
    @sk_listener will be updated with the new listener.
    
    When we call __inet_csk_reqsk_queue_drop(), the listener must
    be the one stored in req->rsk_listener.
    
    The cited commit accidentally replaced oreq->rsk_listener with
    sk_listener, leading to imbalanced icsk_accept_queue count.
    
    Let's pass the correct listener to __inet_csk_reqsk_queue_drop().
    
    Fixes: e8c526f2bdf1 ("tcp/dccp: Don't use timer_pending() in reqsk_queue_unlink().")
    Reported-by: Damiano Melotti <[email protected]>
    Signed-off-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]>

 
test_kprobes: clear kprobes between test runs [+ + +]
Author: Martin Kaiser <[email protected]>
Date:   Fri May 8 09:56:36 2026 +0900

    test_kprobes: clear kprobes between test runs
    
    [ Upstream commit ef5581bb30efb939cc2bf093475c6cc85258e5cd ]
    
    Running the kprobes sanity tests twice makes all tests fail and
    eventually crashes the kernel.
    
    [root@martin-riscv-1 ~]# echo 1 > /sys/kernel/debug/kunit/kprobes_test/run
    ...
       # Totals: pass:5 fail:0 skip:0 total:5
       ok 1 kprobes_test
    [root@martin-riscv-1 ~]# echo 1 > /sys/kernel/debug/kunit/kprobes_test/run
    ...
      # test_kprobe: EXPECTATION FAILED at lib/tests/test_kprobes.c:64
      Expected 0 == register_kprobe(&kp), but
          register_kprobe(&kp) == -22 (0xffffffffffffffea)
    ...
      Unable to handle kernel paging request ...
    
    The testsuite defines several kprobes and kretprobes as static variables
    that are preserved across test runs.
    
    After register_kprobe and unregister_kprobe, a kprobe contains some
    leftover data that must be cleared before the kprobe can be registered
    again. The tests are setting symbol_name to define the probe location.
    Address and flags must be cleared.
    
    The existing code clears some of the probes between subsequent tests, but
    not between two test runs. The leftover data from a previous test run
    makes the registrations fail in the next run.
    
    Move the cleanups for all kprobes into kprobes_test_init, this function
    is called before each single test (including the first test of a test
    run).
    
    Link: https://lore.kernel.org/all/[email protected]/
    
    Fixes: e44e81c5b90f ("kprobes: convert tests to kunit")
    Signed-off-by: Martin Kaiser <[email protected]>
    Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tls: Preserve sk_err across recvmsg() when data has been copied [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Wed May 13 08:58:25 2026 -0400

    tls: Preserve sk_err across recvmsg() when data has been copied
    
    [ Upstream commit f508262ae9f21fe0e6c0749948b9dc7dd5a62a70 ]
    
    The sk_err check in tls_rx_rec_wait() consumes the error via
    sock_error(), which clears sk_err atomically. When the caller
    (tls_sw_recvmsg, tls_sw_splice_read, or tls_sw_read_sock) already
    has bytes copied to userspace, it returns those bytes and discards
    the error from this call. sk_err is now zero on the socket, so the
    next read syscall observes only RCV_SHUTDOWN and reports a clean
    EOF instead of the actual error (typically -ECONNRESET).
    
    The race is reachable when tls_read_flush_backlog()'s periodic
    sk_flush_backlog() triggers tcp_reset() in the middle of a
    multi-record read.
    
    Pass a has_copied flag to tls_rx_rec_wait(). When has_copied is
    false, consume sk_err via sock_error() as before. When has_copied
    is true, report the error from READ_ONCE() but leave sk_err set:
    the caller returns the byte count and discards the err from this
    call, and the next read syscall surfaces the preserved sk_err. This
    mirrors the tcp_recvmsg() preserve-and-surface pattern.
    
    The decrypt-abort path is unaffected: tls_err_abort() raises
    sk_err to EBADMSG after tls_rx_rec_wait() returns, and nothing
    on the caller's return path consumes it, so the EBADMSG surfaces
    on the next read.
    
    tls_sw_splice_read() passes has_copied=false: it processes
    one record per call, so no bytes have been copied within the
    function when tls_rx_rec_wait() runs. A reset that arrives
    between iterations of splice_direct_to_actor() (the sendfile()
    path) is still consumed by sock_error() in the later call, and the
    outer loop returns the prior iterations' byte count and drops the
    error. tcp_splice_read() exhibits the same pattern at the iteration
    boundary; addressing it belongs at the splice_direct_to_actor()
    layer and is out of scope here.
    
    Fixes: c46b01839f7a ("tls: rx: periodically flush socket backlog")
    Suggested-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tracing: Avoid NULL return from hist_field_name() on truncation [+ + +]
Author: David Carlier <[email protected]>
Date:   Fri May 8 20:57:47 2026 +0100

    tracing: Avoid NULL return from hist_field_name() on truncation
    
    [ Upstream commit 576ec047d20b368b43c4d5db98c4f2e0f3c101ec ]
    
    hist_field_name() returns "" everywhere except the fully-qualified
    VAR_REF/EXPR case, where snprintf() truncation returns NULL early
    and bypasses the bottom NULL->"" guard. Callers don't expect NULL:
    strcat(expr, hist_field_name(field, 0)) at trace_events_hist.c:1758
    and the strcmp() in the sort-key match loop at :4804 both deref it.
    
    system and event_name are bounded by MAX_EVENT_NAME_LEN, but the
    field name on a VAR_REF is kstrdup'd from a histogram variable
    name parsed out of the trigger string and has no length cap, so
    a long enough var name in a fully qualified reference can reach
    the truncation path.
    
    Keep the length check but leave field_name as "" on overflow.
    
    Link: https://patch.msgid.link/[email protected]
    Fixes: 5ec1d1e97de1 ("tracing: Rebuild full_name on each hist_field_name() call")
    Signed-off-by: David Carlier <[email protected]>
    Signed-off-by: Steven Rostedt <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tracing: Do not call map->ops->elt_free() if elt_alloc() fails [+ + +]
Author: Masami Hiramatsu (Google) <[email protected]>
Date:   Thu May 21 13:49:14 2026 +0900

    tracing: Do not call map->ops->elt_free() if elt_alloc() fails
    
    commit 8f0f5c4fb9df0e19a341e0c6ed8dc4fda9124f03 upstream.
    
    In paths where tracing_map_elt_alloc() failed to allocate objects,
    the map->ops->elt_alloc() call was never successful. In this case,
    map->ops->elt_free() should not be called.
    
    Link: https://sashiko.dev/#/patchset/20260520223101.34710-1-rosenp%40gmail.com
    
    Cc: [email protected]
    Cc: Tom Zanussi <[email protected]>
    Cc: Mathieu Desnoyers <[email protected]>
    Cc: Rosen Penev <[email protected]>
    Reported-by: Sashiko <[email protected]>
    Fixes: 2734b629525a ("tracing: Add per-element variable support to tracing_map")
    Link: https://patch.msgid.link/177933895460.108746.5396070821443932634.stgit@devnote2
    Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Steven Rostedt <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
vsock/virtio: reset connection on receiving queue overflow [+ + +]
Author: Stefano Garzarella <[email protected]>
Date:   Mon May 18 11:06:55 2026 +0200

    vsock/virtio: reset connection on receiving queue overflow
    
    commit a4f0b001782b21663d10df983b4b208195bec66c upstream.
    
    When there is no more space to queue an incoming packet, the packet is
    silently dropped. This causes data loss without any notification to
    either peer, since there is no retransmission.
    
    Under normal circumstances, this should never happen. However, it could
    happen if the other peer doesn't respect the credit, or if the skb
    overhead, which we recently began to take into account with commit
    059b7dbd20a6 ("vsock/virtio: fix potential unbounded skb queue"),
    is too high.
    
    Fix this by resetting the connection and setting the local socket error
    to ENOBUFS when virtio_transport_recv_enqueue() can no longer queue a
    packet, so both peers are explicitly notified of the failure rather than
    silently losing data.
    
    Fixes: ae6fcfbf5f03 ("vsock/virtio: discard packets if credit is not respected")
    Cc: [email protected]
    Signed-off-by: Stefano Garzarella <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
vsock/vmci: fix UAF when peer resets connection during handshake [+ + +]
Author: Minh Nguyen <[email protected]>
Date:   Tue May 19 17:23:10 2026 +0700

    vsock/vmci: fix UAF when peer resets connection during handshake
    
    commit 99e22ddf4edb63dc8382bc028af928056d3450cf upstream.
    
    vmci_transport_recv_connecting_server() returned err = 0 for a peer
    RST in its default switch arm:
    
            err = pkt->type == VMCI_TRANSPORT_PACKET_TYPE_RST ? 0 : -EINVAL;
    
    That made vmci_transport_recv_listen() skip vsock_remove_pending(),
    leaving the pending socket on the listener's pending_links with
    sk_state = TCP_CLOSE while destroy: still dropped the explicit
    reference taken before schedule_delayed_work().
    
    One second later vsock_pending_work() observed is_pending=true and
    performed full cleanup: vsock_remove_pending() then the two trailing
    sock_put(sk) calls -- the first reached refcount 0 and __sk_freed
    the socket, and the second wrote into the freed object:
    
      BUG: KASAN: slab-use-after-free in refcount_warn_saturate
      Write of size 4 at addr ffff88800b1cac80 by task kworker
      Workqueue: events vsock_pending_work
    
    Treat peer RST like any other unexpected packet type (err = -EINVAL).
    All destroy: arms now return err < 0, so vmci_transport_recv_listen()
    removes pending from pending_links synchronously and
    vsock_pending_work() takes the is_pending=false / !rejected branch,
    dropping only its own work reference.  This also closes the
    multi-packet race Sashiko reported on v2: pending is removed from
    the list before any subsequent packet can find it.
    
    The pre-existing sk_acceptq_removed() gap on the err < 0 path of
    vmci_transport_recv_listen() that Sashiko also noted is not
    introduced or changed by this patch.
    
    Tested on lts-6.12.79 with KASAN: 52/100 unpatched -> 0/100 patched.
    
    Fixes: d021c344051a ("VSOCK: Introduce VM Sockets")
    Cc: [email protected]
    Signed-off-by: Minh Nguyen <[email protected]>
    Acked-by: Bryan Tan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
wifi: ath11k: clear shared SRNG pointer state on restart [+ + +]
Author: Kyle Farnung <[email protected]>
Date:   Wed May 13 21:52:12 2026 -0700

    wifi: ath11k: clear shared SRNG pointer state on restart
    
    commit f51e4b3b5574ad8cb5b16b11f8a1452147ece87a upstream.
    
    LMAC rings reuse the shared rdp/wrp pointer buffers without going
    through the normal SRNG hw-init path that zeros non-LMAC ring
    pointers. After restart, ath11k_hal_srng_clear() can therefore hand
    stale hp/tp state from the previous firmware instance back to the new
    one.
    
    Clear the shared pointer buffers while keeping the allocations in
    place so restart still avoids reallocating SRNG DMA memory, but starts
    with fresh ring-pointer state.
    
    Fixes: 32be3ca4cf78b ("wifi: ath11k: HAL SRNG: don't deinitialize and re-initialize again")
    Cc: [email protected]
    Closes: https://lore.kernel.org/all/CAOPSVF04q6uvVdq8GTRLHBrVMdpt9=o9wVcFMc6f-yhmSBcZqQ@mail.gmail.com/
    Signed-off-by: Kyle Farnung <[email protected]>
    Reviewed-by: Rameshkumar Sundaram <[email protected]>
    Reviewed-by: Baochen Qiang <[email protected]>
    Link: https://patch.msgid.link/20260513-kfarnung-ath11k-srng-clear-pointer-state-v1-1-bc700dd8b333@gmail.com
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: ath11k: fix error path leak in ath11k_tm_cmd_wmi_ftm() [+ + +]
Author: Nicolas Escande <[email protected]>
Date:   Wed May 6 15:42:40 2026 +0200

    wifi: ath11k: fix error path leak in ath11k_tm_cmd_wmi_ftm()
    
    [ Upstream commit 7320d6eb861e9913193a7801834c661381756a79 ]
    
    This is similar to what was fixed by previous patches. We have a call
    to ath11k_wmi_cmd_send() which does check the return value, but forgot
    to free the related skb on error.
    
    Fixes: b43310e44edc ("wifi: ath11k: factory test mode support")
    Signed-off-by: Nicolas Escande <[email protected]>
    Reviewed-by: Baochen Qiang <[email protected]>
    Reviewed-by: Rameshkumar Sundaram <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: ath11k: fix error path leaks in some WMI WOW calls [+ + +]
Author: Nicolas Escande <[email protected]>
Date:   Wed May 6 15:42:38 2026 +0200

    wifi: ath11k: fix error path leaks in some WMI WOW calls
    
    [ Upstream commit 55dda532bbc261aef495e403c8900c5e2ab5fa34 ]
    
    Fix two instances where we used to directly return the result of
    ath11k_wmi_cmd_send(...). Because we did not check the return value, we
    also did not free the skb in the error path.
    
    Fixes: 79802b13a492 ("ath11k: implement WoW enable and wakeup commands")
    Signed-off-by: Nicolas Escande <[email protected]>
    Reviewed-by: Baochen Qiang <[email protected]>
    Reviewed-by: Rameshkumar Sundaram <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: ath11k: fix peer resolution on rx path when peer_id=0 [+ + +]
Author: Matthew Leach <[email protected]>
Date:   Fri Apr 24 10:50:35 2026 +0100

    wifi: ath11k: fix peer resolution on rx path when peer_id=0
    
    [ Upstream commit 2a2451a34afdf563b3102d36a4b6cf335cf813e2 ]
    
    It has been observed that on certain chipsets a peer can be assigned
    peer_id=0. For reception of non-aggregated MPDUs this is fine as
    ath11k_dp_rx_h_find_peer() has a fallback case where it locates the peer
    based upon the source MAC address. On an aggregated link, the mpdu_start
    header is only populated by hardware on the first sub-MSDU. This causes
    the peer resolution to be skipped for the subsequent MSDUs and the
    encryption type of these frames to be set to an incorrect value,
    resulting in these MSDUs being dropped by ieee80211.
    
    ath11k_pci 0000:03:00.0: data rx skb 000000002f4b704d len 1534 peer xx:xx:xx:xx:xx:xx 0 ucast sn 3063 he160 rate_idx 9 vht_nss 2 freq 5240 band 1 flag 0x40d1a fcs-err 0 mic-err 0 amsdu-more 0 peer_id 0 first_msdu 1 last_msdu 0
    ath11k_pci 0000:03:00.0: data rx skb 0000000038acd580 len 1534 peer (null) 0 ucast sn 3063 he160 rate_idx 9 vht_nss 2 freq 5240 band 1 flag 0x40d00 fcs-err 0 mic-err 0 amsdu-more 0 peer_id 0 first_msdu 0 last_msdu 1
    
    Remove the null peer_id checks in ath11k_dp_rx_h_find_peer() and
    ath11k_hal_rx_parse_mon_status_tlv(), allowing peers with an assigned ID
    of 0 to be resolved.
    
    Tested-on: QCA2066 hw2.1 PCI WLAN.HSP.1.1-03926.13-QCAHSPSWPL_V2_SILICONZ_CE-2.52297.9
    
    Fixes: 2167fa606c0f ("ath11k: Add support for RX decapsulation offload")
    Reviewed-by: Baochen Qiang <[email protected]>
    Signed-off-by: Matthew Leach <[email protected]>
    Reviewed-by: P Praneesh <[email protected]>
    Link: https://patch.msgid.link/20260424-ath11k-null-peerid-workaround-v4-1-252b224d3cf6@collabora.com
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: cfg80211: advance loop vars in cfg80211_merge_profile() [+ + +]
Author: John Walker <[email protected]>
Date:   Thu May 7 17:07:20 2026 -0600

    wifi: cfg80211: advance loop vars in cfg80211_merge_profile()
    
    commit 7666dbb1bacc4ba522b96740cba7283d243d16e1 upstream.
    
    cfg80211_merge_profile() reassembles a Multi-BSSID non-transmitted BSS
    profile that has been split across multiple consecutive MBSSID elements.
    Its while-loop calls
    
            cfg80211_get_profile_continuation(ie, ielen, mbssid_elem, sub_elem)
    
    but never advances mbssid_elem or sub_elem inside the body.  Each
    iteration therefore searches for a continuation that follows the same
    fixed pair; the helper returns the same next_mbssid; and the same
    next_sub bytes are memcpy()'d into merged_ie at a growing offset until
    the buffer fills.
    
    Advance both mbssid_elem and sub_elem to the just-consumed continuation
    so the next call to cfg80211_get_profile_continuation() searches for a
    further continuation beyond it (or returns NULL when none exists).
    
    A specially-crafted malicious beacon can take advantage of this bug
    to cause the kernel to spend an excessive amount of time in
    cfg80211_merge_profile (up to as much as 2ms per beacon received),
    which could theoretically be abused in some way.
    
    Cc: [email protected]
    Fixes: fe806e4992c9 ("cfg80211: support profile split between elements")
    Signed-off-by: John Walker <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: mac80211: check tdls flag in ieee80211_tdls_oper [+ + +]
Author: Deepanshu Kartikey <[email protected]>
Date:   Mon May 25 13:48:35 2026 +0800

    wifi: mac80211: check tdls flag in ieee80211_tdls_oper
    
    [ Upstream commit 7d73872d949c488a1d7c308031d6a9d89b5e0a8b ]
    
    When NL80211_TDLS_ENABLE_LINK is called, the code only checks if the
    station exists but not whether it is actually a TDLS station. This
    allows the operation to proceed for non-TDLS stations, causing
    unintended side effects like modifying channel context and HT
    protection before failing.
    
    Add a check for sta->sta.tdls early in the ENABLE_LINK case, before
    any side effects occur, to ensure the operation is only allowed for
    actual TDLS peers.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=56b6a844a4ea74487b7b
    Tested-by: [email protected]
    Suggested-by: Johannes Berg <[email protected]>
    Signed-off-by: Deepanshu Kartikey <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Li hongliang <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
x86/xen: Fix xen_e820_swap_entry_with_ram() [+ + +]
Author: Juergen Gross <[email protected]>
Date:   Tue May 5 12:24:17 2026 +0200

    x86/xen: Fix xen_e820_swap_entry_with_ram()
    
    [ Upstream commit 28e03f78e69cf6628b81f24777799778528a84c1 ]
    
    When swapping a not page-aligned E820 map entry with RAM, the start
    address of the modified entry is calculated wrong (the offset into the
    page is subtracted instead of being added to the page address).
    
    Fixes: be35d91c8880 ("xen: tolerate ACPI NVS memory overlapping with Xen allocated memory")
    Reported-by: Jan Beulich <[email protected]>
    Reviewed-by: Jan Beulich <[email protected]>
    Signed-off-by: Juergen Gross <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
zonefs: handle integer overflow in zonefs_fname_to_fno [+ + +]
Author: Johannes Thumshirn <[email protected]>
Date:   Wed Apr 29 22:58:15 2026 +0200

    zonefs: handle integer overflow in zonefs_fname_to_fno
    
    [ Upstream commit 3a8389d42bdf4213730f4067f8bfa78bae6564ef ]
    
    In zonefs the file name in one of the two directories corresponds to the
    zone number.
    
    Here Alexey reported a possible integer overflow in zonefs_fname_to_fno(),
    where the parsing of the zone number from the file name can overflow the
    'long' data type.
    
    Add a check for integer overflows and if the fno 'long' did overflow
    return -ENOENT.
    
    Reported-by: Alexey Dobriyan <[email protected]>
    Fixes: d207794ababe ("zonefs: Dynamically create file inodes when needed")
    Signed-off-by: Johannes Thumshirn <[email protected]>
    Signed-off-by: Damien Le Moal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>