Changelog in Linux kernel 6.6.143

 
6lowpan: fix off-by-one in multicast context address compression [+ + +]
Author: Yizhou Zhao <zhaoyz24@mails.tsinghua.edu.cn>
Date:   Wed May 27 16:18:01 2026 +0800

    6lowpan: fix off-by-one in multicast context address compression
    
    [ Upstream commit 2a58899d11009bffc7b4b32a571858f381121837 ]
    
    The second memcpy in lowpan_iphc_mcast_ctx_addr_compress() uses
    &data[1] as destination and &ipaddr->s6_addr[11] as source, but
    both should be offset by one: &data[2] and &ipaddr->s6_addr[12]
    respectively.
    
    This off-by-one has two consequences:
    1. data[1] is overwritten with s6_addr[11], corrupting the RIID
       field in the compressed multicast address
    2. data[5] is never written, so uninitialized kernel stack memory
       is transmitted over the network via lowpan_push_hc_data(),
       leaking kernel stack contents
    
    The correct inline data layout must match what the decompression
    function lowpan_uncompress_multicast_ctx_daddr() expects:
      data[0..1] = s6_addr[1..2]  (flags/scope + RIID)
      data[2..5] = s6_addr[12..15] (group ID)
    
    Also zero-initialize the data array as a defensive measure against
    similar bugs in the future.
    
    Fixes: 5609c185f24d ("6lowpan: iphc: add support for stateful compression")
    Reported-by: Yizhou Zhao <zhaoyz24@mails.tsinghua.edu.cn>
    Reported-by: Yuxiang Yang <yangyx22@mails.tsinghua.edu.cn>
    Reported-by: Ao Wang <wangao@seu.edu.cn>
    Reported-by: Xuewei Feng <fengxw06@126.com>
    Reported-by: Qi Li <qli01@tsinghua.edu.cn>
    Reported-by: Ke Xu <xuke@tsinghua.edu.cn>
    Signed-off-by: Yizhou Zhao <zhaoyz24@mails.tsinghua.edu.cn>
    Acked-by: Alexander Aring <aahringo@redhat.com>
    Link: https://patch.msgid.link/20260527081806.42747-1-zhaoyz24@mails.tsinghua.edu.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
af_unix: Cache state->msg in unix_stream_read_generic(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@google.com>
Date:   Sat May 30 12:09:21 2026 -0400

    af_unix: Cache state->msg in unix_stream_read_generic().
    
    [ Upstream commit 8b77338eb2af74bb93986e4a8cfd86724168fe39 ]
    
    In unix_stream_read_generic(), state->msg is fetched multiple times.
    
    Let's cache it in a local variable.
    
    Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
    Link: https://patch.msgid.link/20250702223606.1054680-6-kuniyu@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: be309f8eae8b ("af_unix: Fix UAF read of tail->len in unix_stream_data_wait()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

af_unix: Fix UAF read of tail->len in unix_stream_data_wait() [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Sat May 30 12:09:22 2026 -0400

    af_unix: Fix UAF read of tail->len in unix_stream_data_wait()
    
    [ Upstream commit be309f8eae8b474a4a617eaae01324da996fc719 ]
    
    unix_stream_data_wait() does skb_peek_tail(&sk->sk_receive_queue) without
    holding any lock that prevents SKBs on that queue from being dequeued and
    freed.
    This has been the case since commit 79f632c71bea ("unix/stream: fix
    peeking with an offset larger than data in queue").
    The first consequence of this is that the pointer comparison
    `tail != last` can be false even if `last` semantically refers to an
    already-freed SKB while `tail` is a new SKB allocated at the same address;
    which can cause unix_stream_data_wait() to wrongly keep blocking after new
    data has arrived, but only in a weird scenario where a peeking recv() and
    a normal recv() on the same socket are racing, which is probably not a
    real problem.
    
    But since commit 2b514574f7e8 ("net: af_unix: implement splice for stream
    af_unix sockets"), `tail` is actually dereferenced, which can cause UAF in
    the following race scenario (where test_setup() runs single-threaded,
    and afterwards, test_thread1() and test_thread2() run concurrently in
    two threads:
    ```
    static int socks[2];
    void test_setup(void) {
      socketpair(AF_UNIX, SOCK_STREAM, 0, socks);
      send(socks[1], "A", 1, 0);
      int peekoff = 1;
      setsockopt(socks[0], SOL_SOCKET, SO_PEEK_OFF, &peekoff, sizeof(peekoff));
    }
    void test_thread1(void) {
      char dummy;
      recv(socks[0], &dummy, 1, MSG_PEEK);
    }
    void test_thread2(void) {
      char dummy;
      recv(socks[0], &dummy, 1, 0);
      shutdown(socks[1], SHUT_WR);
    }
    ```
    
    when racing like this:
    ```
    thread1                       thread2
    unix_stream_read_generic
      mutex_lock(&u->iolock)
      skb_peek(&sk->sk_receive_queue)
      skb_peek_next(skb, &sk->sk_receive_queue)
      mutex_unlock(&u->iolock)
                                  unix_stream_read_generic
                                    unix_state_lock(sk)
                                    skb_peek(&sk->sk_receive_queue)
                                    unix_state_unlock(sk)
      unix_stream_data_wait
        unix_state_lock(sk)
        tail = skb_peek_tail(&sk->sk_receive_queue)
                                    spin_lock(&sk->sk_receive_queue.lock)
                                    __skb_unlink(skb, &sk->sk_receive_queue)
                                    spin_unlock(&sk->sk_receive_queue.lock)
                                    consume_skb(skb) [frees the SKB]
        `tail != last`: false
        `tail`: true
        `tail->len != last_len` ***UAF***
    ```
    
    Fix the UAF by removing the read of tail->len; checking tail->len would
    only make sense if SKBs in the receive queue of a UNIX socket could grow,
    which can no longer happen.
    
    Kuniyuki explained:
    
    > When commit 869e7c62486e ("net: af_unix: implement stream sendpage
    > support") added sendpage() support, data could be appended to the last
    > skb in the receiver's queue.
    >
    > That's why we needed to check if the length of the last skb was changed
    > while waiting for new data in unix_stream_data_wait().
    >
    > However, commit a0dbf5f818f9 ("af_unix: Support MSG_SPLICE_PAGES") and
    > commit 57d44a354a43 ("unix: Convert unix_stream_sendpage() to use
    > MSG_SPLICE_PAGES") refactored sendmsg(), and now data is always added
    > to a new skb.
    
    That means this fix is not suitable for kernels before 6.5.
    
    Fixes: 2b514574f7e8 ("net: af_unix: implement splice for stream af_unix sockets")
    Cc: stable@vger.kernel.org # 6.5.x
    Signed-off-by: Jann Horn <jannh@google.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
    Link: https://patch.msgid.link/20260518-b4-unix-recv-wait-hotfix-v2-1-83e29ce8ad31@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ALSA: firewire-motu: Protect register DSP event queue positions [+ + +]
Author: Cássio Gabriel <cassiogabrielcontato@gmail.com>
Date:   Thu Jun 4 21:31:06 2026 -0400

    ALSA: firewire-motu: Protect register DSP event queue positions
    
    [ Upstream commit 98fb1c1bb11e29eb609b7200a25e136e05aa4498 ]
    
    The register DSP event queue is updated under parser->lock, but
    snd_motu_register_dsp_message_parser_count_event() reads pull_pos and
    push_pos without the lock.
    snd_motu_register_dsp_message_parser_copy_event() also reads both queue
    positions before taking the lock.
    
    Protect these accesses with parser->lock as well. This keeps the hwdep
    poll/read path consistent with the producer side and with the cached
    meter/parameter accessors.
    
    Fixes: 634ec0b2906e ("ALSA: firewire-motu: notify event for parameter change in register DSP model")
    Cc: stable@vger.kernel.org
    Signed-off-by: Cássio Gabriel <cassiogabrielcontato@gmail.com>
    Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Link: https://patch.msgid.link/20260521-alsa-firewire-motu-event-locking-v1-1-708e1c2b5e56@gmail.com
    [ converted copy_event() from manual spin_lock_irqsave/spin_unlock_irqrestore to guard(spinlock_irqsave) ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda/hdmi: Add quirk for TUXEDO IBS14G6 [+ + +]
Author: Aaron Erhardt <aer@tuxedocomputers.com>
Date:   Wed Feb 18 22:32:10 2026 +0100

    ALSA: hda/hdmi: Add quirk for TUXEDO IBS14G6
    
    commit d649c58bcad8fb9b749e3837136a201632fa109d upstream.
    
    Depending on the timing during boot, the BIOS might report wrong pin
    capabilities, which can lead to HDMI audio being disabled. Therefore,
    force HDMI audio connection on TUXEDO InfinityBook S 14 Gen6.
    
    Signed-off-by: Aaron Erhardt <aer@tuxedocomputers.com>
    Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
    Link: https://patch.msgid.link/20260218213234.429686-1-wse@tuxedocomputers.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: PCM: Fix wait queue list corruption in snd_pcm_drain() on linked streams [+ + +]
Author: Ji'an Zhou <eilaimemedsnaimel@gmail.com>
Date:   Thu Jun 4 14:25:59 2026 +0000

    ALSA: PCM: Fix wait queue list corruption in snd_pcm_drain() on linked streams
    
    [ Upstream commit 88fe2e3658726cb21ff2dcf9770bf672f9b9d31b ]
    
    snd_pcm_drain() uses init_waitqueue_entry which does not clear
    entry.prev/next, and add_wait_queue with a conditional
    remove_wait_queue that is skipped when to_check is no longer
    in the group after concurrent UNLINK.  The orphaned wait entry
    remains on the unlinked substream sleep queue.  On the next
    drain iteration, add_wait_queue adds the entry to a new queue
    while still linked on the old one, corrupting both lists.  A
    subsequent wake_up dereferences NULL at the func pointer
    (mapped from the spinlock at offset 0 of the misinterpreted
    wait_queue_head_t), causing a kernel panic.
    
    Replace init_waitqueue_entry/add_wait_queue/conditional
    remove_wait_queue with init_wait_entry/prepare_to_wait/
    finish_wait.  init_wait_entry clears prev/next via
    INIT_LIST_HEAD on each iteration and sets
    autoremove_wake_function which auto-removes the entry on
    wake-up.  finish_wait safely handles both the already-removed
    and still-queued cases.
    
    Fixes: 9b1dbd69ba6f ("ALSA: pcm: fix use-after-free on linked stream runtime in snd_pcm_drain")
    Signed-off-by: Ji'an Zhou <eilaimemedsnaimel@gmail.com>
    Link: https://patch.msgid.link/20260604142559.3840881-1-eilaimemedsnaimel@gmail.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: timer: Fix UAF at snd_timer_user_params() [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Sat Jun 6 18:11:41 2026 +0200

    ALSA: timer: Fix UAF at snd_timer_user_params()
    
    commit 053a401b592be424fea9d57c789f66cd5d8cec11 upstream.
    
    At releasing a timer object, e.g. when a userspace timer
    (CONFIG_SND_UTIMER) gets closed and snd_timer_free() is called, it
    tries to detach the timer instances and release the resources.
    However, it's still possible that other in-flight tasks are holding
    the timer instance where the to-be-deleted timer object is associated,
    and this may lead to racy accesses.
    
    Fortunately, most of ioctls dealing with the timer instance list
    already have the protection with register_mutex, and this also avoids
    such races.  But, SNDRV_TIMER_IOCTL_PARAMS isn't protected, hence the
    concurrent ioctl may lead to use-after-free.
    
    This patch just adds the guard with register_mutex to protect
    snd_timer_user_params() for covering the code path as a quick
    workaround.  It's no hot-path but rather a rarely issued ioctl, so the
    performance penalty doesn't matter.
    
    Reported-by: Kyle Zeng <kylebot@openai.com>
    Tested-by: Kyle Zeng <kylebot@openai.com>
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20260606161145.1933447-2-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
arm64: cputype: Add C1-Premium definitions [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Tue Jun 16 06:18:19 2026 +0100

    arm64: cputype: Add C1-Premium definitions
    
    commit d28413bfc5a255957241f1df5d7fd0c2cd74fe18 upstream.
    
    Add cputype definitions for C1-Premium. These will be used for errata
    detection in subsequent patches.
    
    These values can be found in the C1-Premium TRM:
    
      https://developer.arm.com/documentation/109416/0100/
    
    ... in section A.5.1 ("MIDR_EL1, Main ID Register").
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Signed-off-by: Will Deacon <will@kernel.org>
    [Mark: backport to v6.6.y]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: cputype: Add C1-Ultra definitions [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Tue Jun 16 06:18:18 2026 +0100

    arm64: cputype: Add C1-Ultra definitions
    
    commit 60349e64a6c65f9f0aa118af711b3c7e137f07ff upstream.
    
    Add cputype definitions for C1-Ultra. These will be used for errata
    detection in subsequent patches.
    
    These values can be found in the C1-Ultra TRM:
    
      https://developer.arm.com/documentation/108014/0100/
    
    ... in section A.5.1 ("MIDR_EL1, Main ID Register").
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Signed-off-by: Will Deacon <will@kernel.org>
    [Mark: backport to v6.6.y]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: cputype: Add NVIDIA Olympus definitions [+ + +]
Author: Shanker Donthineni <sdonthineni@nvidia.com>
Date:   Tue Jun 16 06:18:17 2026 +0100

    arm64: cputype: Add NVIDIA Olympus definitions
    
    commit e185c8a0d84236d14af61faff8147c953a878a77 upstream.
    
    Add cpu part and model macro definitions for NVIDIA Olympus core.
    
    Signed-off-by: Shanker Donthineni <sdonthineni@nvidia.com>
    Signed-off-by: Will Deacon <will@kernel.org>
    [Mark: backport to v6.6.y]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: errata: Mitigate TLBI errata on Microsoft Azure Cobalt 100 CPU [+ + +]
Author: Will Deacon <will@kernel.org>
Date:   Tue Jun 16 06:18:22 2026 +0100

    arm64: errata: Mitigate TLBI errata on Microsoft Azure Cobalt 100 CPU
    
    commit 1940e70a8144bf75e6df26bf6f600862ea7f7ea1 upstream.
    
    Commit fb091ff39479 ("arm64: Subscribe Microsoft Azure Cobalt 100 to ARM
    Neoverse N2 errata") states that Microsoft Azure Cobalt 100 CPU "is a
    Microsoft implemented CPU based on r0p0 of the ARM Neoverse N2 CPU, and
    therefore suffers from all the same errata.".
    
    So enable the workaround for the latest broadcast TLB invalidation bug
    on these parts.
    
    Signed-off-by: Will Deacon <will@kernel.org>
    [Mark: backport to v6.6.y]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: errata: Mitigate TLBI errata on NVIDIA Olympus CPU [+ + +]
Author: Shanker Donthineni <sdonthineni@nvidia.com>
Date:   Tue Jun 16 06:18:21 2026 +0100

    arm64: errata: Mitigate TLBI errata on NVIDIA Olympus CPU
    
    commit ec7216f92e4ebd485b1c6dc6aa3f6064b71a5768 upstream.
    
    NVIDIA Olympus cores are affected by the TLBI completion issue tracked as
    CVE-2025-10263. The existing ARM64_ERRATUM_4118414 handling already uses
    ARM64_WORKAROUND_REPEAT_TLBI to issue an additional broadcast TLBI;DSB
    sequence and ensure affected memory write effects are globally observed.
    
    Add MIDR_NVIDIA_OLYMPUS to the repeat-TLBI match list so the same
    mitigation is enabled on affected Olympus systems. Also document the
    NVIDIA Olympus erratum in the arm64 silicon errata table and list it in
    the Kconfig help text.
    
    Signed-off-by: Shanker Donthineni <sdonthineni@nvidia.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Acked-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Will Deacon <will@kernel.org>
    [Mark: backport to v6.6.y]
    Signed-off-by: Shanker Donthineni <sdonthineni@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: errata: Mitigate TLBI errata on various Arm CPUs [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Tue Jun 16 06:18:20 2026 +0100

    arm64: errata: Mitigate TLBI errata on various Arm CPUs
    
    commit cfd391e74134db664feb499d43af286380b10ba8 upstream.
    
    A number of CPUs developed by Arm suffer from errata whereby a broadcast
    TLBI;DSB sequence may complete before the global observation of writes
    which are translated by an affected TLB entry.
    
    These errata ONLY affect the completion of memory accesses which have
    been translated by an invalidated TLB entry, and these errata DO NOT
    affect the actual invalidation of TLB entries. TLB entries are removed
    correctly.
    
    This issue has been assigned CVE ID CVE-2025-10263.
    
    To mitigate this issue, Arm recommends that software follows any
    affected TLBI;DSB sequence with an additional TLBI;DSB, which will
    ensure that all memory write effects affected by the first TLBI have
    been globally observed. The additional TLBI can use any operation that
    is broadcast to affected CPUs, and the additional DSB can use any option
    that is sufficient to complete the additional TLBI.
    
    The ARM64_WORKAROUND_REPEAT_TLBI workaround is sufficient to mitigate
    the issue. Enable this workaround for affected CPUs, and update the
    silicon errata documentation accordingly.
    
    Note that due to the manner in which Arm develops IP and tracks errata,
    some CPUs share a common erratum number.
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Signed-off-by: Will Deacon <will@kernel.org>
    [Mark: backport to v6.6.y]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: io: Extract user memory type in ioremap_prot() [+ + +]
Author: Will Deacon <will@kernel.org>
Date:   Wed Jun 3 17:50:25 2026 +0800

    arm64: io: Extract user memory type in ioremap_prot()
    
    [ Upstream commit 8f098037139b294050053123ab2bc0f819d08932 ]
    
    The only caller of ioremap_prot() outside of the generic ioremap()
    implementation is generic_access_phys(), which passes a 'pgprot_t' value
    determined from the user mapping of the target 'pfn' being accessed by
    the kernel. On arm64, the 'pgprot_t' contains all of the non-address
    bits from the pte, including the permission controls, and so we end up
    returning a new user mapping from ioremap_prot() which faults when
    accessed from the kernel on systems with PAN:
    
      | Unable to handle kernel read from unreadable memory at virtual address ffff80008ea89000
      | ...
      | Call trace:
      |   __memcpy_fromio+0x80/0xf8
      |   generic_access_phys+0x20c/0x2b8
      |   __access_remote_vm+0x46c/0x5b8
      |   access_remote_vm+0x18/0x30
      |   environ_read+0x238/0x3e8
      |   vfs_read+0xe4/0x2b0
      |   ksys_read+0xcc/0x178
      |   __arm64_sys_read+0x4c/0x68
    
    Extract only the memory type from the user 'pgprot_t' in ioremap_prot()
    and assert that we're being passed a user mapping, to protect us against
    any changes in future that may require additional handling. To avoid
    falsely flagging users of ioremap(), provide our own ioremap() macro
    which simply wraps __ioremap_prot().
    
    Cc: Zeng Heng <zengheng4@huawei.com>
    Cc: Jinjiang Tu <tujinjiang@huawei.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Fixes: 893dea9ccd08 ("arm64: Add HAVE_IOREMAP_PROT support")
    Reported-by: Jinjiang Tu <tujinjiang@huawei.com>
    Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Will Deacon <will@kernel.org>
    [ Modified ioremap_prot() parameter, using "unsigned long user_prot" instead of
    "pgprot_t user_prot" to fix conflict with generic header. ]
    Signed-off-by: Xiangyu Chen <xiangyu.chen@windriver.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: io: Rename ioremap_prot() to __ioremap_prot() [+ + +]
Author: Will Deacon <will@kernel.org>
Date:   Wed Jun 3 17:50:24 2026 +0800

    arm64: io: Rename ioremap_prot() to __ioremap_prot()
    
    commit f6bf47ab32e0863df50f5501d207dcdddb7fc507 upstream.
    
    Rename our ioremap_prot() implementation to __ioremap_prot() and convert
    all arch-internal callers over to the new function.
    
    ioremap_prot() remains as a #define to __ioremap_prot() for
    generic_access_phys() and will be subsequently extended to handle user
    permissions in 'prot'.
    
    Cc: Zeng Heng <zengheng4@huawei.com>
    Cc: Jinjiang Tu <tujinjiang@huawei.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Will Deacon <will@kernel.org>
    Signed-off-by: Xiangyu Chen <xiangyu.chen@windriver.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: tlb: Allow XZR argument to TLBI ops [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Jun 11 14:42:47 2026 +0100

    arm64: tlb: Allow XZR argument to TLBI ops
    
    commit bfd9c931d19aa59fb8371d557774fa169b15db9a upstream.
    
    The TLBI instruction accepts XZR as a register argument, and for TLBI
    operations with a register argument, there is no functional difference
    between using XZR or another GPR which contains zeroes. Operations
    without a register argument are encoded as if XZR were used.
    
    Allow the __TLBI_1() macro to use XZR when a register argument is all
    zeroes.
    
    Today this only results in a trivial code saving in
    __do_compat_cache_op()'s workaround for Neoverse-N1 erratum #1542419. In
    subsequent patches this pattern will be used more generally.
    
    There should be no functional change as a result of this patch.
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Oliver Upton <oupton@kernel.org>
    Cc: Ryan Roberts <ryan.roberts@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Signed-off-by: Will Deacon <will@kernel.org>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [Mark: Backport to v6.6.y]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: tlb: Flush walk cache when unsharing PMD tables [+ + +]
Author: Zeng Heng <zengheng4@huawei.com>
Date:   Sun May 31 20:52:59 2026 -0400

    arm64: tlb: Flush walk cache when unsharing PMD tables
    
    [ Upstream commit c2ff4764e03e7a8d758352f4aceb8fe1be6ac971 ]
    
    When huge_pmd_unshare() is called to unshare a PMD table, the
    tlb_unshare_pmd_ptdesc() function sets tlb->unshared_tables=true
    but the aarch64 tlb_flush() only checked tlb->freed_tables to
    determine whether to use TLBF_NONE (vae1is, invalidates walk
    cache) or TLBF_NOWALKCACHE (vale1is, leaf-only).
    
    This caused the stale PMD page table entry to remain in the walk cache
    after unshare, potentially leading to incorrect page table walks.
    
    Fix by including unshared_tables in the check, so that when
    unsharing tables, TLBF_NONE is used and the walk cache is properly
    invalidated.
    
    Here is the detailed distinction between vae1is and vale1is:
    
    | Instruction Combination  | Actual Invalidation Scope                         |
    | ------------------------ | --------------------------------------------------|
    | `VAE1IS`  + TTL=`0`      | All entries at all levels (full invalidation)     |
    | `VAE1IS`  + TTL=`2` (L2) | Non-leaf at Level 0/1 + leaf at Level 2           |
    | `VALE1IS` + TTL=`0`      | Leaf entries at all levels (non-leaf not cleared) |
    | `VALE1IS` + TTL=`2` (L2) | Leaf entry at Level 2 only                        |
    
    Signed-off-by: Zeng Heng <zengheng4@huawei.com>
    Fixes: 8ce720d5bd91 ("mm/hugetlb: fix excessive IPI broadcasts when unsharing PMD tables using mmu_gather")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: tlb: Optimize ARM64_WORKAROUND_REPEAT_TLBI [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Jun 11 14:42:48 2026 +0100

    arm64: tlb: Optimize ARM64_WORKAROUND_REPEAT_TLBI
    
    commit a8f78680ee6bf795086384e8aea159a52814f827 upstream.
    
    The ARM64_WORKAROUND_REPEAT_TLBI workaround is used to mitigate several
    errata where broadcast TLBI;DSB sequences don't provide all the
    architecturally required synchronization. The workaround performs more
    work than necessary, and can have significant overhead. This patch
    optimizes the workaround, as explained below.
    
    The workaround was originally added for Qualcomm Falkor erratum 1009 in
    commit:
    
      d9ff80f83ecb ("arm64: Work around Falkor erratum 1009")
    
    As noted in the message for that commit, the workaround is applied even
    in cases where it is not strictly necessary.
    
    The workaround was later reused without changes for:
    
    * Arm Cortex-A76 erratum #1286807
      SDEN v33: https://developer.arm.com/documentation/SDEN-885749/33-0/
    
    * Arm Cortex-A55 erratum #2441007
      SDEN v16: https://developer.arm.com/documentation/SDEN-859338/1600/
    
    * Arm Cortex-A510 erratum #2441009
      SDEN v19: https://developer.arm.com/documentation/SDEN-1873351/1900/
    
    The important details to note are as follows:
    
    1. All relevant errata only affect the ordering and/or completion of
       memory accesses which have been translated by an invalidated TLB
       entry. The actual invalidation of TLB entries is unaffected.
    
    2. The existing workaround is applied to both broadcast and local TLB
       invalidation, whereas for all relevant errata it is only necessary to
       apply a workaround for broadcast invalidation.
    
    3. The existing workaround replaces every TLBI with a TLBI;DSB;TLBI
       sequence, whereas for all relevant errata it is only necessary to
       execute a single additional TLBI;DSB sequence after any number of
       TLBIs are completed by a DSB.
    
       For example, for a sequence of batched TLBIs:
    
           TLBI <op1>[, <arg1>]
           TLBI <op2>[, <arg2>]
           TLBI <op3>[, <arg3>]
           DSB ISH
    
       ... the existing workaround will expand this to:
    
           TLBI <op1>[, <arg1>]
           DSB ISH                  // additional
           TLBI <op1>[, <arg1>]     // additional
           TLBI <op2>[, <arg2>]
           DSB ISH                  // additional
           TLBI <op2>[, <arg2>]     // additional
           TLBI <op3>[, <arg3>]
           DSB ISH                  // additional
           TLBI <op3>[, <arg3>]     // additional
           DSB ISH
    
       ... whereas it is sufficient to have:
    
           TLBI <op1>[, <arg1>]
           TLBI <op2>[, <arg2>]
           TLBI <op3>[, <arg3>]
           DSB ISH
           TLBI <opX>[, <argX>]     // additional
           DSB ISH                  // additional
    
       Using a single additional TBLI and DSB at the end of the sequence can
       have significantly lower overhead as each DSB which completes a TLBI
       must synchronize with other PEs in the system, with potential
       performance effects both locally and system-wide.
    
    4. The existing workaround repeats each specific TLBI operation, whereas
       for all relevant errata it is sufficient for the additional TLBI to
       use *any* operation which will be broadcast, regardless of which
       translation regime or stage of translation the operation applies to.
    
       For example, for a single TLBI:
    
           TLBI ALLE2IS
           DSB ISH
    
       ... the existing workaround will expand this to:
    
           TLBI ALLE2IS
           DSB ISH
           TLBI ALLE2IS             // additional
           DSB ISH                  // additional
    
       ... whereas it is sufficient to have:
    
           TLBI ALLE2IS
           DSB ISH
           TLBI VALE1IS, XZR        // additional
           DSB ISH                  // additional
    
       As the additional TLBI doesn't have to match a specific earlier TLBI,
       the additional TLBI can be implemented in separate code, with no
       memory of the earlier TLBIs. The additional TLBI can also use a
       cheaper TLBI operation.
    
    5. The existing workaround is applied to both Stage-1 and Stage-2 TLB
       invalidation, whereas for all relevant errata it is only necessary to
       apply a workaround for Stage-1 invalidation.
    
       Architecturally, TLBI operations which invalidate only Stage-2
       information (e.g. IPAS2E1IS) are not required to invalidate TLB
       entries which combine information from Stage-1 and Stage-2
       translation table entries, and consequently may not complete memory
       accesses translated by those combined entries. In these cases,
       completion of memory accesses is only guaranteed after subsequent
       invalidation of Stage-1 information (e.g. VMALLE1IS).
    
    Taking the above points into account, this patch reworks the workaround
    logic to reduce overhead:
    
    * New __tlbi_sync_s1ish() and __tlbi_sync_s1ish_hyp() functions are
      added and used in place of any dsb(ish) which is used to complete
      broadcast Stage-1 TLB maintenance. When the
      ARM64_WORKAROUND_REPEAT_TLBI workaround is enabled, these helpers will
      execute an additional TLBI;DSB sequence.
    
      For consistency, it might make sense to add __tlbi_sync_*() helpers
      for local and stage 2 maintenance. For now I've left those with
      open-coded dsb() to keep the diff small.
    
    * The duplication of TLBIs in __TLBI_0() and __TLBI_1() is removed. This
      is no longer needed as the necessary synchronization will happen in
      __tlbi_sync_s1ish() or __tlbi_sync_s1ish_hyp().
    
    * The additional TLBI operation is chosen to have minimal impact:
    
      - __tlbi_sync_s1ish() uses "TLBI VALE1IS, XZR". This is only used at
        EL1 or at EL2 with {E2H,TGE}=={1,1}, where it will target an unused
        entry for the reserved ASID in the kernel's own translation regime,
        and have no adverse affect.
    
      - __tlbi_sync_s1ish_hyp() uses "TLBI VALE2IS, XZR". This is only used
        in hyp code, where it will target an unused entry in the hyp code's
        TTBR0 mapping, and should have no adverse effect.
    
    * As __TLBI_0() and __TLBI_1() no longer replace each TLBI with a
      TLBI;DSB;TLBI sequence, batching TLBIs is worthwhile, and there's no
      need for arch_tlbbatch_should_defer() to consider
      ARM64_WORKAROUND_REPEAT_TLBI.
    
    When building defconfig with GCC 15.1.0, compared to v6.19-rc1, this
    patch saves ~1KiB of text, makes the vmlinux ~42KiB smaller, and makes
    the resulting Image 64KiB smaller:
    
    | [mark@lakrids:~/src/linux]% size vmlinux-*
    |    text    data     bss     dec     hex filename
    | 21179831        19660919         708216 41548966        279fca6 vmlinux-after
    | 21181075        19660903         708216 41550194        27a0172 vmlinux-before
    | [mark@lakrids:~/src/linux]% ls -l vmlinux-*
    | -rwxr-xr-x 1 mark mark 157771472 Feb  4 12:05 vmlinux-after
    | -rwxr-xr-x 1 mark mark 157815432 Feb  4 12:05 vmlinux-before
    | [mark@lakrids:~/src/linux]% ls -l Image-*
    | -rw-r--r-- 1 mark mark 41007616 Feb  4 12:05 Image-after
    | -rw-r--r-- 1 mark mark 41073152 Feb  4 12:05 Image-before
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Oliver Upton <oupton@kernel.org>
    Cc: Ryan Roberts <ryan.roberts@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Signed-off-by: Will Deacon <will@kernel.org>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [Mark: Backport to v6.6.y]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ARM: 9474/1: io: avoid KASAN instrumentation of raw halfword I/O [+ + +]
Author: Karl Mehltretter <kmehltretter@gmail.com>
Date:   Sun May 24 06:52:36 2026 +0100

    ARM: 9474/1: io: avoid KASAN instrumentation of raw halfword I/O
    
    commit d59ed803715a71fb9582e139d648ece8d66dc743 upstream.
    
    For CPUs before ARMv6, __raw_readw() and __raw_writew() are implemented
    as C volatile halfword accesses so the compiler can generate an access
    sequence that is safe for those machines. With KASAN enabled, those C
    accesses are instrumented as normal memory accesses.
    
    That is not valid for MMIO. On ARM926/VersatilePB with KASAN enabled,
    PL011 probing traps in __asan_store2() while registering the UART, because
    the instrumented writew() tries to check KASAN shadow for an MMIO address.
    
    Keep the existing volatile halfword access, but move the ARMv5 definitions
    into __no_kasan_or_inline functions so raw MMIO halfword accesses are not
    instrumented by KASAN. The ARMv6-and-newer inline assembly path is
    unchanged.
    
    Fixes: 421015713b30 ("ARM: 9017/2: Enable KASan for ARM")
    Cc: stable@vger.kernel.org # v5.11+
    Signed-off-by: Karl Mehltretter <kmehltretter@gmail.com>
    Reviewed-by: Linus Walleij <linusw@kernel.org>
    Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ARM: 9475/1: entry: use byte load for KASAN VMAP stack shadow [+ + +]
Author: Karl Mehltretter <kmehltretter@gmail.com>
Date:   Sun May 24 06:52:35 2026 +0100

    ARM: 9475/1: entry: use byte load for KASAN VMAP stack shadow
    
    commit 77a1f6883dc6e837bb2cb30b9b02e2f94338e2c6 upstream.
    
    Commit 44e9a3bb76e5 ("ARM: 9430/1: entry: Do a dummy read from
    VMAP shadow") added a dummy read from the KASAN VMAP stack shadow in
    __switch_to(). The read uses ldr, but the KASAN shadow address is
    byte-granular and is not guaranteed to be word aligned.
    
    ARMv5 faults unaligned word loads. With CONFIG_KASAN_VMALLOC and
    CONFIG_VMAP_STACK enabled, ARM926/VersatilePB crashes in __switch_to()
    with an alignment exception before reaching init.
    
    Use ldrb for the dummy shadow access. The code only needs to fault in the
    shadow mapping if the stack shadow is missing, so a byte load is sufficient
    and matches the granularity of KASAN shadow memory.
    
    Fixes: 44e9a3bb76e5 ("ARM: 9430/1: entry: Do a dummy read from VMAP shadow")
    Cc: stable@vger.kernel.org # v6.13+
    Signed-off-by: Karl Mehltretter <kmehltretter@gmail.com>
    Reviewed-by: Linus Walleij <linusw@kernel.org>
    Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ARM: socfpga: Fix OF node refcount leak in SMP setup [+ + +]
Author: Yuho Choi <dbgh9129@gmail.com>
Date:   Sun May 24 22:47:09 2026 -0400

    ARM: socfpga: Fix OF node refcount leak in SMP setup
    
    commit 63838c323924fe4a78b2323bd45aa1030f72ca60 upstream.
    
    socfpga_smp_prepare_cpus() looks up the Cortex-A9 SCU node with
    of_find_compatible_node(), which returns a node reference that must be
    released with of_node_put().
    
    The function maps the SCU registers and then returns without dropping
    that reference, leaking the node on both the success path and the
    of_iomap() failure path.
    
    Drop the reference once the mapping attempt is complete. The returned
    MMIO mapping does not depend on keeping the device node reference held.
    
    Fixes: 122694a0c712 ("ARM: socfpga: use of_iomap to map the SCU")
    Cc: stable@vger.kernel.org
    Signed-off-by: Yuho Choi <dbgh9129@gmail.com>
    Signed-off-by: Dinh Nguyen <dinguyen@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ASoC: codecs: simple-mux: Fix enum control bounds check [+ + +]
Author: Cássio Gabriel <cassiogabrielcontato@gmail.com>
Date:   Wed May 27 09:24:00 2026 -0300

    ASoC: codecs: simple-mux: Fix enum control bounds check
    
    [ Upstream commit f63ad68e18d774a5d15cd7e405ead63f6b322679 ]
    
    simple_mux_control_put() rejects values greater than e->items, but
    enum control values are zero based. For the two-entry mux used by this
    driver, valid values are 0 and 1, so value 2 must be rejected as well.
    
    Accepting e->items can store an invalid mux state, pass it to the GPIO
    setter, and pass it on to the DAPM mux update path where it is used as
    an index into the enum text array.
    
    Use the same >= e->items check used by the ASoC enum helpers.
    
    Fixes: 342fbb7578d1 ("ASoC: add simple-mux")
    Signed-off-by: Cássio Gabriel <cassiogabrielcontato@gmail.com>
    Link: https://patch.msgid.link/20260527-asoc-simple-mux-enum-bounds-v1-1-3f805b9fc671@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: fsl_sai: Fix 32 slots TDM broken by integer shift UB in xMR write [+ + +]
Author: Chancel Liu <chancel.liu@nxp.com>
Date:   Mon Jun 1 17:33:27 2026 +0900

    ASoC: fsl_sai: Fix 32 slots TDM broken by integer shift UB in xMR write
    
    commit 4790af1cc2e8871fb31f28c66e42b9a949a23992 upstream.
    
    When configuring 32 slots TDM (channels == slots == 32), the xMR
    (Mask Register) write used:
    ~0UL - ((1 << min(channels, slots)) - 1)
    
    The literal "1" is a signed 32-bit int. Shifting it by 32 positions is
    undefined behaviour which may set this register to 0xFFFFFFFF, masking
    all 32 slots.
    
    Use GENMASK_U32() macro instead. For 32 slots this produces a zero mask:
    ~GENMASK_U32(31, 0) = ~0xFFFFFFFF = 0x00000000
    Behaviour for fewer than 32 slots is unchanged.
    
    Fixes: 770f58d7d2c5 ("ASoC: fsl_sai: Support multiple data channel enable bits")
    Cc: stable@vger.kernel.org
    Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
    Reviewed-by: Shengjiu Wang <shengjiu.wang@gmail.com>
    Link: https://patch.msgid.link/20260601083327.1535185-1-chancel.liu@oss.nxp.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: Intel: bytcht_es8316: Fix MCLK leak on init errors [+ + +]
Author: Cássio Gabriel <cassiogabrielcontato@gmail.com>
Date:   Tue May 19 13:51:47 2026 -0300

    ASoC: Intel: bytcht_es8316: Fix MCLK leak on init errors
    
    [ Upstream commit afb2a3a9d8369d18122a0d7cd294eba9a98259c6 ]
    
    byt_cht_es8316_init() enables MCLK before configuring the codec sysclk
    and creating the headset jack. If either of those later steps fails, the
    function returns without disabling MCLK, leaving the clock enabled after
    card registration fails.
    
    Track whether this driver enabled MCLK and disable it on the init error
    paths. Add the matching DAI link exit callback so the same clock enable
    is also balanced when ASoC cleans up a successfully initialized link.
    
    Fixes: a03bdaa565cb ("ASoC: Intel: add machine driver for BYT/CHT + ES8316")
    Signed-off-by: Cássio Gabriel <cassiogabrielcontato@gmail.com>
    Link: https://patch.msgid.link/20260519-asoc-bytcht-es8316-mclk-leak-v1-1-b4a11cdc2afd@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: qcom: q6asm-dai: close stream only when running [+ + +]
Author: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Date:   Mon May 18 09:23:44 2026 +0000

    ASoC: qcom: q6asm-dai: close stream only when running
    
    commit 048c540ee76ded666bda74f9dae1ca3254e0633c upstream.
    
    q6asm_dai_close() and q6asm_dai_compr_free() currently issue CMD_CLOSE
    whenever prtd->state is non-zero.
    
    After prepare() closes an existing stream, the state is updated to
    Q6ASM_STREAM_STOPPED. Since this state is also non-zero, the close and
    free paths can send CMD_CLOSE again for a stream that has already been
    closed.
    
    Restrict CMD_CLOSE to the Q6ASM_STREAM_RUNNING state so the command is
    sent only when the ASM stream is still active.
    
    Fixes: 2a9e92d371db ("ASoC: qdsp6: q6asm: Add q6asm dai driver")
    Cc: Stable@vger.kernel.org
    Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260518092347.3446946-3-srinivas.kandagatla@oss.qualcomm.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: qcom: q6asm-dai: do not set stream state in event and trigger callbacks [+ + +]
Author: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Date:   Mon May 18 09:23:43 2026 +0000

    ASoC: qcom: q6asm-dai: do not set stream state in event and trigger callbacks
    
    commit cee3e63e7106c3c81b2053371fdf14240bfba2fc upstream.
    
    The q6asm-dai stream state is used by prepare() to decide whether an
    existing stream setup needs to be closed before opening/configuring a new
    one. Updating the state from trigger or asynchronous DSP callbacks can make
    that state stale or incorrect relative to the actual setup lifetime.
    
    In particular, setting Q6ASM_STREAM_STOPPED on STOP or EOS completion can
    make prepare() believe there is no active setup to close, which can result
    in opening/configuring the same stream more than once.
    
    Keep stream state updates tied to prepare(), where the stream is actually
    closed and reopened, and stop changing it from trigger and EOS callbacks.
    
    Fixes: bfbb12dfa144 ("ASoC: qcom: q6asm-dai: perform correct state check before closing")
    Cc: Stable@vger.kernel.org
    Closes: https://lore.kernel.org/all/afS7rTHdc9TyIeLx@rdacayan/
    Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260518092347.3446946-2-srinivas.kandagatla@oss.qualcomm.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: qcom: q6asm-dai: fix error handling in prepare and set_params [+ + +]
Author: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Date:   Mon May 18 09:23:45 2026 +0000

    ASoC: qcom: q6asm-dai: fix error handling in prepare and set_params
    
    commit 4b4db09f283df65d780bc7cee66cb4a7e9bf4770 upstream.
    
    Fix error handling in q6asm_dai_compr_set_params() and q6asm_dai_prepare()
    for both CMD_CLOSE and q6asm_unmap_memory_regions().
    
    In both the functions, we are doing q6asm_audio_client_free in failure
    cases, which means if prepare or set_params fail, we can never recover.
    Now open and close are done in respective dai_open/close functions.
    
    Fixes: 2a9e92d371db ("ASoC: qdsp6: q6asm: Add q6asm dai driver")
    Cc: Stable@vger.kernel.org
    Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260518092347.3446946-4-srinivas.kandagatla@oss.qualcomm.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: wm_adsp: Fix NULL dereference when removing firmware controls [+ + +]
Author: Richard Fitzgerald <rf@opensource.cirrus.com>
Date:   Thu Jun 4 11:12:44 2026 +0100

    ASoC: wm_adsp: Fix NULL dereference when removing firmware controls
    
    [ Upstream commit 7d3fb78b550301e43fdc60312aed733069694426 ]
    
    In wm_adsp_control_remove() check that the priv pointer is not NULL
    before attempting to cleanup what it points to.
    
    When cs_dsp creates a control it calls wm_adsp_control_add_cb() so that
    wm_adsp can create its own private control data. There are two cases
    where private data is not created:
    
    1. The control is a SYSTEM control, so an ALSA control is not created.
    
    2. The codec driver has registered a control_add() callback that
       hides the control, so wm_adsp_control_add() is not called.
    
    When cs_dsp_remove destroys its control list it calls
    wm_adsp_control_remove() for each control. But wm_adsp_control_remove()
    was attempting to cleanup the private data pointed to by cs_ctl->priv
    without checking the pointer for NULL.
    
    Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
    Fixes: 0700bc2fb94c ("ASoC: wm_adsp: Separate generic cs_dsp_coeff_ctl handling")
    Link: https://patch.msgid.link/20260604101244.1402862-1-rf@opensource.cirrus.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
auxdisplay: line-display: fix OOB read on zero-length message_store() [+ + +]
Author: Stepan Ionichev <sozdayvek@gmail.com>
Date:   Thu May 14 22:43:42 2026 +0500

    auxdisplay: line-display: fix OOB read on zero-length message_store()
    
    commit a7511dcd9dd4bc55d123f9b800c8a4ed2662e5c6 upstream.
    
    linedisp_display() unconditionally reads msg[count - 1] before
    checking whether count is zero, so a write of zero bytes to the
    message sysfs attribute hits msg[-1]:
    
            write(fd, "", 0);
    
            -> message_store(..., buf, count=0)
               -> linedisp_display(linedisp, buf, count=0)
                  -> msg[count - 1] == '\n'  ; OOB read
    
    The kernfs write buffer for that store is a 1-byte allocation
    (kernfs_fop_write_iter() does kmalloc(len + 1) with len == 0),
    so msg[-1] is a 1-byte read before the slab object. On a
    KASAN-enabled kernel this trips an out-of-bounds report and
    panics; on stock kernels it silently reads adjacent slab data
    and, if that byte happens to be '\n', the following count--
    wraps ssize_t 0 to -1 and is then passed to kmemdup_nul().
    
    linedisp_display() is reached from the message_store() sysfs
    callback (drivers/auxdisplay/line-display.c message attribute,
    mode 0644) and from the in-tree initial-message setup with
    count == -1, so the OOB path is only userspace-triggerable via
    zero-byte writes; vfs_write() does not short-circuit on
    count == 0 and kernfs_fop_write_iter() dispatches the store
    callback regardless.
    
    Guard the trailing-newline trim with a count check. The
    existing if (!count) block then takes the clear-display path
    unchanged.
    
    Affects every auxdisplay driver that registers via
    linedisp_register() / linedisp_attach(): ht16k33, max6959,
    img-ascii-lcd, seg-led-gpio.
    
    Fixes: 7e76aece6f03 ("auxdisplay: Extract character line display core support")
    Signed-off-by: Stepan Ionichev <sozdayvek@gmail.com>
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
batman-adv: bla: avoid double decrement of bla.num_requests [+ + +]
Author: Sven Eckelmann <sven@narfation.org>
Date:   Fri May 29 20:19:23 2026 +0200

    batman-adv: bla: avoid double decrement of bla.num_requests
    
    commit 83ab69bd12b80f6ea169c8bea6977701b53a043d upstream.
    
    The bla.num_requests is increased when no request_sent was in progress. And
    it is decremented in various places (announcement was received, backbone is
    purged, periodic work). But the check if the request_sent is actually set
    to a specific state and the atomic_dec/_inc are not safe because they are
    not atomic (TOCTOU) and multiple such code portions can run concurrently.
    
    At the same time, it is necessary to modify request_sent (state) and
    bla.num_requests atomically. Otherwise batadv_bla_send_request() might set
    request_sent to 1 and is interrupted.  batadv_handle_announce() can then
    set request_sent back to 0 and decrement num_requests before
    batadv_bla_send_request() incremented it.
    
    The two operations must therefore be locked. And since state (request_sent)
    and wait_periods are only accessed inside this lock, they can be converted
    to simpler datatypes. And to avoid that the bla.num_requests is touched by
    a parallel running context with a valid backbone_gw reference after
    batadv_bla_purge_backbone_gw() ran, a third state "stopped" is required to
    correctly signal that a backbone_gw is in the state of being cleaned up.
    
    Cc: stable@kernel.org
    Fixes: 23721387c409 ("batman-adv: add basic bridge loop avoidance code")
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

batman-adv: bla: avoid NULL-ptr deref for claim via dropped interface [+ + +]
Author: Sven Eckelmann <sven@narfation.org>
Date:   Fri May 29 20:20:23 2026 +0200

    batman-adv: bla: avoid NULL-ptr deref for claim via dropped interface
    
    commit f80d3d98d2ff78d9e2fe5d68b1f45948c4f7bd24 upstream.
    
    Without rtnl_lock held, a hardif might be retrieved as primary interface of
    a meshif, but then (while operating on this interface) getting decoupled
    from the mesh interface. In this case, the meshif still exists but the
    pointer from the primary hardif to the meshif is set to NULL.
    
    The mesh_iface must be checked first to be non-NULL before continuing to
    send an ARP request using meshif.
    
    Cc: stable@kernel.org
    Fixes: 23721387c409 ("batman-adv: add basic bridge loop avoidance code")
    Reported-by: Ido Schimmel <idosch@nvidia.com>
    Reported-by: syzbot+9fdcc9f05a98a540b816@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=9fdcc9f05a98a540b816
    [ switch to old "mesh_iface" name "soft_iface" ]
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

batman-adv: iv: recover OGM scheduling after forward packet error [+ + +]
Author: Sven Eckelmann <sven@narfation.org>
Date:   Fri May 29 20:18:57 2026 +0200

    batman-adv: iv: recover OGM scheduling after forward packet error
    
    commit aa3153bd139a6c48667dcd02608d3b2c80bff02c upstream.
    
    When batadv_iv_ogm_schedule_buff() fails to allocate and queue a forward
    packet for OGM transmission, the work item that drives periodic OGM
    scheduling is never re-armed. This silently halts transmission of the
    node's own OGMs on the affected interface — only OGMs from other peers
    continue to be aggregated and forwarded.
    
    Fix this by tracking whether batadv_iv_ogm_queue_add() (and transitively
    batadv_iv_ogm_aggregate_new()) successfully scheduled a forward packet.
    When scheduling fails, batadv_iv_ogm_schedule_buff() falls back to queuing
    a dedicated recovery work item (reschedule_work) that fires after one
    originator interval and calls batadv_iv_ogm_schedule() again.
    
    Cc: stable@kernel.org
    Fixes: c6c8fea29769 ("net: Add batman-adv meshing protocol")
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

batman-adv: tp_meter: avoid role confusion in tp_list [+ + +]
Author: Sven Eckelmann <sven@narfation.org>
Date:   Fri May 29 20:18:27 2026 +0200

    batman-adv: tp_meter: avoid role confusion in tp_list
    
    commit ff24f2ecfd94c07a2b89bac497433e3b23271cac upstream.
    
    Session lookups in tp_list matched only on destination address (and
    optionally session ID), leaving role validation to the caller. If two
    sessions with the same other_end coexisted (one as sender, one as receiver)
    a lookup could silently return the wrong one, causing the caller's role to
    bail out early, potentially skipping necessary cleanup.
    
    Move the role check into the lookup functions themselves so the correct
    entry is always returned, or none at all. Since batadv_tp_start()
    legitimately needs to detect any active session to a destination regardless
    of role, introduce a dedicated helper for that case rather than bending the
    existing lookup semantics.
    
    Cc: stable@kernel.org
    Fixes: 33a3bb4a3345 ("batman-adv: throughput meter implementation")
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

batman-adv: tp_meter: directly shut down timer on cleanup [+ + +]
Author: Sven Eckelmann <sven@narfation.org>
Date:   Thu May 28 22:23:16 2026 +0200

    batman-adv: tp_meter: directly shut down timer on cleanup
    
    commit d5487249a81ea658717614009c8f46acc5b7101a upstream.
    
    batadv_tp_sender_cleanup() was calling timer_delete_sync() followed by
    timer_delete() to guard against the timer handler re-arming itself between
    the two calls. This double-deletion hack relied on the sending status being
    set to 0 to suppress re-arming.
    
    Replace both calls with a single timer_shutdown_sync(). This function both
    waits for any running timer callback to complete (like timer_delete_sync())
    and permanently disarms the timer so it cannot be re-armed afterwards,
    making re-arming prevention unconditional and self-documenting.
    
    The re-arming property is also required because otherwise:
    
    1. context 0 (batadv_tp_recv_ack()) checks in
       batadv_tp_reset_sender_timer() if sending is still 1 -> it is
    2. context 1 changes in batadv_tp_sender_shutdown() sending to 0 and in
       this process forces the kthread to stop timer in
       batadv_tp_sender_cleanup()
    3. context 0 continues in batadv_tp_reset_sender_timer() and rearms the
       timer -> but the reference for it is already gone
    
    Cc: stable@kernel.org
    Fixes: 33a3bb4a3345 ("batman-adv: throughput meter implementation")
    [ adapt pre-hunk to old del_timer* names ]
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

batman-adv: tt: avoid empty VLAN responses [+ + +]
Author: Sven Eckelmann <sven@narfation.org>
Date:   Fri May 29 20:15:14 2026 +0200

    batman-adv: tt: avoid empty VLAN responses
    
    commit fa1bd704940b5bcbc32c0b28db9167405c8ee5e0 upstream.
    
    The commit 16116dac2339 ("batman-adv: prevent TT request storms by not
    sending inconsistent TT TLVLs") added checks to the local (direct) TT
    response code. But the response can also be done indirectly by another node
    using the global TT state. To avoid such inconsistency states reported in
    the original fix, also avoid sending empty VLANs for replies from the
    global TT state.
    
    Cc: stable@kernel.org
    Fixes: 7ea7b4a14275 ("batman-adv: make the TT CRC logic VLAN specific")
    [ Context, drop flex array dependency ]
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

batman-adv: tt: fix TOCTOU race for reported vlans [+ + +]
Author: Sven Eckelmann <sven@narfation.org>
Date:   Thu May 28 22:59:34 2026 +0200

    batman-adv: tt: fix TOCTOU race for reported vlans
    
    commit 94d27005016be15ffc638b2ecbc4d58805ad7b48 upstream.
    
    The local TT based TVLV is generated by first checking the number of VLANs
    which have at least one TT entry. A new buffer with the correct size for
    the VLANs is then allocated. Only then, the list of VLANs s used to fill
    the VLAN entries in the buffer. During this time, the meshif_vlan_list_lock
    is held. But the actual number of TT entries of each VLAN can still
    increase during this time - just not the number of VLANs in the list.
    
    But the prefilter used in the buffer size calculation might still cause an
    increase of the number of VLANs which need to be stored. Simply because a
    VLAN might now suddenly have at least one entry when it had none in the
    pre-alloc check - and then needs to occupy space which was not allocated.
    
    It is better to overestimate the buffer size at the beginning and then fill
    the buffer only with the VLANs which are not empty.
    
    Cc: stable@kernel.org
    Fixes: 16116dac2339 ("batman-adv: prevent TT request storms by not sending inconsistent TT TLVLs")
    [ Context, drop flex array dependency ]
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

batman-adv: tt: reject oversized local TVLV buffers [+ + +]
Author: Sven Eckelmann <sven@narfation.org>
Date:   Fri May 29 20:13:27 2026 +0200

    batman-adv: tt: reject oversized local TVLV buffers
    
    commit 1e9fab756f8395096d5bba7be0c373c4c8f5d165 upstream.
    
    The commit 3a359bf5c61d ("batman-adv: reject oversized global TT response
    buffers") added a check to ensure that a global return buffer size can be
    stored in an u16. The same buffer handling also exists for the local data
    buffer but was not touched.
    
    A similar check should be also be in place for the local TVLV buffer. It
    doesn't have the similar attack surface because it is only generated from
    locally discovered MAC addresses but the dynamic nature could still cause
    temporarily to large buffers.
    
    Cc: stable@kernel.org
    Fixes: 7ea7b4a14275 ("batman-adv: make the TT CRC logic VLAN specific")
    [ Context ]
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

batman-adv: tvlv: abort OGM send on tvlv append failure [+ + +]
Author: Sven Eckelmann <sven@narfation.org>
Date:   Thu May 28 21:48:30 2026 +0200

    batman-adv: tvlv: abort OGM send on tvlv append failure
    
    commit 501368506563e151b322c8c3f228b796e615b90d upstream.
    
    batadv_tvlv_container_ogm_append() could fail in two ways: a memory
    allocation failure when resizing the packet buffer, or the tvlv data
    exceeding U16_MAX bytes. In both cases the function previously returned the
    old (now stale) tvlv_value_len rather than signalling an error, causing the
    OGM/OGM2 send path to transmit a packet whose TVLV length field no longer
    matched the actual buffer contents. And because it also didn't fill in the
    new TVLV data, sending either uninitialized or corrupted data on the wire.
    
    All errors in batadv_tvlv_container_ogm_append() must be forwarded to the
    caller. And the caller must abort the send of the OGM2. For B.A.T.M.A.N.
    IV, it is currently not allowed to abort the send. The non-TVLV part of the
    OGM must be queued up instead.
    
    Cc: stable@kernel.org
    Fixes: ef26157747d4 ("batman-adv: tvlv - basic infrastructure")
    [ Context ]
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

batman-adv: tvlv: reject oversized TVLV packets [+ + +]
Author: Sven Eckelmann <sven@narfation.org>
Date:   Fri May 29 20:17:56 2026 +0200

    batman-adv: tvlv: reject oversized TVLV packets
    
    commit f50487e3566358b2b982b7801945e858c78ad9ab upstream.
    
    batadv_tvlv_container_ogm_append() builds a TVLV packet section from
    the tvlv.container_list. The total size of this section is computed by
    batadv_tvlv_container_list_size(), which sums the sizes of all registered
    containers.
    
    The return type and accumulator in batadv_tvlv_container_list_size() were
    u16. If the accumulated size exceeds U16_MAX, the value wraps around,
    causing the subsequent allocation in batadv_tvlv_container_ogm_append()
    to be undersized. The memcpy-style copy that follows would then write
    beyond the end of the allocated buffer, corrupting kernel memory.
    
    Fix this by widening the return type of batadv_tvlv_container_list_size()
    to size_t. In batadv_tvlv_container_ogm_append(), check the computed length
    against U16_MAX before proceeding, and bail out as if the allocation had
    failed when the limit is exceeded.
    
    Cc: stable@kernel.org
    Fixes: ef26157747d4 ("batman-adv: tvlv - basic infrastructure")
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Reviewed-by: Yuan Tan <yuantan098@gmail.com>
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

batman-adv: v: stop OGMv2 on disabled interface [+ + +]
Author: Sven Eckelmann <sven@narfation.org>
Date:   Thu May 28 21:29:56 2026 +0200

    batman-adv: v: stop OGMv2 on disabled interface
    
    commit f8ce8b8331a1bc44ad4905886a482214d428b253 upstream.
    
    When a batadv_hard_iface is disabled, its mesh_iface pointer is set to
    NULL. However, batadv_v_ogm_send_meshif() may still dispatch OGMs via
    batadv_v_ogm_queue_on_if() for interfaces that have since lost their
    mesh_iface association. This results in a NULL pointer dereference when
    batadv_v_ogm_queue_on_if() unconditionally calls netdev_priv() on the
    now NULL hard_iface->mesh_iface to retrieve the batadv_priv.
    
    It is necessary to ensure that the batadv_v_ogm_queue_on_if() checks that
    it is using the same mesh_iface for which batadv_v_ogm_send_meshif() was
    called.
    
    Cc: stable@kernel.org
    Fixes: 0da0035942d4 ("batman-adv: OGMv2 - add basic infrastructure")
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Reviewed-by: Yuan Tan <yuantan098@gmail.com>
    [ switch to old "mesh_iface" name "soft_iface" ]
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bcache: fix uninitialized closure object [+ + +]
Author: Mingzhe Zou <mingzhe.zou@easystack.cn>
Date:   Fri Apr 3 12:21:35 2026 +0800

    bcache: fix uninitialized closure object
    
    [ Upstream commit 20a8e451ec1c7e99060b1bbaaad03ce88c39ddb8 ]
    
    In the previous patch ("bcache: fix cached_dev.sb_bio use-after-free and
    crash"), we adopted a simple modification suggestion from AI to fix the
    use-after-free.
    
    But in actual testing, we found an extreme case where the device is
    stopped before calling bch_write_bdev_super().
    
    At this point, struct closure sb_write has not been initialized yet.
    For this patch, we ensure that sb_bio has been completed via
    sb_write_mutex.
    
    Signed-off-by: Mingzhe Zou <mingzhe.zou@easystack.cn>
    Signed-off-by: Coly Li <colyli@fnnas.com>
    Link: https://patch.msgid.link/20260403042135.2221247-1-colyli@fnnas.com
    Fixes: fec114a98b87 ("bcache: fix cached_dev.sb_bio use-after-free and crash")
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Bluetooth: 6lowpan: check skb_clone() return value in send_mcast_pkt() [+ + +]
Author: Zhao Dongdong <zhaodongdong@kylinos.cn>
Date:   Tue May 26 11:21:39 2026 +0800

    Bluetooth: 6lowpan: check skb_clone() return value in send_mcast_pkt()
    
    [ Upstream commit 3c40d381ce04f9575a5d8b542898183c3b4b38dc ]
    
    The skb_clone() function can return NULL if memory allocation fails.
    send_mcast_pkt() calls skb_clone() without checking the return value, which
    can lead to a NULL pointer dereference in send_pkt() when it dereferences
    skb->data.
    Add a NULL check after skb_clone() and skip the peer if the clone fails.
    
    Fixes: 18722c247023 ("Bluetooth: Enable 6LoWPAN support for BT LE devices")
    Signed-off-by: Zhao Dongdong <zhaodongdong@kylinos.cn>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: bnep: fix incorrect length parsing in bnep_rx_frame() extension handling [+ + +]
Author: Dudu Lu <phx0fer@gmail.com>
Date:   Wed Apr 15 17:39:53 2026 +0800

    Bluetooth: bnep: fix incorrect length parsing in bnep_rx_frame() extension handling
    
    [ Upstream commit 72b8deccff17a7644e0367e1aaf1a36cfb014324 ]
    
    In bnep_rx_frame(), the BNEP_FILTER_NET_TYPE_SET and
    BNEP_FILTER_MULTI_ADDR_SET extension header parsing has two bugs:
    
    1) The 2-byte length field is read with *(u16 *)(skb->data + 1), which
       performs a native-endian read. The BNEP protocol specifies this field
       in big-endian (network byte order), and the same file correctly uses
       get_unaligned_be16() for the identical fields in
       bnep_ctrl_set_netfilter() and bnep_ctrl_set_mcfilter().
    
    2) The length is multiplied by 2, but unlike BNEP_SETUP_CONN_REQ where
       the length byte counts UUID pairs (requiring * 2 for two UUIDs per
       entry), the filter extension length field already represents the total
       data size in bytes. This is confirmed by bnep_ctrl_set_netfilter()
       which reads the same field as a byte count and divides by 4 to get
       the number of filter entries.
    
       The bogus * 2 means skb_pull advances twice as far as it should,
       either dropping valid data from the next header or causing the pull
       to fail entirely when the doubled length exceeds the remaining skb.
    
    Fix by splitting the pull into two steps: first use skb_pull_data() to
    safely pull and validate the 3-byte fixed header (ctrl type + length),
    then pull the variable-length data using the properly decoded length.
    
    Fixes: bf8b9a9cb77b ("Bluetooth: bnep: Add support to extended headers of control frames")
    Signed-off-by: Dudu Lu <phx0fer@gmail.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: bnep: reject short frames before parsing [+ + +]
Author: Zhang Cen <rollkingzzc@gmail.com>
Date:   Fri May 29 11:22:09 2026 +0800

    Bluetooth: bnep: reject short frames before parsing
    
    [ Upstream commit 6770d3a8acdf9151769180cc3710346c4cfbe6f0 ]
    
    A BNEP peer can send a short BNEP SDU. bnep_rx_frame() reads the
    packet type byte immediately and, for control packets, reads the control
    opcode and setup UUID-size byte before proving that those bytes are
    present. bnep_rx_control() also dereferences the control opcode without
    rejecting an empty control payload.
    
    Use skb_pull_data() for the fixed fields in bnep_rx_frame() so a NULL
    return gates each dereference. Split the control handler so the frame
    path can pass an opcode that has already been pulled, and keep the
    byte-buffer wrapper for extension control payloads.
    
    For BNEP_SETUP_CONN_REQ, name the UUID-size byte before pulling the
    setup payload. struct bnep_setup_conn_req carries destination and source
    service UUIDs after that byte, each uuid_size bytes, so the parser now
    documents that tuple explicitly instead of leaving the pull length as an
    opaque multiplication.
    
    Validation reproduced this kernel report:
    KASAN slab-out-of-bounds in bnep_rx_frame.isra.0+0x130c/0x1790
    The buggy address belongs to the object at ffff88800c0f7908 which belongs
    to the cache kmalloc-8 of size 8
    The buggy address is located 0 bytes to the right of allocated 1-byte
    region [ffff88800c0f7908, ffff88800c0f7909)
    Read of size 1
    Call trace:
      dump_stack_lvl+0xb3/0x140 (?:?)
      print_address_description+0x57/0x3a0 (?:?)
      bnep_rx_frame+0x130c/0x1790 (net/bluetooth/bnep/core.c:306)
      print_report+0xb9/0x2b0 (?:?)
      __virt_addr_valid+0x1ba/0x3a0 (?:?)
      srso_alias_return_thunk+0x5/0xfbef5 (?:?)
      kasan_addr_to_slab+0x21/0x60 (?:?)
      kasan_report+0xe0/0x110 (?:?)
      process_one_work+0xfce/0x17e0 (kernel/workqueue.c:3200)
      worker_thread+0x65c/0xe40 (?:?)
      __kthread_parkme+0x184/0x230 (?:?)
      kthread+0x35e/0x470 (?:?)
      _raw_spin_unlock_irq+0x28/0x50 (?:?)
      ret_from_fork+0x586/0x870 (?:?)
      __switch_to+0x74f/0xdc0 (?:?)
      ret_from_fork_asm+0x1a/0x30 (?:?)
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Assisted-by: Codex:gpt-5.5
    Signed-off-by: Zhang Cen <rollkingzzc@gmail.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: btusb: Allow firmware re-download when version matches [+ + +]
Author: Shuai Zhang <shuai.zhang@oss.qualcomm.com>
Date:   Thu May 21 13:25:47 2026 +0800

    Bluetooth: btusb: Allow firmware re-download when version matches
    
    commit 82855073c1081732656734b74d7d1d5e4cfd0da7 upstream.
    
    The Bluetooth host decides whether to download firmware by reading the
    controller firmware download completion flag and firmware version
    information.
    
    If a USB error occurs during the firmware download process (for example
    due to a USB disconnect), the download is aborted immediately. An
    incomplete firmware transfer does not cause the controller to set the
    download completion flag, but the firmware version information may be
    updated at an early stage of the download process.
    
    In this case, after USB reconnection, the host attempts to re-download
    the firmware because the download completion flag is not set. However,
    since the controller reports the same firmware version as the target
    firmware, the download is skipped. This ultimately results in the
    firmware not being properly updated on the controller.
    
    This change removes the restriction that skips firmware download when
    the versions are equal. It covers scenarios where the USB connection
    can be disconnected at any time and ensures that firmware download can
    be retriggered after USB reconnection, allowing the Bluetooth firmware
    to be correctly and completely updated.
    
    Fixes: 3267c884cefa ("Bluetooth: btusb: Add support for QCA ROME chipset family")
    Cc: stable@vger.kernel.org
    Signed-off-by: Shuai Zhang <shuai.zhang@oss.qualcomm.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: fix memory leak in error path of hci_alloc_dev() [+ + +]
Author: Bharath Reddy <kbreddy.rpbc@gmail.com>
Date:   Mon Jun 1 08:54:26 2026 +0530

    Bluetooth: fix memory leak in error path of hci_alloc_dev()
    
    [ Upstream commit 37b3009bf5976e8ab77c8b9a9bc3bbd7ff49e37f ]
    
    Early failures in Bluetooth HCI UART configuration leak SRCU percpu
    memory.
    
    When device initialization fails before hci_register_dev() completes,
    the HCI_UNREGISTER flag is never set. As a result, when the device
    reference count reaches zero, bt_host_release() evaluates this flag as
    false and falls back to a direct kfree(hdev).
    
    Because hci_release_dev() is bypassed, the SRCU struct initialized
    early in hci_alloc_dev() is never cleaned up, resulting in a leak of
    percpu memory.
    
    Fix the leak by explicitly calling cleanup_srcu_struct() in the
    fallback (unregistered) branch of bt_host_release() before freeing
    the device.
    
    Reported-by: syzbot+535ecc844591e50588a5@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=535ecc844591e50588a5
    Tested-by: syzbot+535ecc844591e50588a5@syzkaller.appspotmail.com
    Fixes: 1d6123102e9f ("Bluetooth: hci_core: Fix use-after-free in vhci_flush()")
    Signed-off-by: Bharath Reddy <kbreddy.rpbc@gmail.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: hci_conn: fix potential UAF in set_cig_params_sync [+ + +]
Author: Pauli Virtanen <pav@iki.fi>
Date:   Mon Jun 8 17:56:55 2026 +0800

    Bluetooth: hci_conn: fix potential UAF in set_cig_params_sync
    
    [ Upstream commit a2639a7f0f5bf7d73f337f8f077c19415c62ed2c ]
    
    hci_conn lookup and field access must be covered by hdev lock in
    set_cig_params_sync, otherwise it's possible it is freed concurrently.
    
    Take hdev lock to prevent hci_conn from being deleted or modified
    concurrently.  Just RCU lock is not suitable here, as we also want to
    avoid "tearing" in the configuration.
    
    Fixes: a091289218202 ("Bluetooth: hci_conn: Fix hci_le_set_cig_params")
    Signed-off-by: Pauli Virtanen <pav@iki.fi>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    [ Minor context conflict resolved. ]
    Signed-off-by: Alva Lan <alvalan9@foxmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: hci_qca: Convert timeout from jiffies to ms [+ + +]
Author: Shuai Zhang <shuai.zhang@oss.qualcomm.com>
Date:   Fri May 29 15:33:03 2026 -0400

    Bluetooth: hci_qca: Convert timeout from jiffies to ms
    
    [ Upstream commit 375ba7484132662a4a8c7547d088fb6275c00282 ]
    
    Since the timer uses jiffies as its unit rather than ms, the timeout value
    must be converted from ms to jiffies when configuring the timer. Otherwise,
    the intended 8s timeout is incorrectly set to approximately 33s.
    
    To improve readability, embed msecs_to_jiffies() directly in the macro
    definitions and drop the _MS suffix from macros that now yield jiffies
    values: MEMDUMP_TIMEOUT, FW_DOWNLOAD_TIMEOUT, IBS_DISABLE_SSR_TIMEOUT,
    CMD_TRANS_TIMEOUT, and IBS_BTSOC_TX_IDLE_TIMEOUT.
    
    IBS_WAKE_RETRANS_TIMEOUT_MS and IBS_HOST_TX_IDLE_TIMEOUT_MS are
    intentionally left unchanged. Their values are stored in the struct fields
    wake_retrans and tx_idle_delay, which hold ms values at runtime and can be
    modified via debugfs. The msecs_to_jiffies() conversion happens at each
    call site against the field value, so it cannot be embedded in the macro.
    
    Wake timer depends on commit c347ca17d62a
    
    Cc: stable@vger.kernel.org
    Fixes: d841502c79e3 ("Bluetooth: hci_qca: Collect controller memory dump during SSR")
    Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>
    Acked-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Shuai Zhang <shuai.zhang@oss.qualcomm.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: hci_qca: Migrate to serdev specific shutdown function [+ + +]
Author: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
Date:   Fri May 29 15:33:02 2026 -0400

    Bluetooth: hci_qca: Migrate to serdev specific shutdown function
    
    [ Upstream commit 12a6a5726c515455935982429ac35dee2307233d ]
    
    This saves a cast in the driver. The motivation is stop using the callback
    .shutdown in qca_serdev_driver.driver to make it possible to drop that.
    
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
    Link: https://patch.msgid.link/261a3384e25c4837d4efee87958805f15d7d4e3c.1765526117.git.u.kleine-koenig@baylibre.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: 375ba7484132 ("Bluetooth: hci_qca: Convert timeout from jiffies to ms")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: hci_sync: fix UAF in hci_le_create_cis_sync [+ + +]
Author: Doruk Tan Ozturk <doruk@0sec.ai>
Date:   Thu Jun 4 11:52:29 2026 +0200

    Bluetooth: hci_sync: fix UAF in hci_le_create_cis_sync
    
    [ Upstream commit bfea6091e0fffb270c20e74384b660910277eb6c ]
    
    hci_le_create_cis_sync() dereferences conn->conn_timeout after releasing
    both rcu_read_lock() and hci_dev_lock(hdev).  The conn pointer was
    obtained from an RCU-protected iteration over hdev->conn_hash.list and
    is not valid once these locks are dropped.  A concurrent disconnect can
    free the hci_conn between the unlock and the dereference, causing a
    use-after-free read.
    
    The cancellation mechanism in hci_conn_del() cannot prevent this because
    hci_le_create_cis_pending() queues hci_create_cis_sync with data=NULL:
    
        hci_cmd_sync_queue(hdev, hci_create_cis_sync, NULL, NULL);
    
    While hci_conn_del() dequeues with data=conn:
    
        hci_cmd_sync_dequeue(hdev, NULL, conn, NULL);
    
    Since NULL != conn, the lookup in _hci_cmd_sync_lookup_entry() never
    matches, and the pending work item is not cancelled.
    
    Fix this by saving conn->conn_timeout into a local variable while the
    locks are still held, so the stale conn pointer is never dereferenced
    after unlock.
    
    This is the same class of bug as the one fixed by commit 035c25007c9e
    ("Bluetooth: hci_sync: Fix UAF on le_read_features_complete") which
    addressed the identical pattern in a different function.
    
    This vulnerability was identified using 0sec.ai, an open-source
    automated security auditing platform (https://github.com/0sec-labs).
    
    Fixes: c09b80be6ffc ("Bluetooth: hci_conn: Fix not waiting for HCI_EVT_LE_CIS_ESTABLISHED")
    Cc: stable@vger.kernel.org
    Reported-by: Doruk Tan Ozturk <doruk@0sec.ai>
    Signed-off-by: Doruk Tan Ozturk <doruk@0sec.ai>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    [doruk: adjust context for 6.6 \u2014 open-coded cmd struct instead of
     DEFINE_FLEX, num_cis tracked via cmd.cp.num_cis]
    Signed-off-by: Doruk Tan Ozturk <doruk@0sec.ai>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: hci_sync: reject oversized Broadcast Announcement prepend [+ + +]
Author: Yuqi Xu <xuyq21@lenovo.com>
Date:   Fri May 29 16:54:23 2026 +0800

    Bluetooth: hci_sync: reject oversized Broadcast Announcement prepend
    
    commit 5c65b96b549ea2dcfde497436bf9e048deb87758 upstream.
    
    Existing advertising instances can already hold the maximum extended
    advertising payload. When hci_adv_bcast_annoucement() prepends the
    Broadcast Announcement service data to that payload, the combined data
    may no longer fit in the temporary buffer used to rebuild the
    advertising data.
    
    Reject that case before copying the existing payload and report the
    failure through the device log. This keeps the existing advertising
    data intact and avoids overrunning the temporary buffer.
    
    Fixes: 5725bc608252 ("Bluetooth: hci_sync: Fix broadcast/PA when using an existing instance")
    Cc: stable@kernel.org
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Zhengchuan Liang <zcliangcn@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Assisted-by: Codex:GPT-5.4
    Signed-off-by: Yuqi Xu <xuyq21@lenovo.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: HIDP: fix missing length checks in hidp_input_report() [+ + +]
Author: Muhammad Bilal <meatuni001@gmail.com>
Date:   Wed May 20 18:56:43 2026 -0400

    Bluetooth: HIDP: fix missing length checks in hidp_input_report()
    
    commit 2a3ac9ee11dbb9845f3947cef4a79dba658cf6f6 upstream.
    
    hidp_input_report() reads keyboard and mouse payload data from an skb
    without first verifying that skb->len contains enough data.
    
    hidp_recv_intr_frame() pulls the 1-byte HIDP header before dispatching
    to hidp_input_report(). If a paired device sends a truncated packet,
    the handler reads beyond the valid skb data, resulting in an
    out-of-bounds read of skb data. The OOB bytes may be interpreted as
    phantom key presses or spurious mouse movement.
    
    Replace the open-coded length tracking and pointer arithmetic with
    skb_pull_data() calls. skb_pull_data() returns NULL if the requested
    bytes are not present, eliminating the need for a manual size variable
    and the separate skb->len guard.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Signed-off-by: Muhammad Bilal <meatuni001@gmail.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: ISO: fix UAF in iso_recv_frame [+ + +]
Author: Muhammad Bilal <meatuni001@gmail.com>
Date:   Wed May 27 04:59:17 2026 +0000

    Bluetooth: ISO: fix UAF in iso_recv_frame
    
    commit 47f23a259517abbdb8032c057a1e8a6bf3734878 upstream.
    
    iso_recv_frame reads conn->sk under iso_conn_lock but releases the lock
    before using sk, with no reference held. A concurrent iso_sock_kill()
    can free sk in that window, causing use-after-free on sk->sk_state and
    sock_queue_rcv_skb().
    
    Fix by replacing the bare pointer read with iso_sock_hold(conn), which
    calls sock_hold() while the spinlock is held, atomically elevating the
    refcount before the lock drops. Add a drop_put label so sock_put() is
    called on all exit paths where the hold succeeded.
    
    Fixes: ccf74f2390d60a2f9a75ef496d2564abb478f46a ("Bluetooth: Add BTPROTO_ISO socket type")
    Cc: stable@vger.kernel.org
    Signed-off-by: Muhammad Bilal <meatuni001@gmail.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: ISO: serialize iso_sock_clear_timer with socket lock [+ + +]
Author: Muhammad Bilal <meatuni001@gmail.com>
Date:   Wed May 27 04:59:18 2026 +0000

    Bluetooth: ISO: serialize iso_sock_clear_timer with socket lock
    
    commit 4b5f8e608749b7e8fa386c6e4301cf9272595859 upstream.
    
    iso_sock_close() calls iso_sock_clear_timer() before acquiring
    lock_sock(sk).
    
    iso_sock_clear_timer() reads iso_pi(sk)->conn twice without the
    socket lock held:
    
        if (!iso_pi(sk)->conn)
            return;
        cancel_delayed_work(&iso_pi(sk)->conn->timeout_work);
    
    Concurrently, iso_conn_del() executes under lock_sock(sk) and calls
    iso_chan_del(), which sets iso_pi(sk)->conn to NULL and may result in
    the final reference to the connection being dropped:
    
        CPU0                         CPU1
        ----                         ----
        iso_sock_clear_timer()
          if (conn != NULL) ...      lock_sock(sk)
                                       iso_chan_del()
                                       iso_pi(sk)->conn = NULL
          cancel_delayed_work(conn)  /* NULL deref or UAF */
    
    iso_pi(sk)->conn is not stable across the unlock window, causing a
    NULL pointer dereference or use-after-free.
    
    Serialize iso_sock_clear_timer() with the socket lock by moving it
    inside lock_sock()/release_sock(), matching the pattern used in
    iso_conn_del() and all other call sites.
    
    Fixes: ccf74f2390d60a2f9a75ef496d2564abb478f46a ("Bluetooth: Add BTPROTO_ISO socket type")
    Cc: stable@vger.kernel.org
    Signed-off-by: Muhammad Bilal <meatuni001@gmail.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: l2cap: clear chan->ident on ECRED reconfiguration success [+ + +]
Author: Zhenghang Xiao <kipreyyy@gmail.com>
Date:   Tue May 26 18:51:52 2026 +0800

    Bluetooth: l2cap: clear chan->ident on ECRED reconfiguration success
    
    [ Upstream commit 00e1950716c6ed67d74777b2db286b0fa23b4be9 ]
    
    l2cap_ecred_reconf_rsp() returns early on success without clearing
    chan->ident. Every other L2CAP response handler (l2cap_ecred_conn_rsp,
    l2cap_le_connect_rsp, l2cap_config_rsp) clears chan->ident after a
    successful transaction to prevent the channel from matching subsequent
    responses with the recycled ident value.
    
    A remote attacker that completed a reconfiguration as the peer can
    replay a failure response with the stale ident, causing the kernel to
    match and destroy the already-established channel via
    l2cap_chan_del(chan, ECONNRESET).
    
    Clear chan->ident for all matching channels on success, and harden the
    failure path by using l2cap_chan_hold_unless_zero() consistent with
    other L2CAP handlers (l2cap_le_command_rej, __l2cap_get_chan_by_ident).
    
    Fixes: 15f02b910562 ("Bluetooth: L2CAP: Add initial code for Enhanced Credit Based Mode")
    Signed-off-by: Zhenghang Xiao <kipreyyy@gmail.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: L2CAP: fix chan ref leak in l2cap_chan_timeout() on !conn [+ + +]
Author: Siwei Zhang <oss@fourdim.xyz>
Date:   Wed May 20 22:30:36 2026 -0400

    Bluetooth: L2CAP: fix chan ref leak in l2cap_chan_timeout() on !conn
    
    commit 9dbd84990394c51f5cee1e8871bb5ff8af5ed939 upstream.
    
    __set_chan_timer() takes a l2cap_chan reference via l2cap_chan_hold()
    before scheduling the delayed work.  The normal path in
    l2cap_chan_timeout() drops this reference with l2cap_chan_put() at the
    end, but the early return when chan->conn is NULL skips the put,
    leaking the reference.
    
    Add the missing l2cap_chan_put() before the early return.
    
    Fixes: adf0398cee86 ("Bluetooth: l2cap: fix null-ptr-deref in l2cap_chan_timeout")
    Cc: stable@vger.kernel.org
    Signed-off-by: Siwei Zhang <oss@fourdim.xyz>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: L2CAP: Fix possible crash on l2cap_ecred_conn_rsp [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Mon May 11 12:09:42 2026 -0400

    Bluetooth: L2CAP: Fix possible crash on l2cap_ecred_conn_rsp
    
    [ Upstream commit 41c2713b204e6cb6a94587bc6bf6935107df5479 ]
    
    If dcid is received for an already-assigned destination CID the spec
    requires that both channels to be discarded, but calling l2cap_chan_del
    may invalidate the tmp cursor created by list_for_each_entry_safe and
    in fact it is the wrong procedure as the chan->dcid may be assigned
    previously it really needs to be disconnected.
    
    Calling l2cap_chan_clone directly may still lead to l2cap_chan_del so
    instead schedule l2cap_chan_timeout with delay 0 to close the channel
    asynchronously.
    
    Fixes: 15f02b910562 ("Bluetooth: L2CAP: Add initial code for Enhanced Credit Based Mode")
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: L2CAP: reject BR/EDR signaling packets over MTUsig [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Thu May 21 10:45:17 2026 -0400

    Bluetooth: L2CAP: reject BR/EDR signaling packets over MTUsig
    
    commit dd214733544427587a95f66dbf3adff072568990 upstream.
    
    net/bluetooth/l2cap_core.c:l2cap_sig_channel() accepts BR/EDR
    signaling packets up to the channel MTU and dispatches each command
    without enforcing the signaling MTU (MTUsig). A Bluetooth BR/EDR peer
    within radio range can send a fixed-channel CID 0x0001 packet that is
    larger than MTUsig and contains many L2CAP_ECHO_REQ commands before
    pairing. In a real-radio stock-kernel run, one 681-byte signaling
    packet containing 168 zero-length ECHO_REQ commands made the target
    transmit 168 ECHO_RSP frames over about 220 ms.
    
    Impact: a Bluetooth BR/EDR peer within radio range, before pairing, can
    force 168 ECHO_RSP frames from one 681-byte fixed-channel signaling
    packet containing packed ECHO_REQ commands.
    
    Define Linux's BR/EDR signaling MTU as the spec minimum of 48 bytes and
    reject any larger signaling packet with one L2CAP_COMMAND_REJECT_RSP
    carrying L2CAP_REJ_MTU_EXCEEDED before any command is dispatched.
    
    The Bluetooth Core spec wording for MTUExceeded says the reject
    identifier shall match the first request command in the packet, and
    that packets containing only responses shall be silently discarded.
    Linux intentionally deviates from that prescription: silently
    discarding desynchronizes the peer because the remote stack never
    learns its responses were dropped, and locating the first request
    command requires walking command headers past MTUsig, i.e. processing
    bytes from a packet we have already decided is too large to process.
    We therefore always emit one reject and use the identifier from the
    first command header, a single fixed-offset byte read.
    
    The unrestricted BR/EDR signaling parser and ECHO_REQ response path both
    trace to the initial git import; no later introducing commit is
    available for a Fixes tag.
    
    Cc: stable@vger.kernel.org
    Suggested-by: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
    Link: https://lore.kernel.org/r/20260518002800.1361430-1-michael.bommarito@gmail.com
    Link: https://lore.kernel.org/r/20260520135034.1060859-1-michael.bommarito@gmail.com
    Link: https://lore.kernel.org/r/20260521000555.3712030-1-michael.bommarito@gmail.com
    Assisted-by: Claude:claude-opus-4-7
    Assisted-by: Codex:gpt-5-5-xhigh
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: L2CAP: use chan timer to close channels in cleanup_listen() [+ + +]
Author: Siwei Zhang <oss@fourdim.xyz>
Date:   Wed May 20 22:12:20 2026 -0400

    Bluetooth: L2CAP: use chan timer to close channels in cleanup_listen()
    
    commit 8c8e620467a7b51562dbcefbd1f09f288d7d710d upstream.
    
    l2cap_chan_close() removes the channel from conn->chan_l, which
    must be done under conn->lock.  cleanup_listen() runs under the
    parent sk_lock, so acquiring conn->lock would invert the
    established conn->lock -> chan->lock -> sk_lock order.
    
    Instead of calling l2cap_chan_close() directly, schedule
    l2cap_chan_timeout with delay 0 to close the channel
    asynchronously.  The timeout handler already acquires conn->lock
    and chan->lock in the correct order.
    
    The timer is only armed when chan->conn is still set: if it is
    already NULL, l2cap_conn_del() has already processed this channel
    (l2cap_chan_del + l2cap_sock_teardown_cb + l2cap_sock_close_cb),
    so there is nothing left to do.  If l2cap_conn_del() races in
    after the timer is armed, __clear_chan_timer() inside
    l2cap_chan_del() cancels it; if the timer has already fired, the
    handler returns harmlessly because chan->conn was cleared.
    
    Fixes: 3df91ea20e74 ("Bluetooth: Revert to mutexes from RCU list")
    Cc: <stable@vger.kernel.org> # 0b58004: Bluetooth: fix UAF in l2cap_sock_cleanup_listen() vs l2cap_conn_del()
    Signed-off-by: Siwei Zhang <oss@fourdim.xyz>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: MGMT: Fix backward compatibility with userspace [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Tue Jun 2 16:48:34 2026 -0400

    Bluetooth: MGMT: Fix backward compatibility with userspace
    
    [ Upstream commit 149324fc762c2a7acef9c26790566f81f475e51f ]
    
    bluetoothd has a bug with makes it send extra bytes as part of
    MGMT_OP_ADD_EXT_ADV_DATA which are now being checked to be the
    exact the expected length, relax this so only when the expected
    length is greater than the data length to cause an error since
    that would result in accessing invalid memory, otherwise just
    ignore the extra bytes.
    
    Link: https://lore.kernel.org/linux-bluetooth/20260602204749.210857-1-luiz.dentz@gmail.com/T/#u
    Fixes: d3f7d17960ed ("Bluetooth: MGMT: validate Add Extended Advertising Data length")
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: MGMT: validate advertising TLV before type checks [+ + +]
Author: Zhang Cen <rollkingzzc@gmail.com>
Date:   Thu May 28 17:45:06 2026 +0800

    Bluetooth: MGMT: validate advertising TLV before type checks
    
    [ Upstream commit de23fb62259aa01d294f77238ae3b835eb674413 ]
    
    tlv_data_is_valid() reads each advertising data field length from
    data[i], then inspects data[i + 1] for managed EIR types before
    checking that the current field still fits inside the supplied buffer.
    
    A malformed field whose length byte is the last byte of the buffer can
    therefore make the parser read one byte past the advertising data.
    
    KASAN reported the following when a malformed MGMT_OP_ADD_ADVERTISING
    request reached that path:
    
      BUG: KASAN: vmalloc-out-of-bounds in tlv_data_is_valid()
      Read of size 1
      Call trace:
        tlv_data_is_valid()
        add_advertising()
        hci_mgmt_cmd()
        hci_sock_sendmsg()
    
    Move the existing element-length check before any type-octet inspection
    so each non-empty element is proven to contain its type byte before the
    parser looks at data[i + 1].
    
    Fixes: 2bb36870e8cb ("Bluetooth: Unify advertising instance flags check")
    Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>
    Signed-off-by: Zhang Cen <rollkingzzc@gmail.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: RFCOMM: hold listener socket in rfcomm_connect_ind() [+ + +]
Author: Zhang Cen <rollkingzzc@gmail.com>
Date:   Thu May 28 15:56:41 2026 +0800

    Bluetooth: RFCOMM: hold listener socket in rfcomm_connect_ind()
    
    [ Upstream commit 43c441edacf953b39517a44f5e5e10a93618b226 ]
    
    rfcomm_get_sock_by_channel() scans rfcomm_sk_list under the list lock,
    but returns the selected listener after dropping that lock without
    taking a reference. rfcomm_connect_ind() then locks the listener,
    queues a child socket on it, and may notify it after unlocking it.
    
    The buggy scenario involves two paths, with each column showing the
    order within that path:
    
    rfcomm_connect_ind():            listener close:
      1. Find parent in              1. close() enters
         rfcomm_get_sock_by_channel()   rfcomm_sock_release().
      2. Drop rfcomm_sk_list.lock    2. rfcomm_sock_shutdown()
         without pinning parent.        closes the listener.
      3. Call lock_sock(parent) and  3. rfcomm_sock_kill()
         bt_accept_enqueue(parent,      unlinks and puts parent.
         sk, true).
      4. Read parent flags and may   4. parent can be freed.
         call sk_state_change().
    
    If close wins the race, parent can be freed before
    rfcomm_connect_ind() reaches lock_sock(), bt_accept_enqueue(), or the
    deferred-setup callback.
    
    Take a reference on the listener before leaving rfcomm_sk_list.lock.
    After lock_sock() succeeds, recheck that it is still in BT_LISTEN
    before queueing a child, cache the deferred-setup bit while the parent
    is locked, and drop the reference after the last parent use.
    
    KASAN reported a slab-use-after-free in lock_sock_nested() from
    rfcomm_connect_ind(), with the freeing stack going through
    rfcomm_sock_kill() and rfcomm_sock_release().
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Zhang Cen <rollkingzzc@gmail.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: RFCOMM: validate skb length in MCC handlers [+ + +]
Author: SeungJu Cheon <suunj1331@gmail.com>
Date:   Mon May 25 20:04:43 2026 +0900

    Bluetooth: RFCOMM: validate skb length in MCC handlers
    
    [ Upstream commit 23882b828c3c8c51d0c946446a396b10abb3b16b ]
    
    The RFCOMM MCC handlers cast skb->data to protocol-specific structs
    without validating skb->len first. A malicious remote device can send
    truncated MCC frames and trigger out-of-bounds reads in these handlers.
    
    Fix this by using skb_pull_data() to validate and access the required
    data before dereferencing it.
    
    rfcomm_recv_rpn() requires special handling since ETSI TS 07.10 allows
    1-byte RPN requests. Handle this by validating only the DLCI byte first,
    and validating the full struct only when len > 1.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Suggested-by: Muhammad Bilal <meatuni001@gmail.com>
    Signed-off-by: SeungJu Cheon <suunj1331@gmail.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bnxt_en: Fix NULL pointer dereference [+ + +]
Author: Kyle Meyer <kyle.meyer@hpe.com>
Date:   Fri Jun 5 17:25:24 2026 -0500

    bnxt_en: Fix NULL pointer dereference
    
    commit d930276f2cddd0b7294cac7a8fe7b877f6d9e08d upstream.
    
    PCIe errors detected by a Root Port or Downstream Port cause error
    recovery services to run on all subordinate devices regardless of
    administrative state.
    
    The .error_detected() callback, bnxt_io_error_detected(), disables
    and synchronizes IRQs via bnxt_disable_int_sync(), which calls
    bnxt_cp_num_to_irq_num() to map completion rings to IRQs using
    bp->bnapi.
    
    Since bp->bnapi is allocated on NIC open and freed on NIC close, PCIe
    error recovery on a closed NIC can dereference a NULL pointer.
    
    Check if bp->bnapi is NULL before disabling and synchronizing IRQs.
    
    Fixes: e5811b8c09df ("bnxt_en: Add IRQ remapping logic.")
    Cc: stable@vger.kernel.org
    Signed-off-by: Kyle Meyer <kyle.meyer@hpe.com>
    Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
    Link: https://patch.msgid.link/aiNM1CY2-StPilxW@hpe.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
bonding: refuse to enslave CAN devices [+ + +]
Author: Oliver Hartkopp <socketcan@hartkopp.net>
Date:   Tue May 26 21:33:19 2026 +0200

    bonding: refuse to enslave CAN devices
    
    [ Upstream commit 8ba68464e4787b6a7ec938826e16124df20fd23d ]
    
    syzbot reported a kernel paging request crash in
    can_rx_unregister() inside net/can/af_can.c. The crash occurs
    because a virtual CAN device (vxcan) is being enslaved to a
    bonding master.
    
    During the enslavement process, the bonding driver mutates
    and modifies the network device states to fit an Ethernet-like
    aggregation model. However, CAN devices operate on a completely
    different Layer 2 architecture, relying on the CAN mid-layer
    private data structure (can_ml_priv) instead of standard
    Ethernet structures. Since bonding does not initialize or
    maintain these CAN structures, subsequent operations on the
    half-enslaved interface (such as closing associated sockets
    via isotp_release) lead to a null-pointer dereference when
    accessing the CAN receiver lists.
    
    Bonding CAN interfaces is architecturally invalid as CAN lacks
    MAC addresses, ARP capabilities, and standard Ethernet
    link-layer mechanisms. While generic loopback devices are
    blocked globally in net/core/dev.c, virtual CAN devices
    bypass this check because they do not carry the IFF_LOOPBACK
    flag, despite acting as local software-loopbacks.
    
    Fix this by explicitly blocking network devices of type
    ARPHRD_CAN from being enslaved at the very beginning of
    bond_enslave(). This prevents illegal state mutations,
    eliminates the resulting KASAN crashes, and avoids potential
    memory leaks from incomplete socket cleanups.
    
    As the CAN support has been added a long time after bonding
    the Fixes-tag points to the introduction of ARPHRD_CAN that
    would have needed a specific handling in bonding_main.c.
    
    Fixes: cd05acfe65ed ("[CAN]: Allocate protocol numbers for PF_CAN")
    Reported-by: syzbot+8ed98cbd0161632bce95@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=8ed98cbd0161632bce95
    Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
    Acked-by: Jay Vosburgh <jv@jvosburgh.net>
    Link: https://patch.msgid.link/20260526-bonding-candev-v1-1-ba1df400918a@hartkopp.net
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf: Free reuseport cBPF prog after RCU grace period. [+ + +]
Author: Kuniyuki Iwashima <kuniyu@google.com>
Date:   Sun Apr 26 01:26:43 2026 +0000

    bpf: Free reuseport cBPF prog after RCU grace period.
    
    [ Upstream commit 18fc650ccd7fe3376eca89203668cfb8268f60df ]
    
    Eulgyu Kim reported the splat below with a repro. [0]
    
    The repro sets up a UDP reuseport group with a cBPF prog and
    replaces it with a new one while another thread is sending
    a UDP packet to the group.
    
    The reuseport prog is freed by sk_reuseport_prog_free().
    bpf_prog_put() is called for "e"BPF prog to destruct through
    multiple stages while cBPF prog is freed immediately by
    bpf_release_orig_filter() and bpf_prog_free().
    
    If a reuseport prog is detached from the setsockopt() path
    (reuseport_attach_prog() or reuseport_detach_prog()),
    sk_reuseport_prog_free() is called without waiting for RCU
    readers to complete, resulting in various bugs.
    
    Let's defer freeing the reuseport cBPF prog after one RCU
    grace period.
    
    Note "e"BPF prog is safe as is unless the fast path starts
    to touch fields destroyed in bpf_prog_put_deferred() and
    __bpf_prog_put_noref().
    
    [0]:
    BUG: KASAN: vmalloc-out-of-bounds in reuseport_select_sock+0xedc/0x1220 net/core/sock_reuseport.c:596
    Read of size 4 at addr ffffc9000051e004 by task slowme/10208
    CPU: 6 UID: 1000 PID: 10208 Comm: slowme Not tainted 7.0.0-geb7ac95ff75e #32 PREEMPT(full)
    Hardware name: QEMU Ubuntu 24.04 PC v2 (i440FX + PIIX, arch_caps fix, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    Call Trace:
     <IRQ>
     dump_stack_lvl+0xe8/0x150 lib/dump_stack.c:120
     print_address_description mm/kasan/report.c:378 [inline]
     print_report+0xca/0x240 mm/kasan/report.c:482
     kasan_report+0x118/0x150 mm/kasan/report.c:595
     reuseport_select_sock+0xedc/0x1220 net/core/sock_reuseport.c:596
     udp4_lib_lookup2+0x3bc/0x950 net/ipv4/udp.c:495
     __udp4_lib_lookup+0x768/0xe20 net/ipv4/udp.c:723
     __udp4_lib_lookup_skb+0x297/0x390 net/ipv4/udp.c:752
     __udp4_lib_rcv+0x1312/0x2620 net/ipv4/udp.c:2752
     ip_protocol_deliver_rcu+0x282/0x440 net/ipv4/ip_input.c:207
     ip_local_deliver_finish+0x3bb/0x6f0 net/ipv4/ip_input.c:241
     NF_HOOK+0x30c/0x3a0 include/linux/netfilter.h:318
     NF_HOOK+0x30c/0x3a0 include/linux/netfilter.h:318
     __netif_receive_skb_one_core net/core/dev.c:6181 [inline]
     __netif_receive_skb net/core/dev.c:6294 [inline]
     process_backlog+0xaa4/0x1960 net/core/dev.c:6645
     __napi_poll+0xae/0x340 net/core/dev.c:7709
     napi_poll net/core/dev.c:7772 [inline]
     net_rx_action+0x5d7/0xf50 net/core/dev.c:7929
     handle_softirqs+0x22b/0x870 kernel/softirq.c:622
     do_softirq+0x76/0xd0 kernel/softirq.c:523
     </IRQ>
     <TASK>
     __local_bh_enable_ip+0xf8/0x130 kernel/softirq.c:450
     local_bh_enable include/linux/bottom_half.h:33 [inline]
     rcu_read_unlock_bh include/linux/rcupdate.h:924 [inline]
     __dev_queue_xmit+0x1dd7/0x3710 net/core/dev.c:4890
     neigh_output include/net/neighbour.h:556 [inline]
     ip_finish_output2+0xca9/0x1070 net/ipv4/ip_output.c:237
     NF_HOOK_COND include/linux/netfilter.h:307 [inline]
     ip_output+0x29f/0x450 net/ipv4/ip_output.c:438
     ip_send_skb+0x45/0xc0 net/ipv4/ip_output.c:1508
     udp_send_skb+0xb04/0x1510 net/ipv4/udp.c:1195
     udp_sendmsg+0x1a71/0x2350 net/ipv4/udp.c:1485
     sock_sendmsg_nosec net/socket.c:727 [inline]
     __sock_sendmsg net/socket.c:742 [inline]
     __sys_sendto+0x554/0x680 net/socket.c:2206
     __do_sys_sendto net/socket.c:2213 [inline]
     __se_sys_sendto net/socket.c:2209 [inline]
     __x64_sys_sendto+0xde/0x100 net/socket.c:2209
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0x160/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x415a2d
    Code: b3 66 2e 0f 1f 84 00 00 00 00 00 66 90 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007f6bc31e41e8 EFLAGS: 00000212 ORIG_RAX: 000000000000002c
    RAX: ffffffffffffffda RBX: 00007f6bc31e4cdc RCX: 0000000000415a2d
    RDX: 0000000000000001 RSI: 00007f6bc31e421f RDI: 0000000000000003
    RBP: 00007f6bc31e4240 R08: 00007f6bc31e4220 R09: 0000000000000010
    R10: 0000000000000000 R11: 0000000000000212 R12: 00007f6bc31e46c0
    R13: ffffffffffffffb8 R14: 0000000000000000 R15: 00007ffc9b0d70b0
     </TASK>
    
    Fixes: 538950a1b752 ("soreuseport: setsockopt SO_ATTACH_REUSEPORT_[CE]BPF")
    Reported-by: Eulgyu Kim <eulgyukim@snu.ac.kr>
    Reported-by: Taeyang Lee <0wn@theori.io>
    Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20260426012647.3233119-1-kuniyu@google.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: sockmap: fix tail fragment offset in bpf_msg_push_data [+ + +]
Author: Yuqi Xu <xuyq21@lenovo.com>
Date:   Wed May 27 11:48:15 2026 +0800

    bpf: sockmap: fix tail fragment offset in bpf_msg_push_data
    
    commit f72eed9b84fb771019a955908132410a9ba9ea3f upstream.
    
    When bpf_msg_push_data() inserts data in the middle of a scatterlist
    entry, it splits the original entry into a left fragment and a right
    fragment.
    
    The right fragment offset is page-local, but the code advances it with
    `start`, which is the message-global insertion point. For inserts into a
    non-first SG entry, this over-advances the offset and leaves the split
    layout inconsistent.
    
    Advance the right fragment offset by the fragment-local delta,
    `start - offset`, which matches the length removed from the front of the
    original entry.
    
    Fixes: 6fff607e2f14 ("bpf: sk_msg program helper bpf_msg_push_data")
    Cc: stable@kernel.org
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Zhengchuan Liang <zcliangcn@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Signed-off-by: Yuqi Xu <xuyq21@lenovo.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Link: https://patch.msgid.link/8b129d10566aa3eb43f61a8f9757bcf51707d324.1779636774.git.xuyq21@lenovo.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
cgroup/cpuset: Reset DL migration state on can_attach() failure [+ + +]
Author: Guopeng Zhang <zhangguopeng@kylinos.cn>
Date:   Fri May 22 09:30:46 2026 -0400

    cgroup/cpuset: Reset DL migration state on can_attach() failure
    
    [ Upstream commit 4a39eda5fdd867fc39f3c039714dd432cee00268 ]
    
    cpuset_can_attach() accumulates temporary SCHED_DEADLINE migration
    state in the destination cpuset while walking the taskset.
    
    If a later task_can_attach() or security_task_setscheduler() check
    fails, cgroup_migrate_execute() treats cpuset as the failing subsystem
    and does not call cpuset_cancel_attach() for it. The partially
    accumulated state is then left behind and can be consumed by a later
    attach, corrupting cpuset DL task accounting and pending DL bandwidth
    accounting.
    
    Reset the pending DL migration state from the common error exit when
    ret is non-zero. Successful can_attach() keeps the state for
    cpuset_attach() or cpuset_cancel_attach().
    
    Fixes: 2ef269ef1ac0 ("cgroup/cpuset: Free DL BW in case can_attach() fails")
    Cc: stable@vger.kernel.org # v6.10+
    Signed-off-by: Guopeng Zhang <zhangguopeng@kylinos.cn>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Reviewed-by: Chen Ridong <chenridong@huaweicloud.com>
    Reviewed-by: Waiman Long <longman@redhat.com>
    [ omitted upstream context line `cs->dl_bw_cpu = cpu;` ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
clk: qcom: dispcc-sc8280xp: Don't park mdp_clk_src at registration time [+ + +]
Author: Pengyu Luo <mitltlatltl@gmail.com>
Date:   Tue Mar 3 23:01:51 2026 +0800

    clk: qcom: dispcc-sc8280xp: Don't park mdp_clk_src at registration time
    
    [ Upstream commit 5285b046757844435d1db96c1b5c3a6621b2979a ]
    
    Parking disp{0,1}_cc_mdss_mdp_clk_src clk broke simplefb on HUAWEI
    Gaokun3, the image will stuck at grey for seconds until msm takes
    over framebuffer. Use clk_rcg2_shared_no_init_park_ops to skip it.
    
    Signed-off-by: Pengyu Luo <mitltlatltl@gmail.com>
    Tested-by: Jérôme de Bretagne <jerome.debretagne@gmail.com>
    Fixes: 01a0a6cc8cfd ("clk: qcom: Park shared RCGs upon registration")
    Link: https://lore.kernel.org/r/20260303150152.90685-1-mitltlatltl@gmail.com
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
comedi: comedi_test: fix check for valid scan_begin_src in waveform_ai_cmdtest() [+ + +]
Author: Ian Abbott <abbotti@mev.co.uk>
Date:   Wed Apr 22 17:21:19 2026 +0100

    comedi: comedi_test: fix check for valid scan_begin_src in waveform_ai_cmdtest()
    
    commit 542f5248cb481073203e0dadab5bcbd28aeae308 upstream.
    
    Commit 783ddaebd397 ("staging: comedi: comedi_test: support
    scan_begin_src == TRIG_FOLLOW") neglected to add a test that
    `scan_begin_src` has only one bit set.  The allowed values are
    `TRIG_FOLLOW` and `TRIG_TIMER`, but the code incorrectly also allows
    `TRIG_FOLLOW | TRIG_TIMER`.  Add a call to
    `comedi_check_trigger_is_unique()` to check that only one trigger source
    bit is set.
    
    Fixes: 783ddaebd397 ("staging: comedi: comedi_test: support scan_begin_src == TRIG_FOLLOW")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
    Link: https://patch.msgid.link/20260422162138.36003-1-abbotti@mev.co.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

comedi: comedi_test: Fix limiting of convert_arg in waveform_ai_cmdtest() [+ + +]
Author: Ian Abbott <abbotti@mev.co.uk>
Date:   Wed Apr 22 15:46:37 2026 +0100

    comedi: comedi_test: Fix limiting of convert_arg in waveform_ai_cmdtest()
    
    commit 8a3bee801d420be8a7a0bae4a26547b353b8fe22 upstream.
    
    The function checks and possibly modifies the description of an
    asynchronous command to be run on the analog input subdevice of a comedi
    device attached to the "comedi_test" driver, returning 0 if no
    modifications were required, or a positive value that indicates which
    step of the checking process it failed on.  Step 4 fixes up various
    argument values for various trigger sources.
    
    There are two bugs in the fixing up of the `convert_arg` value to keep
    the `scan_begin_arg` value within the range of `unsigned int` when
    `scan_begin_src` and `convert_src` both have the value `TRIG_TIMER`,
    which indicates that the corresponding `_arg` values hold a time period
    in nanoseconds.  The code also uses `scan_end_arg` which hold the number
    of "conversions" within each "scan".  The goal is to end up with the
    scan period being less than or equal to the convert period multiplied by
    the number of conversions per scan.  It intends to do that by clamping
    the `convert_arg` value to a maximum value of `UINT_MAX / scan_end_arg`
    rounded down to a multiple of 1000 (`NSEC_PER_USEC`).
    
    (The rounding from nanoseconds to microseconds is because the driver is
    modelling a device that uses a 1 MHz clock for timing.  This is partly
    because that is a more typical timing base for real hardware devices
    driven by comedi, and partly because the driver used to use `struct
    timeval` internally.)
    
    The first bug is that the code checks if `scan_begin_arg == TRIG_TIMER`
    when it should be checking if `scan_begin_src == TRIG_TIMER`.  The
    bugged check will always fail because if `scan_begin_src == TRIG_TIMER`,
    then `scan_begin_arg` will be at least 1000 (`NSEC_PER_USEC`), otherwise
    `scan_begin_src == TRIG_FOLLOW` and `scan_begin_arg` will be 0.  (N.B
    `TRIG_TIMER` is defined as `0x10`.)  The second bug is that is rounding
    the maximum value down to a multiple of 1000000000 (`NSEC_PER_SEC`)
    instead of 1000 (`NSEC_PER_USEC`), however this bug is not reached due
    to the first bug.  This patch fixes both bugs.
    
    Fixes: 783ddaebd397 ("staging: comedi: comedi_test: support scan_begin_src == TRIG_FOLLOW")
    Fixes: 5afdcad2f818 ("staging: comedi: comedi_test: limit maximum convert_arg")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
    Link: https://patch.msgid.link/20260422144637.27692-1-abbotti@mev.co.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
counter: Fix refcount leak in counter_alloc() error path [+ + +]
Author: Guangshuo Li <lgs201920130244@gmail.com>
Date:   Mon Apr 13 21:46:04 2026 +0800

    counter: Fix refcount leak in counter_alloc() error path
    
    commit d9eeb0ea0d2de658663bfaa9c26eccdd8fd64440 upstream.
    
    After device_initialize(), the lifetime of the embedded struct device
    is expected to be managed through the device core reference counting.
    
    In counter_alloc(), if dev_set_name() fails after device_initialize(),
    the error path removes the chrdev, frees the ID, and frees the backing
    allocation directly instead of releasing the device reference with
    put_device(). This bypasses the normal device lifetime rules and may
    leave the reference count of the embedded struct device unbalanced,
    resulting in a refcount leak.
    
    The issue was identified by a static analysis tool I developed and
    confirmed by manual review.
    
    Fix this by using put_device() in the dev_set_name() failure path and
    let counter_device_release() handle the final cleanup.
    
    Fixes: 4da08477ea1f ("counter: Set counter device name")
    Cc: stable@vger.kernel.org
    Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
    Link: https://lore.kernel.org/r/20260413134604.2861772-1-lgs201920130244@gmail.com
    Signed-off-by: William Breathitt Gray <wbg@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Disable -Wattribute-alias for clang-23 and newer [+ + +]
Author: Nathan Chancellor <nathan@kernel.org>
Date:   Sat May 16 04:34:14 2026 +0900

    Disable -Wattribute-alias for clang-23 and newer
    
    commit 175db11786bde9061db526bf1ac5107d915f5163 upstream.
    
    Clang recently added support for -Wattribute-alias [1], which results in
    the same warnings that necessitated commit bee20031772a ("disable
    -Wattribute-alias warning for SYSCALL_DEFINEx()") for GCC.
    
      kernel/time/itimer.c:325:1: error: alias and aliasee have different types 'long (unsigned int)' and 'long (typeof (__builtin_choose_expr((__builtin_types_compatible_p(typeof ((unsigned int)0), typeof (0LL)) || __builtin_types_compatible_p(typeof ((unsigned int)0), typeof (0ULL))), 0LL, 0L)))' (aka 'long (long)') [-Werror,-Wattribute-alias]
        325 | SYSCALL_DEFINE1(alarm, unsigned int, seconds)
            | ^
      include/linux/syscalls.h:225:36: note: expanded from macro 'SYSCALL_DEFINE1'
        225 | #define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__)
            |                                    ^
      include/linux/syscalls.h:236:2: note: expanded from macro 'SYSCALL_DEFINEx'
        236 |         __SYSCALL_DEFINEx(x, sname, __VA_ARGS__)
            |         ^
      include/linux/syscalls.h:251:18: note: expanded from macro '__SYSCALL_DEFINEx'
        251 |                 __attribute__((alias(__stringify(__se_sys##name))));    \
            |                                ^
      kernel/time/itimer.c:325:1: note: aliasee is declared here
      include/linux/syscalls.h:225:36: note: expanded from macro 'SYSCALL_DEFINE1'
        225 | #define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__)
            |                                    ^
      include/linux/syscalls.h:236:2: note: expanded from macro 'SYSCALL_DEFINEx'
        236 |         __SYSCALL_DEFINEx(x, sname, __VA_ARGS__)
            |         ^
      include/linux/syscalls.h:255:18: note: expanded from macro '__SYSCALL_DEFINEx'
        255 |         asmlinkage long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__))  \
            |                         ^
      <scratch space>:16:1: note: expanded from here
         16 | __se_sys_alarm
            | ^
    
    Disable the warnings in the same way for clang-23 and newer. Disable the
    warning about unknown warning options to avoid breaking the build for
    versions of clang-23 that do not have -Wattribute-alias, such as ones
    deployed by vendors like Android or CI systems or when bisecting LLVM
    between llvmorg-23-init and release/23.x.
    
    Cc: stable@vger.kernel.org
    Closes: https://github.com/ClangBuiltLinux/linux/issues/2163
    Link: https://github.com/llvm/llvm-project/commit/40da6920a0d71d49dfa2392b09153600b0759f5e [1]
    Link: https://patch.msgid.link/20260515-syscall-disable-attribute-alias-for-clang-v1-1-9a9d95d41df6@kernel.org
    [nathan: Drop arch/riscv hunk in older trees and address conflicts]
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dm cache policy smq: check allocation under invalidate lock [+ + +]
Author: Guangshuo Li <lgs201920130244@gmail.com>
Date:   Fri May 29 23:57:45 2026 +0800

    dm cache policy smq: check allocation under invalidate lock
    
    [ Upstream commit d3f0a606b9f278ece8a0df626ded9c4044071235 ]
    
    commit 2d1f7b65f5de ("dm cache policy smq: fix missing locks in
    invalidating cache blocks") added mq->lock around the destructive part of
    smq_invalidate_mapping(), but left the e->allocated check outside the
    critical section.
    
    That leaves a check-then-act race. Two concurrent invalidators can both
    observe e->allocated as true before either of them takes mq->lock. The
    first invalidator that acquires the lock removes the entry from the
    queues and hash table and then calls free_entry(), which clears
    e->allocated and puts the entry back on the free list. The second
    invalidator can then acquire mq->lock and continue with the stale result
    of the unlocked check.
    
    This can corrupt the SMQ queues or hash table by deleting an entry that
    is no longer on those structures. It can also hit the allocation check in
    free_entry() when the same entry is freed again.
    
    Move the allocation check under mq->lock so the predicate and the
    destructive operations are serialized by the same lock.
    
    Fixes: 2d1f7b65f5de ("dm cache policy smq: fix missing locks in invalidating cache blocks")
    Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
driver core: reject devices with unregistered buses [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Thu Apr 30 11:17:18 2026 +0200

    driver core: reject devices with unregistered buses
    
    commit 36f35b8df6972167102a1c3d4361e0afb6a84534 upstream.
    
    Trying to register a device on a bus which has not yet been registered
    used to trigger a NULL-pointer dereference, but since the const bus
    structure rework registration instead succeeds without the device being
    added to the bus.
    
    This specifically means that the device will never bind to a driver and
    that the bus sysfs attributes are not created (i.e. as if the device had
    no bus).
    
    Reject devices with unregistered buses to catch any callers that get
    the ordering wrong and to handle bus registration failures more
    gracefully.
    
    Fixes: 5221b82d46f2 ("driver core: bus: bus_add/probe/remove_device() cleanups")
    Cc: stable@vger.kernel.org      # 6.3
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20260430091718.230228-1-johan@kernel.org
    Signed-off-by: Danilo Krummrich <dakr@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm, fbcon, vga_switcheroo: Avoid race condition in fbcon setup [+ + +]
Author: Thomas Zimmermann <tzimmermann@suse.de>
Date:   Thu May 28 21:18:17 2026 +0800

    drm, fbcon, vga_switcheroo: Avoid race condition in fbcon setup
    
    [ Upstream commit eb76d0f5553575599561010f24c277cc5b31d003 ]
    
    Protect vga_switcheroo_client_fb_set() with console lock. Avoids OOB
    access in fbcon_remap_all(). Without holding the console lock the call
    races with switching outputs.
    
    VGA switcheroo calls fbcon_remap_all() when switching clients. The fbcon
    function uses struct fb_info.node, which is set by register_framebuffer().
    As the fb-helper code currently sets up VGA switcheroo before registering
    the framebuffer, the value of node is -1 and therefore not a legal value.
    For example, fbcon uses the value within set_con2fb_map() [1] as an index
    into an array.
    
    Moving vga_switcheroo_client_fb_set() after register_framebuffer() can
    result in VGA switching that does not switch fbcon correctly.
    
    Therefore move vga_switcheroo_client_fb_set() under fbcon_fb_registered(),
    which already holds the console lock. Fbdev calls fbcon_fb_registered()
    from within register_framebuffer(). Serializes the helper with VGA
    switcheroo's call to fbcon_remap_all().
    
    Although vga_switcheroo_client_fb_set() takes an instance of struct fb_info
    as parameter, it really only needs the contained fbcon state. Moving the
    call to fbcon initialization is therefore cleaner than before. Only amdgpu,
    i915, nouveau and radeon support vga_switcheroo. For all other drivers,
    this change does nothing.
    
    Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
    Link: https://elixir.bootlin.com/linux/v6.17/source/drivers/video/fbdev/core/fbcon.c#L2942 # [1]
    Fixes: 6a9ee8af344e ("vga_switcheroo: initial implementation (v15)")
    Acked-by: Javier Martinez Canillas <javierm@redhat.com>
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: dri-devel@lists.freedesktop.org
    Cc: nouveau@lists.freedesktop.org
    Cc: amd-gfx@lists.freedesktop.org
    Cc: linux-fbdev@vger.kernel.org
    Cc: <stable@vger.kernel.org> # v2.6.34+
    Link: https://patch.msgid.link/20251105161549.98836-1-tzimmermann@suse.de
    [ Minor context conflict resolved. ]
    Signed-off-by: Wenshan Lan <jetlan9@163.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amd/display: Clamp HDMI HDCP2 rx_id_list read to buffer size [+ + +]
Author: Harry Wentland <harry.wentland@amd.com>
Date:   Thu May 7 15:38:37 2026 -0400

    drm/amd/display: Clamp HDMI HDCP2 rx_id_list read to buffer size
    
    commit f0f3981c43b32cadfe373d636d9e9ca522bb3702 upstream.
    
    [Why & How]
    During HDCP 2.x repeater authentication over HDMI, the driver reads the
    sink's RxStatus register and extracts a 10-bit message size field (max
    value 1023). This value is used as the read length for the ReceiverID
    list without being clamped to the size of the destination buffer
    rx_id_list[177]. A malicious HDMI repeater could advertise a message
    size larger than the buffer, causing an out-of-bounds write during the
    I2C read.
    
    Clamp the read length in mod_hdcp_read_rx_id_list() to the size of the
    rx_id_list buffer, matching the approach already used in the DP branch.
    
    Fixes: eff682f83c9c ("drm/amd/display: Add DDC handles for HDCP2.2")
    Assisted-by: Copilot:claude-opus-4.6
    Reviewed-by: Alex Hung <alex.hung@amd.com>
    Signed-off-by: Harry Wentland <harry.wentland@amd.com>
    Signed-off-by: Ray Wu <ray.wu@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 229212219e4247d9486f8ba41ef087358490be09)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Clamp VBIOS HDMI retimer register count to array size [+ + +]
Author: Harry Wentland <harry.wentland@amd.com>
Date:   Mon May 4 15:51:13 2026 -0400

    drm/amd/display: Clamp VBIOS HDMI retimer register count to array size
    
    commit fb0707ce00eef4e2d60c3020e1c0432739703e4a upstream.
    
    [Why & How]
    The VBIOS integrated info tables (v1_11 and v2_1) contain HdmiRegNum and
    Hdmi6GRegNum fields that are used as loop bounds when copying retimer I2C
    register settings into fixed-size arrays (dp*_ext_hdmi_reg_settings[9]
    and dp*_ext_hdmi_6g_reg_settings[3]). These u8 fields are not validated
    before use, so a malformed VBIOS can specify values up to 255, causing an
    out-of-bounds heap write during driver probe.
    
    Clamp each register count to the destination array size using min_t()
    before the copy loops, in both get_integrated_info_v11() and
    get_integrated_info_v2_1().
    
    Assisted-by: GitHub Copilot:claude-opus-4.6
    Reviewed-by: Alex Hung <alex.hung@amd.com>
    Signed-off-by: Harry Wentland <harry.wentland@amd.com>
    Signed-off-by: Ray Wu <ray.wu@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 5a7f0ef90195940c54b0f5bb85b87da55f038c69)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Fix NULL deref and buffer over-read in SDP debugfs [+ + +]
Author: Harry Wentland <harry.wentland@amd.com>
Date:   Mon May 11 16:46:25 2026 -0400

    drm/amd/display: Fix NULL deref and buffer over-read in SDP debugfs
    
    commit adf67034b1f61f7119295208085bfd43f85f56af upstream.
    
    [Why & How]
    dp_sdp_message_debugfs_write() dereferences connector->base.state->crtc
    without checking for NULL. A connector can be connected but not bound to
    any CRTC (e.g. after hot-plug before the next atomic commit), causing a
    kernel crash when writing to the sdp_message debugfs node.
    
    The function also ignores the user-provided size argument and always
    passes 36 bytes to copy_from_user(), reading past the user buffer when
    size < 36.
    
    Fix both issues by:
    - Returning -ENODEV when connector->base.state or state->crtc is NULL
    - Clamping write_size to min(size, sizeof(data))
    
    Fixes: c7ba3653e977 ("drm/amd/display: Generic SDP message access in amdgpu")
    Assisted-by: Copilot:claude-opus-4.6
    Reviewed-by: Alex Hung <alex.hung@amd.com>
    Signed-off-by: Harry Wentland <harry.wentland@amd.com>
    Signed-off-by: Ray Wu <ray.wu@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 6ab4c36a522842ff70474a1c0af2e40e50fc8300)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Reject gpio_bitshift >= 32 in bios_parser_get_gpio_pin_info() [+ + +]
Author: Harry Wentland <harry.wentland@amd.com>
Date:   Tue May 5 11:50:07 2026 -0400

    drm/amd/display: Reject gpio_bitshift >= 32 in bios_parser_get_gpio_pin_info()
    
    commit 49c3da65961fe9857c831d47fa1989084e87514a upstream.
    
    [Why & How]
    gpio_bitshift is a uint8_t read directly from the VBIOS GPIO pin table.
    If the value is >= 32, the expression "1 << gpio_bitshift" triggers
    undefined behaviour in C (shift count exceeds type width). On x86 the
    shift is silently masked to 5 bits, producing an incorrect GPIO mask
    that may cause wrong MMIO register bits to be toggled.
    
    Validate gpio_bitshift before use and return BP_RESULT_BADBIOSTABLE for
    out-of-range values.
    
    Fixes: ae79c310b1a6 ("drm/amd/display: Add DCE12 bios parser support")
    Assisted-by: Copilot:claude-opus-4.6
    Reviewed-by: Alex Hung <alex.hung@amd.com>
    Signed-off-by: Harry Wentland <harry.wentland@amd.com>
    Signed-off-by: Ray Wu <ray.wu@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit eadf438ab8d370b9d19acee9359918c85afeb80d)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Use krealloc_array() in dal_vector_reserve() [+ + +]
Author: Harry Wentland <harry.wentland@amd.com>
Date:   Tue May 5 11:52:15 2026 -0400

    drm/amd/display: Use krealloc_array() in dal_vector_reserve()
    
    commit da48bc4461b8a5ebfb9264c9b191a701d8e99009 upstream.
    
    [Why & How]
    dal_vector_reserve() computes the allocation size as
    "capacity * vector->struct_size" using uint32_t arithmetic, which can
    silently wrap to a small value on overflow. This would cause krealloc to
    return a smaller buffer than expected, leading to heap overflows on
    subsequent vector appends.
    
    Replace krealloc() with krealloc_array() which performs an internal
    overflow check and returns NULL on wrap, preventing the issue.
    
    Fixes: 2004f45ef83f ("drm/amd/display: Use kernel alloc/free")
    Assisted-by: Copilot:claude-opus-4.6
    Reviewed-by: Alex Hung <alex.hung@amd.com>
    Signed-off-by: Harry Wentland <harry.wentland@amd.com>
    Signed-off-by: Ray Wu <ray.wu@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 37668568641ccc4cc1dbca4923d0a16609dd5707)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amd/pm/si: Disregard vblank time when no displays are connected [+ + +]
Author: Timur Kristóf <timur.kristof@gmail.com>
Date:   Tue May 19 10:41:54 2026 +0200

    drm/amd/pm/si: Disregard vblank time when no displays are connected
    
    commit dd4f3ee535b3b0ac027f75dbf9dc5fc88733c765 upstream.
    
    When no displays are connected, there is no vblank
    happening so the power management code shouldn't
    worry about it.
    
    This fixes a regression that caused the memory clock
    to be stuck at maximum when there were no displays
    connected to a SI GPU.
    
    Fixes: 9003a0746864 ("drm/amd/pm: Treat zero vblank time as too short in si_dpm (v3)")
    Fixes: 9d73b107a61b ("drm/amd/pm: Use pm_display_cfg in legacy DPM (v2)")
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Tested-by: Jeremy Klarenbeek <jeremy.klarenbeek99@gmail.com>
    Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 6d87e0199f7b83735b56e422d59f170a201897a8)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu: restart the CS if some parts of the VM are still invalidated [+ + +]
Author: Christian König <christian.koenig@amd.com>
Date:   Wed Feb 25 15:12:02 2026 +0100

    drm/amdgpu: restart the CS if some parts of the VM are still invalidated
    
    commit 40396ffdf6120e2380706c59e1a84d7e765a37b6 upstream.
    
    Make sure that we only submit work with full up to date VM page tables.
    
    Backport to 7.1 and older.
    
    Signed-off-by: Christian König <christian.koenig@amd.com>
    Reviewed-by: Vitaly Prosyak <vitaly.prosyak@amd.com>
    Tested-by: Vitaly Prosyak <vitaly.prosyak@amd.com>
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 59720bfd8c6dbebeb8d5a7ab64241b007efd9213)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdkfd: Check for pdd drm file first in CRIU restore path [+ + +]
Author: David Francis <David.Francis@amd.com>
Date:   Thu May 14 10:31:20 2026 -0400

    drm/amdkfd: Check for pdd drm file first in CRIU restore path
    
    commit 6842b6a4b72da9b2906ffc5ca9d846ace2c54c14 upstream.
    
    CRIU restore ioctls are meant to be called by CRIU with no
    existing drm file. There's an error path
    for if the drm file unexpectedly exists. It was positioned so
    it was missing a fput(drm_file).
    
    Do that check earlier, as soon as we have the pdd.
    
    Signed-off-by: David Francis <David.Francis@amd.com>
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 2bab781dac78916c5cc8de76345a4102449267d7)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdkfd: fix a vulnerability of integer overflow in kfd debugger [+ + +]
Author: Eric Huang <jinhuieric.huang@amd.com>
Date:   Tue May 12 10:19:52 2026 -0400

    drm/amdkfd: fix a vulnerability of integer overflow in kfd debugger
    
    commit 93f5534b35a05ef8a0109c1eefa800062fee810a upstream.
    
    get_queue_ids() computes array_size = num_queues * sizeof(uint32_t),
    which could overflow on 32-bit size_t build. using array_size()
    instead, it saturates to SIZE_MAX on overflow.
    
    Signed-off-by: Eric Huang <jinhuieric.huang@amd.com>
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 2d57a0475f085c08b49312dfd8edcb461845f285)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdkfd: Fix buffer overflow in SDMA queue checkpoint/restore on GFX11 [+ + +]
Author: Andrew Martin <andrew.martin@amd.com>
Date:   Thu May 28 12:54:39 2026 -0400

    drm/amdkfd: Fix buffer overflow in SDMA queue checkpoint/restore on GFX11
    
    commit 352ea59028ea48a6fff77f19ae28f98f71946a80 upstream.
    
    The v11 MQD manager incorrectly assigned the CP-compute variants of
    checkpoint_mqd/restore_mqd for KFD_MQD_TYPE_SDMA queues. These functions
    use sizeof(struct v11_compute_mqd) (2048 bytes) instead of sizeof(struct
    v11_sdma_mqd) (512 bytes), causing a 1536-byte overflow.
    
    During CRIU checkpoint of an SDMA queue on Navi3x:
    - checkpoint_mqd() reads 2048 bytes from a 512-byte SDMA MQD buffer,
      leaking 1536 bytes of adjacent GTT memory to userspace
    
    During CRIU restore:
    - restore_mqd() writes 2048 bytes into a 512-byte SDMA MQD buffer,
      corrupting 1536 bytes of adjacent GTT memory (often the ring buffer
      or neighboring MQDs)
    
    This is a copy-paste regression unique to v11. All other ASIC backends
    (cik, vi, v9, v10, v12) correctly use the SDMA-specific variants.
    
    Add checkpoint_mqd_sdma() and restore_mqd_sdma() functions that properly
    handle the smaller v11_sdma_mqd structure, matching the pattern used in
    other MQD managers.
    
    Fixes: cc009e613de6 ("drm/amdkfd: Add KFD support for soc21 v3")
    Assisted-by: Claude:Sonnet 4-5
    Signed-off-by: Andrew Martin <andrew.martin@amd.com>
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 6fa41db7ffdec97d62433adf03b7b9b759af8c2c)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdkfd: fix NULL dereference in get_queue_ids() [+ + +]
Author: Muhammad Bilal <meatuni001@gmail.com>
Date:   Sat May 23 16:56:46 2026 +0000

    drm/amdkfd: fix NULL dereference in get_queue_ids()
    
    commit 2bd550b547deabef98bd3b017ff743b7c34d3a6d upstream.
    
    When usr_queue_id_array is NULL and num_queues is non-zero,
    get_queue_ids() returns NULL. The callers check only IS_ERR() on the
    return value; since IS_ERR(NULL) == false the check passes, and
    suspend_queues() calls q_array_invalidate() which immediately
    dereferences NULL while iterating num_queues times.
    
    Userspace can trigger this via kfd_ioctl_set_debug_trap() by supplying
    num_queues > 0 with a zero queue_array_ptr, causing a kernel panic.
    
    A NULL usr_queue_id_array with num_queues == 0 is a legitimate no-op
    (q_array_invalidate never executes, and resume_queues already guards
    all queue_ids dereferences behind a NULL check). Return ERR_PTR(-EINVAL)
    only when num_queues is non-zero and the pointer is absent; both callers
    already propagate IS_ERR() returns correctly to userspace.
    
    Fixes: a70a93fa568b ("drm/amdkfd: add debug suspend and resume process queues operation")
    Signed-off-by: Muhammad Bilal <meatuni001@gmail.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit f165a82cdf503884bb1797771c61b2fcc72113d4)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdkfd: fix NULL pointer bug in svm_range_set_attr [+ + +]
Author: Eric Huang <jinhuieric.huang@amd.com>
Date:   Thu May 7 15:51:49 2026 -0400

    drm/amdkfd: fix NULL pointer bug in svm_range_set_attr
    
    commit e984d61d92e702096058f0f828f4b2b8563b88ce upstream.
    
    The process_info could be NULL if user doesn't call kfd_ioctl_acquire_vm
    before calling kfd_ioctl_svm.
    
    Signed-off-by: Eric Huang <jinhuieric.huang@amd.com>
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 83a26c812e0529eb040d31a76f73e33e637243d4)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/dp: Add eDP 1.5 bit definition [+ + +]
Author: Suraj Kandpal <suraj.kandpal@intel.com>
Date:   Fri May 29 12:06:35 2026 +0300

    drm/dp: Add eDP 1.5 bit definition
    
    commit 5dfc37a6b77bf6beedbd30d70184b54e1a08ccac upstream.
    
    Add the eDP revision bit value for 1.5.
    
    Spec: eDPv1.5 Table 16-5
    Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
    Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com>
    Tested-by: Ben Kao <ben.kao@intel.com>
    Acked-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250206063253.2827017-2-suraj.kandpal@intel.com
    Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/fbdev-helper: Set and clear VGA switcheroo client from fb_info [+ + +]
Author: Thomas Zimmermann <tzimmermann@suse.de>
Date:   Thu May 28 21:18:16 2026 +0800

    drm/fbdev-helper: Set and clear VGA switcheroo client from fb_info
    
    [ Upstream commit 02257549daf7ff839e2be6d4f3cac975e522fd7a ]
    
    Call vga_switcheroo_client_fb_set() with the PCI device from the
    instance of struct fb_info. All fbdev clients now run these calls.
    For non-PCI devices or drivers without vga-switcheroo, this does
    nothing. For i915 and radeon, it allows these drivers to use a
    common fbdev client.
    
    The device is the same as the one stored in struct drm_client and
    struct drm_fb_helper, so there is no difference in behavior. Some
    NULL-pointer checks are being removed, where those pointers cannot
    be NULL.
    
    v4:
    - clarify call semantics for drm_fb_helper_unregister_info() (Javier)
    
    Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
    Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240924071734.98201-3-tzimmermann@suse.de
    [ The variable 'dev' in the function drm_fb_helper_single_fb_probe() is
    unused; remove it in v6.6. ]
    Signed-off-by: Wenshan Lan <jetlan9@163.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/hyperv: validate resolution_count and fix WIN8 fallback [+ + +]
Author: Berkant Koc <me@berkoc.com>
Date:   Tue May 19 22:08:17 2026 +0200

    drm/hyperv: validate resolution_count and fix WIN8 fallback
    
    commit 13d33b9ef67066c77c84273fac5a1d3fde3533d1 upstream.
    
    A SYNTHVID_RESOLUTION_RESPONSE with resolution_count > 64 walks past
    the supported_resolution[SYNTHVID_MAX_RESOLUTION_COUNT] array in the
    parse loop. Bound resolution_count against the array size, folded
    into the existing zero-check.
    
    When the WIN10 resolution probe fails, the caller in
    hyperv_connect_vsp() left hv->screen_*_max / preferred_* unpopulated,
    which sets mode_config.max_width / max_height to 0 and makes
    drm_internal_framebuffer_create() reject every userspace framebuffer
    with -EINVAL. The pre-WIN10 branch had the same gap for
    preferred_width / preferred_height. Use a single post-probe fallback
    guarded by screen_width_max == 0 so both paths converge on the WIN8
    defaults.
    
    Signed-off-by: Berkant Koc <me@berkoc.com>
    Assisted-by: Claude:claude-opus-4-7 berkoc-pipeline
    Fixes: 76c56a5affeb ("drm/hyperv: Add DRM driver for hyperv synthetic video device")
    Cc: stable@vger.kernel.org # 5.14+
    Reviewed-by: Michael Kelley <mhklinux@outlook.com>
    Tested-by: Michael Kelley <mhklinux@outlook.com>
    Signed-off-by: Hamza Mahfooz <hamzamahfooz@linux.microsoft.com>
    Link: https://patch.msgid.link/6945b22419c7d404b4954a113de2ac9c900dba93.1779542874.git.me@berkoc.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/hyperv: validate VMBus packet size in receive callback [+ + +]
Author: Berkant Koc <me@berkoc.com>
Date:   Sat May 23 15:27:47 2026 +0200

    drm/hyperv: validate VMBus packet size in receive callback
    
    commit 7f87763f47a3c22fb50265a00619ef10f2394b18 upstream.
    
    hyperv_receive_sub() reads msg->vid_hdr.type and dispatches into one
    of four message-type branches without knowing how many bytes the host
    wrote into hv->recv_buf. The completion path then runs
    memcpy(hv->init_buf, msg, VMBUS_MAX_PACKET_SIZE), so the consumer that
    wakes on wait_for_completion_timeout() can read up to 16 KiB of
    residue from a prior message as if it were the response payload.
    
    Pass bytes_recvd into hyperv_receive_sub() and reject any packet that
    does not cover the pipe + synthvid header. A single switch on
    msg->vid_hdr.type then computes the type-specific payload size: the
    three completion-driving types (SYNTHVID_VERSION_RESPONSE,
    SYNTHVID_RESOLUTION_RESPONSE, SYNTHVID_VRAM_LOCATION_ACK) fall through
    to a shared exit that requires that size before memcpy/complete, while
    SYNTHVID_FEATURE_CHANGE validates its own payload and returns before
    reading is_dirt_needed. Unknown types are dropped.
    
    SYNTHVID_RESOLUTION_RESPONSE is variable length: the host fills
    resolution_count entries, not the full SYNTHVID_MAX_RESOLUTION_COUNT
    array. Validate the fixed prefix first so resolution_count can be
    read, bound it against the array, then require only the count-sized
    array, so the shorter responses the host actually sends are accepted.
    
    Only run the sub-handler when vmbus_recvpacket() returned success. The
    memcpy length is bytes_recvd, which is bounded by VMBUS_MAX_PACKET_SIZE
    only on a successful receive; on -ENOBUFS vmbus_recvpacket() instead
    reports the required length, which can exceed hv->recv_buf, so copying
    bytes_recvd would read and write past the 16 KiB buffers. Gating on the
    success return keeps the copy bounded. The nonzero-return path is itself
    a malformed-message case and is now logged rather than silently skipped;
    channel recovery is not attempted.
    
    Rejected packets are reported via drm_err_ratelimited() rather than
    silently dropped, matching the CoCo-hardened pattern in
    hv_kvp_onchannelcallback().
    
    Fixes: 76c56a5affeb ("drm/hyperv: Add DRM driver for hyperv synthetic video device")
    Cc: stable@vger.kernel.org # 5.14+
    Signed-off-by: Berkant Koc <me@berkoc.com>
    Assisted-by: Claude:claude-opus-4-7 berkoc-pipeline
    Reviewed-by: Michael Kelley <mhklinux@outlook.com>
    Tested-by: Michael Kelley <mhklinux@outlook.com>
    Signed-off-by: Hamza Mahfooz <hamzamahfooz@linux.microsoft.com>
    Link: https://patch.msgid.link/8200dbc199c7a9b75ac7e8af6c748d2189b5ebd5.1779542874.git.me@berkoc.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/i915/gem: Fix phys BO pread/pwrite with offset [+ + +]
Author: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Date:   Wed Jun 10 09:03:14 2026 +0300

    drm/i915/gem: Fix phys BO pread/pwrite with offset
    
    commit d21ad938398bca695a511307de38a65889e3b354 upstream.
    
    sg_page() returns struct page pointer not (void *) so the scaling
    of pread/pwrite is wrong for phys BO and wrong parts of BO would be
    accessed if non-zero offset is used.
    
    Last impacted platform with overlay or cursor planes using phys
    mapping was Gen3/945G/Lakeport.
    
    Reported-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Fixes: c6790dc22312 ("drm/i915: Wean off drm_pci_alloc/drm_pci_free")
    Cc: <stable@vger.kernel.org> # v4.5+
    Cc: Tvrtko Ursulin <tursulin@ursulin.net>
    Cc: Simona Vetter <simona@ffwll.ch>
    Cc: Jani Nikula <jani.nikula@linux.intel.com>
    Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
    Link: https://patch.msgid.link/20260610060314.26111-1-joonas.lahtinen@linux.intel.com
    (cherry picked from commit 3e49a2f85070b2fb672c1e0fdba281a4ea3aebe6)
    Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/i915/psr: Add defininitions for INTEL_WA_REGISTER_CAPS DPCD register [+ + +]
Author: Jouni Högander <jouni.hogander@intel.com>
Date:   Fri May 29 12:06:33 2026 +0300

    drm/i915/psr: Add defininitions for INTEL_WA_REGISTER_CAPS DPCD register
    
    commit fbceb39b536e40c2f7cc47ab42037bb7c2b7ced9 upstream.
    
    EDP specification says:
    
    "If either VSC SDP is unable to be transmitted 100 ns before the SU region,
    the Source device may optionally transmit the VSC SDP during the prior
    video scan line’s HBlank period There is a Intel specific drm dp register
    currently containing bits related how TCON can support PSR2 with SDP on
    prior line."
    
    Unfortunately many panels are having problems in implementing this. So
    there is a custom Intel specific DPCD register (INTEL_WA_REGISTER_CAPS) to
    figure out if this is properly implemented on a panel or if panel doesn't
    require that 100 ns delay before the SU region. Here are the definitions in
    this custom DPCD address:
    
    0 = Panel doesn't support SDP on prior line
    1 = Panel supports SDP on prior line
    2 = Panel doesn't have 100ns requirement
    3 = Reserved
    
    Add definitions for this new register and it's values into new header
    intel_dpcd.h.
    
    v2: add INTEL_DPCD_ prefix to definitions
    
    Bspec: 74741
    Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
    Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
    Link: https://patch.msgid.link/20260515095756.2799483-2-jouni.hogander@intel.com
    (cherry picked from commit 1da1c9294825f08f622c473480d185680c2a3b75)
    Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/i915/psr: Apply Intel DPCD workaround when SDP on prior line used [+ + +]
Author: Jouni Högander <jouni.hogander@intel.com>
Date:   Fri May 29 12:06:36 2026 +0300

    drm/i915/psr: Apply Intel DPCD workaround when SDP on prior line used
    
    commit 4703049f768fc1c1caac754134118bee1a3af189 upstream.
    
    There is Intel specific workaround DPCD address containing workaround for
    case where SDP is on prior line. Apply this workaround according to values
    in the offset.
    
    Fixes: 61e887329e33 ("drm/i915/xelpd: Handle PSR2 SDP indication in the prior scanline")
    Cc: <stable@vger.kernel.org> # v5.15+
    Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
    Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
    Link: https://patch.msgid.link/20260515095756.2799483-4-jouni.hogander@intel.com
    (cherry picked from commit c3fe899fbeac86ea4a5ca9dd845b2cbc0da46249)
    Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net>
    Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/i915/psr: Read Intel DPCD workaround register [+ + +]
Author: Jouni Högander <jouni.hogander@intel.com>
Date:   Fri May 29 12:06:34 2026 +0300

    drm/i915/psr: Read Intel DPCD workaround register
    
    commit f30bece421a4ae34359254e1dc2a187a42b6af9b upstream.
    
    Read Intel DPCD workaround register and store it into
    intel_connector->dp.psr_caps. psr_caps was chosen as currently it contains
    only PSR workaround for PSR2 SDP on prior scanline implementation.
    
    Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
    Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
    Link: https://patch.msgid.link/20260515095756.2799483-3-jouni.hogander@intel.com
    (cherry picked from commit c48ff24d0f4ab7ad696b2d35ad64ce7e049c668c)
    Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/i915: Fix potential UAF in TTM object purge [+ + +]
Author: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
Date:   Fri May 8 14:23:51 2026 +0200

    drm/i915: Fix potential UAF in TTM object purge
    
    commit 5c4063c87a619e4df954c179d24628636f5db15f upstream.
    
    TLDR: The bo->ttm object might be changed by calling ttm_bo_validate(),
          move casting it to an i915_tt object later to actually get the right
          pointer.
    
    A user reported hitting the following bug under heavy use on DG2:
    
    [26620.095550] Oops: general protection fault, probably for non-canonical address 0xa56b6b6b6b6b6b8b: 0000 1 SMP NOPTI
    [26620.095556] CPU: 2 UID: 0 PID: 631 Comm: Xorg Not tainted 6.18.8 #1 PREEMPT(lazy)
    [26620.095558] Hardware name: ASRock B850M Steel Legend WiFi/B850M Steel Legend WiFi, BIOS 3.50 09/18/2025
    [26620.095559] RIP: 0010:i915_ttm_purge+0x84/0x100 [i915]
    [26620.095604] Code: 00 00 00 48 8d 54 24 10 48 89 e6 48 89 fb e8 83 aa ae ff 85 c0 75 6f 48 83 bb a8 01 00 00 00 74 2c 48 8b 45 78 48 85 c0 74 23 <48> 8b 78 20 48 c7 c2 ff ff ff ff 31 f6 e8 7a 73 e3 e0 48 8b 7d 78
    [26620.095605] RSP: 0018:ffffc90005fd7430 EFLAGS: 00010282
    [26620.095607] RAX: a56b6b6b6b6b6b6b RBX: ffff8881f46c3dc0 RCX: 0000000000000000
    [26620.095608] RDX: 0000000000000000 RSI: 0000000000000246 RDI: 00000000ffffffff
    [26620.095609] RBP: ffff888289610f00 R08: 0000000000000001 R09: ffff88823b022000
    [26620.095609] R10: ffff888103029b28 R11: ffff8881fc7f3800 R12: ffff88810b6150d0
    [26620.095609] R13: ffff888289610f00 R14: 0000000000000000 R15: ffff8881f46c3dc0
    [26620.095610] FS: 00007f1004d86900(0000) GS:ffff88901c858000(0000) knlGS:0000000000000000
    [26620.095611] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [26620.095611] CR2: 00007f0fdf489000 CR3: 000000035b0c1000 CR4: 0000000000750ef0
    [26620.095612] PKRU: 55555554
    [26620.095612] Call Trace:
    [26620.095615] <TASK>
    [26620.095615] i915_ttm_move+0x2b9/0x420 [i915]
    [26620.095642] ? ttm_tt_init+0x65/0x80 [ttm]
    [26620.095644] ? i915_ttm_tt_create+0xc6/0x150 [i915]
    [26620.095667] ttm_bo_handle_move_mem+0xb6/0x160 [ttm]
    [26620.095669] ttm_bo_evict+0x100/0x150 [ttm]
    [26620.095671] ? preempt_count_add+0x64/0xa0
    [26620.095673] ? _raw_spin_lock+0xe/0x30
    [26620.095675] ? _raw_spin_unlock+0xd/0x30
    [26620.095675] ? i915_gem_object_evictable+0xb7/0xd0 [i915]
    [26620.095704] ttm_bo_evict_cb+0x6e/0xd0 [ttm]
    [26620.095705] ttm_lru_walk_for_evict+0xa6/0x200 [ttm]
    [26620.095708] ttm_bo_alloc_resource+0x185/0x4f0 [ttm]
    [26620.095709] ? init_object+0x62/0xd0
    [26620.095712] ttm_bo_validate+0x7a/0x180 [ttm]
    [26620.095713] ? _raw_spin_unlock_irqrestore+0x16/0x30
    [26620.095714] __i915_ttm_get_pages+0xb0/0x170 [i915]
    [26620.095737] i915_ttm_get_pages+0x9f/0x150 [i915]
    [26620.095759] ? i915_gem_do_execbuffer+0xedc/0x2b40 [i915]
    [26620.095786] ? alloc_debug_processing+0xd0/0x100
    [26620.095787] ? _raw_spin_unlock_irqrestore+0x16/0x30
    [26620.095788] ? i915_vma_instance+0xa0/0x4e0 [i915]
    [26620.095822] __i915_gem_object_get_pages+0x2f/0x40 [i915]
    [26620.095848] i915_vma_pin_ww+0x706/0x980 [i915]
    [26620.095875] ? i915_gem_do_execbuffer+0xedc/0x2b40 [i915]
    [26620.095904] eb_validate_vmas+0x170/0xa00 [i915]
    [26620.095930] i915_gem_do_execbuffer+0x1201/0x2b40 [i915]
    [26620.095953] ? alloc_debug_processing+0xd0/0x100
    [26620.095954] ? _raw_spin_unlock_irqrestore+0x16/0x30
    [26620.095955] ? i915_gem_execbuffer2_ioctl+0xc9/0x240 [i915]
    [26620.095977] ? __wake_up_sync_key+0x32/0x50
    [26620.095979] ? i915_gem_execbuffer2_ioctl+0xc9/0x240 [i915]
    [26620.096001] ? __slab_alloc.isra.0+0x67/0xc0
    [26620.096003] i915_gem_execbuffer2_ioctl+0x11a/0x240 [i915]
    
    Results from decode_stacktrace.sh pointed to dereference of a file pointer
    field of a i915 TTM page vector container associated with an object being
    purged on eviction.  That path is taken when the object is marked as no
    longer needed.
    
    Code analysis revealed a possibility of the i915 TTM page vector container
    being replaced with a new instance inside a function that purges content
    of the object, should it be still busy.  That function is called,
    indirectly via a more general function that changes the object's placement
    and caching policy, before the problematic dereference, but still after
    a pointer to the container is captured, rendering the pointer no longer
    valid.
    
    Fix the issue by capturing the pointer to the container only after its
    potential replacement.
    
    v2: Move the container_of() inside the if block (Sebastian),
      - a simplified version of the commit description that explains briefly
        why the change is necessary (Christian).
    
    Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/14882
    Fixes: 7ae034590ceae ("drm/i915/ttm: add tt shmem backend")
    Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
    Cc: stable@vger.kernel.org # v5.17+
    Cc: Matthew Auld <matthew.auld@intel.com>
    Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
    Cc: Sebastian Brzezinka <sebastian.brzezinka@intel.com>
    Cc: Christian König <christian.koenig@amd.com>
    Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com>
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com>
    Link: https://lore.kernel.org/r/20260508122612.469227-2-janusz.krzysztofik@linux.intel.com
    (cherry picked from commit 4462966a93eb185849b7f174f0d0de53476d00a4)
    Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/imx: Fix three kernel-doc warnings in dcss-scaler.c [+ + +]
Author: Yicong Hui <yiconghui@gmail.com>
Date:   Mon Apr 6 19:00:13 2026 +0100

    drm/imx: Fix three kernel-doc warnings in dcss-scaler.c
    
    [ Upstream commit ae0383e5a9a4b12d68c76c4769857def4665deff ]
    
    Fix the following W=1 kerneldoc warnings by adding the missing parameter
    descriptions for @phase0_identity and @nn_interpolation in
    dcss_scaler_filter_design() and @phase0_identity in
    dcss_scaler_gaussian_filter()
    
    Warning: drivers/gpu/drm/imx/dcss/dcss-scaler.c:173 function parameter 'phase0_identity' not described in 'dcss_scaler_gaussian_filter'
    Warning: drivers/gpu/drm/imx/dcss/dcss-scaler.c:270 function parameter 'phase0_identity' not described in 'dcss_scaler_filter_design'
    Warning: drivers/gpu/drm/imx/dcss/dcss-scaler.c:270 function parameter 'nn_interpolation' not described in 'dcss_scaler_filter_design'
    
    Fixes: 9021c317b770 ("drm/imx: Add initial support for DCSS on iMX8MQ")
    Signed-off-by: Yicong Hui <yiconghui@gmail.com>
    Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
    Link: https://patch.msgid.link/20260406180013.2442096-1-yiconghui@gmail.com
    Signed-off-by: Liu Ying <victor.liu@nxp.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/vc4: fix krealloc() memory leak [+ + +]
Author: Alexander A. Klimov <grandmaster@al2klimov.de>
Date:   Sat Jun 6 14:38:10 2026 +0200

    drm/vc4: fix krealloc() memory leak
    
    [ Upstream commit 5d563a5da8717629ae72f9eadf1e0e340bd1658b ]
    
    Don't just overwrite the original pointer passed to krealloc()
    with its return value without checking latter:
    
        MEM = krealloc(MEM, SZ, GFP);
    
    If krealloc() returns NULL, that erases the pointer
    to the still allocated memory, hence leaks this memory.
    Instead, use a temporary variable, check it's not NULL
    and only then assign it to the original pointer:
    
        TMP = krealloc(MEM, SZ, GFP);
        if (!TMP) return;
        MEM = TMP;
    
    While on it, use krealloc_array().
    
    Fixes: 6d45c81d229d ("drm/vc4: Add support for branching in shader validation.")
    Signed-off-by: Alexander A. Klimov <grandmaster@al2klimov.de>
    Signed-off-by: Maíra Canal <mcanal@igalia.com>
    Link: https://patch.msgid.link/20260606123817.37222-1-grandmaster@al2klimov.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/virtio: fix dma_fence refcount leak on error in virtio_gpu_dma_fence_wait() [+ + +]
Author: Wentao Liang <vulab@iscas.ac.cn>
Date:   Sun Jun 7 09:03:03 2026 +0000

    drm/virtio: fix dma_fence refcount leak on error in virtio_gpu_dma_fence_wait()
    
    commit 3f26bb732cc136ab20176697c92f32c9c84cb125 upstream.
    
    dma_fence_unwrap_for_each() internally calls dma_fence_unwrap_first()
    which does cursor->chain = dma_fence_get(head), taking an extra
    reference. On normal loop completion, dma_fence_unwrap_next()
    releases this via dma_fence_chain_walk() -> dma_fence_put().
    
    When virtio_gpu_do_fence_wait() fails and the function returns early
    from inside the loop, the cursor->chain reference is never released.
    This is the only caller in the entire kernel that does an early return
    inside dma_fence_unwrap_for_each.
    
    Add dma_fence_put(itr.chain) before the early return.
    
    Cc: stable@vger.kernel.org
    Fixes: eba57fb5498f ("drm/virtio: Wait for each dma-fence of in-fence array individually")
    Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
    Reviewed-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
    Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
    Link: https://patch.msgid.link/20260607090303.92423-1-vulab@iscas.ac.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/virtio: Fix driver removal with disabled KMS [+ + +]
Author: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Date:   Thu Jun 4 15:27:43 2026 +0300

    drm/virtio: Fix driver removal with disabled KMS
    
    [ Upstream commit f329e8325e054bd6d84d10904f8dd51137281b92 ]
    
    DRM atomic and modesetting aren't initialized if virtio-gpu driver built
    with disabled KMS, leading to access of uninitialized data on driver
    removal/unbinding and crashing kernel. Fix it by skipping shutting down
    atomic core with unavailable KMS.
    
    Fixes: 72122c69d717 ("drm/virtio: Add option to disable KMS support")
    Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
    Tested-by: Ryosuke Yasuoka <ryasuoka@redhat.com>
    Reviewed-by: Ryosuke Yasuoka <ryasuoka@redhat.com>
    Link: https://patch.msgid.link/20260604122743.13383-1-dmitry.osipenko@collabora.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm: Remove plane hsub/vsub alignment requirement for core helpers [+ + +]
Author: Carlos Eduardo Gallo Filho <gcarlos@disroot.org>
Date:   Tue Sep 26 11:15:18 2023 -0300

    drm: Remove plane hsub/vsub alignment requirement for core helpers
    
    [ Upstream commit f2f455981a34ce8ca88a41458c09494b387d344f ]
    
    The drm_format_info_plane_{height,width} functions was implemented using
    regular division for the plane size calculation, which cause issues [1][2]
    when used on contexts where the dimensions are misaligned with relation
    to the subsampling factors. So, replace the regular division by the
    DIV_ROUND_UP macro.
    
    This allows these functions to be used in more drivers, making further
    work to bring more core presence on them possible.
    
    [1] http://patchwork.freedesktop.org/patch/msgid/20170321181218.10042-3-ville.syrjala@linux.intel.com
    [2] https://patchwork.freedesktop.org/patch/msgid/20211026225105.2783797-2-imre.deak@intel.com
    
    Signed-off-by: Carlos Eduardo Gallo Filho <gcarlos@disroot.org>
    Reviewed-by: André Almeida <andrealmeid@igalia.com>
    Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230926141519.9315-2-gcarlos@disroot.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ethtool: eeprom: add missing ethnl_ops_begin() / _complete() during fallback [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Tue May 26 08:35:32 2026 -0700

    ethtool: eeprom: add missing ethnl_ops_begin() / _complete() during fallback
    
    [ Upstream commit 2376586f85f972fefe701f095bb37dcfe7405d21 ]
    
    All ethtool driver op calls should be sandwiched between
    ethnl_ops_begin() / ethnl_ops_complete(). In Netlink eeprom code,
    if the paged access failed we fall back to old API, but we
    first call _complete() and the fallback never does its own
    ethnl_ops_begin(). Move the fallback into the _begin() / _complete()
    section.
    
    Fixes: 96d971e307cc ("ethtool: Add fallback to get_module_eeprom from netlink command")
    Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
    Link: https://patch.msgid.link/20260526153533.2779187-10-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ethtool: eeprom: add more safeties to EEPROM Netlink fallback [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Tue May 26 08:35:33 2026 -0700

    ethtool: eeprom: add more safeties to EEPROM Netlink fallback
    
    [ Upstream commit 67cfdd9210b99f260b3e0afeb9525e0acc7be31e ]
    
    The Netlink fallback path for reading module EEPROM
    (fallback_set_params()) validates that offset < eeprom_len,
    but does not check that offset + length stays within eeprom_len.
    The ioctl equivalent (ethtool_get_any_eeprom() in ioctl.c) has
    always enforced both bounds:
    
      if (eeprom.offset + eeprom.len > total_len)
          return -EINVAL;
    
    This could lead to surprises in both drivers and device FW.
    Add the missing offset + length validation to fallback_set_params(),
    mirroring the ioctl.
    
    Similarly - ethtool core in general, and ethtool_get_any_eeprom()
    in particular tries to zero-init all buffers passed to the drivers
    to avoid any extra work of zeroing things out. eeprom_fallback()
    uses a plain kmalloc(), change it to zalloc.
    
    Fixes: 96d971e307cc ("ethtool: Add fallback to get_module_eeprom from netlink command")
    Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
    Link: https://patch.msgid.link/20260526153533.2779187-11-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fbdev/vt8500lcdfb: Initialize fb_ops with fbdev macros [+ + +]
Author: Thomas Zimmermann <tzimmermann@suse.de>
Date:   Mon Nov 27 14:15:51 2023 +0100

    fbdev/vt8500lcdfb: Initialize fb_ops with fbdev macros
    
    commit 63a11adaceb8b77d70bcce0890197fa9462ce160 upstream.
    
    Initialize the instance of struct fb_ops with fbdev initializer
    macros for framebuffers in DMA-able virtual address space. Set the
    read/write, draw and mmap callbacks to the correct implementation
    and avoid implicit defaults. Also select the necessary helpers in
    Kconfig.
    
    Fbdev drivers sometimes rely on the callbacks being NULL for a
    default I/O-memory-based implementation to be invoked; hence
    requiring the I/O helpers to be built in any case. Setting all
    callbacks in all drivers explicitly will allow to make the I/O
    helpers optional. This benefits systems that do not use these
    functions.
    
    Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
    Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20231127131655.4020-23-tzimmermann@suse.de
    Cc: Ben Hutchings <benh@debian.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fs/fcntl: fix SOFTIRQ-unsafe lock order in fasync signaling [+ + +]
Author: Mingyu Wang <25181214217@stu.xidian.edu.cn>
Date:   Sat May 23 21:52:10 2026 +0800

    fs/fcntl: fix SOFTIRQ-unsafe lock order in fasync signaling
    
    commit 00633c4683828acd5256fa8d5163f440d74bbe71 upstream.
    
    A SOFTIRQ-safe to SOFTIRQ-unsafe lock order deadlock can occur in
    send_sigio() and send_sigurg() when a process group receives a signal.
    
    When FASYNC is configured for a process group (PIDTYPE_PGID), both
    functions use read_lock(&tasklist_lock) to traverse the task list.
    However, they are frequently called from softirq context:
    - send_sigio() via input_inject_event -> kill_fasync
    - send_sigurg() via tcp_check_urg -> sk_send_sigurg (NET_RX_SOFTIRQ)
    
    The deadlock is caused by the rwlock writer fairness mechanism:
    1. CPU 0 (process context) holds read_lock(&tasklist_lock) in do_wait().
    2. CPU 1 (process context) attempts write_lock(&tasklist_lock) in
       fork() or exit() and spins, which blocks all new readers.
    3. CPU 0 is interrupted by a softirq (e.g., TCP URG packet reception).
    4. The softirq calls send_sigurg() and attempts to acquire
       read_lock(&tasklist_lock), deadlocking because CPU 1 is waiting.
    
    Since PID hashing and do_each_pid_task() traversals are already
    RCU-protected, the read_lock on tasklist_lock is no longer strictly
    required for safe traversal. Fix this by replacing tasklist_lock with
    rcu_read_lock(), aligning the process group signaling path with the
    single-PID path. This also mitigates a potential remote denial of
    service vector via TCP URG packets.
    
    Lockdep splat:
    =====================================================
    WARNING: SOFTIRQ-safe -> SOFTIRQ-unsafe lock order detected
    [...]
    Chain exists of:
      &dev->event_lock --> &f_owner->lock --> tasklist_lock
    
    Possible interrupt unsafe locking scenario:
           CPU0                    CPU1
           ----                    ----
      lock(tasklist_lock);
                               local_irq_disable();
                               lock(&dev->event_lock);
                               lock(&f_owner->lock);
      <Interrupt>
        lock(&dev->event_lock);
    
    *** DEADLOCK ***
    
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Mingyu Wang <25181214217@stu.xidian.edu.cn>
    Link: https://patch.msgid.link/20260523135210.590928-1-w15303746062@163.com
    Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fuse: reject fuse_notify() pagecache ops on directories [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Tue May 19 16:29:38 2026 +0200

    fuse: reject fuse_notify() pagecache ops on directories
    
    commit 9c954499d43aefac01c5dfb57a82b13d2dcf4b94 upstream.
    
    The operations FUSE_NOTIFY_STORE and FUSE_NOTIFY_RETRIEVE allow the
    FUSE daemon to actively write/read pagecache contents.
    
    For directories with FOPEN_CACHE_DIR, the pagecache is used as
    kernel-internal cache storage, and userspace is not supposed to have
    direct access to this cache - in particular, fuse_parse_cache() will hit
    WARN_ON() if the cache contains bogus data.
    
    Reject FUSE_NOTIFY_STORE and FUSE_NOTIFY_RETRIEVE on anything other than
    regular files with -EINVAL.
    
    Fixes: 5d7bc7e8680c ("fuse: allow using readdir cache")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jann Horn <jannh@google.com>
    Link: https://patch.msgid.link/20260519-fuse-dir-pagecache-v2-1-5428fa48e175@google.com
    Acked-by: Miklos Szeredi <mszeredi@redhat.com>
    Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
genetlink: Use internal flags for multicast groups [+ + +]
Author: Ido Schimmel <idosch@nvidia.com>
Date:   Fri May 29 12:51:26 2026 -0400

    genetlink: Use internal flags for multicast groups
    
    [ Upstream commit cd4d7263d58ab98fd4dee876776e4da6c328faa3 ]
    
    As explained in commit e03781879a0d ("drop_monitor: Require
    'CAP_SYS_ADMIN' when joining "events" group"), the "flags" field in the
    multicast group structure reuses uAPI flags despite the field not being
    exposed to user space. This makes it impossible to extend its use
    without adding new uAPI flags, which is inappropriate for internal
    kernel checks.
    
    Solve this by adding internal flags (i.e., "GENL_MCAST_*") and convert
    the existing users to use them instead of the uAPI flags.
    
    Tested using the reproducers in commit 44ec98ea5ea9 ("psample: Require
    'CAP_NET_ADMIN' when joining "packets" group") and commit e03781879a0d
    ("drop_monitor: Require 'CAP_SYS_ADMIN' when joining "events" group").
    
    No functional changes intended.
    
    Signed-off-by: Ido Schimmel <idosch@nvidia.com>
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: d1ebfce2c1d1 ("smb: client: require net admin for CIFS SWN netlink")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
gpio: mvebu: fix NULL pointer dereference in suspend/resume [+ + +]
Author: Yun Zhou <yun.zhou@windriver.com>
Date:   Mon Jun 8 16:43:34 2026 +0800

    gpio: mvebu: fix NULL pointer dereference in suspend/resume
    
    [ Upstream commit b9ad50d7505ebd48282ec3630258dc820fc85c81 ]
    
    mvebu_pwm_suspend() and mvebu_pwm_resume() are called for all GPIO
    banks during suspend/resume, but not all banks have PWM functionality.
    GPIO banks without PWM have mvchip->mvpwm set to NULL.
    
    Calling mvebu_pwm_suspend() with mvpwm == NULL causes a NULL pointer
    dereference when it tries to access mvpwm->blink_select.
    
      Unable to handle kernel NULL pointer dereference at virtual address 00000020 when write
      [00000020] *pgd=00000000
      Internal error: Oops: 815 [#1] PREEMPT ARM
      Modules linked in:
      CPU: 0 UID: 0 PID: 406 Comm: sh Not tainted 6.12.74-rt12-yocto-standard-g4e96f98fb7db-dirty #353
      Hardware name: Marvell Armada 370/XP (Device Tree)
      PC is at regmap_mmio_read+0x38/0x54
      LR is at regmap_mmio_read+0x38/0x54
      pc : [<c05fd2ac>]    lr : [<c05fd2ac>]    psr: 200f0013
      sp : f0c11d10  ip : 00000000  fp : c100d2f0
      r10: c14fb854  r9 : 00000000  r8 : 00000000
      r7 : c1799c00  r6 : 00000020  r5 : 00000020  r4 : c179c7c0
      r3 : f0a231a0  r2 : 00000020  r1 : 00000020  r0 : 00000000
      Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
      Control: 10c5387d  Table: 135ec059  DAC: 00000051
      Call trace:
       regmap_mmio_read from _regmap_bus_reg_read+0x78/0xac
       _regmap_bus_reg_read from _regmap_read+0x60/0x154
       _regmap_read from regmap_read+0x3c/0x60
       regmap_read from mvebu_gpio_suspend+0xa4/0x14c
       mvebu_gpio_suspend from dpm_run_callback+0x54/0x180
       dpm_run_callback from device_suspend+0x124/0x630
       device_suspend from dpm_suspend+0x124/0x270
       dpm_suspend from dpm_suspend_start+0x64/0x6c
       dpm_suspend_start from suspend_devices_and_enter+0x140/0x8e8
       suspend_devices_and_enter from pm_suspend+0x2fc/0x308
       pm_suspend from state_store+0x6c/0xc8
       state_store from kernfs_fop_write_iter+0x10c/0x1f8
       kernfs_fop_write_iter from vfs_write+0x270/0x468
       vfs_write from ksys_write+0x70/0xf0
       ksys_write from ret_fast_syscall+0x0/0x54
    
    Add a NULL check for mvchip->mvpwm before calling the PWM
    suspend/resume functions.
    
    Fixes: 757642f9a584 ("gpio: mvebu: Add limited PWM support")
    Signed-off-by: Yun Zhou <yun.zhou@windriver.com>
    Link: https://patch.msgid.link/20260608084334.2960803-1-yun.zhou@windriver.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gpio: mxc: fix irq_high handling [+ + +]
Author: Alexander Stein <alexander.stein@ew.tq-group.com>
Date:   Tue May 26 08:35:01 2026 +0200

    gpio: mxc: fix irq_high handling
    
    [ Upstream commit dac917ed5aead741004db8d0d5151dd577802df8 ]
    
    If port->irq_high is -1 (fsl,imx21-gpio compatible) and gpio_idx is >= 16
    enable_irq_wake() is called with -1 which is wrong.
    
    Fixes: 5f6d1998adeb ("gpio: mxc: release the parent IRQ in runtime suspend")
    Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Link: https://patch.msgid.link/20260526063504.25916-1-alexander.stein@ew.tq-group.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gpio: rockchip: convert bank->clk to devm_clk_get_enabled() [+ + +]
Author: Marco Scardovi <scardracs@disroot.org>
Date:   Tue May 26 19:02:45 2026 +0200

    gpio: rockchip: convert bank->clk to devm_clk_get_enabled()
    
    [ Upstream commit 3e46c18d5d87f063a93ae0fe7662fbf6660459d5 ]
    
    The bank->clk was previously obtained via of_clk_get() and manually
    prepared/enabled. However, it was missing a corresponding clk_put() in
    both the error paths and the remove function, leading to a reference leak.
    
    Convert the allocation to devm_clk_get_enabled(), which also properly
    propagates failures from clk_prepare_enable() that were previously ignored.
    
    The GPIO bank device uses the same OF node as the previous of_clk_get()
    call, so devm_clk_get_enabled(dev, NULL) correctly resolves the same
    clock provider entry.
    
    Fix the reference leak and simplify the code by removing the manual
    clk_disable_unprepare() calls in the probe error paths and in the
    remove function.
    
    Fixes: 936ee2675eee ("gpio/rockchip: add driver for rockchip gpio")
    Assisted-by: Antigravity:gemini-3.5-flash
    Signed-off-by: Marco Scardovi <scardracs@disroot.org>
    Link: https://patch.msgid.link/20260526171050.12785-2-scardracs@disroot.org
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
HID: core: Add printk_ratelimited variants to hid_warn() etc [+ + +]
Author: Vicki Pfau <vi@endrift.com>
Date:   Mon Oct 6 18:05:31 2025 -0700

    HID: core: Add printk_ratelimited variants to hid_warn() etc
    
    commit 1d64624243af8329b4b219d8c39e28ea448f9929 upstream.
    
    hid_warn_ratelimited() is needed. Add the others as part of the block.
    
    Signed-off-by: Vicki Pfau <vi@endrift.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

HID: core: Fix size_t specifier in hid_report_raw_event() [+ + +]
Author: Nathan Chancellor <nathan@kernel.org>
Date:   Sun May 17 13:51:01 2026 +0900

    HID: core: Fix size_t specifier in hid_report_raw_event()
    
    commit 4d3a2a466b8d68d852a1f3bbf11204b718428dc4 upstream.
    
    When building for 32-bit platforms, for which 'size_t' is
    'unsigned int', there are warnings around using the incorrect format
    specifier to print bsize in hid_report_raw_event():
    
      drivers/hid/hid-core.c:2054:29: error: format specifies type 'long' but the argument has type 'size_t' (aka 'unsigned int') [-Werror,-Wformat]
       2053 |                 hid_warn_ratelimited(hid, "Event data for report %d is incorrect (%d vs %ld)\n",
            |                                                                                         ~~~
            |                                                                                         %zu
       2054 |                                      report->id, csize, bsize);
            |                                                         ^~~~~
      drivers/hid/hid-core.c:2076:29: error: format specifies type 'long' but the argument has type 'size_t' (aka 'unsigned int') [-Werror,-Wformat]
       2075 |                 hid_warn_ratelimited(hid, "Event data for report %d was too short (%d vs %ld)\n",
            |                                                                                          ~~~
            |                                                                                          %zu
       2076 |                                      report->id, rsize, bsize);
            |                                                         ^~~~~
    
    Use the proper 'size_t' format specifier, '%zu', to clear up the
    warnings.
    
    Cc: stable@vger.kernel.org
    Fixes: 2c85c61d1332 ("HID: pass the buffer size to hid_report_raw_event")
    Reported-by: Miguel Ojeda <ojeda@kernel.org>
    Closes: https://lore.kernel.org/20260516020430.110135-1-ojeda@kernel.org/
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

HID: pass the buffer size to hid_report_raw_event [+ + +]
Author: Benjamin Tissoires <bentiss@kernel.org>
Date:   Mon May 4 10:47:22 2026 +0200

    HID: pass the buffer size to hid_report_raw_event
    
    commit 2c85c61d1332e1e16f020d76951baf167dcb6f7a upstream.
    
    commit 0a3fe972a7cb ("HID: core: Mitigate potential OOB by removing
    bogus memset()") enforced the provided data to be at least the size of
    the declared buffer in the report descriptor to prevent a buffer
    overflow. However, we can try to be smarter by providing both the buffer
    size and the data size, meaning that hid_report_raw_event() can make
    better decision whether we should plaining reject the buffer (buffer
    overflow attempt) or if we can safely memset it to 0 and pass it to the
    rest of the stack.
    
    Fixes: 0a3fe972a7cb ("HID: core: Mitigate potential OOB by removing bogus memset()")
    Cc: stable@vger.kernel.org
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Acked-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    [Lee: Backported to linux-6.12.y and beyond]
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

HID: quirks: Add ALWAYS_POLL quirk for SIGMACHIP USB mouse [+ + +]
Author: hlleng <a909204013@gmail.com>
Date:   Tue May 12 09:57:37 2026 +0800

    HID: quirks: Add ALWAYS_POLL quirk for SIGMACHIP USB mouse
    
    commit 07466fc91c55532edcfb5c6a7ccd2ea52728d6bd upstream.
    
    The SIGMACHIP USB mouse with VID/PID 1c4f:0034 can disconnect and
    re-enumerate repeatedly after it has been enumerated if its interrupt
    endpoint is not continuously polled.
    
    This was observed with the device reporting itself as "SIGMACHIP Usb
    Mouse". Keeping the input event device open avoids the disconnects.
    
    Add HID_QUIRK_ALWAYS_POLL for this device so the HID core keeps polling
    it even when there is no userspace input consumer.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: hlleng <a909204013@gmail.com>
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

HID: wacom: Fix OOB write in wacom_hid_set_device_mode() [+ + +]
Author: Lee Jones <lee@kernel.org>
Date:   Wed May 27 17:05:26 2026 +0100

    HID: wacom: Fix OOB write in wacom_hid_set_device_mode()
    
    commit c0a8899e02ddebd51e2589835182c239c2e224ae upstream.
    
    wacom_hid_set_device_mode() currently assumes that the HID_DG_INPUTMODE
    usage is always located in the first field (field[0]) of the feature report.
    However, a device can specify HID_DG_INPUTMODE in a different field.
    
    If HID_DG_INPUTMODE is in a field other than the first one and the first
    field has a report_count smaller than the usage_index of HID_DG_INPUTMODE,
    this leads to an out-of-bounds write to r->field[0]->value.
    
    Fix this by storing the field index of HID_DG_INPUTMODE in 'struct
    hid_data' during feature mapping.  In wacom_hid_set_device_mode(), use
    this stored field index to access the correct field and add bounds
    checks to ensure both the field index and the value index are within
    valid ranges before writing.
    
    Cc: stable@vger.kernel.org
    Fixes: 5ae6e89f7409 ("HID: wacom: implement the finger part of the HID generic handling")
    Tested-by: Ping Cheng <ping.cheng@wacom.com>
    Reviewed-by: Ping Cheng <ping.cheng@wacom.com>
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hpfs: fix a crash if hpfs_map_dnode_bitmap fails [+ + +]
Author: Mikulas Patocka <mpatocka@redhat.com>
Date:   Mon May 25 14:48:58 2026 +0200

    hpfs: fix a crash if hpfs_map_dnode_bitmap fails
    
    commit 974820a59efde7c1a7e1260bcfe9bb81f833cc9f upstream.
    
    If hpfs_map_dnode_bitmap fails, the code would call hpfs_brelse4 on
    uninitialized quad buffer head, causing a crash.
    
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Reported-by: Farhad Alemi <farhad.alemi@berkeley.edu>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hsr: Remove WARN_ONCE() in hsr_addr_is_self(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@google.com>
Date:   Sat May 30 06:42:58 2026 +0000

    hsr: Remove WARN_ONCE() in hsr_addr_is_self().
    
    [ Upstream commit afd0f17ca46258cec3a5cc48b8df9327fe772490 ]
    
    syzbot reported the warning [0] in hsr_addr_is_self(),
    whose assumption is simply wrong.
    
    hsr->self_node is cleared in hsr_del_self_node(), which
    is called from hsr_dellink().
    
    Since dev->rtnl_link_ops->dellink() is called before
    unregister_netdevice_many(), there is a window when
    user can find the device but without hsr->self_node.
    
    Let's remove WARN_ONCE() in hsr_addr_is_self().
    
    [0]:
    HSR: No self node
    WARNING: net/hsr/hsr_framereg.c:39 at hsr_addr_is_self+0x211/0x3f0 net/hsr/hsr_framereg.c:39, CPU#0: syz.4.16848/17220
    Modules linked in:
    CPU: 0 UID: 0 PID: 17220 Comm: syz.4.16848 Tainted: G             L      syzkaller #0 PREEMPT_{RT,(full)}
    Tainted: [L]=SOFTLOCKUP
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 04/18/2026
    RIP: 0010:hsr_addr_is_self+0x211/0x3f0 net/hsr/hsr_framereg.c:39
    Code: 33 2f 41 0f b7 dd 89 ee 09 de 31 ff e8 c8 b4 c6 f6 09 dd 74 54 e8 0f b0 c6 f6 31 ed eb 53 e8 06 b0 c6 f6 48 8d 3d 2f 50 9c 04 <67> 48 0f b9 3a 31 ed eb 42 e8 c1 13 1f 00 89 c5 31 ff 89 c6 e8 96
    RSP: 0018:ffffc900041c70e0 EFLAGS: 00010283
    RAX: ffffffff8afdc6ca RBX: ffffffff8afdc4e6 RCX: 0000000000080000
    RDX: ffffc90010493000 RSI: 0000000000000948 RDI: ffffffff8f9a1700
    RBP: 0000000000000001 R08: 0000000000000000 R09: 0000000000000000
    R10: ffffc900041c71e8 R11: fffff52000838e3f R12: dffffc0000000000
    R13: ffff888041f9e3c0 R14: ffff888086ee3802 R15: 0000000000000000
    FS:  00007f6fe985d6c0(0000) GS:ffff888126176000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007f80bd437dac CR3: 0000000025096000 CR4: 00000000003526f0
    DR0: ffffffffffffffff DR1: 00000000000001f8 DR2: 0000000000000002
    DR3: ffffffffefffff15 DR6: 00000000ffff0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     check_local_dest net/hsr/hsr_forward.c:592 [inline]
     fill_frame_info net/hsr/hsr_forward.c:728 [inline]
     hsr_forward_skb+0xa11/0x2a80 net/hsr/hsr_forward.c:739
     hsr_dev_xmit+0x253/0x370 net/hsr/hsr_device.c:236
     __netdev_start_xmit include/linux/netdevice.h:5368 [inline]
     netdev_start_xmit include/linux/netdevice.h:5377 [inline]
     xmit_one net/core/dev.c:3888 [inline]
     dev_hard_start_xmit+0x2df/0x860 net/core/dev.c:3904
     __dev_queue_xmit+0x1428/0x3900 net/core/dev.c:4870
     neigh_output include/net/neighbour.h:556 [inline]
     ip_finish_output2+0xcec/0x10b0 net/ipv4/ip_output.c:237
     ip_send_skb net/ipv4/ip_output.c:1510 [inline]
     ip_push_pending_frames+0x8b/0x110 net/ipv4/ip_output.c:1530
     raw_sendmsg+0x1547/0x1a50 net/ipv4/raw.c:659
     sock_sendmsg_nosec net/socket.c:787 [inline]
     __sock_sendmsg net/socket.c:802 [inline]
     ____sys_sendmsg+0x7da/0x9c0 net/socket.c:2698
     ___sys_sendmsg+0x2a5/0x360 net/socket.c:2752
     __sys_sendmsg net/socket.c:2784 [inline]
     __do_sys_sendmsg net/socket.c:2789 [inline]
     __se_sys_sendmsg net/socket.c:2787 [inline]
     __x64_sys_sendmsg+0x1c3/0x2a0 net/socket.c:2787
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0x15f/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7f6feb62ce59
    Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 e8 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007f6fe985d028 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
    RAX: ffffffffffffffda RBX: 00007f6feb8a6090 RCX: 00007f6feb62ce59
    RDX: 0000000000000000 RSI: 0000200000000000 RDI: 0000000000000004
    RBP: 00007f6feb6c2d6f R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: 00007f6feb8a6128 R14: 00007f6feb8a6090 R15: 00007ffcf01cc488
     </TASK>
    
    Fixes: f266a683a480 ("net/hsr: Better frame dispatch")
    Reported-by: syzbot+652670cf249077eb498b@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/6a1a861e.b111c304.35cd64.0016.GAE@google.com/
    Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
    Reviewed-by: Fernando Fernandez Mancera <fmancera@suse.de>
    Link: https://patch.msgid.link/20260530064300.340793-1-kuniyu@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
hv_netvsc: use kmap_local_page in netvsc_copy_to_send_buf [+ + +]
Author: Anton Leontev <leontyevantony@gmail.com>
Date:   Mon Jun 15 14:08:00 2026 -0400

    hv_netvsc: use kmap_local_page in netvsc_copy_to_send_buf
    
    [ Upstream commit 004e9ecfe6c5384f9e0b2f6f6389d42ec22789af ]
    
    netvsc_copy_to_send_buf() copies page buffer entries into the VMBus
    send buffer using phys_to_virt() on the entry PFN. Entries for the
    RNDIS header and the skb linear data come from kmalloc'd memory and
    are always in the kernel direct map, but entries for skb fragments
    reference page cache or user pages, which on 32-bit x86 with
    CONFIG_HIGHMEM=y can live above the LOWMEM boundary. For such a page
    phys_to_virt() returns an address outside the direct map and the
    subsequent memcpy() faults on the transmit softirq path, which is
    fatal.
    
    Map the pages with kmap_local_page() instead, handling two properties
    of the page buffer entries:
    
     - pb[i].pfn is a Hyper-V PFN at HV_HYP_PAGE_SIZE (4K) granularity,
       not a native PFN. Reconstruct the physical address first and derive
       the native page from it, so the mapping stays correct where
       PAGE_SIZE > HV_HYP_PAGE_SIZE (e.g. arm64 with 64K pages).
    
     - Since commit 41a6328b2c55 ("hv_netvsc: Preserve contiguous PFN
       grouping in the page buffer array"), an entry describes a full
       physically contiguous fragment and pb[i].len can exceed PAGE_SIZE,
       while kmap_local_page() maps a single page. Copy page by page,
       splitting at native page boundaries.
    
    The copy path only handles packets smaller than the send section size
    (6144 bytes by default); larger packets take the cp_partial path where
    only the RNDIS header is copied. So entries here are bounded by the
    section size and a copy is split at most once on 4K-page systems. On
    !CONFIG_HIGHMEM configs kmap_local_page() folds to page_address() and
    no mapping work is added.
    
    Fixes: c25aaf814a63 ("hyperv: Enable sendbuf mechanism on the send path")
    Cc: stable@vger.kernel.org
    Signed-off-by: Anton Leontev <leontyevantony@gmail.com>
    Link: https://patch.msgid.link/20260604165938.32033-1-leontyevantony@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    [ adapted `phys_to_page(paddr)` to `pfn_to_page(PHYS_PFN(paddr))` ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hwmon: (pmbus/adm1266) serialize GPIO PMBus accesses with pmbus_lock [+ + +]
Author: Abdurrahman Hussain <abdurrahman@nexthop.ai>
Date:   Mon Jun 1 22:06:29 2026 -0400

    hwmon: (pmbus/adm1266) serialize GPIO PMBus accesses with pmbus_lock
    
    [ Upstream commit bab8c6fb5af8df7e753d196c1262cb78e92ca872 ]
    
    adm1266_gpio_get(), adm1266_gpio_get_multiple(), and
    adm1266_gpio_dbg_show() all issue PMBus reads against the device but
    none of them take pmbus_lock.  The pmbus_core framework holds
    pmbus_lock around its own multi-transaction sequences (notably the
    "set PAGE, then read paged register" pattern used by hwmon
    attributes), so an unlocked GPIO accessor can land between a PAGE
    write and the subsequent paged read in another thread and corrupt
    either side's view of the device state machine.
    
    Take pmbus_lock at the top of each of the three accessors via the
    scope-based guard().  The lock is uncontended in the common case and
    adds only a single mutex round-trip per call.
    
    Fixes: d98dfad35c38 ("hwmon: (pmbus/adm1266) Add support for GPIOs")
    Cc: stable@vger.kernel.org
    Signed-off-by: Abdurrahman Hussain <abdurrahman@nexthop.ai>
    Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Link: https://lore.kernel.org/r/20260518-adm1266-gpio-fixes-v3-6-e425e4f88139@nexthop.ai
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    [ open-coded `guard(pmbus_lock)()` as explicit `pmbus_lock_interruptible()`/`pmbus_unlock()` ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (pmbus/adm1266) serialize NVMEM blackbox read with pmbus_lock [+ + +]
Author: Abdurrahman Hussain <abdurrahman@nexthop.ai>
Date:   Mon Jun 1 22:06:01 2026 -0400

    hwmon: (pmbus/adm1266) serialize NVMEM blackbox read with pmbus_lock
    
    [ Upstream commit 9f1dd8f9491eb840cbea7ffdf4cad031e25f8ae0 ]
    
    adm1266_nvmem_read() is the reg_read callback the NVMEM core invokes
    when userspace reads /sys/bus/nvmem/devices/.../nvmem on this chip.
    On the first byte of every read it does a memset of data->dev_mem,
    walks the device blackbox through adm1266_nvmem_read_blackbox()
    (which issues a chain of PMBus block transactions), and then memcpys
    the refreshed buffer out to userspace.  None of that runs under
    pmbus_lock today.
    
    Two consequences:
    
      - The PMBus traffic the refresh issues is not serialised against
        pmbus_core's own multi-step PAGE+register sequences.  A paged
        hwmon attribute read from another thread can land between a
        PAGE write and the paged read in either direction and corrupt
        one side's view of the device state machine.
    
      - The NVMEM core does not serialise concurrent reg_read calls, so
        two userspace readers racing at offset 0 can interleave the
        memset of data->dev_mem with another reader's
        adm1266_nvmem_read_blackbox() refill or memcpy out, returning
        torn data to userspace.
    
    Take pmbus_lock at the top of adm1266_nvmem_read() via the
    scope-based guard().  Patch 5 of this series moves
    adm1266_config_nvmem() past pmbus_do_probe() so the lock is
    guaranteed to be live before the callback is reachable from
    userspace.
    
    Fixes: 15609d189302 ("hwmon: (pmbus/adm1266) read blackbox")
    Cc: stable@vger.kernel.org
    Signed-off-by: Abdurrahman Hussain <abdurrahman@nexthop.ai>
    Link: https://lore.kernel.org/r/20260518-adm1266-gpio-fixes-v3-7-e425e4f88139@nexthop.ai
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    [ adapted `guard(pmbus_lock)(data->client)` to manual `pmbus_lock_interruptible()`/`pmbus_unlock()` ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (pmbus/core) Protect regulator operations with mutex [+ + +]
Author: Guenter Roeck <linux@roeck-us.net>
Date:   Mon Jun 8 14:20:22 2026 +0800

    hwmon: (pmbus/core) Protect regulator operations with mutex
    
    [ Upstream commit 754bd2b4a084b90b5e7b630e1f423061a9b9b761 ]
    
    The regulator operations pmbus_regulator_get_voltage(),
    pmbus_regulator_set_voltage(), and pmbus_regulator_list_voltage()
    access PMBus registers and shared data but were not protected by
    the update_lock mutex. This could lead to race conditions.
    
    However, adding mutex protection directly to these functions causes
    a deadlock because pmbus_regulator_notify() (which calls
    regulator_notifier_call_chain()) is often called with the mutex
    already held (e.g., from pmbus_fault_handler()). If a regulator
    callback then calls one of the now-protected voltage functions,
    it will attempt to acquire the same mutex.
    
    Rework pmbus_regulator_notify() to utilize a worker function to
    send notifications outside of the mutex protection. Events are
    stored as atomics in a per-page bitmask and processed by the worker.
    
    Initialize the worker and its associated data during regulator
    registration, and ensure it is cancelled on device removal using
    devm_add_action_or_reset().
    
    While at it, remove the unnecessary include of linux/of.h.
    
    Cc: Sanman Pradhan <psanman@juniper.net>
    Fixes: ddbb4db4ced1b ("hwmon: (pmbus) Add regulator support")
    Reviewed-by: Sanman Pradhan <psanman@juniper.net>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Fang Wang <32840572@qq.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
i2c: dev: prevent integer overflow in I2C_TIMEOUT ioctl [+ + +]
Author: Mingyu Wang <25181214217@stu.xidian.edu.cn>
Date:   Mon Apr 27 10:57:45 2026 +0800

    i2c: dev: prevent integer overflow in I2C_TIMEOUT ioctl
    
    commit 617eb7c0961a8dfcfc811844a6396e406b2923ea upstream.
    
    While fuzzing with Syzkaller, a persistent `schedule_timeout: wrong
    timeout value` warning was observed, accompanied by SMBus controller
    state machine corruption.
    
    The I2C_TIMEOUT ioctl accepts a user-provided timeout in multiples of
    10 ms. The user argument is checked against INT_MAX, but it is
    subsequently multiplied by 10 before being passed to msecs_to_jiffies().
    
    A malicious user can pass a large value (e.g., 429496729) that passes
    the `arg > INT_MAX` check but overflows when multiplied by 10. This
    results in a truncated 32-bit unsigned value that bypasses the
    internal `(int)m < 0` check in `msecs_to_jiffies()`.
    
    The truncated value is then assigned to `client->adapter->timeout`
    (a signed 32-bit int), which is reinterpreted as a negative number.
    When passed to wait_for_completion_timeout(), this negative value
    undergoes sign extension to a 64-bit unsigned long, triggering the
    `schedule_timeout` warning and causing premature returns. This leaves
    the SMBus state machine in an unrecoverable state, constituting a
    local Denial of Service (DoS).
    
    Fix this by bounding the user argument to `INT_MAX / 10`.
    
    Signed-off-by: Mingyu Wang <25181214217@stu.xidian.edu.cn>
    [wsa: move the comment as well]
    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i2c: qcom-cci: Fix NULL pointer dereference in cci_remove() [+ + +]
Author: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
Date:   Sat May 16 02:41:18 2026 +0300

    i2c: qcom-cci: Fix NULL pointer dereference in cci_remove()
    
    commit 729ac5a4b966aac42e08a94dea966f4429008548 upstream.
    
    On all modern platforms Qualcomm CCI controller provides two I2C masters,
    and on particular boards only one I2C master may be initialized, and in
    such cases the device unbinding or driver removal causes a NULL pointer
    dereference, because cci_halt() is called for all two I2C masters, but
    a completion is initialized only for the single enabled master:
    
        % rmmod i2c-qcom-cci
        Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000
        <snip>
        Call trace:
        __wait_for_common+0x194/0x1a8 (P)
        wait_for_completion_timeout+0x20/0x2c
        cci_remove+0xc4/0x138 [i2c_qcom_cci]
        platform_remove+0x20/0x30
        device_remove+0x4c/0x80
        device_release_driver_internal+0x1c8/0x224
        driver_detach+0x50/0x98
        bus_remove_driver+0x6c/0xbc
        driver_unregister+0x30/0x60
        platform_driver_unregister+0x14/0x20
        qcom_cci_driver_exit+0x18/0x1008 [i2c_qcom_cci]
        ....
    
    Fixes: e517526195de ("i2c: Add Qualcomm CCI I2C driver")
    Signed-off-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
    Cc: <stable@vger.kernel.org> # v5.8+
    Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Link: https://lore.kernel.org/r/20260515234121.1607425-2-vladimir.zapolskiy@linaro.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i2c: stm32f7: fix timing computation ignoring i2c-analog-filter [+ + +]
Author: Guillermo Rodríguez <guille.rodriguez@gmail.com>
Date:   Tue May 26 11:12:09 2026 +0200

    i2c: stm32f7: fix timing computation ignoring i2c-analog-filter
    
    commit a124579c0763da7bc408f4cd7e8f606cadc94855 upstream.
    
    stm32f7_i2c_compute_timing() uses i2c_dev->analog_filter to pick
    the analog filter delay, but i2c_dev->analog_filter is parsed from
    the "i2c-analog-filter" DT property only after the compute_timing
    loop in stm32f7_i2c_setup_timing(), so in practice the timing
    calculations always ignore the analog filter. On an STM32MP1 board
    with clock-frequency = <400000> and i2c-analog-filter set, measured
    SCL frequency was ~382 kHz.
    
    This also affects (widens) the computed SDADEL range. At high bus
    clock speeds, this can select an SDADEL value that violates tVD;DAT
    (data valid time).
    
    Fix by parsing "i2c-analog-filter" before the compute_timing loop.
    
    Fixes: 83c3408f7b9c ("i2c: stm32f7: support DT binding i2c-analog-filter")
    Signed-off-by: Guillermo Rodríguez <guille.rodriguez@gmail.com>
    Cc: <stable@vger.kernel.org> # v5.13+
    Acked-by: Alain Volmat <alain.volmat@foss.st.com>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Link: https://lore.kernel.org/r/20260526091210.20383-1-guille.rodriguez@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i2c: tegra: Fix NOIRQ suspend/resume [+ + +]
Author: Akhil R <akhilrajeev@nvidia.com>
Date:   Mon May 18 17:10:13 2026 +0530

    i2c: tegra: Fix NOIRQ suspend/resume
    
    commit 656646b3847ac6a21b074a813223feef2aadd6e2 upstream.
    
    The Tegra I2C driver relies on runtime PM to wake up the controller before
    each transfer. However, runtime PM is disabled between the system suspend
    and NOIRQ suspend. If an I2C device initiates a transfer during this
    window, the I2C controller fails to wake up and the transfer fails. To
    handle this, the controller must be kept available for this period to
    allow transfers.
    
    Rework the I2C controller's system PM callbacks such that the controller
    is resumed from runtime suspend during system suspend and it stays
    RPM_ACTIVE throughout the suspend-resume cycle until it is runtime
    suspended back in the system resume. The clocks are disabled in NOIRQ
    suspend and enabled back in NOIRQ resume by calling the controller's
    runtime PM functions directly.
    
    Fixes: 8ebf15e9c869 ("i2c: tegra: Move suspend handling to NOIRQ phase")
    Assisted-by: Cursor:claude-4.6-opus
    Signed-off-by: Akhil R <akhilrajeev@nvidia.com>
    Cc: <stable@vger.kernel.org> # v5.4+
    Reviewed-by: Jon Hunter <jonathanh@nvidia.com>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Link: https://lore.kernel.org/r/20260518114013.62065-5-akhilrajeev@nvidia.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
IB/isert: Reject login PDUs shorter than ISER_HEADERS_LEN [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Tue Jun 2 15:46:42 2026 -0400

    IB/isert: Reject login PDUs shorter than ISER_HEADERS_LEN
    
    commit 29e7b925ae6df64894e82ab6419994dc25580a8a upstream.
    
    In drivers/infiniband/ulp/isert/ib_isert.c, isert_login_recv_done()
    computes the login request payload length as wc->byte_len minus
    ISER_HEADERS_LEN with no lower bound, and login_req_len is a signed int.
    A remote iSER initiator can post a login Send work request carrying
    fewer than ISER_HEADERS_LEN (76) bytes, so the subtraction underflows
    and login_req_len becomes negative.
    
    isert_rx_login_req() then reads that negative length back into a signed
    int, takes size = min(rx_buflen, MAX_KEY_VALUE_PAIRS), and because the
    min() is signed it keeps the negative value; the value is then passed as
    the memcpy() length and sign-extended to a multi-gigabyte size_t. The
    copy into the 8192-byte login->req_buf runs far out of bounds and
    faults, crashing the target node. The login phase precedes iSCSI
    authentication, so no credentials are required to reach this path.
    
    Reject any login PDU shorter than ISER_HEADERS_LEN before the
    subtraction, mirroring the existing early return on a failed work
    completion, so login_req_len can never go negative. The upper bound was
    already safe: a posted login buffer cannot deliver more than
    ISER_RX_PAYLOAD_SIZE, so the difference stays at or below
    MAX_KEY_VALUE_PAIRS and the existing min() clamps it; only the missing
    lower bound needs to be added.
    
    Fixes: b8d26b3be8b3 ("iser-target: Add iSCSI Extensions for RDMA (iSER) target driver")
    Link: https://patch.msgid.link/r/20260602194642.2273217-1-michael.bommarito@gmail.com
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ice: fix VF queue configuration with low MTU values [+ + +]
Author: Jose Ignacio Tornos Martinez <jtornosm@redhat.com>
Date:   Fri May 29 21:20:52 2026 -0400

    ice: fix VF queue configuration with low MTU values
    
    [ Upstream commit 3ba4dd024d26372733d1c02e13e076c6016e3320 ]
    
    The ice driver's VF queue configuration validation rejects
    databuffer_size values below 1024 bytes, which prevents VFs from
    using MTU values below 871 bytes.
    
    The iavf driver calculates databuffer_size based on the MTU using:
      databuffer_size = ALIGN(MTU + LIBETH_RX_LL_LEN, 128)
    
    where LIBETH_RX_LL_LEN = 26 (ETH_HLEN + 2*VLAN_HLEN + ETH_FCS_LEN).
    
    For MTU values below 871:
      MTU 870: 870 + 26 = 896, aligned to 128 = 896 (< 1024, rejected)
      MTU 871: 871 + 26 = 897, aligned to 128 = 1024 (>= 1024, accepted)
    
    The 1024-byte minimum seems unnecessarily restrictive, because the hardware
    supports databuffer_size as low as 128 bytes (the alignment boundary),
    which should allow MTU values down to the standard minimum of 68 bytes.
    
    I haven't found the reason why the limit was configured in the commit
    9c7dd7566d18 ("ice: add validation in OP_CONFIG_VSI_QUEUES VF message"), so
    with no more information and since it is working, change the minimum
    databuffer_size validation from 1024 to 128 bytes to allow standard low
    MTU values while still preventing invalid configurations.
    
    Fixes: 9c7dd7566d18 ("ice: add validation in OP_CONFIG_VSI_QUEUES VF message")
    cc: stable@vger.kernel.org
    Signed-off-by: Jose Ignacio Tornos Martinez <jtornosm@redhat.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
    Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>
    Tested-by: Rafal Romanowski <rafal.romanowski@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Link: https://patch.msgid.link/20260515182419.1597859-3-anthony.l.nguyen@intel.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ applied the change to ice_virtchnl.c ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ieee802154: 6lowpan: only accept IPv6 packets in lowpan_xmit() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jun 3 07:29:55 2026 +0000

    ieee802154: 6lowpan: only accept IPv6 packets in lowpan_xmit()
    
    [ Upstream commit 3a5f3f7aff18bcc36a57839cf50cf0cc8de707f3 ]
    
    The aoe driver (or similar) generates a non-IPv6 packet
    (e.g., ETH_P_AOE) and queues it for transmission via dev_queue_xmit()
    on a 6LoWPAN interface (configured by the user or test case).
    
    Since the packet is not IPv6, the 6LoWPAN header_ops->create function
    (lowpan_header_create or header_create) returns early without initializing
    the lowpan_addr_info structure in the skb headroom.
    
    In the transmit function (lowpan_xmit), the driver calls lowpan_header
    (or setup_header) which unconditionally copies and uses the lowpan_addr_info
    from the headroom, which contains uninitialized data.
    
    Fix this by dropping non IPv6 packets.
    
    A similar fix is needed in net/bluetooth/6lowpan.c bt_xmit().
    
    Fixes: 4dc315e267fe ("ieee802154: 6lowpan: move transmit functionality")
    Reported-by: syzbot+f13c19f75e1097abd116@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/6a1fd763.278b5b03.2bcf39.0049.GAE@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Link: https://patch.msgid.link/20260603072955.4032221-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iio: adc: npcm: Convert to platform remove callback returning void [+ + +]
Author: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Date:   Thu Jun 4 07:25:55 2026 -0400

    iio: adc: npcm: Convert to platform remove callback returning void
    
    [ Upstream commit 5253a5cc7709688b9a000f7928bfaa3366d0af98 ]
    
    The .remove() callback for a platform driver returns an int which makes
    many driver authors wrongly assume it's possible to do error handling by
    returning an error code. However the value returned is ignored (apart
    from emitting a warning) and this typically results in resource leaks.
    To improve here there is a quest to make the remove callback return
    void. In the first step of this quest all drivers are converted to
    .remove_new() which already returns void. Eventually after all drivers
    are converted, .remove_new() will be renamed to .remove().
    
    Trivially convert this driver from always returning zero in the remove
    callback to the void returning variant.
    
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Link: https://lore.kernel.org/r/20230919174931.1417681-18-u.kleine-koenig@pengutronix.de
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Stable-dep-of: 0d42e2c0bd6c ("iio: adc: npcm: fix unbalanced clk_disable_unprepare()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: adc: npcm: fix unbalanced clk_disable_unprepare() [+ + +]
Author: David Carlier <devnexen@gmail.com>
Date:   Thu Jun 4 07:25:56 2026 -0400

    iio: adc: npcm: fix unbalanced clk_disable_unprepare()
    
    [ Upstream commit 0d42e2c0bd6ceb89e44c6e065f9bdf9b1df3ef0c ]
    
    The driver acquired the ADC clock with devm_clk_get() and read its
    rate, but never called clk_prepare_enable(). The probe error path and
    npcm_adc_remove() both called clk_disable_unprepare() unconditionally,
    causing the clk framework's enable/prepare counts to underflow on
    probe failure or module unbind.
    
    The issue went unnoticed because NPCM BMC firmware leaves the ADC
    clock enabled at boot, so the driver happened to work in practice.
    
    Switch to devm_clk_get_enabled() so the clock is properly enabled
    during probe and automatically released by the device-managed
    cleanup, and drop the now-redundant clk_disable_unprepare() from
    both the probe error path and remove().
    
    While at it, drop the duplicate error message on devm_request_irq()
    failure since the IRQ core already logs it.
    
    Fixes: 9bf85fbc9d8f ("iio: adc: add NPCM ADC driver")
    Signed-off-by: David Carlier <devnexen@gmail.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <jic23@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: adc: viperboard: Fix error handling in vprbrd_iio_read_raw [+ + +]
Author: Salah Triki <salah.triki@gmail.com>
Date:   Thu May 7 20:07:51 2026 +0100

    iio: adc: viperboard: Fix error handling in vprbrd_iio_read_raw
    
    commit 422b5bbf333f75fb486855ad0eedc23cf21f3277 upstream.
    
    The driver proceeds to the reception phase even if the preceding
    transmission fails.
    
    This uses a goto error label for an early bail out and ensures the mutex is
    properly unlocked in case of failure.
    
    Fixes: ffd8a6e7a778 ("iio: adc: Add viperboard adc driver")
    Signed-off-by: Salah Triki <salah.triki@gmail.com>
    Reviewed-by: Joshua Crofts <joshua.crofts1@gmail.com>
    Reviewed-by: Maxwell Doose <m32285159@gmail.com>
    Reviewed-by: Nuno Sá <nuno.sa@analog.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <jic23@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: adc: xilinx-xadc: Fix sequencer mode in postdisable for dual mux [+ + +]
Author: Christofer Jonason <christofer.jonason@guidelinegeo.com>
Date:   Wed Mar 4 10:07:27 2026 +0100

    iio: adc: xilinx-xadc: Fix sequencer mode in postdisable for dual mux
    
    commit 852534744c2d35626a604f128ff0b8ec12805591 upstream.
    
    xadc_postdisable() unconditionally sets the sequencer to continuous
    mode. For dual external multiplexer configurations this is incorrect:
    simultaneous sampling mode is required so that ADC-A samples through
    the mux on VAUX[0-7] while ADC-B simultaneously samples through the
    mux on VAUX[8-15]. In continuous mode only ADC-A is active, so
    VAUX[8-15] channels return incorrect data.
    
    Since postdisable is also called from xadc_probe() to set the initial
    idle state, the wrong sequencer mode is active from the moment the
    driver loads.
    
    The preenable path already uses xadc_get_seq_mode() which returns
    SIMULTANEOUS for dual mux. Fix postdisable to do the same.
    
    Fixes: bdc8cda1d010 ("iio:adc: Add Xilinx XADC driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Christofer Jonason <christofer.jonason@guidelinegeo.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
    Reviewed-by: Nuno Sá <nuno.sa@analog.com>
    Reviewed-by: Salih Erim <salih.erim@amd.com>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: buffer: hw-consumer: fix use-after-free in error path [+ + +]
Author: Felix Gu <ustc.gu@gmail.com>
Date:   Thu Apr 30 21:29:06 2026 +0800

    iio: buffer: hw-consumer: fix use-after-free in error path
    
    commit 6f5ed4f2c7c83f33344e0ba179f72a12e5dad4a4 upstream.
    
    In the err_put_buffers cleanup path of iio_hw_consumer_alloc(), the code
    was using list_for_each_entry() to iterate through buffers while calling
    iio_buffer_put() which can free the current buffer if refcount drops to 0.
    The list_for_each_entry() loop macro then evaluates buf->head.next to
    continue iteration, accessing the freed buffer.
    
    Fix this by using list_for_each_entry_safe().
    
    Fixes: 48b66f8f936f ("iio: Add hardware consumer buffer support")
    Reported-by: sashiko <sashiko-bot@kernel.org>
    Closes: https://sashiko.dev/#/patchset/20260427-iio_buf-v1-1-2bbdac844647%40gmail.com
    Signed-off-by: Felix Gu <ustc.gu@gmail.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
    Reviewed-by: Nuno Sá <nuno.sa@analog.com>
    Reviewed-by: Maxwell Doose <m32285159@gmail.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <jic23@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: chemical: scd30: fix division by zero in write_raw [+ + +]
Author: Antoniu Miclaus <antoniu.miclaus@analog.com>
Date:   Thu Jun 4 14:57:11 2026 -0400

    iio: chemical: scd30: fix division by zero in write_raw
    
    [ Upstream commit 5aba4f94b225617a55fed442a70329b2ee19c0a5 ]
    
    Add a zero check for val2 before using it as a divisor when setting the
    sampling frequency. A user writing a zero fractional part to the
    sampling_frequency sysfs attribute triggers a division by zero in the
    kernel.
    
    Fixes: 64b3d8b1b0f5 ("iio: chemical: scd30: add core driver")
    Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <jic23@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: chemical: scd30: Use guard(mutex) to allow early returns [+ + +]
Author: Jonathan Cameron <jic23@kernel.org>
Date:   Thu Jun 4 14:57:10 2026 -0400

    iio: chemical: scd30: Use guard(mutex) to allow early returns
    
    [ Upstream commit 5feb5532870fbced5d6f450b8061a33f461b88ca ]
    
    Auto cleanup based release of the lock allows for simpler code flow in a
    few functions with large multiplexing style switch statements and no
    common operations following the switch.
    
    Suggested-by: David Lechner <dlechner@baylibre.com>
    Cc: Tomasz Duszynski <tomasz.duszynski@octakon.com>
    Reviewed-by: David Lechner <dlechner@baylibre.com>
    Link: https://patch.msgid.link/20250209180624.701140-3-jic23@kernel.org
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Stable-dep-of: 5aba4f94b225 ("iio: chemical: scd30: fix division by zero in write_raw")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: dac: ad5686: acquire lock when doing powerdown control [+ + +]
Author: Rodrigo Alencar <rodrigo.alencar@analog.com>
Date:   Tue May 5 13:35:04 2026 +0100

    iio: dac: ad5686: acquire lock when doing powerdown control
    
    commit 5237c3175cae5ab05f18878cec3301a04403859e upstream.
    
    Protect access of pwr_down_mode and pwr_down_mask fields with existing
    mutex lock. Each channel exposes their own attributes for controlling
    powerdown modes and powerdown state. This fixes potential race conditions
    as those the write functions perform non-atomic read-modify-write
    operations to those pwr_down_* fields. This issue exists since the ad5686
    driver was first introduced.
    
    Fixes: c2f37c8dcadc ("iio: dac: New driver for AD5686R, AD5685R, AD5684R Digital to analog converters")
    Signed-off-by: Rodrigo Alencar <rodrigo.alencar@analog.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <jic23@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: dac: ad5686: fix input raw value check [+ + +]
Author: Rodrigo Alencar <rodrigo.alencar@analog.com>
Date:   Fri May 1 10:14:55 2026 +0100

    iio: dac: ad5686: fix input raw value check
    
    commit d01220ee5e43c65a206df827b39bf5cf5f7b9dce upstream.
    
    Fix range check for input raw value, which is off by one, i.e., for a
    10-bit DAC the max valid value is 1023, but 1 << 10 equals 1024, which
    passes the previous check, allowing an out-of-range write. The issue
    exists since the ad5686 driver was first introduced.
    
    Fixes: c2f37c8dcadc ("iio: dac: New driver for AD5686R, AD5685R, AD5684R Digital to analog converters")
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
    Signed-off-by: Rodrigo Alencar <rodrigo.alencar@analog.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <jic23@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: dac: ad5686: fix ref bit initialization for single-channel parts [+ + +]
Author: Rodrigo Alencar <rodrigo.alencar@analog.com>
Date:   Thu Jun 4 20:34:32 2026 -0400

    iio: dac: ad5686: fix ref bit initialization for single-channel parts
    
    [ Upstream commit ecae2ae606d493cf11457946436335bd0e726663 ]
    
    The reference bit position was ignored when writing the register at the
    probe() function (!!val was used). When such bit is 1, internal voltage
    reference is disabled so that an external one can be used. For
    multi-channel devices, bit 0 of the Internal Reference Setup command
    behaves the same way, so AD5686_REF_BIT_MSK is created. The issue exists
    since support for single-channel devices were first introduced.
    
    Fixes: be1b24d24541 ("iio:dac:ad5686: Add AD5691R/AD5692R/AD5693/AD5693R support")
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
    Signed-off-by: Rodrigo Alencar <rodrigo.alencar@analog.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <jic23@kernel.org>
    [ adapted `has_external_vref` to the in-tree equivalent `voltage_uv` variable in the `val =` computation ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: dac: max5821: fix return value check in powerdown sync [+ + +]
Author: Salah Triki <salah.triki@gmail.com>
Date:   Mon Apr 27 22:33:19 2026 +0100

    iio: dac: max5821: fix return value check in powerdown sync
    
    commit d0a228d903425e653f18a4341e60c0538afb6d41 upstream.
    
    The function max5821_sync_powerdown_mode() returned the result of
    i2c_master_send() directly. If a partial transfer occurred, it would
    be incorrectly treated as a success by the caller.
    
    While the caller currently handles the positive return value of 2 as
    success, this patch refactors the function to return 0 on full success
    and -EIO on short writes. This ensures robust error handling for
    incomplete transfers and improves code maintainability by using
    sizeof(outbuf).
    
    Fixes: 472988972737 ("iio: add support of the max5821")
    Signed-off-by: Salah Triki <salah.triki@gmail.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <jic23@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: gyro: adis16260: fix division by zero in write_raw [+ + +]
Author: Antoniu Miclaus <antoniu.miclaus@analog.com>
Date:   Thu Jun 4 13:37:58 2026 -0400

    iio: gyro: adis16260: fix division by zero in write_raw
    
    [ Upstream commit 761e8b489e6cf166c574034b70637f8a7eadd0ee ]
    
    Add a validation check for the sampling frequency value before using it
    as a divisor. A user writing zero to the sampling_frequency sysfs
    attribute triggers a division by zero in the kernel.
    
    Fixes: 089a41985c6c ("staging: iio: adis16260 digital gyro driver")
    Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com>
    Reviewed-by: Nuno Sá <nuno.sa@analog.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: gyro: itg3200: fix i2c read into the wrong stack location [+ + +]
Author: David Carlier <devnexen@gmail.com>
Date:   Tue May 5 14:37:48 2026 +0100

    iio: gyro: itg3200: fix i2c read into the wrong stack location
    
    commit 6bdc3023d62ed5c7d591f0eb27a5adb37fb892ae upstream.
    
    itg3200_read_all_channels() takes `__be16 *buf' as a parameter and
    fills the i2c_msg destination as `(char *)&buf'. Since `buf' is the
    parameter (a pointer), `&buf' is the address of the local pointer
    slot on the stack of itg3200_read_all_channels(), not the address
    of the caller's scan buffer. The (char *) cast hides the type
    mismatch.
    
    i2c_transfer() therefore writes ITG3200_SCAN_ELEMENTS * sizeof(s16)
    = 8 bytes into the parameter's stack slot, which is discarded when
    the function returns. The caller's scan buffer in
    itg3200_trigger_handler() is never written to, so
    iio_push_to_buffers_with_timestamp() pushes uninitialised stack
    contents to userspace via /dev/iio:deviceX every scan -- both a
    functional bug (no actual gyroscope or temperature data is
    delivered through the triggered buffer) and an information leak.
    
    The non-buffered read_raw() path is unaffected: it goes through
    itg3200_read_reg_s16() which uses `&out' on a local s16 value,
    where that is correct.
    
    Drop the spurious `&' so the i2c read writes into the caller's
    buffer.
    
    Fixes: 9dbf091da080 ("iio: gyro: Add itg3200")
    Cc: stable@vger.kernel.org
    Signed-off-by: David Carlier <devnexen@gmail.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
    Signed-off-by: Jonathan Cameron <jic23@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: imu: st_lsm6dsx: fix stack leak in tagged FIFO buffer [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Apr 9 15:40:48 2026 +0200

    iio: imu: st_lsm6dsx: fix stack leak in tagged FIFO buffer
    
    commit c9d8e9adaa63150ef7e833480b799d0bab83a276 upstream.
    
    The tagged FIFO path declares iio_buff on the stack with __aligned(8)
    but no initializer, but there is a hole in the structure, which will
    then leak to userspace as ST_LSM6DSX_SAMPLE_SIZE bytes (6) will be
    copied, but the space between that and the timestamp are not
    initialized.
    
    Commit c14edb4d0bdc ("iio:imu:st_lsm6dsx Fix alignment and data leak
    issues") moved the untagged FIFO path to a kzalloc'd buffer in hw->scan,
    but for the tagged path it only added the alignment qualifier and not
    the initializer :(
    
    Fix this by just zero-initializing the structure on the stack.
    
    Cc: Lorenzo Bianconi <lorenzo@kernel.org>
    Cc: Jonathan Cameron <jic23@kernel.org>
    Cc: David Lechner <dlechner@baylibre.com>
    Cc: "Nuno Sá" <nuno.sa@analog.com>
    Cc: Andy Shevchenko <andy@kernel.org>
    Fixes: c14edb4d0bdc ("iio:imu:st_lsm6dsx Fix alignment and data leak issues")
    Cc: stable <stable@kernel.org>
    Assisted-by: gregkh_clanker_t1000
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Reviewed-by: David Lechner <dlechner@baylibre.com>
    Signed-off-by: Jonathan Cameron <jic23@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: light: cm3323: fix reg_conf not being initialized correctly [+ + +]
Author: Aldo Conte <aldocontelk@gmail.com>
Date:   Tue Apr 7 17:17:01 2026 +0200

    iio: light: cm3323: fix reg_conf not being initialized correctly
    
    commit 1f4f0bcc5255dec5c4c3a1551bf49d8c33b69b20 upstream.
    
    The code stores the return value of i2c_smbus_write_word_data()
    in data->reg_conf; however, this value represents the result
    of the write operation and not the value actually written to
    the configuration register. This meant that the contents of
    data->reg_conf did not truly reflect the contents
    of the hardware register.
    
    Instead, save the value of the register before the write
    and use this value in the I2C write.
    
    The bug was found by code inspection: i2c_smbus_write_word_data()
    returns 0 on success, not the value written to the register.
    
    Tested using i2c-stub on a Raspberry Pi 3B running a custom 6.19.10
    kernel. Before loading the driver, the configuration register 0x00
    CM3323_CMD_CONF was populated with 0x0030 using
    `i2cset -y 11 0x10 0x00 0x0030 w`, encoding an integration time of 320ms
    in bits[6:4].
    
    Due to incorrect initialization of data->reg_conf in
    cm3323_init(), the print of integration_time returns 0.040000
    instead of the expected 0.320000. This happens because the read of the
    integration_time depends on cm3323_get_it_bits() that is based on the
    value of data->reg_conf, which is erroneously set to 0.
    
    With this fix applied, data->reg_conf correctly saves 0x0030 after init
    and the successive integration_time reports 0.320000 as expected.
    
    Fixes: 8b0544263761 ("iio: light: Add support for Capella CM3323 color sensor")
    Cc: stable@vger.kernel.org
    Signed-off-by: Aldo Conte <aldocontelk@gmail.com>
    Signed-off-by: Jonathan Cameron <jic23@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: magnetometer: st_magn: fix default DRDY pin selection for LIS2MDL [+ + +]
Author: Advait Dhamorikar <advaitd@mechasystems.com>
Date:   Tue Apr 7 12:50:59 2026 +0530

    iio: magnetometer: st_magn: fix default DRDY pin selection for LIS2MDL
    
    commit 49f79cd28f1e3333cbe0d616ce59ead0b24bf34e upstream.
    
    The device tree binding for st,lis2mdl does not support
    st,drdy-int-pin property. However, when no platform data is provided
    and the property is absent, the driver falls back to default_magn_pdata
    which hardcodes drdy_int_pin = 2. This causes
    `st_sensors_set_drdy_int_pin` to fail with -EINVAL because the LIS2MDL
    sensor settings have no INT2 DRDY mask defined.
    
    Fix this by checking the sensor's INT2 DRDY mask availability at
    probe time and selecting the appropriate default pin. Sensors that
    do not support INT2 DRDY will default to INT1, while all others
    retain the existing default of INT2.
    
    Fixes: 38934daf7b5c ("iio: magnetometer: st_magn: Provide default platform data")
    Signed-off-by: Advait Dhamorikar <advaitd@mechasystems.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <jic23@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: ssp_sensors: cancel delayed work_refresh on remove [+ + +]
Author: Sanjay Chitroda <sanjayembeddedse@gmail.com>
Date:   Sun Apr 26 14:47:04 2026 +0530

    iio: ssp_sensors: cancel delayed work_refresh on remove
    
    commit eedf7602fbd929e97e0c480da501dc7a34beb2a8 upstream.
    
    The work_refresh may still be pending or running when the device is
    removed, cancel the delayed work_refresh in remove path.
    
    Fixes: 50dd64d57eee ("iio: common: ssp_sensors: Add sensorhub driver")
    Signed-off-by: Sanjay Chitroda <sanjayembeddedse@gmail.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <jic23@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: temperature: tsys01: fix broken PROM checksum validation [+ + +]
Author: Salah Triki <salah.triki@gmail.com>
Date:   Tue May 5 08:10:24 2026 +0100

    iio: temperature: tsys01: fix broken PROM checksum validation
    
    commit 4701e471c16866e7aa8f5e6a3a6b0d31e097e2c9 upstream.
    
    The current implementation of tsys01_crc_valid() incorrectly sums the
    first word (n_prom[0]) repeatedly instead of iterating over the 8 words
    retrieved from the PROM. This leads to a checksum mismatch and probe
    failure on hardware.
    
    According to the TSYS01 datasheet, the PROM consists of 8 words. A valid
    check must iterate through all 8 words to verify the integrity of the
    calibration data. The current driver only checks the first word 8 times.
    
    Note: This fix was identified during a code audit and is based on
    datasheet specifications. It has not been tested on real hardware.
    
    Fixes: 43e53407f680 ("Add tsys01 meas-spec driver support")
    Signed-off-by: Salah Triki <salah.triki@gmail.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <jic23@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ima: verify the previous kernel's IMA buffer lies in addressable RAM [+ + +]
Author: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
Date:   Wed Jun 3 21:02:37 2026 +0800

    ima: verify the previous kernel's IMA buffer lies in addressable RAM
    
    [ Upstream commit 10d1c75ed4382a8e79874379caa2ead8952734f9 ]
    
    Patch series "Address page fault in ima_restore_measurement_list()", v3.
    
    When the second-stage kernel is booted via kexec with a limiting command
    line such as "mem=<size>" we observe a pafe fault that happens.
    
        BUG: unable to handle page fault for address: ffff97793ff47000
        RIP: ima_restore_measurement_list+0xdc/0x45a
        #PF: error_code(0x0000)  not-present page
    
    This happens on x86_64 only, as this is already fixed in aarch64 in
    commit: cbf9c4b9617b ("of: check previous kernel's ima-kexec-buffer
    against memory bounds")
    
    This patch (of 3):
    
    When the second-stage kernel is booted with a limiting command line (e.g.
    "mem=<size>"), the IMA measurement buffer handed over from the previous
    kernel may fall outside the addressable RAM of the new kernel.  Accessing
    such a buffer can fault during early restore.
    
    Introduce a small generic helper, ima_validate_range(), which verifies
    that a physical [start, end] range for the previous-kernel IMA buffer lies
    within addressable memory:
            - On x86, use pfn_range_is_mapped().
            - On OF based architectures, use page_is_ram().
    
    Link: https://lkml.kernel.org/r/20251231061609.907170-1-harshit.m.mogalapalli@oracle.com
    Link: https://lkml.kernel.org/r/20251231061609.907170-2-harshit.m.mogalapalli@oracle.com
    Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
    Reviewed-by: Mimi Zohar <zohar@linux.ibm.com>
    Cc: Alexander Graf <graf@amazon.com>
    Cc: Ard Biesheuvel <ardb@kernel.org>
    Cc: Borislav Betkov <bp@alien8.de>
    Cc: guoweikang <guoweikang.kernel@gmail.com>
    Cc: Henry Willard <henry.willard@oracle.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jiri Bohac <jbohac@suse.cz>
    Cc: Joel Granados <joel.granados@kernel.org>
    Cc: Jonathan McDowell <noodles@fb.com>
    Cc: Mike Rapoport <rppt@kernel.org>
    Cc: Paul Webb <paul.x.webb@oracle.com>
    Cc: Sohil Mehta <sohil.mehta@intel.com>
    Cc: Sourabh Jain <sourabhjain@linux.ibm.com>
    Cc: Thomas Gleinxer <tglx@linutronix.de>
    Cc: Yifei Liu <yifei.l.liu@oracle.com>
    Cc: Baoquan He <bhe@redhat.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Wenshan Lan <jetlan9@163.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
inet: frags: add inet_frag_queue_flush() [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Fri May 29 18:24:08 2026 +0800

    inet: frags: add inet_frag_queue_flush()
    
    [ Upstream commit 1231eec6994be29d6bb5c303dfa54731ed9fc0e6 ]
    
    Instead of exporting inet_frag_rbtree_purge() which requires that
    caller takes care of memory accounting, add a new helper. We will
    need to call it from a few places in the next patch.
    
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20251207010942.1672972-3-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Rajani Kantha <681739313@139.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

inet: frags: fix use-after-free caused by the fqdir_pre_exit() flush [+ + +]
Author: Hyunwoo Kim <imv4bel@gmail.com>
Date:   Tue Jun 2 19:21:05 2026 +0900

    inet: frags: fix use-after-free caused by the fqdir_pre_exit() flush
    
    commit 32594b09854970d7ba83eb2dc8c69a2edd158c8e upstream.
    
    On netns teardown, fqdir_pre_exit() walks the fqdir rhashtable and
    flushes every fragment queue that is not yet complete using
    inet_frag_queue_flush(). That helper frees all the skbs queued on the
    fragment queue but does not set INET_FRAG_COMPLETE, and leaves
    q->fragments_tail and q->last_run_head pointing at the freed skbs.
    The queue itself stays in the rhashtable.
    
    fqdir_pre_exit() first lowers high_thresh to 0 to stop new queue lookups,
    but it cannot stop a fragment that already obtained the queue through
    inet_frag_find() earlier and stalled just before taking the queue lock.
    Once that fragment resumes after the flush and takes the queue lock,
    it passes the INET_FRAG_COMPLETE check and then dereferences the freed
    fragments_tail. inet_frag_queue_insert() reads FRAG_CB() and ->len of
    that pointer and, on the append path, writes ->next_frag, causing a
    slab use-after-free. IPv6, nf_conntrack_reasm6 and 6lowpan reassembly
    share the same flush path and are affected as well.
    
    Reset rb_fragments, fragments_tail and last_run_head in
    inet_frag_queue_flush() so a flushed queue no longer points at the
    freed skbs. A fragment that resumes after the flush and takes the
    queue lock then finds an empty queue and starts a new run instead of
    dereferencing the freed fragments_tail. ip_frag_reinit() already
    performed this reset after its own flush, so drop the now duplicate
    code there.
    
    Cc: stable@vger.kernel.org
    Fixes: 006a5035b495 ("inet: frags: flush pending skbs in fqdir_pre_exit()")
    Suggested-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Hyunwoo Kim <imv4bel@gmail.com>
    Link: https://patch.msgid.link/ah6ukYq5G98LshdA@v4bel
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

inet: frags: flush pending skbs in fqdir_pre_exit() [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Fri May 29 18:24:09 2026 +0800

    inet: frags: flush pending skbs in fqdir_pre_exit()
    
    [ Upstream commit 006a5035b495dec008805df249f92c22c89c3d2e ]
    
    We have been seeing occasional deadlocks on pernet_ops_rwsem since
    September in NIPA. The stuck task was usually modprobe (often loading
    a driver like ipvlan), trying to take the lock as a Writer.
    lockdep does not track readers for rwsems so the read wasn't obvious
    from the reports.
    
    On closer inspection the Reader holding the lock was conntrack looping
    forever in nf_conntrack_cleanup_net_list(). Based on past experience
    with occasional NIPA crashes I looked thru the tests which run before
    the crash and noticed that the crash follows ip_defrag.sh. An immediate
    red flag. Scouring thru (de)fragmentation queues reveals skbs sitting
    around, holding conntrack references.
    
    The problem is that since conntrack depends on nf_defrag_ipv6,
    nf_defrag_ipv6 will load first. Since nf_defrag_ipv6 loads first its
    netns exit hooks run _after_ conntrack's netns exit hook.
    
    Flush all fragment queue SKBs during fqdir_pre_exit() to release
    conntrack references before conntrack cleanup runs. Also flush
    the queues in timer expiry handlers when they discover fqdir->dead
    is set, in case packet sneaks in while we're running the pre_exit
    flush.
    
    The commit under Fixes is not exactly the culprit, but I think
    previously the timer firing would eventually unblock the spinning
    conntrack.
    
    Fixes: d5dd88794a13 ("inet: fix various use-after-free in defrags units")
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20251207010942.1672972-4-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Rajani Kantha <681739313@139.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Input: atkbd - add DMI quirk for Lenovo Yoga Air 14 (83QK) [+ + +]
Author: Zeyu WANG <zeyu.thomas.wang@gmail.com>
Date:   Wed Jun 3 01:09:09 2026 +0800

    Input: atkbd - add DMI quirk for Lenovo Yoga Air 14 (83QK)
    
    commit ad0979fe053e9f2db82da82188256ef6eb41095a upstream.
    
    The Lenovo Yoga Air 14 (83QK) laptop keyboard becomes unresponsive
    after the standard atkbd init sequence. Controlled testing on the
    actual hardware shows the F5 (ATKBD_CMD_RESET_DIS / deactivate)
    command specifically corrupts the EC state, causing zero IRQ1
    interrupts after init.
    
    Skipping only the deactivate command (while keeping F4 ENABLE)
    resolves the issue completely: both keystroke input and CapsLock
    LED toggle work correctly. The reverse test - skipping only F4
    while keeping F5 - makes the problem worse (zero keystroke
    interrupts), confirming F5 is the sole culprit.
    
    Add a DMI quirk entry for LENOVO/83QK using the existing
    atkbd_deactivate_fixup callback, consistent with the existing
    entries for LG Electronics and HONOR FMB-P that address the
    same EC F5 deactivate issue.
    
    Signed-off-by: Zeyu WANG <zeyu.thomas.wang@gmail.com>
    Link: https://patch.msgid.link/20260602170909.14725-1-zeyu.thomas.wang@gmail.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: atkbd - skip deactivate for HONOR BCC-N's internal keyboard [+ + +]
Author: Cryolitia PukNgae <cryolitia.pukngae@linux.dev>
Date:   Fri Jun 5 15:27:21 2026 +0800

    Input: atkbd - skip deactivate for HONOR BCC-N's internal keyboard
    
    commit fb402386af4cdce108ff991a796386de55439735 upstream.
    
    After commit 9cf6e24c9fbf17e52de9fff07f12be7565ea6d61 ("Input: atkbd -
    do not skip atkbd_deactivate() when skipping ATKBD_CMD_GETID"), HONOR
    BCC-N, aka HONOR MagicBook 14 2026's internal keyboard stops
    working. Adding the atkbd_deactivate_fixup quirk fixes it.
    
    DMI: HONOR BCC-N/BCC-N-PCB, BIOS 1.04 04/07/2026
    
    Fixes: 9cf6e24c9fbf17e52de9fff07f12be7565ea6d61 ("Input: atkbd - do not skip atkbd_deactivate() when skipping ATKBD_CMD_GETID")
    Reported-by: Hongfei Ren <lcrhf@outlook.com>
    Link: https://github.com/colorcube/Linux-on-Honor-Magicbook-14-Pro/issues/1#issuecomment-4562679891
    Tested-by: Hongfei Ren <lcrhf@outlook.com>
    Cc: stable@kernel.org
    Signed-off-by: Cryolitia PukNgae <cryolitia.pukngae@linux.dev>
    Link: https://patch.msgid.link/20260605-honor-v1-1-78e05e491193@linux.dev
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: atmel_mxt_ts - fix boundary check in mxt_prepare_cfg_mem [+ + +]
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Mon May 4 11:54:45 2026 -0700

    Input: atmel_mxt_ts - fix boundary check in mxt_prepare_cfg_mem
    
    commit baa0210fb6a9dc3882509a9411b6d284d88fe30e upstream.
    
    When a configuration file provides an object size that is larger than the
    driver's known mxt_obj_size(object), the driver intends to discard the
    extra bytes.
    
    The loop iterates using for (i = 0; i < size; i++). Inside the loop, the
    condition to skip processing extra bytes is:
    
        if (i > mxt_obj_size(object))
            continue;
    
    Since i is a 0-based index, the valid indices for the object are 0 through
    mxt_obj_size(object) - 1.
    
    When i == mxt_obj_size(object), the condition evaluates to false, and the
    code processes the byte instead of discarding it.
    
    This causes the code to calculate byte_offset = reg + i - cfg->start_ofs
    and writes the byte there, overwriting exactly one byte of the adjacent
    instance or object.
    
    Update the boundary check to skip extra bytes correctly by using >=.
    
    Fixes: 50a77c658b80 ("Input: atmel_mxt_ts - download device config using firmware loader")
    Cc: stable@vger.kernel.org
    Assisted-by: Gemini:gemini-3.1-pro
    Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>
    Link: https://patch.msgid.link/20260504185448.4055973-1-dmitry.torokhov@gmail.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: elan_i2c - validate firmware size before use [+ + +]
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Sat Apr 25 22:07:06 2026 -0700

    Input: elan_i2c - validate firmware size before use
    
    commit 76b0d0baa9ae9c60e726bbe1b6ff0bec2c993634 upstream.
    
    Ensure that the firmware file is large enough to contain the expected
    number of pages and the signature (which resides at the end of the
    firmware blob) before accessing them to prevent potential out-of-bounds
    reads.
    
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/ae2dOgiFvXRm4BHo@google.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: ims-pcu - fix usb_free_coherent() size in ims_pcu_buffers_free() [+ + +]
Author: Thomas Fourier <fourier.thomas@gmail.com>
Date:   Fri May 22 10:54:04 2026 +0200

    Input: ims-pcu - fix usb_free_coherent() size in ims_pcu_buffers_free()
    
    commit dab48a7e74e6a394f3aa0461a2b1fb0c7b38fcb8 upstream.
    
    The input buffer size is pcu->max_in_size, but pcu->max_out_size is
    passed to usb_free_coherent().
    
    Change size to match the allocation size.
    
    Fixes: 628329d52474 ("Input: add IMS Passenger Control Unit driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Thomas Fourier <fourier.thomas@gmail.com>
    Link: https://patch.msgid.link/20260522085412.45430-2-fourier.thomas@gmail.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: synaptics - add LEN2058 to SMBus passlist for ThinkPad E490 [+ + +]
Author: Nicolás Bazaes <contacto@bazaes.cl>
Date:   Wed May 13 21:35:49 2026 -0400

    Input: synaptics - add LEN2058 to SMBus passlist for ThinkPad E490
    
    commit 16ca52bc209fa4bf9239cd9e5643e95533476b58 upstream.
    
    The Lenovo ThinkPad E490 (PNP ID: LEN2058) has a Synaptics TM3471-020
    touchpad that supports SMBus/RMI4 mode but is not listed in
    smbus_pnp_ids[]. Without this entry, RMI4 over SMBus is not enabled
    by default, and the touchpad falls back to PS/2 mode.
    
    Adding LEN2058 to the passlist enables automatic RMI4 detection without
    requiring the psmouse.synaptics_intertouch parameter, and matches
    the behavior of similar ThinkPad models already in the list
    (E480/LEN2054, E580/LEN2055).
    
    Tested on ThinkPad E490 with kernel 7.0.5-zen1 and Arch Linux.
    RMI4 over SMBus is confirmed working without any kernel parameters.
    
    Signed-off-by: Nicolás Bazaes <contacto@bazaes.cl>
    Assisted-by: Claude:claude-sonnet-4-6
    Link: https://patch.msgid.link/20260514013552.14234-1-contacto@bazaes.cl
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: usbtouchscreen - clamp NEXIO data_len/x_len to URB buffer size [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Apr 20 18:00:27 2026 +0200

    Input: usbtouchscreen - clamp NEXIO data_len/x_len to URB buffer size
    
    commit 2905281cbda52ec9df540113b35b835feb5fafd3 upstream.
    
    nexio_read_data() pulls data_len and x_len from a packed __be16 header
    in the device's interrupt packet and then walks packet->data[0..x_len)
    and packet->data[x_len..data_len) comparing each byte against a
    threshold.
    
    Both fields are 16-bit on the wire (max 65535).  The existing
    adjustments shave at most 0x100 / 0x80 off, so the loop bound can still
    reach roughly 0xfeff.  The URB transfer buffer for NEXIO is rept_size
    (1024) bytes from usb_alloc_coherent(), with the first 7 occupied by the
    packed header — so packet->data[] has 1017 valid bytes.  read_data()
    callbacks are not given urb->actual_length, and nothing else bounds the
    walk.
    
    A device that lies about its length can get a ~64 KiB out-of-bounds read
    past the coherent DMA allocation.  The first index whose byte exceeds
    NEXIO_THRESHOLD lands in begin_x / begin_y and from there into the
    reported touch coordinates, so adjacent kernel memory contents leak to
    userspace as ABS_X / ABS_Y events.  Far enough out, the read can also
    hit an unmapped page and fault.
    
    Fix this all by clamping data_len to the buffer's data[] capacity and
    x_len to data_len.
    
    Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Fixes: 5197424cdccc ("Input: usbtouchscreen - add NEXIO (or iNexio) support")
    Cc: stable <stable@kernel.org>
    Assisted-by: gkh_clanker_t1000
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Link: https://patch.msgid.link/2026042026-chlorine-epidermis-fd6d@gregkh
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Input: xpad - add "Nova 2 Lite" from GameSir [+ + +]
Author: Qbeliw Tanaka <q.tanaka@gmx.com>
Date:   Thu Apr 30 21:44:12 2026 -0700

    Input: xpad - add "Nova 2 Lite" from GameSir
    
    commit 1f6ac0f8441c48c4cc250141e1da8486c13512ba upstream.
    
    Add support for the gamepad "Nova 2 Lite" from GameSir, compatible with
    the Xbox 360 gamepad.
    
    Signed-off-by: Qbeliw Tanaka <q.tanaka@gmx.com>
    Link: https://patch.msgid.link/20260429.162040.930225048583399359.q.tanaka@gmx.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: xpad - add support for ASUS ROG RAIKIRI II [+ + +]
Author: Dmitriy Zharov <contact@zharov.dev>
Date:   Thu Apr 30 22:35:22 2026 +0400

    Input: xpad - add support for ASUS ROG RAIKIRI II
    
    commit c897cf120696b94f56ed0f3197ba9a77071a59ec upstream.
    
    Add the VID/PIDs for the ASUS ROG RAIKIRI II controller to xpad_device
    and the VID to xpad_table. The controller has a physical PC/XBOX toggle
    which switches between XBOX360 and XBOXONE protocols.
    
    Signed-off-by: Dmitriy Zharov <contact@zharov.dev>
    Link: https://patch.msgid.link/20260430183522.122151-1-contact@zharov.dev
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: xpad - fix out-of-bounds access for Share button [+ + +]
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Sun Apr 26 21:09:33 2026 -0700

    Input: xpad - fix out-of-bounds access for Share button
    
    commit 6cdc46b38cf146ce81d4831b6472dbf7731849a2 upstream.
    
    xpadone_process_packet() receives len directly from urb->actual_length
    and uses it to index the share-button byte at data[len - 18] or
    data[len - 26]. Since both len and data[0] are under the device's
    control, a broken controller can send a GIP_CMD_INPUT packet with
    actual_length < 18 (e.g. 5 bytes) and reach this code path, causing
    accesses beyond the actual array.
    
    Fix this by calculating the offset and checking bounds against the
    packet length.
    
    Reported-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Fixes: 4ef46367073b ("Input: xpad - fix Share button on Xbox One controllers")
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
iomap: don't revert iov_iter on partially completed buffered writes [+ + +]
Author: Brian Foster <bfoster@redhat.com>
Date:   Fri Jun 12 08:10:47 2026 -0400

    iomap: don't revert iov_iter on partially completed buffered writes
    
    Gregg reports that the iomap retry behavior for nonblocking (nowait)
    append writes is broken. The problem occurs when an append write is
    first submitted in non-blocking mode (i.e. via io_uring), partially
    completes before hitting -EAGAIN, and then is resubmitted from
    blocking context.
    
    The specific problem is that at least one iteration of the loop in
    iomap_write_iter() completes in non-blocking context and thus has
    bumped i_size. The next iteration hits -EAGAIN, reverts the iov_iter
    and returns. io_uring retries the entire append write from blocking
    context, but since i_size has already been increased, the data that
    was partially written on the first attempt is rewritten at the new
    i_size. This is essentially an intra-write data corruption since the
    data written to the file does not reflect the write from userspace.
    
    This problem is already fixed on master as of commit 1a1a3b574b97
    ("iomap: advance the iter directly on buffered writes"). That commit
    was primarily intended to clean up iomap iter state tracking, but it
    also happened to remove the iov_iter revert and thus accidentally
    fix this problem as well. Without the revert, iomap will commit
    partial progress internally and loop once more before it more than
    likely hits -EAGAIN and returns partial progress consistent with the
    inode updates. This means the blocking retry from io_uring will pick
    up where the first attempt left off at the current i_size and
    perform the remainder of the write correctly.
    
    Cc: <stable@vger.kernel.org>
    Fixes: 18e419f6e80a ("iomap: Return -EAGAIN from iomap_write_iter()")
    Reported-by: Gregg Leventhal <gleventhal@janestreet.com>
    Reported-by: Eric Hagberg <ehagberg@janestreet.com>
    Signed-off-by: Brian Foster <bfoster@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iommu, debugobjects: avoid gcc-16.1 section mismatch warnings [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Wed May 13 16:53:54 2026 +0200

    iommu, debugobjects: avoid gcc-16.1 section mismatch warnings
    
    commit 4c9ad387aa2d6785299722e54224d34764edaeb3 upstream.
    
    gcc-16 has gained some more advanced inter-procedual optimization
    techniques that enable it to inline the dummy_tlb_add_page() and
    dummy_tlb_flush() function pointers into a specialized version of
    __arm_v7s_unmap:
    
    WARNING: modpost: vmlinux: section mismatch in reference: __arm_v7s_unmap+0x2cc (section: .text) -> dummy_tlb_add_page (section: .init.text)
    ERROR: modpost: Section mismatches detected.
    
    >From what I can tell, the transformation is correct, as this is only
    called when __arm_v7s_unmap() is called from arm_v7s_do_selftests(),
    which is also __init. Since __arm_v7s_unmap() however is not __init,
    gcc cannot inline the inner function calls directly.
    
    In debug_objects_selftest(), the same thing happens. Both the
    caller and the leaf function are __init, but the IPA pulls
    it into a non-init one:
    
    WARNING: modpost: vmlinux: section mismatch in reference: lookup_object_or_alloc+0x7c (section: .text.lookup_object_or_alloc) -> is_static_object (section: .init.text)
    
    Marking the affected functions as not "__init" would reliably avoid this
    issue but is not a good solution because it removes an otherwise correct
    annotation. I tried marking the functions as 'noinline', but that ended
    up not covering all the affected configurations.
    
    With some more experimenting, I found that marking these functions as
    __attribute__((noipa)) is both logical and reliable.
    
    In order to keep the syntax readable, add a custom macro for this in
    include/linux/compiler_attributes.h next to other related macros and
    use it to annotate both files.
    
    Link: https://lore.kernel.org/all/abRB6g-48ZX6Yl2r@willie-the-truck/
    Cc: Will Deacon <will@kernel.org>
    Cc: Thomas Gleixner <tglx@kernel.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Miguel Ojeda <ojeda@kernel.org>
    Cc: linux-kbuild@vger.kernel.org
    Cc: stable@vger.kernel.org
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Acked-by: Will Deacon <will@kernel.org>
    Acked-by: Thomas Gleixner <tglx@kernel.org>
    Acked-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ip6: vti: Use ip6_tnl.net in vti6_changelink(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@google.com>
Date:   Thu May 21 21:05:54 2026 +0800

    ip6: vti: Use ip6_tnl.net in vti6_changelink().
    
    commit 11b326fb0a374f4654f9be22d0f0f7abd9f7d3fe upstream.
    
    ip netns add ns1
    ip netns add ns2
    ip -n ns1 link add vti6_test type vti6 remote ::1 local ::2 key 7
    ip -n ns1 link set vti6_test netns ns2
    ip -n ns2 link set vti6_test type vti6 remote ::3 local ::4 key 9
    ip netns del ns2
    ip netns del ns1
    [  132.495484] ------------[ cut here ]------------
    [  132.497609] kernel BUG at net/core/dev.c:12376!
    
    Commit 61220ab34948 ("vti6: Enable namespace changing") dropped
    NETIF_F_NETNS_LOCAL from vti6 devices. A vti6 tunnel can then
    move through IFLA_NET_NS_FD. After the move dev_net(dev) points
    at the new netns while t->net stays at the creation netns.
    
    vti6_changelink() and vti6_update() still use dev_net(dev) and
    dev_net(t->dev). They unlink from one per netns hash and relink
    into another. The creation netns is left with a stale entry.
    cleanup_net() of that netns later walks freed memory.
    
    Reachable from an unprivileged user namespace (unshare --user
    --map-root-user --net). Cross tenant scope on container hosts.
    
    Fixes: 61220ab34948 ("vti6: Enable namespace changing")
    Reported-by: Maoyi Xie <maoyi.xie@ntu.edu.sg>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Cc: stable@vger.kernel.org # v5.15+
    Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
    Link: https://patch.msgid.link/20260521130555.3421684-2-maoyixie.tju@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ip6: vti: Use ip6_tnl.net in vti6_siocdevprivate(). [+ + +]
Author: Maoyi Xie <maoyixie.tju@gmail.com>
Date:   Thu May 21 21:05:55 2026 +0800

    ip6: vti: Use ip6_tnl.net in vti6_siocdevprivate().
    
    commit 8b484efd5cb4eeef9021a661e198edc5349dacf6 upstream.
    
    After patch 1/2 in this series, vti6_update() unlinks and relinks
    the tunnel through t->net. vti6_siocdevprivate() still uses
    dev_net(dev) for the collision lookup. For a tunnel moved through
    IFLA_NET_NS_FD, dev_net(dev) is the new netns, not t->net.
    
    SIOCCHGTUNNEL on a migrated tunnel then runs:
    
      net = dev_net(dev)                    /* migrated netns */
      t   = vti6_locate(net, &p1, false)    /* misses target in t->net */
      ...
      t   = netdev_priv(dev)
      vti6_update(t, &p1, false)            /* mutates t->net's hash */
    
    A caller in the migrated netns picks params that match a tunnel
    in the creation netns. The lookup in dev_net(dev) finds nothing.
    vti6_update() prepends the migrated tunnel at the head of the
    creation netns hash bucket for those params. Later lookups in
    the creation netns resolve to the migrated device. xfrm receive
    delivers the matched packets through a device the caller controls.
    
    Reachable from an unprivileged user namespace (unshare --user
    --map-root-user --net). Cross tenant scope on container hosts.
    
    Switch the SIOCCHGTUNNEL path on a non fallback device to use
    t->net for the lookup. The lookup now matches the netns
    vti6_update() operates on.
    
    Also add ns_capable(self->net->user_ns, CAP_NET_ADMIN) before
    the lookup. The check at the top of the case is against
    dev_net(dev)->user_ns, which after migration is the attacker's
    netns. A caller there can pick params absent from self->net,
    the lookup returns NULL, t becomes self, and vti6_update()
    inserts the device into the creation netns hash. The new check
    requires CAP_NET_ADMIN in the creation netns user_ns too.
    
    SIOCADDTUNNEL and SIOCCHGTUNNEL on the fallback device keep
    dev_net(dev), which equals init_net there.
    
    Fixes: 61220ab34948 ("vti6: Enable namespace changing")
    Suggested-by: Jakub Kicinski <kuba@kernel.org>
    Suggested-by: Xiao Liang <shaw.leon@gmail.com>
    Cc: stable@vger.kernel.org # v5.15+
    Signed-off-by: Maoyi Xie <maoyixie.tju@gmail.com>
    Link: https://patch.msgid.link/20260521130555.3421684-3-maoyixie.tju@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ip6_vti: fix incorrect tunnel matching in vti6_tnl_lookup() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Mon Jun 8 16:46:13 2026 +0000

    ip6_vti: fix incorrect tunnel matching in vti6_tnl_lookup()
    
    [ Upstream commit a5c0359f5cbc51a2e2b114d6041e0f3c73f903e9 ]
    
    In vti6_tnl_lookup(), when an exact match for a tunnel fails,
    the code falls back to searching for wildcard tunnels:
    
    - Tunnels matching the packet's local address, with any remote address
      wildcard remote).
    
    - Tunnels matching the packet's remote address, with any local address
      (wildcard local).
    
    However, vti6 stores all these different types of tunnels in the same
    hash table (ip6n->tnls_r_l) prone to hash collisions.
    
    The bug is that the fallback search loops in vti6_tnl_lookup() were
    missing checks to ensure that the candidate tunnel actually has
    a wildcard address.
    
    Fixes: fbe68ee87522 ("vti6: Add a lookup method for tunnels with wildcard endpoints.")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Steffen Klassert <steffen.klassert@secunet.com>
    Reviewed-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
    Link: https://patch.msgid.link/20260608164613.933023-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipc/shm: serialize orphan cleanup with shm_nattch updates [+ + +]
Author: Yilin Zhu <zylzyl2333@gmail.com>
Date:   Thu Apr 30 13:21:34 2026 +0800

    ipc/shm: serialize orphan cleanup with shm_nattch updates
    
    commit 2e5c6f4fd4001562781e99bbfc7f1f0127187542 upstream.
    
    shm_destroy_orphaned() walks the shm idr under shm_ids(ns).rwsem, but that
    does not serialize all fields tested by shm_may_destroy().  In particular,
    shm_nattch is updated while holding shm_perm.lock, and attach paths can do
    that without holding the rwsem.
    
    Do not decide that an orphaned segment is unused before taking the object
    lock.  Move the shm_may_destroy() check under shm_perm.lock, matching the
    other destroy paths, and unlock the segment when it no longer qualifies
    for removal.
    
    Link: https://lore.kernel.org/9d97cc1031de2d0bace0edf3a668818aa2f4eca6.1777410234.git.zylzyl2333@gmail.com
    Fixes: 4c677e2eefdb ("shm: optimize locking and ipc_namespace getting")
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Signed-off-by: Yilin Zhu <zylzyl2333@gmail.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Cc: Christian Brauner <brauner@kernel.org>
    Cc: Jeongjun Park <aha310510@gmail.com>
    Cc: Kees Cook <kees@kernel.org>
    Cc: Liam Howlett <liam@infradead.org>
    Cc: Lorenzo Stoakes <ljs@kernel.org>
    Cc: Serge Hallyn <sergeh@kernel.org>
    Cc: Vasiliy Kulikov <segoon@openwall.com>
    Cc: Davidlohr Bueso <dave@stgolabs.net>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Serge Hallyn <serge@hallyn.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ipc: limit next_id allocation to the valid ID range [+ + +]
Author: Linpu Yu <linpu5433@gmail.com>
Date:   Sun May 10 13:43:30 2026 +0800

    ipc: limit next_id allocation to the valid ID range
    
    commit fa0b9b2b7ae3539908d69c2b9ac0d144d9bc5139 upstream.
    
    The checkpoint/restore sysctl path can request the next SysV IPC id
    through ids->next_id.  ipc_idr_alloc() currently forwards that request to
    idr_alloc() with an open-ended upper bound.
    
    If the valid tail of the SysV IPC id space is full, the allocation can
    spill beyond ipc_mni.  The returned SysV IPC id still uses the normal
    index encoding, so later lookup and removal can target the wrong slot.
    This leaves the real IDR entry behind and breaks the IDR state for the
    object.
    
    The bug is in ipc_idr_alloc() in the checkpoint/restore path.
    
    1. ids->next_id is passed to:
    
           idr_alloc(&ids->ipcs_idr, new, ipcid_to_idx(next_id), 0, ...)
    
    2. The zero upper bound makes the allocation effectively open-ended.
       Once the valid SysV IPC tail is occupied, idr_alloc() can spill past
       ipc_mni and allocate an entry beyond the valid IPC id range.
    
    3. The new object id is still encoded with the narrower SysV IPC index
       width:
    
           new->id = (new->seq << ipcmni_seq_shift()) + idx
    
    4. Later removal goes through ipc_rmid(), which uses:
    
           ipcid_to_idx(ipcp->id)
    
       That truncates the real IDR index. An object actually stored at a
       high index can then be removed as if it lived at a low in-range
       index.
    
    5. For shared memory, shm_destroy() frees the current object anyway, but
       the real high IDR slot is left behind as a dangling pointer.
    
    6. A subsequent walk of /proc/sysvipc/shm reaches the stale IDR entry
       and dereferences freed memory.
    
    Prevent this by bounding the requested allocation to ipc_mni so the
    checkpoint/restore path fails once the valid range is exhausted.
    
    Link: https://lore.kernel.org/cover.1778336914.git.linpu5433@gmail.com
    Link: https://lore.kernel.org/2eebe949bfa7d1f6e13b5be6a92c64c850ce9d45.1778336914.git.linpu5433@gmail.com
    Fixes: 03f595668017 ("ipc: add sysctl to specify desired next object id")
    Signed-off-by: Linpu Yu <linpu5433@gmail.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Cc: Kees Cook <kees@kernel.org>
    Cc: Stanislav Kinsbursky <skinsbursky@parallels.com>
    Cc: Davidlohr Bueso <dave@stgolabs.net>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ipmi: Fix rcu_read_unlock to srcu_read_unlock in handle_read_event_rsp [+ + +]
Author: Rui Qi <qirui.001@bytedance.com>
Date:   Mon May 25 14:32:35 2026 +0800

    ipmi: Fix rcu_read_unlock to srcu_read_unlock in handle_read_event_rsp
    
    Fix a bug where rcu_read_unlock() was used instead of srcu_read_unlock()
    in handle_read_event_rsp() when ipmi_alloc_recv_msg() fails.
    
    This mismatch leads to an SRCU read-side critical section imbalance: the
    entry uses srcu_read_lock(&intf->users_srcu) but the error path
    incorrectly calls rcu_read_unlock(), which is a no-op for SRCU and
    leaves the SRCU lock held.
    
    The offending code was restructured in mainline by commit 3be997d5a64a
    ("ipmi:msghandler: Remove srcu from the ipmi user structure"), which
    replaced the SRCU locking with a mutex in this function, effectively
    eliminating the mismatch. However, that commit is part of a larger
    SRCU removal series that is not suitable for stable backport. This
    minimal fix addresses the SRCU imbalance for 6.12 and earlier stable
    branches that still carry the original locking scheme.
    
    Fixes: e86ee2d44b44 ("ipmi: Rework locking and shutdown for hot remove")
    Cc: stable@vger.kernel.org
    Signed-off-by: Rui Qi <qirui.001@bytedance.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: ipmi:ssif: NULL thread on error [+ + +]
Author: Corey Minyard <corey@minyard.net>
Date:   Tue Apr 21 06:50:22 2026 -0500

    ipmi:ssif: NULL thread on error
    
    commit a8aebe93a4938c0ca1941eeaae821738f869be3d upstream.
    
    Cleanup code was checking the thread for NULL, but it was possibly
    a PTR_ERR() in one spot.
    
    Spotted with static analysis.
    
    Link: https://sourceforge.net/p/openipmi/mailman/message/59324676/
    Fixes: 75c486cb1bca ("ipmi:ssif: Clean up kthread on errors")
    Cc: <stable@vger.kernel.org> # 91eb7ec72612: ipmi:ssif: Remove unnecessary indention
    Cc: stable@vger.kernel.org
    Signed-off-by: Corey Minyard <corey@minyard.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Linux: ipmi:ssif: Remove unnecessary indention [+ + +]
Author: Corey Minyard <corey@minyard.net>
Date:   Mon Apr 13 07:09:15 2026 -0500

    ipmi:ssif: Remove unnecessary indention
    
    commit 91eb7ec7261254b6875909df767185838598e21e upstream.
    
    A section was in {} that didn't need to be, move the variable
    definition to the top and set th eindentino properly.
    
    Signed-off-by: Corey Minyard <corey@minyard.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ipv4: free net->ipv4.sysctl_local_reserved_ports after unregister_net_sysctl_table() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu May 21 12:21:47 2026 +0000

    ipv4: free net->ipv4.sysctl_local_reserved_ports after unregister_net_sysctl_table()
    
    [ Upstream commit 87a1e0fe7776da7ab411be332b4be58ac8840d10 ]
    
    ipv4_sysctl_exit_net() is currently freeing net->ipv4.sysctl_local_reserved_ports
    too soon.
    
    Only after unregister_net_sysctl_table() we can be sure no threads can possibly
    use the sysctls, including /proc/sys/net/ipv4/ip_local_reserved_ports.
    
    Fixes: 122ff243f5f1 ("ipv4: make ip_local_reserved_ports per netns")
    Reported-by: Ji'an Zhou <eilaimemedsnaimel@gmail.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Cong Wang <xiyou.wangcong@gmail.com>
    Reviewed-by: Jason Xing <kerneljasonxing@gmail.com>
    Reviewed-by: Jiayuan Chen <jiayuan.chen@linux.dev>
    Link: https://patch.msgid.link/20260521122147.3584624-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv4: restrict IPOPT_SSRR and IPOPT_LSRR options [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Jun 2 16:15:47 2026 +0000

    ipv4: restrict IPOPT_SSRR and IPOPT_LSRR options
    
    [ Upstream commit d3915a1f5a4bc0ac911032903c3c6ab8df9fcc7c ]
    
    This patch restricts setting Loose Source and Record Route (LSRR)
    and Strict Source and Record Route (SSRR) IP options to users
    with CAP_NET_RAW capability.
    
    This prevents unprivileged applications from forcing packets to route
    through attacker-controlled nodes to leak TCP ISN and possibly other
    protocol information.
    
    While LSRR and SSRR are commonly filtered in many network environments,
    they may still be supported and forwarded along some network paths.
    
    RFC 7126 (Recommendations on Filtering of IPv4 Packets Containing
    IPv4 Options) recommend to drop these options in 4.3 and 4.4.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: Tamir Shahar <tamirthesis@gmail.com>
    Reported-by: Amit Klein <aksecurity@gmail.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/20260602161547.2642155-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipv6/addrconf: annotate data-races around devconf fields (II) [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri May 29 19:53:15 2026 -0400

    ipv6/addrconf: annotate data-races around devconf fields (II)
    
    [ Upstream commit 2f0ff05a44302c91af54a5f9efe1b65b7681540e ]
    
    Final (?) round of this series.
    
    Annotate lockless reads on following devconf fields,
    because they be changed concurrently from /proc/net/ipv6/conf.
    
    - accept_dad
    - optimistic_dad
    - use_optimistic
    - use_oif_addrs_only
    - ra_honor_pio_life
    - keep_addr_on_down
    - ndisc_notify
    - ndisc_evict_nocarrier
    - suppress_frag_ndisc
    - addr_gen_mode
    - seg6_enabled
    - ioam6_enabled
    - ioam6_id
    - ioam6_id_wide
    - drop_unicast_in_l2_multicast
    - mldv[12]_unsolicited_report_interval
    - force_mld_version
    - force_tllao
    - accept_untracked_na
    - drop_unsolicited_na
    - accept_source_route
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: d4ea0dfd7501 ("ipv6: ioam: add NULL check for idev in ipv6_hop_ioam()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ipv6: exthdrs: refresh nh after handling HAO option [+ + +]
Author: Zhengchuan Liang <zcliangcn@gmail.com>
Date:   Fri May 22 17:42:26 2026 +0800

    ipv6: exthdrs: refresh nh after handling HAO option
    
    commit f7b52afe3592eae66e160586b45a3f2242972c63 upstream.
    
    ip6_parse_tlv() caches skb_network_header(skb) in nh while walking
    IPv6 TLVs.
    
    ipv6_dest_hao() may call pskb_expand_head() for a cloned skb, which can
    move the skb head and invalidate the cached network header pointer.
    Refresh nh after ipv6_dest_hao() returns so any trailing padding or TLVs
    are parsed from the current skb head.
    
    This matches the existing pattern used in ip6_parse_tlv() after helpers
    that can modify skb header storage.
    
    Fixes: a831f5bbc89a ("[IPV6] MIP6: Add inbound interface of home address option.")
    Cc: stable@kernel.org
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Co-developed-by: Luxing Yin <tr0jan@lzu.edu.cn>
    Signed-off-by: Luxing Yin <tr0jan@lzu.edu.cn>
    Signed-off-by: Zhengchuan Liang <zcliangcn@gmail.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Reviewed-by: Justin Iurman <justin.iurman@gmail.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/7aba1debc2196189172499e5769802b026f8caf8.1779247873.git.zcliangcn@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ipv6: exthdrs: refresh nh pointer after ipv6_hop_jumbo() [+ + +]
Author: Justin Iurman <justin.iurman@gmail.com>
Date:   Fri May 22 13:20:13 2026 +0200

    ipv6: exthdrs: refresh nh pointer after ipv6_hop_jumbo()
    
    commit d47548a36639095939f4747d4c43f2271366f565 upstream.
    
    ipv6_hop_jumbo() calls pskb_trim_rcsum(), which can change skb pointers.
    Let's recompute nh pointer to make sure any change won't mess things up.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Signed-off-by: Justin Iurman <justin.iurman@gmail.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/20260522112013.12342-1-justin.iurman@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ipv6: Fix a potential NPD in cleanup_prefix_route() [+ + +]
Author: Ido Schimmel <idosch@nvidia.com>
Date:   Tue Jun 9 17:54:48 2026 +0300

    ipv6: Fix a potential NPD in cleanup_prefix_route()
    
    [ Upstream commit b70c687b7cf267fb08586667a3946c8851cad672 ]
    
    addrconf_get_prefix_route() can return the fib6_null_entry sentinel
    entry which has a NULL fib6_table pointer. Therefore, before setting the
    route's expiration time, check that we are not working with this entry,
    as otherwise a NPD will be triggered [1].
    
    Note that the other callers of addrconf_get_prefix_route() are not
    susceptible to this bug:
    
    1. addrconf_prefix_rcv(): Requests a route with the 'RTF_ADDRCONF |
       RTF_PREFIX_RT' flags which are not set on fib6_null_entry.
    
    2. modify_prefix_route(): Fixed by commit a747e02430df ("ipv6: avoid
       possible NULL deref in modify_prefix_route()").
    
    3. __ipv6_ifa_notify(): Calls ip6_del_rt() which specifically checks for
       fib6_null_entry and returns an error.
    
    [1]
    Oops: general protection fault, probably for non-canonical address 0xdffffc0000000006: 0000 [#1] SMP KASAN
    KASAN: null-ptr-deref in range [0x0000000000000030-0x0000000000000037]
    [...]
    Call Trace:
    <TASK>
    __kasan_check_byte (mm/kasan/common.c:573)
    lock_acquire.part.0 (kernel/locking/lockdep.c:5842 (discriminator 1))
    _raw_spin_lock_bh (kernel/locking/spinlock.c:182 (discriminator 1))
    cleanup_prefix_route (net/ipv6/addrconf.c:1280)
    ipv6_del_addr (net/ipv6/addrconf.c:1342)
    inet6_addr_del.isra.0 (net/ipv6/addrconf.c:3119)
    inet6_rtm_deladdr (net/ipv6/addrconf.c:4812)
    rtnetlink_rcv_msg (net/core/rtnetlink.c:6997)
    netlink_rcv_skb (net/netlink/af_netlink.c:2555)
    netlink_unicast (net/netlink/af_netlink.c:1344)
    netlink_sendmsg (net/netlink/af_netlink.c:1899)
    __sock_sendmsg (net/socket.c:802 (discriminator 4))
    ____sys_sendmsg (net/socket.c:2698)
    ___sys_sendmsg (net/socket.c:2752)
    __sys_sendmsg (net/socket.c:2784)
    do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
    entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:121)
    
    Fixes: 5eb902b8e719 ("net/ipv6: Remove expired routes with a separated list of routes.")
    Reported-by: Ji'an Zhou <eilaimemedsnaimel@gmail.com>
    Reviewed-by: David Ahern <dahern@nvidia.com>
    Signed-off-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/20260609145448.768318-1-idosch@nvidia.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv6: fix possible infinite loop in fib6_select_path() [+ + +]
Author: Jiayuan Chen <jiayuan.chen@linux.dev>
Date:   Wed May 27 13:31:31 2026 +0800

    ipv6: fix possible infinite loop in fib6_select_path()
    
    [ Upstream commit 9c7da87c2dc860bb17ca1ece942495d28b1ce3b9 ]
    
    Found while auditing the same pattern Sashiko reported in
    rt6_fill_node() [1]. Apply the same fix as
    commit f8d8ce1b515a ("ipv6: fix possible infinite loop in fib6_info_uses_dev()").
    
    Writers holding tb6_lock can list_del_rcu(&first->fib6_siblings)
    without waiting for RCU readers; first->fib6_siblings.next then
    still points into the old ring and this softirq-side walker never
    reaches &first->fib6_siblings as its terminator. fib6_purge_rt()
    always WRITE_ONCE()s first->fib6_nsiblings to 0 before
    list_del_rcu(), so an inside-loop check is a reliable detach signal.
    
    [1] https://sashiko.dev/#/patchset/20260526020227.4857-1-jiayuan.chen%40linux.dev
    
    Fixes: d9ccb18f83ea ("ipv6: Fix soft lockups in fib6_select_path under high next hop churn")
    Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/20260527053133.180695-2-jiayuan.chen@linux.dev
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv6: fix possible infinite loop in rt6_fill_node() [+ + +]
Author: Jiayuan Chen <jiayuan.chen@linux.dev>
Date:   Wed May 27 13:31:30 2026 +0800

    ipv6: fix possible infinite loop in rt6_fill_node()
    
    [ Upstream commit 9f72412bcf60144f252b0d6205106abf14344abc ]
    
    Sashiko reported this issue [1]. Apply the same fix as
    commit f8d8ce1b515a ("ipv6: fix possible infinite loop in fib6_info_uses_dev()").
    
    Writers holding tb6_lock can list_del_rcu(&rt->fib6_siblings)
    without waiting for RCU readers; rt->fib6_siblings.next then still
    points into the old ring and this softirq-side walker never reaches
    &rt->fib6_siblings, causing a CPU stall. fib6_del_route() always
    WRITE_ONCE()s rt->fib6_nsiblings to 0 before list_del_rcu(), so an
    inside-loop check is a reliable detach signal.
    
    [1] https://sashiko.dev/#/patchset/20260526020227.4857-1-jiayuan.chen%40linux.dev
    
    Fixes: d9ccb18f83ea ("ipv6: Fix soft lockups in fib6_select_path under high next hop churn")
    Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/20260527053133.180695-1-jiayuan.chen@linux.dev
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv6: ioam: add NULL check for idev in ipv6_hop_ioam() [+ + +]
Author: Justin Iurman <justin.iurman@gmail.com>
Date:   Fri May 29 19:53:16 2026 -0400

    ipv6: ioam: add NULL check for idev in ipv6_hop_ioam()
    
    [ Upstream commit d4ea0dfd75011b78cebf3808f98ac4c4f51a6fb9 ]
    
    Reported by Sashiko:
    
    The function ipv6_hop_ioam() accesses
    __in6_dev_get(skb->dev)->cnf.ioam6_enabled without validating the returned
    idev pointer. Because addrconf_ifdown() can concurrently clear dev->ip6_ptr
    via RCU, __in6_dev_get() can return NULL during interface teardown, which
    could cause a NULL pointer dereference when processing an IOAM Hop-by-Hop
    option.
    
    Let's add a check and use SKB_DROP_REASON_IPV6DISABLED accordingly.
    
    Fixes: 9ee11f0fff20 ("ipv6: ioam: Data plane support for Pre-allocated Trace")
    Cc: stable@vger.kernel.org
    Signed-off-by: Justin Iurman <justin.iurman@gmail.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/20260517183059.29140-1-justin.iurman@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ipv6: mcast: Fix use-after-free when processing MLD queries [+ + +]
Author: Ido Schimmel <idosch@nvidia.com>
Date:   Wed Jun 3 13:18:11 2026 +0300

    ipv6: mcast: Fix use-after-free when processing MLD queries
    
    commit 791c91dc7a9dfb2457d5e29b8216a6484b9c4b40 upstream.
    
    When processing an MLD query, a pointer to the multicast group address
    is retrieved when initially parsing the packet. This pointer is later
    dereferenced without being reloaded despite the fact that the skb header
    might have been reallocated following the pskb_may_pull() calls, leading
    to a use-after-free [1].
    
    Fix by copying the multicast group address when the packet is initially
    parsed.
    
    [1]
    BUG: KASAN: slab-use-after-free in __mld_query_work (net/ipv6/mcast.c:1512)
    Read of size 8 at addr ffff8881154b8e90 by task kworker/4:1/118
    
    Workqueue: mld mld_query_work
    Call Trace:
    <TASK>
    dump_stack_lvl (lib/dump_stack.c:94 lib/dump_stack.c:120)
    print_address_description.constprop.0 (mm/kasan/report.c:378)
    print_report (mm/kasan/report.c:482)
    kasan_report (mm/kasan/report.c:595)
    __mld_query_work (net/ipv6/mcast.c:1512)
    mld_query_work (net/ipv6/mcast.c:1563)
    process_one_work (kernel/workqueue.c:3314)
    worker_thread (kernel/workqueue.c:3397 kernel/workqueue.c:3478)
    kthread (kernel/kthread.c:436)
    ret_from_fork (arch/x86/kernel/process.c:158)
    ret_from_fork_asm (arch/x86/entry/entry_64.S:245)
    </TASK>
    
    [...]
    
    Freed by task 118:
    kasan_save_stack (mm/kasan/common.c:57)
    kasan_save_track (mm/kasan/common.c:78)
    kasan_save_free_info (mm/kasan/generic.c:584)
    __kasan_slab_free (mm/kasan/common.c:253 mm/kasan/common.c:285)
    kfree (./include/linux/kasan.h:235 mm/slub.c:2689 mm/slub.c:6251 mm/slub.c:6566)
    pskb_expand_head (net/core/skbuff.c:2335)
    __pskb_pull_tail (net/core/skbuff.c:2878 (discriminator 4))
    __mld_query_work (net/ipv6/mcast.c:1495 (discriminator 1))
    mld_query_work (net/ipv6/mcast.c:1563)
    process_one_work (kernel/workqueue.c:3314)
    worker_thread (kernel/workqueue.c:3397 kernel/workqueue.c:3478)
    kthread (kernel/kthread.c:436)
    ret_from_fork (arch/x86/kernel/process.c:158)
    ret_from_fork_asm (arch/x86/entry/entry_64.S:245)
    
    Fixes: 97300b5fdfe2 ("[MCAST] IPv6: Check packet size when process Multicast")
    Reported-by: Leo Lin <leo@depthfirst.com>
    Reviewed-by: David Ahern <dahern@nvidia.com>
    Signed-off-by: Ido Schimmel <idosch@nvidia.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Jiayuan Chen <jiayuan.chen@linux.dev>
    Link: https://patch.msgid.link/20260603101811.612594-1-idosch@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ipv6: rpl: fix hdrlen overflow in ipv6_rpl_srh_decompress() [+ + +]
Author: Rahul Chandelkar <rc@rexion.ai>
Date:   Mon May 25 21:10:31 2026 +0530

    ipv6: rpl: fix hdrlen overflow in ipv6_rpl_srh_decompress()
    
    [ Upstream commit 9d5e7a46a9f6d8f503b41bfefef70659845f1679 ]
    
    ipv6_rpl_srh_decompress() computes:
    
        outhdr->hdrlen = (((n + 1) * sizeof(struct in6_addr)) >> 3);
    
    hdrlen is __u8. For n >= 127 the result exceeds 255 and silently
    truncates. With n=127 (cmpri=15, cmpre=15, pad=0, hdrlen=16):
    
        (128 * 16) >> 3 = 256, truncated to 0 as __u8
    
    The caller in ipv6_rpl_srh_rcv() then places the compressed header
    at buf + ((ohdr->hdrlen + 1) << 3). With hdrlen=0 this is buf + 8,
    but the decompressed region occupies buf[0..2055] (8-byte header
    plus 128 full addresses). The compressed header overlaps the
    decompressed data, and ipv6_rpl_srh_compress() writes into this
    overlap, corrupting the routing header of the forwarded packet.
    
    The existing guard at exthdrs.c:546 checks (n + 1) > 255, which
    prevents n+1 from overflowing unsigned char (the segments_left
    field), but does not prevent the computed hdrlen from overflowing
    __u8. n=127 passes because 128 <= 255, yet hdrlen=256 does not
    fit.
    
    Tighten the bound to (n + 1) > 127. This caps n at 126, giving
    hdrlen = (127 * 16) >> 3 = 254, which fits in __u8. The compressed
    header then lands at buf + ((254 + 1) << 3) = buf + 2040, exactly
    past the decompressed region (buf[0..2039]). No overlap. 127
    segments is well beyond any realistic RPL deployment.
    
    Fixes: 8610c7c6e3bd ("net: ipv6: add support for rpl sr exthdr")
    Signed-off-by: Rahul Chandelkar <rc@rexion.ai>
    Link: https://patch.msgid.link/20260525154031.2290876-1-rc@rexion.ai
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv6: sit: reload inner IPv6 header after GSO offloads [+ + +]
Author: Kyle Zeng <kylebot@openai.com>
Date:   Fri Jun 5 00:34:48 2026 -0700

    ipv6: sit: reload inner IPv6 header after GSO offloads
    
    [ Upstream commit f0e42f0c4337b1f220de1ddd63f47197c7dee4de ]
    
    ipip6_tunnel_xmit() caches the inner IPv6 header pointer at function
    entry and continues using it after iptunnel_handle_offloads().
    
    For GSO skbs, iptunnel_handle_offloads() calls skb_header_unclone().
    When the skb header is cloned, skb_header_unclone() can call
    pskb_expand_head(), which may move the skb head. The pskb_expand_head()
    contract requires pointers into the skb header to be reloaded after the
    call.
    
    If the later skb_realloc_headroom() branch is not taken, SIT uses the
    stale iph6 pointer to read the inner hop limit and DS field. That can
    read from a freed skb head after the old head's remaining clone is
    released.
    
    Reload iph6 after the offload helper succeeds and before subsequent
    reads from the inner IPv6 header. Keep the existing reload after
    skb_realloc_headroom(), since that branch can also replace the skb.
    
    Fixes: 14909664e4e1 ("sit: Setup and TX path for sit/UDP foo-over-udp encapsulation")
    Signed-off-by: Kyle Zeng <kylebot@openai.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Reported-by: syzbot+6eb9ca986d80f6f88cf9@syzkaller.appspotmail.com
    Link: https://patch.msgid.link/20260605073448.6524-1-kylebot@openai.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv6: validate extension header length before copying to cmsg [+ + +]
Author: Qi Tang <tpluszz77@gmail.com>
Date:   Sat May 23 22:32:45 2026 +0800

    ipv6: validate extension header length before copying to cmsg
    
    commit dd433671fef381fdaf7b530c631e6b782d66e224 upstream.
    
    ip6_datagram_recv_specific_ctl() builds IPV6_{HOPOPTS,DSTOPTS,RTHDR}
    cmsgs (and their IPV6_2292* legacy counterparts) by trusting the
    on-wire hdrlen byte (ptr[1]) when computing the put_cmsg() length.
    The length was validated only at parse time (ipv6_parse_hopopts(),
    etc.).  An nftables payload-write expression can rewrite hdrlen after
    parsing and before the skb reaches recvmsg; the write itself is
    in-bounds but put_cmsg() then reads up to ((hdrlen+1) << 3) = 2040
    bytes from an 8-byte header.  nftables is reachable from an
    unprivileged user namespace, so this is an unprivileged
    slab-out-of-bounds read:
    
      BUG: KASAN: slab-out-of-bounds in put_cmsg+0x3ac/0x540
       put_cmsg+0x3ac/0x540
       udpv6_recvmsg+0xca0/0x1250
       sock_recvmsg+0xdf/0x190
       ____sys_recvmsg+0x1b1/0x620
    
    Add ipv6_get_exthdr_len() which validates that at least two bytes
    are accessible before reading the hdrlen field, then checks the
    computed length against skb_tail_pointer(skb), returning 0 on
    failure.  Extension headers are kept in the linear skb area by
    pskb_may_pull() during input, so skb_tail_pointer() is the correct
    bound.
    
    Use ipv6_get_exthdr_len() at all non-AH call sites: the five
    standalone cmsg blocks (HbH, 2292HbH, 2292DSTOPTS x2, 2292RTHDR)
    and the three standard cases in the extension-header walk loop
    (DSTOPTS, ROUTING, default).  AH retains an inline bounds check
    because its length formula differs ((ptr[1]+2)<<2).
    
    The walk loop also gets a pre-read bounds check at the top to
    validate ptr before any case accesses ptr[0] or ptr[1].
    
    When the walk loop detects a corrupted header, return from the
    function instead of continuing to process later socket options.
    
    Cc: stable@vger.kernel.org
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Qi Tang <tpluszz77@gmail.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Link: https://patch.msgid.link/20260523143245.2281415-1-tpluszz77@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ipvs: clear the svc scheduler ptr early on edit [+ + +]
Author: Julian Anastasov <ja@ssi.bg>
Date:   Mon May 25 07:07:44 2026 +0300

    ipvs: clear the svc scheduler ptr early on edit
    
    [ Upstream commit 193989cc6d80dd8e0460fb3992e69fa03bf0ff9b ]
    
    ip_vs_edit_service() while unbinding the old scheduler clears
    the svc->scheduler ptr after the scheduler module initiates
    RCU callbacks. This can cause packets to use the old
    scheduler at the time when svc->sched_data is already freed
    after RCU grace period.
    
    Fix it by clearing the ptr early in ip_vs_unbind_scheduler(),
    before the done_service method schedules any RCU callbacks.
    
    Also, if the new scheduler fails to initialize when replacing
    the old scheduler, try to restore the old scheduler while still
    returning the error code.
    
    Link: https://sashiko.dev/#/patchset/20260519015506.634185-1-rosenp%40gmail.com
    Fixes: 05f00505a89a ("ipvs: fix crash if scheduler is changed")
    Signed-off-by: Julian Anastasov <ja@ssi.bg>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipvs: skip ipv6 extension headers for csum checks [+ + +]
Author: Julian Anastasov <ja@ssi.bg>
Date:   Sat Feb 14 16:58:49 2026 +0200

    ipvs: skip ipv6 extension headers for csum checks
    
    commit 05cfe9863ef049d98141dc2969eefde72fb07625 upstream.
    
    Protocol checksum validation fails for IPv6 if there are extension
    headers before the protocol header. iph->len already contains its
    offset, so use it to fix the problem.
    
    Fixes: 2906f66a5682 ("ipvs: SCTP Trasport Loadbalancing Support")
    Fixes: 0bbdd42b7efa ("IPVS: Extend protocol DNAT/SNAT and state handlers")
    Signed-off-by: Julian Anastasov <ja@ssi.bg>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Nazar Kalashnikov <nazarkalashnikov0@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ksmbd: fix FSCTL permission bypass by adding a permission check for FSCTL_SET_SPARSE [+ + +]
Author: Sean Shen <grayhat@foxmail.com>
Date:   Tue May 26 22:07:16 2026 +0900

    ksmbd: fix FSCTL permission bypass by adding a permission check for FSCTL_SET_SPARSE
    
    [ Upstream commit cc57232cae23c0df91b4a59d0f519141ce9b5b02 ]
    
    FSCTL_SET_SPARSE in fsctl_set_sparse() modifies the file's sparse
    attribute and saves it through xattr without any permission checks.
    
    This exposes two issues:
    
    1) A client on a read-only share can change the sparse attribute
       on files it opened, even though the share is read-only.
       Other FSCTL write operations already check
       test_tree_conn_flag(work->tcon, KSMBD_TREE_CONN_FLAG_WRITABLE),
       but FSCTL_SET_SPARSE does not.
    
    2) Even on writable shares, clients without FILE_WRITE_DATA or
       FILE_WRITE_ATTRIBUTES access should not modify the sparse
       attribute. Similar handle-level checks exist in other functions
       but are missing here.
    
    Add both share-level writable check and per-handle access check.
    Use goto out on error to avoid leaking file references.
    
    Fixes: e2f34481b24d ("cifsd: add server-side procedures for SMB3")
    Cc: Namjae Jeon <linkinjeon@kernel.org>
    Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
    Cc: Steve French <smfrench@gmail.com>
    Signed-off-by: Sean Shen <grayhat@foxmail.com>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ksmbd: fix NULL-deref of opinfo->conn in oplock/lease break notifiers [+ + +]
Author: Gil Portnoy <dddhkts1@gmail.com>
Date:   Thu May 28 00:00:00 2026 +0000

    ksmbd: fix NULL-deref of opinfo->conn in oplock/lease break notifiers
    
    [ Upstream commit b003086d76968298f22e7cf62239833b5a3a06b1 ]
    
    smb2_oplock_break_noti() and smb2_lease_break_noti() read opinfo->conn
    into a local with neither READ_ONCE() nor a NULL check.  Both run from
    oplock_break() after opinfo_get_list() has dropped ci->m_lock, so a
    concurrent SMB2 LOGOFF (session_fd_check()) can set op->conn = NULL
    under ci->m_lock within that window.  ksmbd_conn_r_count_inc(conn) then
    writes through NULL at offset 0xc4 -- a remotely triggerable oops.
    
    Guard both reads the way compare_guid_key() already does: read
    opinfo->conn with READ_ONCE() and return early if it is NULL, before
    allocating the work struct so nothing leaks.  A NULL conn means the
    client is gone and the break is moot, so return 0; oplock_break() treats
    that as success and runs the normal teardown.
    
    Fixes: c8efcc786146 ("ksmbd: add support for durable handles v1/v2")
    Assisted-by: Henry (Claude):claude-opus-4
    Signed-off-by: Gil Portnoy <dddhkts1@gmail.com>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ksmbd: fix OOB write in QUERY_INFO for compound requests [+ + +]
Author: Asim Viladi Oglu Manizada <manizada@pm.me>
Date:   Wed Mar 25 09:14:22 2026 +0900

    ksmbd: fix OOB write in QUERY_INFO for compound requests
    
    commit fda9522ed6afaec45cabc198d8492270c394c7bc upstream.
    
    When a compound request such as READ + QUERY_INFO(Security) is received,
    and the first command (READ) consumes most of the response buffer,
    ksmbd could write beyond the allocated buffer while building a security
    descriptor.
    
    The root cause was that smb2_get_info_sec() checked buffer space using
    ppntsd_size from xattr, while build_sec_desc() often synthesized a
    significantly larger descriptor from POSIX ACLs.
    
    This patch introduces smb_acl_sec_desc_scratch_len() to accurately
    compute the final descriptor size beforehand, performs proper buffer
    checking with smb2_calc_max_out_buf_len(), and uses exact-sized
    allocation + iov pinning.
    
    Cc: stable@vger.kernel.org
    Fixes: e2b76ab8b5c9 ("ksmbd: add support for read compound")
    Signed-off-by: Asim Viladi Oglu Manizada <manizada@pm.me>
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    [ In v6.6, replace KSMBD_DEFAULT_GFP with GFP_KERNEL per
    commit 0066f623bce8 ("ksmbd: use __GFP_RETRY_MAYFAIL"). ]
    Signed-off-by: Alva Lan <alvalan9@foxmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ksmbd: fix use-after-free of a deferred file_lock on double SMB2_CANCEL [+ + +]
Author: Gil Portnoy <dddhkts1@gmail.com>
Date:   Mon Jun 1 08:27:56 2026 +0900

    ksmbd: fix use-after-free of a deferred file_lock on double SMB2_CANCEL
    
    commit f580d27e8928828693df44ba2db0fffdbe11dfea upstream.
    
    A deferred byte-range lock (an SMB2_LOCK that blocks) registers an async work on
    conn->async_requests via setup_async_work(), with cancel_fn =
    smb2_remove_blocked_lock and cancel_argv[0] pointing at the struct file_lock.
    
    When the request is cancelled, the worker frees the file_lock with
    locks_free_lock() and takes the cancelled early-exit, which "goto out"s and never
    reaches release_async_work() -- the only site that unlinks the work from
    conn->async_requests and clears cancel_fn/cancel_argv. The work therefore stays
    matchable on async_requests with a live cancel_fn pointing at the freed file_lock,
    until connection teardown finally runs release_async_work().
    
    smb2_cancel() fires cancel_fn unconditionally with no state guard, so a second
    SMB2_CANCEL for the same AsyncId, arriving in that window, re-runs
    smb2_remove_blocked_lock() on the freed file_lock -- a slab use-after-free:
    
      BUG: KASAN: slab-use-after-free in __locks_delete_block
        __locks_delete_block
        locks_delete_block
        ksmbd_vfs_posix_lock_unblock
        smb2_remove_blocked_lock
        smb2_cancel                 <- 2nd SMB2_CANCEL fires cancel_fn
        handle_ksmbd_work
      Allocated by ...: locks_alloc_lock <- smb2_lock
      Freed by ...:     locks_free_lock  <- smb2_lock (cancelled branch)
      ... cache file_lock_cache of size 192
    
    Reproduced on mainline with KASAN by an authenticated SMB client.
    
    Skip a work whose state is already KSMBD_WORK_CANCELLED so its cancel callback
    cannot be fired a second time.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Gil Portnoy <dddhkts1@gmail.com>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ksmbd: OOB read regression in smb_check_perm_dacl() ACE-walk loops [+ + +]
Author: Ali Ganiyev <ali.qaniyev@gmail.com>
Date:   Mon May 25 10:23:47 2026 +0900

    ksmbd: OOB read regression in smb_check_perm_dacl() ACE-walk loops
    
    commit 0e60dafe97eca61721f3db456f97d97a80c6c8ae upstream.
    
    Commit d07b26f39246 ("ksmbd: require minimum ACE size in
    smb_check_perm_dacl()") introduced a transposed bounds check:
    
        if (offsetof(struct smb_ace, sid) + aces_size < CIFS_SID_BASE_SIZE)
    
    Since offsetof(..sid) is 8 and CIFS_SID_BASE_SIZE is 8, this evaluates
    to `aces_size < 0`. Because `aces_size` is always non-negative, this
    check becomes dead code and never breaks the loop.
    
    Worse, that commit removed the old 4-byte guard, meaning the loop now
    reads `ace->size` (offset 2) even when `aces_size` is 0-3 bytes. This
    re-opens a 2-byte heap out-of-bounds (OOB) read past the pntsd allocation
    during subsequent SMB2_CREATE operations.
    
    Fix this by properly transposing the comparison to require at least
    16 bytes (8-byte offset + 8-byte SID base), matching the correct form
    used in smb_inherit_dacl().
    
    Fixes: d07b26f39246 ("ksmbd: require minimum ACE size in smb_check_perm_dacl()")
    Cc: stable@vger.kernel.org
    Signed-off-by: Ali Ganiyev <ali.qaniyev@gmail.com>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
KVM: arm64: PMU: Preserve AArch32 counter low bits [+ + +]
Author: Qiang Ma <maqianga@uniontech.com>
Date:   Tue May 26 15:46:40 2026 +0800

    KVM: arm64: PMU: Preserve AArch32 counter low bits
    
    commit 1750ad1388e03fb27068cd1f22c9c8b4590fe936 upstream.
    
    AArch32 writes to PMU event counters cannot update the top 32 bits,
    even when PMUv3p5 makes the counters 64-bit. KVM therefore needs to
    preserve the existing high half and only update the low half written by
    the guest, unless the caller explicitly forces a full reset through
    PMCR.P.
    
    The current code masks @val down to the old high half before taking
    lower_32_bits(val), which means the low half is always zero. As a
    result, AArch32 writes to event counters discard the guest-provided low
    32 bits instead of storing them.
    
    Build the new value from the old high 32 bits and the low 32 bits of
    the value supplied by the guest.
    
    Fixes: 26d2d0594d70 ("KVM: arm64: PMU: Do not let AArch32 change the counters' top 32 bits")
    Signed-off-by: Qiang Ma <maqianga@uniontech.com>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://patch.msgid.link/20260526074640.791991-1-maqianga@uniontech.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: arm64: Remove VPIPT I-cache handling [+ + +]
Author: Marc Zyngier <maz@kernel.org>
Date:   Thu Jun 11 14:42:46 2026 +0100

    KVM: arm64: Remove VPIPT I-cache handling
    
    commit ced242ba9d7cb3571f6e0f165f643cb832d52148 upstream.
    
    We have some special handling for VPIPT I-cache in critical parts
    of the cache and TLB maintenance. Remove it.
    
    Reviewed-by: Zenghui Yu <yuzenghui@huawei.com>
    Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Acked-by: Mark Rutland <mark.rutland@arm.com>
    Link: https://lore.kernel.org/r/20231204143606.1806432-2-maz@kernel.org
    Signed-off-by: Will Deacon <will@kernel.org>
    [Mark: Backport to v6.6.y. VPIPT HW was never built; this is all dead code]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

KVM: Don't WARN if memory is dirtied without a vCPU when the VM is dying [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Fri May 29 20:35:39 2026 +0200

    KVM: Don't WARN if memory is dirtied without a vCPU when the VM is dying
    
    commit 8618004d3e897c0f1b71d9a9ab860461289bb89a upstream.
    
    When marking a page dirty, complain about not having a running/loaded vCPU
    if and only if the VM is still alive, i.e. its refcount is non-zero.  This
    will allow fixing a memory leak for x86 SEV-ES guests without hitting what
    is effectively a false positive on the WARN.
    
    For some SEV-ES VM-Exits, KVM keeps a writable mapping of a guest page
    across an exit to userspace, and typically unmaps the page on the next
    KVM_RUN.  But if userspace never calls KVM_RUN after such an exit, then KVM
    needs to unmap the page when the vCPU is destroyed, which in turn triggers
    the WARN about not having a running vCPU.
    
    Alternatively, SEV-ES could temporarily load the vCPU to suppress the WARN,
    as is done in nested_vmx_free_vcpu() (but for completely unrelated reasons;
    suppressing WARN from nested_put_vmcs12_pages() is pure happenstance).  But
    loading a vCPU during destruction is gross (ideally nVMX code would be
    cleaned up), risks complicating the SEV-ES code (KVM would need to ensure
    the temporarily load()+put() only runs when the vCPU isn't already loaded),
    and is ultimately pointless.
    
    The motivation for the WARN is to guard against KVM dirtying guest memory
    without pushing the corresponding GFN to the active vCPU's dirty ring, e.g.
    to ensure userspace doesn't miss a dirty page.  But for the VM's refcount
    to reach zero, there can't be _any_ userspace mappings to the dirty ring,
    as mapping the dirty ring requires doing mmap() on the vCPU FD.  I.e. if
    userspace had a valid mapping for the dirty ring, then the vCPU file and
    thus the owning VM would still be alive.  And so since userspace can't
    possibly reach the dirty ring, whether or not KVM technically "misses" a
    push to the dirty ring is irrelevant.
    
    Reported-by: Michael Roth <michael.roth@amd.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: Michael Roth <michael.roth@amd.com>
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Message-ID: <20260501202250.2115252-15-seanjc@google.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Message-ID: <20260529183549.1104619-15-pbonzini@redhat.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: SVM: Flush the current TLB when transitioning from xAVIC => x2AVIC [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Fri May 15 10:15:36 2026 -0700

    KVM: SVM: Flush the current TLB when transitioning from xAVIC => x2AVIC
    
    commit a9e18aa3263f356edae305e29830e5fe63d8597a upstream.
    
    Flush the current TLB when xAVIC *or* x2AVIC is activated, as KVM is
    (apparently) responsible for purging TLB entries when transitioning from
    xAVIC to x2AVIC.  The APM says a whole lot of nothing about TLB flushing
    with respect to (x2)AVIC, but empirical data strongly suggests hardware
    also does a whole lot of nothing.
    
    Failure to flush the TLB when enabling x2AVIC can lead to guest accesses
    to the APIC base address getting incorrectly redirected to the virtual
    APIC page.  The flaw most visibly manifests as failures in KVM-Unit-Test's
    verify_disabled_apic_mmio() testcase when x2APIC is enabled (though for
    reasons unknown, the test only reliably fails with EFI builds).
    
    Fixes: 0ccf3e7cb95a ("KVM: SVM: Flush the "current" TLB when activating AVIC")
    Fixes: 4d1d7942e36a ("KVM: SVM: Introduce logic to (de)activate x2AVIC mode")
    Cc: stable@vger.kernel.org
    Cc: Naveen N Rao (AMD) <naveen@kernel.org>
    Link: https://patch.msgid.link/20260515171536.1841645-1-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
landlock: Fix handling of disconnected directories [+ + +]
Author: Mickaël Salaün <mic@digikod.net>
Date:   Thu Jun 4 18:16:18 2026 +0800

    landlock: Fix handling of disconnected directories
    
    [ Upstream commit 49c9e09d961025b22e61ef9ad56aa1c21b6ce2f1 ]
    
    Disconnected files or directories can appear when they are visible and
    opened from a bind mount, but have been renamed or moved from the source
    of the bind mount in a way that makes them inaccessible from the mount
    point (i.e. out of scope).
    
    Previously, access rights tied to files or directories opened through a
    disconnected directory were collected by walking the related hierarchy
    down to the root of the filesystem, without taking into account the
    mount point because it couldn't be found. This could lead to
    inconsistent access results, potential access right widening, and
    hard-to-debug renames, especially since such paths cannot be printed.
    
    For a sandboxed task to create a disconnected directory, it needs to
    have write access (i.e. FS_MAKE_REG, FS_REMOVE_FILE, and FS_REFER) to
    the underlying source of the bind mount, and read access to the related
    mount point.   Because a sandboxed task cannot acquire more access
    rights than those defined by its Landlock domain, this could lead to
    inconsistent access rights due to missing permissions that should be
    inherited from the mount point hierarchy, while inheriting permissions
    from the filesystem hierarchy hidden by this mount point instead.
    
    Landlock now handles files and directories opened from disconnected
    directories by taking into account the filesystem hierarchy when the
    mount point is not found in the hierarchy walk, and also always taking
    into account the mount point from which these disconnected directories
    were opened.  This ensures that a rename is not allowed if it would
    widen access rights [1].
    
    The rationale is that, even if disconnected hierarchies might not be
    visible or accessible to a sandboxed task, relying on the collected
    access rights from them improves the guarantee that access rights will
    not be widened during a rename because of the access right comparison
    between the source and the destination (see LANDLOCK_ACCESS_FS_REFER).
    It may look like this would grant more access on disconnected files and
    directories, but the security policies are always enforced for all the
    evaluated hierarchies.  This new behavior should be less surprising to
    users and safer from an access control perspective.
    
    Remove a wrong WARN_ON_ONCE() canary in collect_domain_accesses() and
    fix the related comment.
    
    Because opened files have their access rights stored in the related file
    security properties, there is no impact for disconnected or unlinked
    files.
    
    Cc: Christian Brauner <brauner@kernel.org>
    Cc: Günther Noack <gnoack@google.com>
    Cc: Song Liu <song@kernel.org>
    Reported-by: Tingmao Wang <m@maowtm.org>
    Closes: https://lore.kernel.org/r/027d5190-b37a-40a8-84e9-4ccbc352bcdf@maowtm.org
    Closes: https://lore.kernel.org/r/09b24128f86973a6022e6aa8338945fcfb9a33e4.1749925391.git.m@maowtm.org
    Fixes: b91c3e4ea756 ("landlock: Add support for file reparenting with LANDLOCK_ACCESS_FS_REFER")
    Fixes: cb2c7d1a1776 ("landlock: Support filesystem access-control")
    Link: https://lore.kernel.org/r/b0f46246-f2c5-42ca-93ce-0d629702a987@maowtm.org [1]
    Reviewed-by: Tingmao Wang <m@maowtm.org>
    Link: https://lore.kernel.org/r/20251128172200.760753-2-mic@digikod.net
    Signed-off-by: Mickaël Salaün <mic@digikod.net>
    [ Adjust context ]
    Signed-off-by: Bin Lan <bin.lan.cn@windriver.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: Linux 6.6.143 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Fri Jun 19 13:39:44 2026 +0200

    Linux 6.6.143
    
    Link: https://lore.kernel.org/r/20260616145117.796205997@linuxfoundation.org
    Tested-by: Brett A C Sheffield <bacs@librecast.net>
    Tested-by: Miguel Ojeda <ojeda@kernel.org>
    Tested-by: Wentao Guan <guanwentao@uniontech.com>
    Tested-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Barry K. Nathan <barryn@pobox.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Pavel Machek (CIP) <pavel@nabladev.com>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
macsec: fix replay protection at XPN lower-PN wrap [+ + +]
Author: Junrui Luo <moonafterrain@outlook.com>
Date:   Wed May 20 11:47:55 2026 +0800

    macsec: fix replay protection at XPN lower-PN wrap
    
    commit e68842b3356471ba56c882209f324613dac47f64 upstream.
    
    In macsec_post_decrypt(), when pn is U32_MAX, pn + 1 overflows u32 to 0
    and the first branch never fires. If next_pn_halves.lower is also in the
    upper half, pn_same_half(pn, lower) is true and the XPN else-if does not
    fire either, leaving next_pn_halves unchanged. An attacker that captures
    the legitimate frame carrying pn == 0xFFFFFFFF on an XPN association
    can then replay it indefinitely, since lowest_pn never rises above
    the captured pn and macsec_decrypt() reconstructs the same IV.
    
    Extend the XPN else-if to also fire when pn + 1 wraps to 0, so receipt
    of pn == U32_MAX advances next_pn_halves to (upper + 1, 0).
    
    Fixes: a21ecf0e0338 ("macsec: Support XPN frame handling - IEEE 802.1AEbw")
    Reported-by: Yuhao Jiang <danisjiang@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Junrui Luo <moonafterrain@outlook.com>
    Link: https://patch.msgid.link/SYBPR01MB78813FD49E58F253B989F197AF012@SYBPR01MB7881.ausprd01.prod.outlook.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
media: rc: fix race between unregister and urb/irq callbacks [+ + +]
Author: Sean Young <sean@mess.org>
Date:   Sat Dec 20 10:33:26 2025 +0000

    media: rc: fix race between unregister and urb/irq callbacks
    
    [ Upstream commit dccc0c3ddf8f16071736f98a7d6dd46a2d43e037 ]
    
    Some rc device drivers have a race condition between rc_unregister_device()
    and irq or urb callbacks. This is because rc_unregister_device() does two
    things, it marks the device as unregistered so no new commands can be
    issued and then it calls rc_free_device(). This means the driver has no
    chance to cancel any pending urb callbacks or interrupts after the device
    has been marked as unregistered. Those callbacks may access struct rc_dev
    or its members (e.g. struct ir_raw_event_ctrl), which have been freed by
    rc_free_device().
    
    This change removes the implicit call to rc_free_device() from
    rc_unregister_device(). This means that device drivers can call
    rc_unregister_device() in their remove or disconnect function, then cancel
    all the urbs and interrupts before explicitly calling rc_free_device().
    
    Note this is an alternative fix for an issue found by Haotian Zhang, see
    the Closes: tags.
    
    Reported-by: Haotian Zhang <vulab@iscas.ac.cn>
    Closes: https://lore.kernel.org/linux-media/20251114101432.2566-1-vulab@iscas.ac.cn/
    Closes: https://lore.kernel.org/linux-media/20251114101418.2548-1-vulab@iscas.ac.cn/
    Closes: https://lore.kernel.org/linux-media/20251114101346.2530-1-vulab@iscas.ac.cn/
    Closes: https://lore.kernel.org/linux-media/20251114090605.2413-1-vulab@iscas.ac.cn/
    Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
    Signed-off-by: Sean Young <sean@mess.org>
    Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
    Stable-dep-of: 646ebdd31058 ("media: rc: ttusbir: fix inverted error logic")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: rc: igorplugusb: fix control request setup packet [+ + +]
Author: Henri A <contact@henrialfonso.com>
Date:   Wed May 20 10:25:44 2026 -0400

    media: rc: igorplugusb: fix control request setup packet
    
    commit 171022c7d594c133a45f92357a2a91475edabe20 upstream.
    
    Commit eac69475b01f ("media: rc: igorplugusb: heed coherency
    rules") changed the control request storage from an embedded struct to
    an allocated pointer so it can obey DMA coherency rules.
    
    However, the driver still passes &ir->request to usb_fill_control_urb().
    That points the URB setup packet at the pointer field itself rather than
    at the allocated struct usb_ctrlrequest.
    
    USB core then interprets pointer bytes as the setup packet. This can
    produce an invalid bRequestType and trigger the control direction warning
    reported by syzbot:
    
      usb 2-1: BOGUS control dir, pipe 80003580 doesn't match bRequestType 0
    
    Pass ir->request itself as the setup packet.
    
    Fixes: eac69475b01f ("media: rc: igorplugusb: heed coherency rules")
    Reported-by: syzbot+11f0e4f957c7c3bf3d51@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=11f0e4f957c7c3bf3d51
    Tested-by: syzbot+11f0e4f957c7c3bf3d51@syzkaller.appspotmail.com
    Cc: stable@vger.kernel.org
    Assisted-by: Codex:GPT-5.5
    Signed-off-by: Henri A <contact@henrialfonso.com>
    Signed-off-by: Sean Young <sean@mess.org>
    Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: rc: ttusbir: fix inverted error logic [+ + +]
Author: Oliver Neukum <oneukum@suse.com>
Date:   Fri Apr 10 23:03:09 2026 +0200

    media: rc: ttusbir: fix inverted error logic
    
    [ Upstream commit 646ebdd3105809d84ed04aa9e92e47e89cc44502 ]
    
    We have to report ENOMEM if no buffer is allocated.
    Typo dropped a "!". Restore it.
    
    Fixes: 50acaad3d202 ("media: rc: ttusbir: respect DMA coherency rules")
    Cc: stable@vger.kernel.org
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Signed-off-by: Sean Young <sean@mess.org>
    Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
memfd: deny writeable mappings when implying SEAL_WRITE [+ + +]
Author: Pratyush Yadav (Google) <pratyush@kernel.org>
Date:   Thu Jun 4 20:34:51 2026 -0400

    memfd: deny writeable mappings when implying SEAL_WRITE
    
    [ Upstream commit 3b041514cb6eae45869b020f743c14d983363222 ]
    
    When SEAL_EXEC is added, SEAL_WRITE is implied to make W^X.  But the
    implied seal is set after the check that makes sure the memfd can not have
    any writable mappings.  This means one can use SEAL_EXEC to apply
    SEAL_WRITE while having writeable mappings.
    
    This breaks the contract that SEAL_WRITE provides and can be used by an
    attacker to pass a memfd that appears to be write sealed but can still be
    modified arbitrarily.
    
    Fix this by adding the implied seals before the call for
    mapping_deny_writable() is done.
    
    Link: https://lore.kernel.org/20260505133922.797635-1-pratyush@kernel.org
    Fixes: c4f75bc8bd6b ("mm/memfd: add write seals when apply SEAL_EXEC to executable memfd")
    Signed-off-by: Pratyush Yadav (Google) <pratyush@kernel.org>
    Reviewed-by: Pasha Tatashin <pasha.tatashin@soleen.com>
    Acked-by: Jeff Xu <jeffxu@google.com>
    Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
    Cc: Brendan Jackman <jackmanb@google.com>
    Cc: Greg Thelen <gthelen@google.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Kees Cook <kees@kernel.org>
    Cc: "David Hildenbrand (Arm)" <david@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
misc: fastrpc: fix DMA address corruption due to find_vma misuse [+ + +]
Author: Junrui Luo <moonafterrain@outlook.com>
Date:   Sat May 30 21:45:26 2026 +0100

    misc: fastrpc: fix DMA address corruption due to find_vma misuse
    
    commit 464c6ad2aa16e1e1df9d559289199356493d1e00 upstream.
    
    fastrpc_get_args() uses find_vma() to look up the VMA for a user-provided
    pointer and compute a DMA address offset. When the address falls in a gap
    before the returned VMA, (ptr & PAGE_MASK) - vma->vm_start underflows,
    corrupting the DMA address sent to the DSP.
    
    Replace find_vma() with vma_lookup(), which returns NULL when the address
    is not contained within any VMA.
    
    Cc: stable@vger.kernel.org
    Fixes: 80f3afd72bd4 ("misc: fastrpc: consider address offset before sending to DSP")
    Reported-by: Yuhao Jiang <danisjiang@gmail.com>
    Signed-off-by: Junrui Luo <moonafterrain@outlook.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Signed-off-by: Srinivas Kandagatla <srini@kernel.org>
    Link: https://patch.msgid.link/20260530204528.116920-3-srini@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

misc: fastrpc: Fix NULL pointer dereference in rpmsg callback [+ + +]
Author: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com>
Date:   Sat May 30 21:45:27 2026 +0100

    misc: fastrpc: Fix NULL pointer dereference in rpmsg callback
    
    commit 5401fb4fe10fac6134c308495df18ed74aebb9c4 upstream.
    
    A NULL pointer dereference was observed on Hawi at boot when the DSP
    sends a glink message before fastrpc_rpmsg_probe() has completed
    initialization:
    
      Unable to handle kernel NULL pointer dereference at virtual address 0000000000000178
      pc : _raw_spin_lock_irqsave+0x34/0x8c
      lr : fastrpc_rpmsg_callback+0x3c/0xcc [fastrpc]
      ...
      Call trace:
       _raw_spin_lock_irqsave+0x34/0x8c (P)
       fastrpc_rpmsg_callback+0x3c/0xcc [fastrpc]
       qcom_glink_native_rx+0x538/0x6a4
       qcom_glink_smem_intr+0x14/0x24 [qcom_glink_smem]
    
    The faulting address 0x178 corresponds to the lock variable inside
    struct fastrpc_channel_ctx, confirming that cctx is NULL when
    fastrpc_rpmsg_callback() attempts to take the spinlock.
    
    There are two issues here. First, dev_set_drvdata() is called before
    spin_lock_init() and idr_init(), leaving a window where the callback
    can retrieve a valid cctx pointer but operate on an uninitialized
    spinlock. Second, the rpmsg channel becomes live as soon as the driver
    is bound, so fastrpc_rpmsg_callback() can fire before dev_set_drvdata()
    is called at all, resulting in dev_get_drvdata() returning NULL.
    
    Fix both issues by moving all cctx initialization ahead of
    dev_set_drvdata() so the structure is fully initialized before it
    becomes visible to the callback, and add a NULL check in
    fastrpc_rpmsg_callback() as a guard against any remaining window.
    
    Fixes: f6f9279f2bf0 ("misc: fastrpc: Add Qualcomm fastrpc basic driver model")
    Cc: stable@vger.kernel.org
    Signed-off-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com>
    Reviewed-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Srinivas Kandagatla <srini@kernel.org>
    Link: https://patch.msgid.link/20260530204528.116920-4-srini@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

misc: fastrpc: fix use-after-free of fastrpc_user in workqueue context [+ + +]
Author: Anandu Krishnan E <anandu.e@oss.qualcomm.com>
Date:   Sat May 30 21:45:25 2026 +0100

    misc: fastrpc: fix use-after-free of fastrpc_user in workqueue context
    
    commit e85eb5feca8e254905ffa6c57a3c99c89a674a0f upstream.
    
    There is a race between fastrpc_device_release() and the workqueue
    that processes DSP responses. When the user closes the file descriptor,
    fastrpc_device_release() frees the fastrpc_user structure. Concurrently,
    an in-flight DSP invocation can complete and fastrpc_rpmsg_callback()
    schedules context cleanup via schedule_work(&ctx->put_work). If the
    workqueue runs fastrpc_context_free() in parallel with or after
    fastrpc_device_release() has freed the user structure, it dereferences
    the freed fastrpc_user. Depending on the state of the context at the
    time of the race, any one of the following accesses can be hit:
    
     1. fastrpc_buf_free() calls fastrpc_ipa_to_dma_addr(buf->fl->cctx, ...)
        to strip the SID bits from the stored IOVA before passing the
        physical address to dma_free_coherent().
    
     2. fastrpc_free_map() reads map->fl->cctx->vmperms[0].vmid to
        reconstruct the source permission bitmask needed for the
        qcom_scm_assign_mem() call that returns memory from the DSP VM
        back to HLOS.
    
     3. fastrpc_free_map() acquires map->fl->lock to safely remove the
        map node from the fl->maps list.
    
    The resulting use-after-free manifests as:
    
      pc : fastrpc_buf_free+0x38/0x80 [fastrpc]
      lr : fastrpc_context_free+0xa8/0x1b0 [fastrpc]
      fastrpc_context_free+0xa8/0x1b0 [fastrpc]
      fastrpc_context_put_wq+0x78/0xa0 [fastrpc]
      process_one_work+0x180/0x450
      worker_thread+0x26c/0x388
    
    Add kref-based reference counting to fastrpc_user. Have each invoke
    context take a reference on the user at allocation time and release it
    when the context is freed. Release the initial reference in
    fastrpc_device_release() at file close. Move the teardown of the user
    structure — freeing pending contexts, maps, mmaps, and the channel
    context reference — into the kref release callback fastrpc_user_free(),
    so that it runs only when the last reference is dropped, regardless of
    whether that happens at device close or after the final in-flight
    context completes.
    
    Fixes: 6cffd79504ce ("misc: fastrpc: Add support for dmabuf exporter")
    Cc: stable@kernel.org
    Signed-off-by: Anandu Krishnan E <anandu.e@oss.qualcomm.com>
    Signed-off-by: Srinivas Kandagatla <srini@kernel.org>
    Link: https://patch.msgid.link/20260530204528.116920-2-srini@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

misc: fastrpc: fix use-after-free race in fastrpc_map_create [+ + +]
Author: Zhenghang Xiao <kipreyyy@gmail.com>
Date:   Sat May 30 21:45:28 2026 +0100

    misc: fastrpc: fix use-after-free race in fastrpc_map_create
    
    commit 07ebe87915d8accdaba20c4f88c5ae430fe62fbb upstream.
    
    fastrpc_map_lookup returns a raw pointer after releasing fl->lock. The
    caller fastrpc_map_create then calls fastrpc_map_get (kref_get_unless_zero)
    on this unprotected pointer. A concurrent MEM_UNMAP can free the map
    between the lock release and the kref operation, resulting in a
    use-after-free on the freed slab object.
    
    Restore the take_ref parameter to fastrpc_map_lookup so the reference
    is acquired atomically under fl->lock before the pointer is exposed to
    the caller.
    
    Fixes: 10df039834f8 ("misc: fastrpc: Skip reference for DMA handles")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zhenghang Xiao <kipreyyy@gmail.com>
    Signed-off-by: Srinivas Kandagatla <srini@kernel.org>
    Link: https://patch.msgid.link/20260530204528.116920-5-srini@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/damon/ops-common: call folio_test_lru() after folio_get() [+ + +]
Author: SeongJae Park <sj@kernel.org>
Date:   Mon May 25 09:22:55 2026 -0700

    mm/damon/ops-common: call folio_test_lru() after folio_get()
    
    commit d6b8b02a27b3dd09ec12144322b3dac46d9bc9ef upstream.
    
    damon_get_folio() speculatively calls folio_test_lru() before
    folio_try_get().  The folio can get freed and reallocated to a tail page.
    In the case, VM_BUG_ON_PGFLAGS() in const_folio_flags() can be triggered.
    Remove the speculative call.
    
    Also mark folio_test_lru() check right after folio_try_get() success as no
    more unlikely.
    
    The race should be rare.  Also the problem can happen only if the kernel
    has enabled CONFIG_DEBUG_VM_PGFLAGS.  No real world report of this issue
    has been made so far.  This fix is based on only theoretical analysis.
    That said, a bug is a bug.  A similar issue was also fixed via commit
    3203b3ab0fcf ("mm/filemap: don't call folio_test_locked() without a
    reference in next_uptodate_folio()").  I don't expect this change will
    make a meaningful impact to DAMON performance in the real world, though I
    will be happy to be corrected from the real world reports.
    
    The issue was discovered [1] by Sashiko.
    
    
    Link: https://lore.kernel.org/20260525162256.8317-1-sj@kernel.org
    Link: https://lore.kernel.org/20260517234112.89245-1-sj@kernel.org [1]
    Fixes: 3f49584b262c ("mm/damon: implement primitives for the virtual memory address spaces")
    Signed-off-by: SeongJae Park <sj@kernel.org>
    Cc: Fernand Sieber <sieberf@amazon.com>
    Cc: Leonard Foerster <foersleo@amazon.de>
    Cc: Shakeel Butt <shakeel.butt@linux.dev>
    Cc: <stable@vger.kernel.org> # 5.15.x
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/damon/sysfs-schemes: delete tried region in regions_rmdirs() [+ + +]
Author: SeongJae Park <sj@kernel.org>
Date:   Thu Jun 4 10:13:08 2026 -0400

    mm/damon/sysfs-schemes: delete tried region in regions_rmdirs()
    
    [ Upstream commit 441f92f7d386b85bad16de49db95a307cba048a2 ]
    
    DAMON sysfs maintains the DAMOS tried region directory objects via a
    linked list.  When the user requests refresh of the directories, DAMON
    sysfs removes all the region directories first, and then generate updated
    regions directory on the empty space.  The removal function
    (damon_sysfs_scheme_regions_rm_dirs()) only puts the kobj objects.
    Deletion of the container region object from the linked list is done
    inside the kobj release callback function.
    
    If somehow the callback invocation is delayed, the list will contain
    regions list that gonna be freed.  If the updated region directories
    creation is started in this situation, the list can be corrupted and
    use-after-free can happen.
    
    Because the kobj objects are managed by only DAMON sysfs, the issue cannot
    happen in normal situation.  But, such delays can be made on kernels that
    built with CONFIG_DEBUG_KOBJECT_RELEASE.  On the kernel, the issue can
    indeed be reproduced like below.
    
        # damo start --damos_action stat
        # cd /sys/kernel/mm/damon/admin/kdamonds/0/
        # for i in {1..10}; do echo update_schemes_tried_regions > state; done
        # dmesg | grep underflow
        [   89.296152] refcount_t: underflow; use-after-free.
    
    Fix the issue by removing the region object from the list when
    decrementing the reference count.
    
    Also update damos_sysfs_populate_region_dir() to add the region object to
    the list only after the kobject_init_and_add() is success, so that fail of
    kobject_init_and_add() is not leaving the deallocated object on the list.
    
    The issue was discovered [1] by Sashiko.
    
    Link: https://lore.kernel.org/20260518152559.93038-1-sj@kernel.org
    Link: https://lore.kernel.org/20260513011920.119183-1-sj@kernel.org [1]
    Fixes: 9277d0367ba1 ("mm/damon/sysfs-schemes: implement scheme region directory")
    Signed-off-by: SeongJae Park <sj@kernel.org>
    Cc: <stable@vger.kernel.org> # 6.2.x
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/huge_memory: update file PMD counter before folio_put() [+ + +]
Author: Yin Tirui <yintirui@huawei.com>
Date:   Mon Jun 15 18:52:33 2026 -0400

    mm/huge_memory: update file PMD counter before folio_put()
    
    [ Upstream commit 8d878059924f12c1bc24556a92ec56add74de3c8 ]
    
    __split_huge_pmd_locked() updates the file/shmem RSS counter after
    dropping the PMD mapping's folio reference.  If folio_put() drops the last
    reference, mm_counter_file() can later read freed folio state via
    folio_test_swapbacked().
    
    Move the counter update before folio_put().
    
    Link: https://lore.kernel.org/20260526101337.1984081-1-yintirui@huawei.com
    Fixes: fadae2953072 ("thp: use mm_file_counter to determine update which rss counter")
    Signed-off-by: Yin Tirui <yintirui@huawei.com>
    Reviewed-by: Lorenzo Stoakes <ljs@kernel.org>
    Acked-by: David Hildenbrand (arm) <david@kernel.org>
    Reviewed-by: Lance Yang <lance.yang@linux.dev>
    Reviewed-by: Dev Jain <dev.jain@arm.com>
    Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
    Cc: Barry Song <baohua@kernel.org>
    Cc: Chen Jun <chenjun102@huawei.com>
    Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
    Cc: Liam R. Howlett <liam@infradead.org>
    Cc: Nico Pache <npache@redhat.com>
    Cc: Ryan Roberts <ryan.roberts@arm.com>
    Cc: Vlastimil Babka <vbabka@kernel.org>
    Cc: Yang Shi <yang.shi@linux.alibaba.com>
    Cc: Zi Yan <ziy@nvidia.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    [ changed folio API calls (folio_remove_rmap_pmd/mm_counter_file(folio)/folio_put) to page-based equivalents (page_remove_rmap/mm_counter_file(page)/put_page) ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mm/hugetlb: avoid false positive lockdep assertion [+ + +]
Author: Lorenzo Stoakes <ljs@kernel.org>
Date:   Mon Jun 15 17:43:54 2026 +0100

    mm/hugetlb: avoid false positive lockdep assertion
    
    [ Upstream commit b4aea43cd37afad714b5684fe9fdfcb0e78dba26 ]
    
    Commit 081056dc00a2 ("mm/hugetlb: unshare page tables during VMA split,
    not before") changed the locking model around hugetlbfs PMD unsharing on
    VMA split, but did not update the function which asserts the locks,
    hugetlb_vma_assert_locked().
    
    This function asserts that either the hugetlb VMA lock is held (if a
    shared mapping) or that the reservation map lock is held (if private).
    
    If you get an unfortunate race between something which results in one of
    these locks being released and a hugetlb VMA split and you have
    CONFIG_LOCKDEP enabled, you can therefore see a false positive assertion
    arise when there is in fact no issue.
    
    Since this change introduced a new take_locks parameter to
    hugetlb_unshare_pmds(), which, when set to false, indicates that locking
    is sufficient, simply pass this to the unsharing logic and predicate the
    lock assertions on this.
    
    This is safe, as we already asserted the file rmap lock and the VMA write
    lock prior to this (implying exclusive mmap write lock), so we cannot be
    raced by either rmap or page fault page table walkers which the asserted
    locks are intended to protect against (we don't mind GUP-fast).
    
    Separate out huge_pmd_unshare() into __huge_pmd_unshare() to add a
    check_locks parameter, and update hugetlb_unshare_pmds() to pass this
    parameter to it.
    
    This leaves all other callers of huge_pmd_unshare() still correctly
    asserting the locks.
    
    The below reproducer will trigger the assert in a kernel with
    CONFIG_LOCKDEP enabled by racing process teardown (which will release the
    hugetlb lock) against a hugetlb split.
    
    void execute_one(void)
    {
            void *ptr;
            pid_t pid;
    
            /*
             * Create a hugetlb mapping spanning a PUD entry.
             *
             * We force the hugetlb page allocation with populate and
             * noreserve.
             *
             * |---------------------|
             * |                     |
             * |---------------------|
             * 0                 PUD boundary
             */
            ptr = mmap(0, PUD_SIZE, PROT_READ | PROT_WRITE,
                       MAP_FIXED | MAP_SHARED | MAP_ANON |
                       MAP_NORESERVE | MAP_HUGETLB | MAP_POPULATE,
                       -1, 0);
            if (ptr == MAP_FAILED) {
                    perror("mmap");
                    exit(EXIT_FAILURE);
            }
    
            /*
             * Fork but with a bogus stack pointer so we try to execute code in
             * a non-VM_EXEC VMA, causing segfault + teardown via exit_mmap().
             *
             * The clone will cause PMD page table sharing between the
             * processes first via:
             * copy_process() -> ... -> huge_pte_alloc() -> huge_pmd_share()
             *
             * Then tear down and release the hugetlb 'VMA' lock via:
             * exit_mmap() -> ... -> vma_close() -> hugetlb_vma_lock_free()
             */
            pid = syscall(__NR_clone, 0, 2 * PMD_SIZE, 0, 0, 0);
            if (pid < 0) {
                    perror("clone");
                    exit(EXIT_FAILURE);
            } if (pid == 0) {
                    /* Pop stack... */
                    return;
            }
    
            /*
             * We are the parent process.
             *
             * Race the child process's teardown with a PMD unshare.
             *
             * We do this by triggering:
             *
             * __split_vma() -> hugetlb_split() -> hugetlb_unshare_pmds()
             *
             * Which, importantly, doesn't hold the hugetlb VMA lock (nor can
             * it), meaning we assert in hugetlb_vma_assert_locked().
             *
             *            .
             * |----------.----------|
             * |          .          |
             * |----------.----------|
             * 0          .     PUD boundary
             */
            mmap(0, PUD_SIZE / 2, PROT_READ | PROT_WRITE,
                 MAP_FIXED | MAP_ANON | MAP_PRIVATE, -1, 0);
    }
    
    int main(void)
    {
            int i;
    
            /* Kick off fork children. */
            for (i = 0; i < NUM_FORKS; i++) {
                    pid_t pid = fork();
    
                    if (pid < 0) {
                            perror("fork");
                            exit(EXIT_FAILURE);
                    }
    
                    /* Fork children do their work and exit. */
                    if (!pid) {
                            int j;
    
                            for (j = 0; j < NUM_ITERS; j++)
                                    execute_one();
                            return EXIT_SUCCESS;
                    }
            }
    
            /* If we succeeded, wait on children. */
            for (i = 0; i < NUM_FORKS; i++)
                    wait(NULL);
    
            return EXIT_SUCCESS;
    }
    
    [ljs@kernel.org: account for the !CONFIG_HUGETLB_PMD_PAGE_TABLE_SHARING case]
      Link: https://lore.kernel.org/agWZsPGYid08uU6O@lucifer
    Link: https://lore.kernel.org/20260513085658.45264-1-ljs@kernel.org
    Fixes: 081056dc00a2 ("mm/hugetlb: unshare page tables during VMA split, not before")
    Signed-off-by: Lorenzo Stoakes <ljs@kernel.org>
    Acked-by: David Hildenbrand (Arm) <david@kernel.org>
    Acked-by: Oscar Salvador <osalvador@suse.de>
    Cc: Jann Horn <jannh@google.com>
    Cc: Muchun Song <muchun.song@linux.dev>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Lorenzo Stoakes <ljs@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mm/hugetlb: rename folio_putback_active_hugetlb() to folio_putback_hugetlb() [+ + +]
Author: David Hildenbrand <david@kernel.org>
Date:   Mon Jun 15 11:39:01 2026 -0400

    mm/hugetlb: rename folio_putback_active_hugetlb() to folio_putback_hugetlb()
    
    [ Upstream commit b235448e8cab7eea17d164efc7bf55505985ba65 ]
    
    Now that folio_putback_hugetlb() is only called on folios that were
    previously isolated through folio_isolate_hugetlb(), let's rename it to
    match folio_putback_lru().
    
    Add some kernel doc to clarify how this function is supposed to be used.
    
    Link: https://lkml.kernel.org/r/20250113131611.2554758-5-david@redhat.com
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Muchun Song <muchun.song@linux.dev>
    Cc: Sidhartha Kumar <sidhartha.kumar@oracle.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: 3c2d42b8ee34 ("mm/memory-failure: fix hugetlb_lock AA deadlock in get_huge_page_for_hwpoison")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm/hugetlb: rename isolate_hugetlb() to folio_isolate_hugetlb() [+ + +]
Author: David Hildenbrand <david@kernel.org>
Date:   Mon Jun 15 11:38:59 2026 -0400

    mm/hugetlb: rename isolate_hugetlb() to folio_isolate_hugetlb()
    
    [ Upstream commit 4c640f128074e0d4459ecf072595a44df5c2ae18 ]
    
    Let's make the function name match "folio_isolate_lru()", and add some
    kernel doc.
    
    Link: https://lkml.kernel.org/r/20250113131611.2554758-3-david@redhat.com
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
    Cc: Muchun Song <muchun.song@linux.dev>
    Cc: Sidhartha Kumar <sidhartha.kumar@oracle.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: 3c2d42b8ee34 ("mm/memory-failure: fix hugetlb_lock AA deadlock in get_huge_page_for_hwpoison")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm/hugetlb: restore reservation on error in hugetlb folio copy paths [+ + +]
Author: David Carlier <devnexen@gmail.com>
Date:   Wed May 20 05:49:12 2026 +0100

    mm/hugetlb: restore reservation on error in hugetlb folio copy paths
    
    commit 40c81856e622a9dc59294a90d169ac07ea25b0b0 upstream.
    
    Two sites in mm/hugetlb.c allocate a hugetlb folio via
    alloc_hugetlb_folio() (consuming a VMA reservation) and then call
    copy_user_large_folio(), which became int-returning in commit 1cb9dc4b475c
    ("mm: hwpoison: support recovery from HugePage copy-on-write faults") and
    can now fail (e.g.  -EHWPOISON on a hwpoisoned source page).  On the
    failure path, folio_put() restores the global hugetlb pool count through
    free_huge_folio(), but the per-VMA reservation map entry is left marked
    consumed:
    
      - hugetlb_mfill_atomic_pte() resubmission path (UFFDIO_COPY)
      - copy_hugetlb_page_range() fork-time CoW path when
        hugetlb_try_dup_anon_rmap() fails (rare: pinned hugetlb anon
        folio under fork)
    
    User-visible effect: on UFFDIO_COPY into a private hugetlb VMA where the
    resubmission copy fails, the reservation for that address is leaked from
    the VMA's reserve map.  A subsequent fault at the same address takes the
    no-reservation path, and under hugetlb pool pressure the task is SIGBUSed
    at an address it had previously reserved.  The fork-time CoW path leaks
    the same way in the child VMA's reserve map, though it requires the much
    rarer combination of pinned hugetlb anon page + hwpoisoned source.
    
    Add the missing restore_reserve_on_error() call before folio_put() on both
    error paths.
    
    Link: https://lore.kernel.org/20260520044912.6751-1-devnexen@gmail.com
    Fixes: 1cb9dc4b475c ("mm: hwpoison: support recovery from HugePage copy-on-write faults")
    Signed-off-by: David Carlier <devnexen@gmail.com>
    Reviewed-by: Muchun Song <muchun.song@linux.dev>
    Cc: David Hildenbrand <david@kernel.org>
    Cc: Mina Almasry <almasrymina@google.com>
    Cc: Muchun Song <muchun.song@linux.dev>
    Cc: Oscar Salvador <osalvador@suse.de>
    Cc: yuehaibing <yuehaibing@huawei.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/memory-failure: fix hugetlb_lock AA deadlock in get_huge_page_for_hwpoison [+ + +]
Author: Wupeng Ma <mawupeng1@huawei.com>
Date:   Mon Jun 15 11:39:03 2026 -0400

    mm/memory-failure: fix hugetlb_lock AA deadlock in get_huge_page_for_hwpoison
    
    [ Upstream commit 3c2d42b8ee345b17a4ba56b0f6492d1ff4c1178e ]
    
    Two concurrent madvise(MADV_HWPOISON) calls on the same hugetlb page can
    trigger a recursive spinlock self-deadlock (AA deadlock) on hugetlb_lock
    when racing with a concurrent unmap:
    
      thread#0                              thread#1
      --------                              --------
      madvise(folio, MADV_HWPOISON)
        -> poisons the folio successfully
      madvise(folio, MADV_HWPOISON)         unmap(folio)
        try_memory_failure_hugetlb
          get_huge_page_for_hwpoison
            spin_lock_irq(&hugetlb_lock)    <- held
            __get_huge_page_for_hwpoison
              hugetlb_update_hwpoison()
                -> MF_HUGETLB_FOLIO_PRE_POISONED
              goto out:
                folio_put()
                  refcount: 1 -> 0
                  free_huge_folio()
                    spin_lock_irqsave(&hugetlb_lock)
                      -> AA DEADLOCK!
    
    The out: path in __get_huge_page_for_hwpoison() calls folio_put() to drop
    the GUP reference while the hugetlb_lock is still held by the hugetlb.c
    wrapper get_huge_page_for_hwpoison().  If concurrent unmap has released
    the page table mapping reference, folio_put() drops the folio refcount to
    zero, triggering free_huge_folio() which attempts to re-acquire the
    non-recursive hugetlb_lock.
    
    Fix this by moving hugetlb_lock acquisition from the hugetlb.c wrapper
    into get_huge_page_for_hwpoison().  Place spin_unlock_irq() before the
    folio_put() at the out: label so the folio is always released outside the
    lock.
    
    [akpm@linux-foundation.org: fix race, rename label per Miaohe]
      Link: https://sashiko.dev/#/patchset/20260522010305.4099834-1-mawupeng1@huawei.com
      Link: https://lore.kernel.org/f39f405e-4b4b-8f79-70fe-a2b5b62114eb@huawei.com
    Link: https://lore.kernel.org/20260522010305.4099834-1-mawupeng1@huawei.com
    Fixes: 405ce051236c ("mm/hwpoison: fix race between hugetlb free/demotion and memory_failure_hugetlb()")
    Signed-off-by: Wupeng Ma <mawupeng1@huawei.com>
    Acked-by: Oscar Salvador (SUSE) <osalvador@kernel.org>
    Acked-by: Muchun Song <muchun.song@linux.dev>
    Reviewed-by: Kefeng Wang <wangkefeng.wang@huawei.com>
    Acked-by: Miaohe Lin <linmiaohe@huawei.com>
    Cc: David Hildenbrand <david@kernel.org>
    Cc: Liam Howlett <liam.howlett@oracle.com>
    Cc: Lorenzo Stoakes <ljs@kernel.org>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Mike Rapoport <rppt@kernel.org>
    Cc: Naoya Horiguchi <nao.horiguchi@gmail.com>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Vlastimil Babka <vbabka@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm/memory-failure: fix missing ->mf_stats count in hugetlb poison [+ + +]
Author: Jane Chu <jane.chu@oracle.com>
Date:   Mon Jun 15 11:39:02 2026 -0400

    mm/memory-failure: fix missing ->mf_stats count in hugetlb poison
    
    [ Upstream commit a148a2040191b12b45b82cb29c281cb3036baf90 ]
    
    When a newly poisoned subpage ends up in an already poisoned hugetlb
    folio, 'num_poisoned_pages' is incremented, but the per node ->mf_stats is
    not.  Fix the inconsistency by designating action_result() to update them
    both.
    
    While at it, define __get_huge_page_for_hwpoison() return values in terms
    of symbol names for better readibility.  Also rename
    folio_set_hugetlb_hwpoison() to hugetlb_update_hwpoison() since the
    function does more than the conventional bit setting and the fact three
    possible return values are expected.
    
    Link: https://lkml.kernel.org/r/20260120232234.3462258-1-jane.chu@oracle.com
    Fixes: 18f41fa616ee ("mm: memory-failure: bump memory failure stats to pglist_data")
    Signed-off-by: Jane Chu <jane.chu@oracle.com>
    Acked-by: Miaohe Lin <linmiaohe@huawei.com>
    Cc: Chris Mason <clm@meta.com>
    Cc: David Hildenbrand <david@kernel.org>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Jiaqi Yan <jiaqiyan@google.com>
    Cc: Liam R. Howlett <Liam.Howlett@oracle.com>
    Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Mike Rapoport <rppt@kernel.org>
    Cc: Muchun Song <muchun.song@linux.dev>
    Cc: Naoya Horiguchi <nao.horiguchi@gmail.com>
    Cc: Oscar Salvador <osalvador@suse.de>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: William Roche <william.roche@oracle.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: 3c2d42b8ee34 ("mm/memory-failure: fix hugetlb_lock AA deadlock in get_huge_page_for_hwpoison")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/memory: fix spurious warning when unmapping device-private/exclusive pages [+ + +]
Author: Alistair Popple <apopple@nvidia.com>
Date:   Fri May 29 17:41:58 2026 -0400

    mm/memory: fix spurious warning when unmapping device-private/exclusive pages
    
    [ Upstream commit be3f38d05cc5a7c3f13e51994c5dd043ab604d28 ]
    
    Device private and exclusive entries are only supported for anonymous
    folios.  This condition is tested in __migrate_device_pages() and
    make_device_exclusive() using folio_test_anon().  However the unmap path
    tests this assumption using vma_is_anonymous().
    
    This is wrong because whilst anonymous VMAs can only contain folios where
    folio_test_anon() is true the opposite relation does not hold.  A folio
    for which folio_test_anon() is true does not imply vma_is_anonymous() is
    true.  Such a condition can occur if for example a folio is part of a
    private filebacked mapping.
    
    In this case vma_is_anonymous() is false as the mapping is filebacked, but
    folio_test_anon() may be true, thus permitting devices to migrate the
    folio to device private memory.  This can lead to the following spurious
    warnings during process teardown:
    
    [  772.737706] ------------[ cut here ]------------
    [  772.739201] WARNING: mm/memory.c:1754 at unmap_page_range.cold+0x26/0x18a, CPU#17: hmm-tests/2041
    [  772.742050] Modules linked in: test_hmm nvidia_uvm(O) nvidia(O)
    [  772.743959] CPU: 17 UID: 0 PID: 2041 Comm: hmm-tests Tainted: G        W  O        7.0.0+ #387 PREEMPT(full)
    [  772.747104] Tainted: [W]=WARN, [O]=OOT_MODULE
    [  772.748509] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.17.0-0-gb52ca86e094d-prebuilt.qemu.org 04/01/2014
    [  772.752117] RIP: 0010:unmap_page_range.cold+0x26/0x18a
    [  772.753780] Code: 7e fe ff ff 48 89 4c 24 78 4c 89 44 24 38 e8 f2 ff b1 00 48 8b 4c 24 78 4c 8b 44 24 38 48 8b 44 24 18 48 83 78 48 00 74 04 90 <0f> 0b 90 48 89 ca b8 ff ff 37 00 48 c1 ea 03 48 c1 e0 2a 80 3c 02
    [  772.759602] RSP: 0018:ffff888112607550 EFLAGS: 00010286
    [  772.761310] RAX: ffff88811bbf4dc0 RBX: dffffc0000000000 RCX: ffffea03e9bfffd8
    [  772.763583] RDX: 1ffff1102377e9c1 RSI: 0000000000000008 RDI: ffff88811bbf4e08
    [  772.765914] RBP: 0000000000000006 R08: ffff8881059f7448 R09: ffffed10224c0e68
    [  772.768184] R10: ffff888112607347 R11: 0000000000000001 R12: 0000000000000001
    [  772.770461] R13: ffffea03e9bfffc0 R14: ffff888112607908 R15: ffffea03e9bfffc0
    [  772.772782] FS:  00007f327caa2780(0000) GS:ffff888427b7d000(0000) knlGS:0000000000000000
    [  772.775328] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  772.777187] CR2: 00007f327ca89000 CR3: 00000001994d5000 CR4: 00000000000006f0
    [  772.779135] Call Trace:
    [  772.779792]  <TASK>
    [  772.780317]  ? dmirror_interval_invalidate+0x1a3/0x290 [test_hmm]
    [  772.781873]  ? vm_normal_page_pud+0x2b0/0x2b0
    [  772.782992]  ? __rwlock_init+0x150/0x150
    [  772.784006]  ? lock_release+0x216/0x2b0
    [  772.785008]  ? __mmu_notifier_invalidate_range_start+0x505/0x6e0
    [  772.786522]  ? lock_release+0x216/0x2b0
    [  772.787498]  ? unmap_single_vma+0xb6/0x210
    [  772.788573]  unmap_vmas+0x27d/0x520
    [  772.789506]  ? unmap_single_vma+0x210/0x210
    [  772.790607]  ? mas_update_gap.part.0+0x620/0x620
    [  772.791834]  unmap_region+0x19e/0x350
    [  772.792769]  ? remove_vma+0x130/0x130
    [  772.793684]  ? mas_alloc_nodes+0x1f2/0x300
    [  772.794730]  vms_complete_munmap_vmas+0x8c1/0xe20
    [  772.795926]  ? unmap_region+0x350/0x350
    [  772.796917]  do_vmi_align_munmap+0x36a/0x4e0
    [  772.798018]  ? lock_release+0x216/0x2b0
    [  772.799024]  ? vma_shrink+0x620/0x620
    [  772.799983]  do_vmi_munmap+0x150/0x2c0
    [  772.800939]  __vm_munmap+0x161/0x2c0
    [  772.801872]  ? expand_downwards+0xd60/0xd60
    [  772.802948]  ? clockevents_program_event+0x1ef/0x540
    [  772.804217]  ? lock_release+0x216/0x2b0
    [  772.805158]  __x64_sys_munmap+0x59/0x80
    [  772.805776]  do_syscall_64+0xfc/0x670
    [  772.806336]  ? irqentry_exit+0xda/0x580
    [  772.806976]  entry_SYSCALL_64_after_hwframe+0x4b/0x53
    [  772.807772] RIP: 0033:0x7f327cbb2717
    [  772.808323] Code: 73 01 c3 48 8b 0d f9 76 0d 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 b8 0b 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d c9 76 0d 00 f7 d8 64 89 01 48
    [  772.811337] RSP: 002b:00007ffde7f57d38 EFLAGS: 00000202 ORIG_RAX: 000000000000000b
    [  772.812564] RAX: ffffffffffffffda RBX: 00007f327cc9c000 RCX: 00007f327cbb2717
    [  772.813733] RDX: 0000000000000000 RSI: 0000000000400000 RDI: 00007f327c289000
    [  772.814867] RBP: 0000000000421360 R08: 000000000000001a R09: 0000000000000000
    [  772.815991] R10: 0000000000000003 R11: 0000000000000202 R12: 00007ffde7f57d74
    [  772.817121] R13: 00007f327c689010 R14: 0000000000100000 R15: 00007f327c289000
    [  772.818272]  </TASK>
    [  772.818614] irq event stamp: 0
    [  772.819159] hardirqs last  enabled at (0): [<0000000000000000>] 0x0
    [  772.820174] hardirqs last disabled at (0): [<ffffffff82a57ab3>] copy_process+0x19f3/0x6440
    [  772.821511] softirqs last  enabled at (0): [<ffffffff82a57b00>] copy_process+0x1a40/0x6440
    [  772.822869] softirqs last disabled at (0): [<0000000000000000>] 0x0
    [  772.823871] ---[ end trace 0000000000000000 ]---
    
    Fix this by using the same check for folio_test_anon() in
    zap_nonpresent_ptes(). Also add a hmm-test case for this.
    
    Link: https://lore.kernel.org/20260501065116.2057242-1-apopple@nvidia.com
    Fixes: 999dad824c39 ("mm/shmem: persist uffd-wp bit across zapping for file-backed")
    Signed-off-by: Alistair Popple <apopple@nvidia.com>
    Reported-by: Arsen Arsenović <aarsenovic@baylibre.com>
    Reviewed-by: Balbir Singh <balbirs@nvidia.com>
    Cc: David Hildenbrand <david@kernel.org>
    Cc: Jason Gunthorpe <jgg@ziepe.ca>
    Cc: John Hubbard <jhubbard@nvidia.com>
    Cc: Leon Romanovsky <leon@kernel.org>
    Cc: Liam R. Howlett <liam@infradead.org>
    Cc: Lorenzo Stoakes <ljs@kernel.org>
    Cc: Peter Xu <peterx@redhat.com>
    Cc: Matthew Brost <matthew.brost@intel.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Mike Rapoport <rppt@kernel.org>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
    Cc: Vlastimil Babka <vbabka@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    [ adapted `folio_test_anon(folio)` to `PageAnon(page)` ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/migrate: don't call folio_putback_active_hugetlb() on dst hugetlb folio [+ + +]
Author: David Hildenbrand <david@kernel.org>
Date:   Mon Jun 15 11:39:00 2026 -0400

    mm/migrate: don't call folio_putback_active_hugetlb() on dst hugetlb folio
    
    [ Upstream commit ba23f58de896842028b4b33b95530f08288396fe ]
    
    We replaced a simple put_page() by a putback_active_hugepage() call in
    commit 3aaa76e125c1 ("mm: migrate: hugetlb: putback destination hugepage
    to active list"), to set the "active" flag on the dst hugetlb folio.
    
    Nowadays, we decoupled the "active" list from the flag, by calling the
    flag "migratable".
    
    Calling "putback" on something that wasn't allocated is weird and not
    future proof, especially if we might reach that path when migration failed
    and we just want to free the freshly allocated hugetlb folio.
    
    Let's simply handle the migratable flag and the active list flag in
    move_hugetlb_state(), where we know that allocation succeeded and already
    handle the temporary flag; use a simple folio_put() to return our
    reference.
    
    Link: https://lkml.kernel.org/r/20250113131611.2554758-4-david@redhat.com
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Muchun Song <muchun.song@linux.dev>
    Cc: Sidhartha Kumar <sidhartha.kumar@oracle.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: 3c2d42b8ee34 ("mm/memory-failure: fix hugetlb_lock AA deadlock in get_huge_page_for_hwpoison")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/page_alloc: clear page->private in free_pages_prepare() [+ + +]
Author: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com>
Date:   Fri May 29 13:02:30 2026 +0800

    mm/page_alloc: clear page->private in free_pages_prepare()
    
    [ Upstream commit ac1ea219590c09572ed5992dc233bbf7bb70fef9 ]
    
    Several subsystems (slub, shmem, ttm, etc.) use page->private but don't
    clear it before freeing pages.  When these pages are later allocated as
    high-order pages and split via split_page(), tail pages retain stale
    page->private values.
    
    This causes a use-after-free in the swap subsystem.  The swap code uses
    page->private to track swap count continuations, assuming freshly
    allocated pages have page->private == 0.  When stale values are present,
    swap_count_continued() incorrectly assumes the continuation list is valid
    and iterates over uninitialized page->lru containing LIST_POISON values,
    causing a crash:
    
      KASAN: maybe wild-memory-access in range [0xdead000000000100-0xdead000000000107]
      RIP: 0010:__do_sys_swapoff+0x1151/0x1860
    
    Fix this by clearing page->private in free_pages_prepare(), ensuring all
    freed pages have clean state regardless of previous use.
    
    Link: https://lkml.kernel.org/r/20260207173615.146159-1-mikhail.v.gavrilov@gmail.com
    Fixes: 3b8000ae185c ("mm/vmalloc: huge vmalloc backing pages should be split rather than compound")
    Signed-off-by: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com>
    Suggested-by: Zi Yan <ziy@nvidia.com>
    Acked-by: Zi Yan <ziy@nvidia.com>
    Acked-by: David Hildenbrand (Arm) <david@kernel.org>
    Reviewed-by: Vlastimil Babka <vbabka@suse.cz>
    Cc: Brendan Jackman <jackmanb@google.com>
    Cc: Chris Li <chrisl@kernel.org>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Kairui Song <ryncsn@gmail.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    [backport: context only]
    Signed-off-by: Li Wang <li.wang@windriver.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mmc: core: Fix host controller programming for fixed driver type [+ + +]
Author: Kamal Dasu <kamal.dasu@broadcom.com>
Date:   Thu Apr 23 15:18:55 2026 -0400

    mmc: core: Fix host controller programming for fixed driver type
    
    commit 5a52c5701a67d5176eb1afbf1bdaf7d6dfeec597 upstream.
    
    When using the fixed-emmc-driver-type device tree property, the MMC core
    correctly selects the driver strength for the card but fails to program
    the host controller accordingly. This causes a mismatch where the card
    uses the specified driver type while the host controller defaults to
    Type B (since ios->drv_type remains zero).
    
    Split the driver type programming logic to handle both fixed and dynamic
    driver type selection paths. For fixed driver types, program the host
    controller with the selected drive_strength value. For dynamic selection,
    use the existing drv_type as before.
    
    This ensures both the eMMC device and host controller use matching driver
    strengths, preventing potential signal integrity issues.
    
    Fixes: 6186d06c519e ("mmc: parse new binding for eMMC fixed driver type")
    Signed-off-by: Kamal Dasu <kamal.dasu@broadcom.com>
    Reviewed-by: Shawn Lin <shawn.lin@rock-chips.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: litex_mmc: Set mandatory idle clocks before CMD0 [+ + +]
Author: Inochi Amaoto <inochiama@gmail.com>
Date:   Thu May 21 15:21:21 2026 +0800

    mmc: litex_mmc: Set mandatory idle clocks before CMD0
    
    commit 99982b743e5ba72bd1f5de0e03e3b96ae70b1e51 upstream.
    
    The litex_mmc driver assumes the card is already probed in the BIOS
    and skip the phy initialization. This will cause the command fail
    like the following when the old card is unplugged and then insert
    a new card:
    
    [   62.923593] litex-mmc f0004000.mmc: Command (cmd 8) error, status -110
    [   62.949717] litex-mmc f0004000.mmc: Command (cmd 55) error, status -110
    [   62.976606] litex-mmc f0004000.mmc: Command (cmd 55) error, status -110
    [   63.002516] litex-mmc f0004000.mmc: Command (cmd 55) error, status -110
    [   63.028442] litex-mmc f0004000.mmc: Command (cmd 55) error, status -110
    
    Add required clock settings and initialization for the CMD 0, so it can
    probe the new card.
    
    Fixes: 92e099104729 ("mmc: Add driver for LiteX's LiteSDCard interface")
    Signed-off-by: Inochi Amaoto <inochiama@gmail.com>
    Reviewed-by: Gabriel Somlo <gsomlo@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulfh@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: litex_mmc: Use DIV_ROUND_UP for more accurate clock calculation [+ + +]
Author: Inochi Amaoto <inochiama@gmail.com>
Date:   Thu May 21 15:21:20 2026 +0800

    mmc: litex_mmc: Use DIV_ROUND_UP for more accurate clock calculation
    
    commit b837e38c255dd9f8b53511d52e87f1fda32b3dfe upstream.
    
    The previous clock uses roundup_pow_of_two() to calculate the core
    clock frequency. It does not meet the actual hardware meaning.
    The actual frequency is calculated by "ref_clk / ((div >> 1) << 1)".
    
    Fix the clock divider calculation.
    
    Fixes: 92e099104729 ("mmc: Add driver for LiteX's LiteSDCard interface")
    Signed-off-by: Inochi Amaoto <inochiama@gmail.com>
    Reviewed-by: Gabriel Somlo <gsomlo@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulfh@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: renesas_sdhi: Add OF entry for RZ/G2H SoC [+ + +]
Author: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Date:   Tue May 19 14:53:40 2026 +0100

    mmc: renesas_sdhi: Add OF entry for RZ/G2H SoC
    
    commit f48ee49726ee4ab545fd2dc644f169c0809b19b3 upstream.
    
    The RZ/G2H (R8A774E1) SoC was previously handled via the generic
    "renesas,rcar-gen3-sdhi" fallback compatible string. However, because
    the SDHI IP on RZ/G2H is identical with the R-Car H3-N (R8A77951), it
    requires the specific quirks and configuration defined in
    `of_r8a7795_compatible` rather than the generic Gen3 data.
    
    Add the explicit "renesas,sdhi-r8a774e1" match entry to map it correctly.
    Note that the DT binding file renesas,sdhi.yaml does not need an update
    as the entry for this SoC is already present.
    
    Fixes: 31941342888d ("arm64: dts: renesas: r8a774e1: Add SDHI nodes")
    Cc: stable@vger.kernel.org
    Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
    Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: Ulf Hansson <ulfh@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: sdhci: add signal voltage switch in sdhci_resume_host [+ + +]
Author: Jisheng Zhang <jszhang@kernel.org>
Date:   Sun May 24 10:34:55 2026 +0800

    mmc: sdhci: add signal voltage switch in sdhci_resume_host
    
    commit f595e8e77a51eee35e331f69321766593a845ef2 upstream.
    
    I met one suspend/resume issue with sdr104 capable sdio wifi card (with
    "keep-power-in-suspend" set in DT property):
    After resuming from suspend to ram, the sdio wifi card stops working.
    Further debug shows that although ios shows the sdio card is at sdr104
    mode, the voltage is still at 3V3. This is due to missing the calling
    of ->start_signal_voltage_switch() in sdhci_resume_host().
    
    Fix this issue by adding ->start_signal_voltage_switch() in
    sdhci_resume_host(). This also matches what we do for
    sdhci_runtime_resume_host().
    
    Then the question is: why this issue hasn't reported and fixed for so
    long time. IMHO, several reasons: Some host controllers just kick off
    the runtime resume for system resume, so they benefit from the well
    supported runtime pm code; Some platforms just use the old sdio wifi
    card which doesn't need signal voltage switch at all, the default
    voltage is 3v3 after resuming.
    
    Fixes: 6308d2905bd3 ("mmc: sdhci: add quirk for keeping card power during suspend")
    Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulfh@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mptcp: add-addr: always drop other suboptions [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Tue Jun 16 08:19:09 2026 -0400

    mptcp: add-addr: always drop other suboptions
    
    [ Upstream commit bd34fa0257261b76964df1c98f44b3cb4ee14620 ]
    
    When an ADD_ADDR needs to be sent, it could be prepared if there is
    enough remaining space and even if the packet is not a pure ACK. But it
    would be dropped soon after.
    
    Indeed, in mptcp_pm_add_addr_signal(), there is enough space to fit a
    DSS of 20 octets and an ADD_ADDR echo containing an IPv4 address on 8
    octets for example. In this case, the packet would be prepared, the
    MPTCP_ADD_ADDR_ECHO bit would be removed from pm->addr_signal, but the
    option would be silently dropped in mptcp_established_options_add_addr()
    not to override DSS info in the union from 'struct mptcp_out_options',
    and also because mptcp_write_options() will enforce mutually exclusion
    with DSS.
    
    Instead, don't even try to send an ADD_ADDR if it is not a pure ACK.
    Retry for each new packet until a pure-ACK is emitted. That's fine to do
    that, because each time an ADD_ADDR (echo) is scheduled, a pure ACK is
    queued.
    
    This also simplifies the code, and the skb checks can be done earlier,
    before the lock.
    
    Note: also, since commit 6d0060f600ad ("mptcp: Write MPTCP DSS headers
    to outgoing data packets"), opts->ahmac would not have been set to 0
    when other suboptions were not dropped, and when sending an ADD_ADDR
    echo. That would have resulted in sending an ADD_ADDR using garbage
    info, where there was not enough space, instead of an echo one without
    the ADD_ADDR HMAC.
    
    Fixes: 1bff1e43a30e ("mptcp: optimize out option generation")
    Cc: stable@vger.kernel.org
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260602-net-mptcp-misc-fixes-7-1-rc7-v2-11-856831229976@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: allow subflow rcv wnd to shrink [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Tue Jun 2 22:14:11 2026 +1000

    mptcp: allow subflow rcv wnd to shrink
    
    commit da23be77e1292cd611e736c3aa17da633d7ddce7 upstream.
    
    In MPTCP connection, the `window` field in the TCP header refers to the
    MPTCP-level rcv_nxt and it's right edge should not move backward. Such
    constraint is enforced at DSS option generation time.
    
    At the same time, the TCP stack ensures independently that the TCP-level
    rcv wnd right's edge does not move backward. That in turn causes artificial
    inflating of the MPTCP rcv window when the incoming data is acked at the
    TCP level and is OoO in the MPTCP sequence space (or lands in the backlog).
    
    As a consequence, the incoming traffic can exceed the receiver rcvbuf size
    even when the sender is not misbehaving.
    
    Prevent such scenario forcibly allowing the TCP subflow to shrink the
    TCP-level rcv wnd regardless of the current netns setting.
    
    Fixes: f3589be0c420 ("mptcp: never shrink offered window")
    Cc: stable@vger.kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260602-net-mptcp-misc-fixes-7-1-rc7-v2-4-856831229976@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: cleanup fallback dummy mapping generation [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Sat May 30 10:17:27 2026 -0400

    mptcp: cleanup fallback dummy mapping generation
    
    [ Upstream commit 2834f8edd74d5dda368087a654c0e52b141e9893 ]
    
    MPTCP currently access ack_seq outside the msk socket log scope to
    generate the dummy mapping for fallback socket. Soon we are going
    to introduce backlog usage and even for fallback socket the ack_seq
    value will be significantly off outside of the msk socket lock scope.
    
    Avoid relying on ack_seq for dummy mapping generation, using instead
    the subflow sequence number. Note that in case of disconnect() and
    (re)connect() we must ensure that any previous state is re-set.
    
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Geliang Tang <geliang@kernel.org>
    Tested-by: Geliang Tang <geliang@kernel.org>
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20251121-net-next-mptcp-memcg-backlog-imp-v1-6-1f34b6c1e0b1@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 0981f90e1a05 ("mptcp: reset rcv wnd on disconnect")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: close TOCTOU race while computing rcv_wnd [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Tue Jun 2 22:14:10 2026 +1000

    mptcp: close TOCTOU race while computing rcv_wnd
    
    commit 8ab24fdebc369c0dfb90f82c1650b1e66662bb45 upstream.
    
    The MPTCP output path access locklessly the MPTCP-level ack_seq
    in multiple times, using possibly different values for the data_ack
    in the DSS option and to compute the announced rcv wnd for the same
    packet.
    
    Refactor the cote to avoid inconsistencies which may confuse the
    peer. Also ensure that the MPTCP level rcv wnd is updated only when
    the egress packet actually contains a DSS ack.
    
    Fixes: fa3fe2b15031 ("mptcp: track window announced to peer")
    Cc: stable@vger.kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260602-net-mptcp-misc-fixes-7-1-rc7-v2-3-856831229976@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: do not drop partial packets [+ + +]
Author: Shardul Bankar <shardul.b@mpiricsoftware.com>
Date:   Sat May 30 11:07:40 2026 -0400

    mptcp: do not drop partial packets
    
    [ Upstream commit 50c2d91c5dfa0e465826ec1f8dbad9cdc254bd85 ]
    
    When a packet arrives with map_seq < ack_seq < end_seq, the beginning
    of the packet has already been acknowledged but the end contains new
    data. Currently the entire packet is dropped as "old data," forcing
    the sender to retransmit.
    
    Instead, skip the already-acked bytes by adjusting the skb offset and
    enqueue only the new portion. Update bytes_received and ack_seq to
    reflect the new data consumed.
    
    A previous attempt at this fix has been sent by Paolo Abeni [1], but had
    issues [2]: it also added a zero-window check and changed rcv_wnd_sent
    initialization, which caused test regressions. This version addresses
    only the partial packet handling without modifying receive window
    accounting.
    
    Fixes: ab174ad8ef76 ("mptcp: move ooo skbs into msk out of order queue.")
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/c9b426a4e163aa3c4fe8b80c79f1a610f47ae7d8.1763075056.git.pabeni@redhat.com [1]
    Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/600 [2]
    Signed-off-by: Shardul Bankar <shardul.b@mpiricsoftware.com>
    [pabeni@redhat.com: update map]
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260515-net-mptcp-misc-fixes-7-1-rc4-v2-1-701e96419f2f@kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: fix missing wakeups in edge scenarios [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Tue Jun 16 08:19:27 2026 -0400

    mptcp: fix missing wakeups in edge scenarios
    
    [ Upstream commit 9d8d28738f24b75616d6ca7a27cb4aed88520343 ]
    
    The mptcp_recvmsg() can fill MPTCP socket receive queue via
    mptcp_move_skbs(), but currently does not try to wakeup any listener,
    because the same process is going to check the receive queue soon.
    
    When multiple threads are reading from the same fd, the above can
    cause stall. Add the missing wakeup.
    
    Fixes: 6771bfd9ee24 ("mptcp: update mptcp ack sequence from work queue")
    Cc: stable@vger.kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260602-net-mptcp-misc-fixes-7-1-rc7-v2-1-856831229976@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: fix retransmission loop when csum is enabled [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Tue Jun 2 22:14:09 2026 +1000

    mptcp: fix retransmission loop when csum is enabled
    
    commit d1918b36edcaed0ec4ef6888b2358c6b1ddcff47 upstream.
    
    Sashiko noted that retransmission with csum enabled can actually
    transmit new data, but currently the relevant code does not update
    accordingly snd_nxt.
    
    The may cause incoming ack drop and an endless retransmission loop.
    
    Address the issue incrementing snd_nxt as needed.
    
    Fixes: 4e14867d5e91 ("mptcp: tune re-injections for csum enabled mode")
    Cc: stable@vger.kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260602-net-mptcp-misc-fixes-7-1-rc7-v2-2-856831229976@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: handle first subflow closing consistently [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Sat May 30 11:07:39 2026 -0400

    mptcp: handle first subflow closing consistently
    
    [ Upstream commit 0eeb372deebce6c25b9afc09e35d6c75a744299a ]
    
    Currently, as soon as the PM closes a subflow, the msk stops accepting
    data from it, even if the TCP socket could be still formally open in the
    incoming direction, with the notable exception of the first subflow.
    
    The root cause of such behavior is that code currently piggy back two
    separate semantic on the subflow->disposable bit: the subflow context
    must be released and that the subflow must stop accepting incoming
    data.
    
    The first subflow is never disposed, so it also never stop accepting
    incoming data. Use a separate bit to mark the latter status and set such
    bit in __mptcp_close_ssk() for all subflows.
    
    Beyond making per subflow behaviour more consistent this will also
    simplify the next patch.
    
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20251121-net-next-mptcp-memcg-backlog-imp-v1-11-1f34b6c1e0b1@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 50c2d91c5dfa ("mptcp: do not drop partial packets")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: introduce the mptcp_init_skb helper [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Sat May 30 11:07:38 2026 -0400

    mptcp: introduce the mptcp_init_skb helper
    
    [ Upstream commit 9a0afe0db46720ce1a009c7dac168aa0584bd732 ]
    
    Factor out all the skb initialization step in a new helper and
    use it. Note that this change moves the MPTCP CB initialization
    earlier: we can do such step as soon as the skb leaves the
    subflow socket receive queues.
    
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Geliang Tang <geliang@kernel.org>
    Tested-by: Geliang Tang <geliang@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20250927-net-next-mptcp-rcv-path-imp-v1-4-5da266aa9c1a@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 50c2d91c5dfa ("mptcp: do not drop partial packets")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: pm: fix ADD_ADDR timer infinite retry on option space insufficient [+ + +]
Author: Li Xiasong <lixiasong1@huawei.com>
Date:   Fri May 29 20:59:27 2026 -0400

    mptcp: pm: fix ADD_ADDR timer infinite retry on option space insufficient
    
    [ Upstream commit 51e398a3b8961b26a8c0a4ba9a777c5339791707 ]
    
    When TCP option space is insufficient (e.g., when sending ADD_ADDR with an
    IPv6 address and port while tcp_timestamps is enabled), the original code
    jumped to out_unlock without clearing the addr_signal flag. This caused
    mptcp_pm_add_timer to keep rescheduling indefinitely, not sending ADD_ADDR,
    preventing subsequent addresses in the endpoint list from being announced.
    
    Handle this case by clearing the ADD_ADDR signal and skipping the matching
    ADD_ADDR retransmission entry. The skip path cancels the matching timer
    (with id check) and advances PM state progression, preserving forward
    progress to subsequent PM work.
    
    This cancellation is inherently best-effort. A concurrent add_timer
    callback may already be running and may acquire pm.lock before the
    cancel path updates entry state. In that case, one final ADD_ADDR
    transmit attempt can still be executed.
    
    Once the cancel path sets entry->retrans_times to ADD_ADDR_RETRANS_MAX,
    the callback-side retrans_times check suppresses further ADD_ADDR
    retransmissions.
    
    Note that when an ADD_ADDR is being prepared, a pure-ACK is queued. On
    the output side, it means that it is fine to skip non-pure-ACK packets,
    when drop_other_suboptions is set: a pure-ACK will be processed soon
    after.
    
    Fixes: 00cfd77b9063 ("mptcp: retransmit ADD_ADDR when timeout")
    Cc: stable@vger.kernel.org
    Signed-off-by: Li Xiasong <lixiasong1@huawei.com>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260515-net-mptcp-misc-fixes-7-1-rc4-v2-2-701e96419f2f@kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: reset rcv wnd on disconnect [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Sat May 30 10:17:28 2026 -0400

    mptcp: reset rcv wnd on disconnect
    
    [ Upstream commit 0981f90e1a05773a4c29c6e720f5ea1e3c8f1876 ]
    
    If the MPTCP socket fallback to TCP before the MP handshake completion,
    the IASN remain 0, and the rcv_wnd_sent field is not explicitly
    initialized, just incremented over time with the data transfer.
    
    At disconnect time such value is not cleared. If the next connection falls
    back to TCP before the MP handshake completion, the data transfer will
    keep incrementing the receive window end sequence starting from the last
    value used in the previous connection: the announced window will be
    unrelated from the actual receiver buffer size and likely too big.
    
    Address the issue zeroing the field at disconnect time.
    
    Fixes: b29fcfb54cd7 ("mptcp: full disconnect implementation")
    Cc: stable@vger.kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260515-net-mptcp-misc-fixes-7-1-rc4-v2-4-701e96419f2f@kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: sockopt: check timestamping ret value [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Tue Jun 2 22:14:14 2026 +1000

    mptcp: sockopt: check timestamping ret value
    
    commit 57132affbc89c02e1bf73fdf5724311bdc9a29da upstream.
    
    sock_set_timestamping() can fail for different reasons. The returned
    value should then be checked.
    
    If sock_set_timestamping() fails for at least one subflow, the first
    error is now reported to the userspace, similar to what is done with
    other socket options.
    
    Fixes: 9061f24bf82e ("mptcp: sockopt: propagate timestamp request to subflows")
    Cc: stable@vger.kernel.org
    Reported-by: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
    Closes: https://lore.kernel.org/willemdebruijn.kernel.178a41a53d041@gmail.com
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260602-net-mptcp-misc-fixes-7-1-rc7-v2-7-856831229976@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: use plain bool instead of custom binary enum [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Sat May 30 10:17:26 2026 -0400

    mptcp: use plain bool instead of custom binary enum
    
    [ Upstream commit f1f26512a9bf18f7a4c0d59df113a49f39d7d4b6 ]
    
    The 'data_avail' subflow field is already used as plain boolean,
    drop the custom binary enum type and switch to bool.
    
    No functional changed intended.
    
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Mat Martineau <martineau@kernel.org>
    Link: https://lore.kernel.org/r/20231023-send-net-next-20231023-2-v1-3-9dc60939d371@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 0981f90e1a05 ("mptcp: reset rcv wnd on disconnect")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/802/mrp: fix vector attribute parsing in mrp_pdu_parse_vecattr [+ + +]
Author: Yizhou Zhao <zhaoyz24@mails.tsinghua.edu.cn>
Date:   Wed Jun 3 14:00:13 2026 +0800

    net/802/mrp: fix vector attribute parsing in mrp_pdu_parse_vecattr
    
    [ Upstream commit 7561c7fbc694308da73300f036719e63e42bf0b4 ]
    
    In mrp_pdu_parse_vecattr(), vector attribute events are encoded three
    per byte and valen tracks the number of events left to process.
    
    The parser decrements valen after processing the first and second events
    from each event byte, but not after processing the third one. When valen
    is exactly a multiple of three, the loop continues after the last valid
    event and consumes the next byte as a new event byte, applying a
    spurious event to the MRP applicant state.
    
    Additionally, when valen is zero the parser unconditionally consumes
    attrlen bytes as FirstValue and advances the offset, even though per
    IEEE 802.1ak a VectorAttribute with only a LeaveAllEvent has valen of
    zero and no FirstValue or Vector fields. This corrupts the offset for
    subsequent PDU parsing.
    
    Also, when valen exceeds three the loop crosses byte boundaries but
    the attribute value is not incremented between the last event of one
    byte and the first event of the next. This causes the first event of
    the next byte to use the same attribute value as the third event
    rather than the next consecutive value.
    
    Decrement valen after processing the third event, skip FirstValue
    consumption when valen is zero, and increment the attribute value at
    the end of each loop iteration.
    
    Fixes: febf018d2234 ("net/802: Implement Multiple Registration Protocol (MRP)")
    Reported-by: Yizhou Zhao <zhaoyz24@mails.tsinghua.edu.cn>
    Reported-by: Yuxiang Yang <yangyx22@mails.tsinghua.edu.cn>
    Reported-by: Ao Wang <wangao@seu.edu.cn>
    Reported-by: Xuewei Feng <fengxw06@126.com>
    Reported-by: Qi Li <qli01@tsinghua.edu.cn>
    Reported-by: Ke Xu <xuke@tsinghua.edu.cn>
    Signed-off-by: Yizhou Zhao <zhaoyz24@mails.tsinghua.edu.cn>
    Link: https://patch.msgid.link/20260603060016.21522-1-zhaoyz24@mails.tsinghua.edu.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/iucv: fix locking in .getsockopt [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Thu May 21 07:11:45 2026 -0700

    net/iucv: fix locking in .getsockopt
    
    [ Upstream commit 3589d20a666caf30ad100c960a2de7de390fce88 ]
    
    Mirror iucv_sock_setsockopt() and wrap the whole switch in
    lock_sock()/release_sock(). The pre-existing SO_MSGLIMIT-only lock
    becomes redundant and is removed.
    
    Any AF_IUCV HIPER user can potentially crash the kernel by racing
    recvmsg() with getsockopt(SO_MSGSIZE): the SO_MSGSIZE arm dereferences
    iucv->hs_dev->mtu after iucv_sock_close() (called from the racing
    recvmsg()) has set hs_dev to NULL, producing a NULL pointer dereference
    oops.
    
    Suggested-by: Stanislav Fomichev <sdf.kernel@gmail.com>
    Fixes: 51363b8751a6 ("af_iucv: allow retrieval of maximum message size")
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Reviewed-by: Alexandra Winter <wintera@linux.ibm.com>
    Tested-by: Alexandra Winter <wintera@linux.ibm.com>
    Link: https://patch.msgid.link/20260521-af_iucv_fix2-v1-1-f16b1c510aa9@debian.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx4: avoid GCC 10 __bad_copy_from() false positive [+ + +]
Author: Yao Sang <sangyao@kylinos.cn>
Date:   Wed Jun 3 14:10:44 2026 +0800

    net/mlx4: avoid GCC 10 __bad_copy_from() false positive
    
    [ Upstream commit 2365343f4aad3e1b1e7a2e87e98cf66d5e590589 ]
    
    mlx4_init_user_cqes() fills a scratch buffer with the CQE
    initialization pattern and then copies from that buffer to userspace.
    
    In the single-copy path, the copy length is array_size(entries,
    cqe_size), but the scratch buffer is allocated with PAGE_SIZE. GCC 10
    does not carry the branch invariant strongly enough through the object
    size checks and falsely triggers __bad_copy_from().
    
    Size the scratch buffer to the actual copy length for the active path,
    keep array_size() for the single-copy case, and retain a WARN_ON_ONCE()
    guard for the PAGE_SIZE invariant before allocating the buffer.
    
    Fixes: f69bf5dee7ef ("net/mlx4: Use array_size() helper in copy_to_user()")
    Signed-off-by: Yao Sang <sangyao@kylinos.cn>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx5: Fix slab-out-of-bounds in mlx5_query_nic_vport_mac_list [+ + +]
Author: Dragos Tatulea <dtatulea@nvidia.com>
Date:   Thu Jun 4 16:58:49 2026 +0300

    net/mlx5: Fix slab-out-of-bounds in mlx5_query_nic_vport_mac_list
    
    [ Upstream commit 894e036a24a26a6dd7b17d8d3fb5c53ab48a6074 ]
    
    mlx5_query_nic_vport_mac_list() sizes its firmware command buffer using
    the PF's log_max_current_uc/mc_list capabilities. When querying a VF
    vport with a larger configured max (via devlink), the firmware response
    can overflow this buffer:
    
     BUG: KASAN: slab-out-of-bounds in mlx5_query_nic_vport_mac_list+0x453/0x4c0 [mlx5_core]
     Read of size 4 at addr ff1100013ffc8a12 by task kworker/u96:2/385
    
     CPU: 12 UID: 0 PID: 385 Comm: kworker/u96:2 Not tainted 7.0.0-rc6+ #1 PREEMPT
     Hardware name: QEMU Standard PC (Q35 + ICH9, 2009)
     Workqueue: mlx5_esw_wq esw_vport_change_handler [mlx5_core]
     Call Trace:
      <TASK>
      dump_stack_lvl+0x69/0xa0
      print_report+0x176/0x4e4
      kasan_report+0xc8/0x100
      mlx5_query_nic_vport_mac_list+0x453/0x4c0 [mlx5_core]
      esw_update_vport_addr_list+0x2e3/0xda0 [mlx5_core]
      esw_vport_change_handle_locked+0xa1f/0x1060 [mlx5_core]
      esw_vport_change_handler+0x6a/0x90 [mlx5_core]
      process_one_work+0x87f/0x15e0
      worker_thread+0x62b/0x1020
      kthread+0x375/0x490
      ret_from_fork+0x4dc/0x810
      ret_from_fork_asm+0x11/0x20
      </TASK>
    
    Fix by querying the vport's own HCA caps to size the buffer correctly.
    Refactor the function to allocate and return the MAC list internally,
    removing the caller's dependency on knowing the correct max.
    
    Fixes: e16aea2744ab ("net/mlx5: Introduce access functions to modify/query vport mac lists")
    Signed-off-by: Dragos Tatulea <dtatulea@nvidia.com>
    Reviewed-by: Carolina Jubran <cjubran@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/20260604135849.458060-1-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: Reorder completion before putting command entry in cmd_work_handler [+ + +]
Author: Nikolay Kuratov <kniv@yandex-team.ru>
Date:   Tue May 26 19:29:32 2026 +0300

    net/mlx5: Reorder completion before putting command entry in cmd_work_handler
    
    commit 02896a7fa4cd3ec61d60ba30136841e4f04bdeac upstream.
    
    Assuming callback != NULL && !page_queue, cmd_work_handler takes
    command entry with refcnt == 1 from mlx5_cmd_invoke.
    If either semaphore timeout or index allocation error happens,
    it does final cmd_ent_put(ent). To avoid access to freed memory,
    notify slotted completion before cmd_ent_put.
    
    This is theoretical issue found by Svace static analyser.
    
    Cc: stable@vger.kernel.org
    Fixes: 485d65e135712 ("net/mlx5: Add a timeout to acquire the command queue semaphore")
    Fixes: 0e2909c6bec90 ("net/mlx5: Fix variable not being completed when function returns")
    Signed-off-by: Nikolay Kuratov <kniv@yandex-team.ru>
    Reviewed-by: Md Haris Iqbal <haris.iqbal@linux.dev>
    Reviewed-by: Moshe Shemesh <moshe@nvidia.com>
    Acked-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/20260526162932.501584-1-kniv@yandex-team.ru
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/rds: fix NULL deref in rds_ib_send_cqe_handler() on masked atomic completion [+ + +]
Author: Weiming Shi <bestswngs@gmail.com>
Date:   Sat Jun 6 12:24:48 2026 -0700

    net/rds: fix NULL deref in rds_ib_send_cqe_handler() on masked atomic completion
    
    [ Upstream commit 34080db3e70ddf94c38512ad2331e3c3afca6cc1 ]
    
    rds_ib_xmit_atomic() always programs a masked atomic opcode
    (IB_WR_MASKED_ATOMIC_CMP_AND_SWP or IB_WR_MASKED_ATOMIC_FETCH_AND_ADD)
    for every RDS atomic cmsg.  But the completion-side switch in
    rds_ib_send_unmap_op() only handles the non-masked opcodes, so a masked
    atomic completion falls through to default and returns rm == NULL while
    send->s_op is left set.  rds_ib_send_cqe_handler() then dereferences the
    NULL rm via rm->m_final_op, oopsing in softirq context.  An unprivileged
    AF_RDS sendmsg() of an atomic cmsg over an active RDS/IB connection
    triggers it; on hardware that natively accepts masked atomics (mlx4,
    mlx5) no extra setup is needed.
    
      RDS/IB: rds_ib_send_unmap_op: unexpected opcode 0xd in WR!
      Oops: general protection fault [#1] SMP KASAN
      KASAN: null-ptr-deref in range [0x0000000000000190-0x0000000000000197]
      RIP: rds_ib_send_cqe_handler+0x25c/0xb10 (net/rds/ib_send.c:282)
      Call Trace:
       <IRQ>
       rds_ib_send_cqe_handler (net/rds/ib_send.c:282)
       poll_scq (net/rds/ib_cm.c:274)
       rds_ib_tasklet_fn_send (net/rds/ib_cm.c:294)
       tasklet_action_common (kernel/softirq.c:943)
       handle_softirqs (kernel/softirq.c:573)
       run_ksoftirqd (kernel/softirq.c:479)
       </IRQ>
      Kernel panic - not syncing: Fatal exception in interrupt
    
    Handle the masked atomic opcodes in the same case as the non-masked
    ones: they map to the same struct rds_message.atomic union member, so
    the existing container_of()/rds_ib_send_unmap_atomic() body is correct
    for them.
    
    Fixes: 20c72bd5f5f9 ("RDS: Implement masked atomic operations")
    Reported-by: Xiang Mei <xmei5@asu.edu>
    Signed-off-by: Weiming Shi <bestswngs@gmail.com>
    Reviewed-by: Allison Henderson <achender@kernel.org>
    Link: https://patch.msgid.link/20260606192447.1179255-2-bestswngs@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/sched: act_api: use RCU with deferred freeing for action lifecycle [+ + +]
Author: Jamal Hadi Salim <jhs@mojatatu.com>
Date:   Sun May 31 12:08:12 2026 -0400

    net/sched: act_api: use RCU with deferred freeing for action lifecycle
    
    [ Upstream commit 5057e1aca011e51ef51498c940ef96f3d3e8a305 ]
    
    When NEWTFILTER and DELFILTER are run concurrently it is possible to create a
    race with an associated action.
    
    Let's illustrate with CPU0 running NEWTFILTER and CPU1 running DELFILTER:
    
     0: mutex_lock() <-- holds the idr lock
     0: rcu_read_lock()
     0: p = idr_find(idr, index) <-- action p is valid (RCU protects IDR)
     0: mutex_unlock() <-- releases the idr lock
     1: refcount_dec_and_mutex_lock() <-- refcnt 1->0, mutex held
     1: idr_remove(idr, index) <-- Action removed from IDR
     1: mutex_unlock() <-- mutex released allowing us to delete the action
     1: tcf_action_cleanup(p); kfree(p) <-- Kfrees p immediately, no deferral
     0: refcount_inc_not_zero(&p->tcfa_refcnt) <-- ouch, UAF p points to freed memory
    
    This patch fixes the race condition between NEWTFILTER and DELFILTER by
    adding struct rcu_head to tc_action used in the deferral and introducing a
    call_rcu() in the delete path to defer the final kfree().
    
    Note: this is a revert of commit d7fb60b9cafb ("net_sched: get rid of tcfa_rcu")
    but also modernization/simplification to directly use kfree_rcu().
    
    Let's illustrate the new restored code path:
    
     0: rcu_read_lock()
     1: refcount_dec_and_mutex_lock() <-- refcnt 1->0, mutex held
     1: idr_remove(idr, index)
     1: mutex_unlock()
     1: call_rcu(&p->tcfa_rcu, tcf_action_rcu_free) <-- defer kfree after grace period
     0: p = idr_find(idr, index)
     0: refcount_inc_not_zero(&p->tcfa_refcnt) <-- fails, refcnt already 0
     1: rcu_read_unlock() <-- release so freeing can run after grace period
    
    After CPU1 calls idr_remove(), the object is no longer reachable through the IDR.
    CPU0's subsequent idr_find() will return NULL, and even if it still held a
    stale pointer, the immediate kfree() is now deferred until after the RCU grace
    period, so no UAF can occur.
    
    Fixes: d7fb60b9cafb ("net_sched: get rid of tcfa_rcu")
    Suggested-by: Jakub Kicinski <kuba@kernel.org>
    Reported-by: Kyle Zeng <kylebot@openai.com>
    Tested-by: Victor Nogueira <victor@mojatatu.com>
    Tested-by: syzbot@syzkaller.appspotmail.com
    Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Tested-by: Kyle Zeng <kylebot@openai.com>
    Reviewed-by: Pedro Tammela <pctammela@mojatatu.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Victor Nogueira <victor@mojatatu.com>
    Link: https://patch.msgid.link/20260531160812.68020-1-jhs@mojatatu.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/sched: cls_fw: fix NULL dereference of "old" filters before change() [+ + +]
Author: Davide Caratti <dcaratti@redhat.com>
Date:   Wed Apr 8 17:24:36 2026 +0200

    net/sched: cls_fw: fix NULL dereference of "old" filters before change()
    
    [ Upstream commit 65782b2db7321d5f97c16718c4c7f6c7205a56be ]
    
    Like pointed out by Sashiko [1], since commit ed76f5edccc9 ("net: sched:
    protect filter_chain list with filter_chain_lock mutex") TC filters are
    added to a shared block and published to datapath before their ->change()
    function is called. This is a problem for cls_fw: an invalid filter
    created with the "old" method can still classify some packets before it
    is destroyed by the validation logic added by Xiang.
    Therefore, insisting with repeated runs of the following script:
    
     # ip link add dev crash0 type dummy
     # ip link set dev crash0 up
     # mausezahn  crash0 -c 100000 -P 10 \
     > -A 4.3.2.1 -B 1.2.3.4 -t udp "dp=1234" -q &
     # sleep 1
     # tc qdisc add dev crash0 egress_block 1 clsact
     # tc filter add block 1 protocol ip prio 1 matchall \
     > action skbedit mark 65536 continue
     # tc filter add block 1 protocol ip prio 2 fw
     # ip link del dev crash0
    
    can still make fw_classify() hit the WARN_ON() in [2]:
    
     WARNING: ./include/net/pkt_cls.h:88 at fw_classify+0x244/0x250 [cls_fw], CPU#18: mausezahn/1399
     Modules linked in: cls_fw(E) act_skbedit(E)
     CPU: 18 UID: 0 PID: 1399 Comm: mausezahn Tainted: G            E       7.0.0-rc6-virtme #17 PREEMPT(full)
     Tainted: [E]=UNSIGNED_MODULE
     Hardware name: Red Hat KVM, BIOS 1.16.3-2.el9 04/01/2014
     RIP: 0010:fw_classify+0x244/0x250 [cls_fw]
     Code: 5c 49 c7 45 00 00 00 00 00 41 5d 41 5e 41 5f 5d c3 cc cc cc cc 5b b8 ff ff ff ff 41 5c 41 5d 41 5e 41 5f 5d c3 cc cc cc cc 90 <0f> 0b 90 eb a0 0f 1f 80 00 00 00 00 90 90 90 90 90 90 90 90 90 90
     RSP: 0018:ffffd1b7026bf8a8 EFLAGS: 00010202
     RAX: ffff8c5ac9c60800 RBX: ffff8c5ac99322c0 RCX: 0000000000000004
     RDX: 0000000000000001 RSI: ffff8c5b74d7a000 RDI: ffff8c5ac8284f40
     RBP: ffffd1b7026bf8d0 R08: 0000000000000000 R09: ffffd1b7026bf9b0
     R10: 00000000ffffffff R11: 0000000000000000 R12: 0000000000010000
     R13: ffffd1b7026bf930 R14: ffff8c5ac8284f40 R15: 0000000000000000
     FS:  00007fca40c37740(0000) GS:ffff8c5b74d7a000(0000) knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 00007fca40e822a0 CR3: 0000000005ca0001 CR4: 0000000000172ef0
     Call Trace:
      <TASK>
      tcf_classify+0x17d/0x5c0
      tc_run+0x9d/0x150
      __dev_queue_xmit+0x2ab/0x14d0
      ip_finish_output2+0x340/0x8f0
      ip_output+0xa4/0x250
      raw_sendmsg+0x147d/0x14b0
      __sys_sendto+0x1cc/0x1f0
      __x64_sys_sendto+0x24/0x30
      do_syscall_64+0x126/0xf80
      entry_SYSCALL_64_after_hwframe+0x77/0x7f
     RIP: 0033:0x7fca40e822ba
     Code: d8 64 89 02 48 c7 c0 ff ff ff ff eb b8 0f 1f 00 f3 0f 1e fa 41 89 ca 64 8b 04 25 18 00 00 00 85 c0 75 15 b8 2c 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 7e c3 0f 1f 44 00 00 41 54 48 83 ec 30 44 89
     RSP: 002b:00007ffc248a42c8 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
     RAX: ffffffffffffffda RBX: 000055ef233289d0 RCX: 00007fca40e822ba
     RDX: 000000000000001e RSI: 000055ef23328c30 RDI: 0000000000000003
     RBP: 000055ef233289d0 R08: 00007ffc248a42d0 R09: 0000000000000010
     R10: 0000000000000000 R11: 0000000000000246 R12: 000000000000001e
     R13: 00000000000186a0 R14: 0000000000000000 R15: 00007fca41043000
      </TASK>
     irq event stamp: 1045778
     hardirqs last  enabled at (1045784): [<ffffffff864ec042>] __up_console_sem+0x52/0x60
     hardirqs last disabled at (1045789): [<ffffffff864ec027>] __up_console_sem+0x37/0x60
     softirqs last  enabled at (1045426): [<ffffffff874d48c7>] __alloc_skb+0x207/0x260
     softirqs last disabled at (1045434): [<ffffffff874fe8f8>] __dev_queue_xmit+0x78/0x14d0
    
    Then, because of the value in the packet's mark, dereference on 'q->handle'
    with NULL 'q' occurs:
    
     BUG: kernel NULL  pointer dereference, address: 0000000000000038
     [...]
     RIP: 0010:fw_classify+0x1fe/0x250 [cls_fw]
     [...]
    
    Skip "old-style" classification on shared blocks, so that the NULL
    dereference is fixed and WARN_ON() is not hit anymore in the short
    lifetime of invalid cls_fw "old-style" filters.
    
    [1] https://sashiko.dev/#/patchset/20260331050217.504278-1-xmei5%40asu.edu
    [2] https://elixir.bootlin.com/linux/v7.0-rc6/source/include/net/pkt_cls.h#L86
    
    Fixes: faeea8bbf6e9 ("net/sched: cls_fw: fix NULL pointer dereference on shared blocks")
    Fixes: ed76f5edccc9 ("net: sched: protect filter_chain list with filter_chain_lock mutex")
    Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Signed-off-by: Davide Caratti <dcaratti@redhat.com>
    Link: https://patch.msgid.link/e39cbd3103a337f1e515d186fe697b4459d24757.1775661704.git.dcaratti@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/sched: sch_sfb: Replace direct dequeue call with peek and qdisc_dequeue_peeked [+ + +]
Author: Victor Nogueria <victor@mojatatu.com>
Date:   Thu Apr 30 11:29:56 2026 -0400

    net/sched: sch_sfb: Replace direct dequeue call with peek and qdisc_dequeue_peeked
    
    [ Upstream commit 1b9bc71153b01dbde8045b9edede4240f4f5520e ]
    
    When sfb has children (eg qfq qdisc) whose peek() callback is
    qdisc_peek_dequeued(), we could get a kernel panic. When the parent of such
    qdiscs (eg illustrated in patch #3 as tbf) wants to retrieve an skb from
    its child (sfb in this case), it will do the following:
     1a. do a peek() - and when sensing there's an skb the child can offer, then
         - the child in this case(sfb) calls its child's (qfq) peek.
            qfq does the right thing and will return the gso_skb queue packet.
            Note: if there wasnt a gso_skb entry then qfq will store it there.
     1b. invoke a dequeue() on the child (sfb). And herein lies the problem.
         - sfb will call the child's dequeue() which will essentially just
           try to grab something of qfq's queue.
    
    [  127.594489][  T453] KASAN: null-ptr-deref in range [0x0000000000000048-0x000000000000004f]
    [  127.594741][  T453] CPU: 2 UID: 0 PID: 453 Comm: ping Not tainted 7.1.0-rc1-00035-gac961974495b-dirty #793 PREEMPT(full)
    [  127.595059][  T453] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
    [  127.595254][  T453] RIP: 0010:qfq_dequeue+0x35c/0x1650 [sch_qfq]
    [  127.595461][  T453] Code: 00 fc ff df 80 3c 02 00 0f 85 17 0e 00 00 4c 8d 73 48 48 89 9d b8 02 00 00 48 b8 00 00 00 00 00 fc ff df 4c 89 f2 48 c1 ea 03 <80> 3c 02 00 0f 85 76 0c 00 00 48 b8 00 00 00 00 00 fc ff df 4c 8b
    [  127.596081][  T453] RSP: 0018:ffff88810e5af440 EFLAGS: 00010216
    [  127.596337][  T453] RAX: dffffc0000000000 RBX: 0000000000000000 RCX: dffffc0000000000
    [  127.596623][  T453] RDX: 0000000000000009 RSI: 0000001880000000 RDI: ffff888104fd82b0
    [  127.596917][  T453] RBP: ffff888104fd8000 R08: ffff888104fd8280 R09: 1ffff110211893a3
    [  127.597165][  T453] R10: 1ffff110211893a6 R11: 1ffff110211893a7 R12: 0000001880000000
    [  127.597404][  T453] R13: ffff888104fd82b8 R14: 0000000000000048 R15: 0000000040000000
    [  127.597644][  T453] FS:  00007fc380cbfc40(0000) GS:ffff88816f2a8000(0000) knlGS:0000000000000000
    [  127.597956][  T453] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  127.598160][  T453] CR2: 00005610aa9890a8 CR3: 000000010369e000 CR4: 0000000000750ef0
    [  127.598390][  T453] PKRU: 55555554
    [  127.598509][  T453] Call Trace:
    [  127.598629][  T453]  <TASK>
    [  127.598718][  T453]  ? mark_held_locks+0x40/0x70
    [  127.598890][  T453]  ? srso_alias_return_thunk+0x5/0xfbef5
    [  127.599053][  T453]  sfb_dequeue+0x88/0x4d0
    [  127.599174][  T453]  ? ktime_get+0x137/0x230
    [  127.599328][  T453]  ? srso_alias_return_thunk+0x5/0xfbef5
    [  127.599480][  T453]  ? qdisc_peek_dequeued+0x7b/0x350 [sch_qfq]
    [  127.599670][  T453]  ? srso_alias_return_thunk+0x5/0xfbef5
    [  127.599831][  T453]  tbf_dequeue+0x6b1/0x1098 [sch_tbf]
    [  127.599988][  T453]  __qdisc_run+0x169/0x1900
    
    The right thing to do in #1b is to grab the skb off gso_skb queue.
    This patchset fixes that issue by changing #1b to use qdisc_dequeue_peeked()
    method instead.
    
    Fixes: e13e02a3c68d ("net_sched: SFB flow scheduler")
    Signed-off-by: Victor Nogueria <victor@mojatatu.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20260430152957.194015-3-jhs@mojatatu.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/smc: Do not re-initialize smc hashtables [+ + +]
Author: Alexandra Winter <wintera@linux.ibm.com>
Date:   Thu May 21 16:56:39 2026 +0200

    net/smc: Do not re-initialize smc hashtables
    
    [ Upstream commit 9e4389b0038781f19f97895186ed941ff8ac1678 ]
    
    INIT_HLIST_HEAD(&smc_v*_hashinfo.ht) are called after smc_nl_init(),
    proto_register() and sock_register(). This can lead to smc_v*_hashinfo.ht
    being reset even though hash entries already exist and are being used,
    possibly resulting in a corrupted list.
    
    Remove unnecessary and dangerous re-initialisation of smc_v*_hashinfo.ht in
    smc_init(); it is implicitly initialised to zero anyhow. Add
    HLIST_HEAD_INIT to the definitions for clarity.
    
    Fixes: f16a7dd5cf27 ("smc: netlink interface for SMC sockets")
    Suggested-by: Halil Pasic <pasic@linux.ibm.com>
    Signed-off-by: Alexandra Winter <wintera@linux.ibm.com>
    Acked-by: Halil Pasic <pasic@linux.ibm.com>
    Reviewed-by: Mahanta Jambigi <mjambigi@linux.ibm.com>
    Link: https://patch.msgid.link/20260521145639.10317-1-wintera@linux.ibm.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/smc: fix sleep-inside-lock in __smc_setsockopt() causing local DoS [+ + +]
Author: Nicolò Coccia <n.coccia96@gmail.com>
Date:   Sun May 10 12:34:13 2026 -0400

    net/smc: fix sleep-inside-lock in __smc_setsockopt() causing local DoS
    
    commit a3fdd924d88c30b9f488636ce0e4696012cf5511 upstream.
    
    A logic flaw in __smc_setsockopt() allows a local unprivileged user to
    cause a Denial of Service (DoS) by holding the socket lock indefinitely.
    
    The function __smc_setsockopt() calls copy_from_sockptr() while holding
    lock_sock(sk). By passing a userfaultfd-monitored memory page (or
    FUSE-backed memory on systems where unprivileged userfaultfd is disabled)
    as the optval, an attacker can halt execution during the copy operation,
    keeping the lock held.
    
    Combined with asynchronous tear-down operations like shutdown(), this
    exhausts the kernel wq (kworkers) and triggers the hung task watchdog.
    
    [  240.123456] INFO: task kworker/u8:2 blocked for more than 120 seconds.
    [  240.123489] Call Trace:
    [  240.123501]  smc_shutdown+...
    [  240.123512]  lock_sock_nested+...
    
    This patch moves the user-space copy outside the lock_sock() critical
    section to prevent the issue.
    
    Fixes: a6a6fe27bab4 ("net/smc: Dynamic control handshake limitation by socket options")
    Signed-off-by: Nicolò Coccia <n.coccia96@gmail.com>
    Reviewed-by: Dust Li <dust.li@linux.alibaba.com>
    Tested-by: Dust Li <dust.li@linux.alibaba.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net: af_key: zero aligned sockaddr tail in PF_KEY exports [+ + +]
Author: Zhengchuan Liang <zcliangcn@gmail.com>
Date:   Fri May 29 14:09:45 2026 +0800

    net: af_key: zero aligned sockaddr tail in PF_KEY exports
    
    [ Upstream commit 426c355742f02cf743b347d9d7dbdc1bfbfa31ef ]
    
    PF_KEY export paths use `pfkey_sockaddr_size()` when reserving sockaddr
    payload space, so IPv6 addresses occupy 32 bytes on the wire. However,
    `pfkey_sockaddr_fill()` initializes only the first 28 bytes of
    `struct sockaddr_in6`, leaving the final 4 aligned bytes uninitialized.
    
    Not every PF_KEY message is affected. The state and policy dump builders
    already zero the whole message buffer before filling the sockaddr
    payloads. Keep the fix to the export paths that still append aligned
    sockaddr payloads with plain `skb_put()`:
    
      - `SADB_ACQUIRE`
      - `SADB_X_NAT_T_NEW_MAPPING`
      - `SADB_X_MIGRATE`
    
    Fix those paths by clearing only the aligned sockaddr tail after
    `pfkey_sockaddr_fill()`.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Fixes: 08de61beab8a ("[PFKEYV2]: Extension for dynamic update of endpoint address(es)")
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Co-developed-by: Yuan Tan <yuantan098@gmail.com>
    Signed-off-by: Yuan Tan <yuantan098@gmail.com>
    Suggested-by: Xin Liu <bird@lzu.edu.cn>
    Tested-by: Xiao Liu <lx24@stu.ynu.edu.cn>
    Signed-off-by: Zhengchuan Liang <zcliangcn@gmail.com>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Miles Wang <13621186580@139.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: Annotate sk->sk_write_space() for UDP SOCKMAP. [+ + +]
Author: Kuniyuki Iwashima <kuniyu@google.com>
Date:   Fri May 29 19:39:23 2026 +0000

    net: Annotate sk->sk_write_space() for UDP SOCKMAP.
    
    [ Upstream commit b748765019fe9e9234660327090fc1a9665cdbdd ]
    
    UDP TX skb->destructor() is sock_wfree(), and UDP holds lock_sock()
    only for UDP_CORK / MSG_MORE sendmsg().
    
    Otherwise, sk->sk_write_space() may be read locklessly while SOCKMAP
    rewrites sk->sk_write_space().
    
    Let's use WRITE_ONCE() and READ_ONCE() for sk->sk_write_space().
    
    Note that the write side is annotated by commit 2ef2b20cf4e0
    ("net: annotate data-races around sk->sk_{data_ready,write_space}").
    
    Fixes: 7b98cd42b049 ("bpf: sockmap: Add UDP support")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
    Reviewed-by: Jakub Sitnicki <jakub@cloudflare.com>
    Link: https://patch.msgid.link/20260529193941.3897256-1-kuniyu@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: bonding: fix NULL pointer dereference in bond_do_ioctl() [+ + +]
Author: ZhaoJinming <zhaojinming@uniontech.com>
Date:   Mon Jun 1 16:56:49 2026 +0800

    net: bonding: fix NULL pointer dereference in bond_do_ioctl()
    
    commit a764b0e8317a863006e05732e1aefe821b9d8c2d upstream.
    
    In bond_do_ioctl(), slave_dev is obtained via __dev_get_by_name() which
    can return NULL if the requested interface name does not exist. However,
    the subsequent slave_dbg() call is placed before the NULL check:
    
        slave_dev = __dev_get_by_name(net, ifr->ifr_slave);
        slave_dbg(bond_dev, slave_dev, "slave_dev=%p:\n", slave_dev); //here
        if (!slave_dev)
            return -ENODEV;
    
    The slave_dbg() macro expands to netdev_dbg(bond_dev, "(slave %s): " fmt,
    (slave_dev)->name, ...) which unconditionally dereferences slave_dev->name
    before the NULL check is performed. This results in a NULL pointer
    dereference kernel oops when a user calls bonding ioctl (e.g.
    SIOCBONDENSLAVE, SIOCBONDRELEASE, etc.) with a non-existent slave
    interface name.
    
    This is reachable from userspace via the bonding ioctl interface with
    CAP_NET_ADMIN capability, making it a potential local denial-of-service
    vector.
    
    Fix by moving the slave_dbg() call after the NULL check.
    
    Fixes: e2a7420df2e0 ("bonding/main: convert to using slave printk macros")
    Cc: stable@vger.kernel.org # v5.2+
    Signed-off-by: ZhaoJinming <zhaojinming@uniontech.com>
    Link: https://patch.msgid.link/20260601085649.4029067-1-zhaojinming@uniontech.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: bonding: fix use-after-free in bond_xmit_broadcast() [+ + +]
Author: Xiang Mei <xmei5@asu.edu>
Date:   Thu Mar 26 00:55:53 2026 -0700

    net: bonding: fix use-after-free in bond_xmit_broadcast()
    
    commit 2884bf72fb8f03409e423397319205de48adca16 upstream.
    
    bond_xmit_broadcast() reuses the original skb for the last slave
    (determined by bond_is_last_slave()) and clones it for others.
    Concurrent slave enslave/release can mutate the slave list during
    RCU-protected iteration, changing which slave is "last" mid-loop.
    This causes the original skb to be double-consumed (double-freed).
    
    Replace the racy bond_is_last_slave() check with a simple index
    comparison (i + 1 == slaves_count) against the pre-snapshot slave
    count taken via READ_ONCE() before the loop.  This preserves the
    zero-copy optimization for the last slave while making the "last"
    determination stable against concurrent list mutations.
    
    The UAF can trigger the following crash:
    
    ==================================================================
    BUG: KASAN: slab-use-after-free in skb_clone
    Read of size 8 at addr ffff888100ef8d40 by task exploit/147
    
    CPU: 1 UID: 0 PID: 147 Comm: exploit Not tainted 7.0.0-rc3+ #4 PREEMPTLAZY
    Call Trace:
     <TASK>
     dump_stack_lvl (lib/dump_stack.c:123)
     print_report (mm/kasan/report.c:379 mm/kasan/report.c:482)
     kasan_report (mm/kasan/report.c:597)
     skb_clone (include/linux/skbuff.h:1724 include/linux/skbuff.h:1792 include/linux/skbuff.h:3396 net/core/skbuff.c:2108)
     bond_xmit_broadcast (drivers/net/bonding/bond_main.c:5334)
     bond_start_xmit (drivers/net/bonding/bond_main.c:5567 drivers/net/bonding/bond_main.c:5593)
     dev_hard_start_xmit (include/linux/netdevice.h:5325 include/linux/netdevice.h:5334 net/core/dev.c:3871 net/core/dev.c:3887)
     __dev_queue_xmit (include/linux/netdevice.h:3601 net/core/dev.c:4838)
     ip6_finish_output2 (include/net/neighbour.h:540 include/net/neighbour.h:554 net/ipv6/ip6_output.c:136)
     ip6_finish_output (net/ipv6/ip6_output.c:208 net/ipv6/ip6_output.c:219)
     ip6_output (net/ipv6/ip6_output.c:250)
     ip6_send_skb (net/ipv6/ip6_output.c:1985)
     udp_v6_send_skb (net/ipv6/udp.c:1442)
     udpv6_sendmsg (net/ipv6/udp.c:1733)
     __sys_sendto (net/socket.c:730 net/socket.c:742 net/socket.c:2206)
     __x64_sys_sendto (net/socket.c:2209)
     do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
     entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
     </TASK>
    
    Allocated by task 147:
    
    Freed by task 147:
    
    The buggy address belongs to the object at ffff888100ef8c80
     which belongs to the cache skbuff_head_cache of size 224
    The buggy address is located 192 bytes inside of
     freed 224-byte region [ffff888100ef8c80, ffff888100ef8d60)
    
    Memory state around the buggy address:
     ffff888100ef8c00: fb fb fb fb fc fc fc fc fc fc fc fc fc fc fc fc
     ffff888100ef8c80: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    >ffff888100ef8d00: fb fb fb fb fb fb fb fb fb fb fb fb fc fc fc fc
                                                        ^
     ffff888100ef8d80: fc fc fc fc fc fc fc fc fa fb fb fb fb fb fb fb
     ffff888100ef8e00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    ==================================================================
    
    Fixes: 4e5bd03ae346 ("net: bonding: fix bond_xmit_broadcast return value error bug")
    Reported-by: Weiming Shi <bestswngs@gmail.com>
    Signed-off-by: Xiang Mei <xmei5@asu.edu>
    Link: https://patch.msgid.link/20260326075553.3960562-1-xmei5@asu.edu
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: cpsw_new: Fix potential unregister of netdev that has not been registered yet [+ + +]
Author: Kevin Hao <haokexin@gmail.com>
Date:   Mon Jun 1 15:37:35 2026 +0800

    net: cpsw_new: Fix potential unregister of netdev that has not been registered yet
    
    [ Upstream commit 9d724b34fbe13b71865ad0906a4be97571f19cf5 ]
    
    If an error occurs during register_netdev() for the first MAC in
    cpsw_register_ports(), even though cpsw->slaves[0].ndev is set to NULL,
    cpsw->slaves[1].ndev would remain unchanged. This could later cause
    cpsw_unregister_ports() to attempt unregistering the second MAC.
    To address this, add a check for ndev->reg_state before calling
    unregister_netdev(). With this change, setting cpsw->slaves[i].ndev
    to NULL becomes unnecessary and can be removed accordingly.
    
    Fixes: ed3525eda4c4 ("net: ethernet: ti: introduce cpsw switchdev based driver part 1 - dual-emac")
    Signed-off-by: Kevin Hao <haokexin@gmail.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: Alexander Sverdlin <alexander.sverdlin@gmail.com>
    Link: https://patch.msgid.link/20260205-cpsw-error-path-v1-2-6e58bae6b299@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Wenshan Lan <jetlan9@163.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ethernet: mtk_eth_soc: Fix use-after-free in metadata dst teardown [+ + +]
Author: Lorenzo Bianconi <lorenzo@kernel.org>
Date:   Tue Jun 2 11:21:05 2026 +0200

    net: ethernet: mtk_eth_soc: Fix use-after-free in metadata dst teardown
    
    [ Upstream commit 80df409e1a483676826a6c66e693dba6ac507751 ]
    
    mtk_free_dev() calls metadata_dst_free() which frees the metadata_dst
    with kfree() immediately, bypassing the RCU grace period.
    In the RX path, skb_dst_set_noref() sets a non-refcounted pointer from
    the skb to the metadata_dst. This function requires RCU read-side
    protection and the dst must remain valid until all RCU readers complete.
    Since metadata_dst_free() calls kfree() directly, a use-after-free can
    occur if any skb still holds a noref pointer to the dst when the driver
    tears it down.
    Replace metadata_dst_free() with dst_release() which properly goes
    through the refcount path: when the refcount drops to zero, it schedules
    the actual free via call_rcu_hurry(), ensuring all RCU readers have
    completed before the memory is freed.
    
    Fixes: 2d7605a72906 ("net: ethernet: mtk_eth_soc: enable hardware DSA untagging")
    Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
    Link: https://patch.msgid.link/20260602-airoha-mtk-metadata-uaf-fix-v1-2-3aaa99d83351@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: fec: fix pinctrl default state restore order on resume [+ + +]
Author: Tapio Reijonen <tapio.reijonen@vaisala.com>
Date:   Fri May 29 06:18:57 2026 +0000

    net: fec: fix pinctrl default state restore order on resume
    
    [ Upstream commit b455410146bf723c7ebcb49ecd5becc0d6611482 ]
    
    In fec_resume(), fec_enet_clk_enable() is called before
    pinctrl_pm_select_default_state() in the non-WoL path, inverting the
    ordering used in fec_suspend() which correctly switches to the sleep
    pinctrl state before disabling clocks.
    
    For PHYs with the PHY_RST_AFTER_CLK_EN flag (e.g. TI DP83848 or
    SMSC LAN87xx), fec_enet_clk_enable() triggers a hardware reset pulse
    via the phy-reset GPIO. With the GPIO pin still in sleep pinctrl state
    at that point, the GPIO write has no physical effect and the PHY never
    receives the required reset after clock enable, leading to unreliable
    link establishment after system resume.
    
    Fix by restoring the default pinctrl state before enabling clocks,
    making resume the proper mirror of suspend. The call is made
    unconditionally: fec_suspend() only switches to the sleep pinctrl state
    on the non-WoL path and leaves the pins in the default state when WoL
    is enabled, so on a WoL resume the device is already in the default
    state and pinctrl_pm_select_default_state() is a no-op.
    
    Fixes: de40ed31b3c5 ("net: fec: add Wake-on-LAN support")
    Signed-off-by: Tapio Reijonen <tapio.reijonen@vaisala.com>
    Reviewed-by: Wei Fang <wei.fang@nxp.com>
    Link: https://patch.msgid.link/20260529-b4-fec-resume-pinctrl-order-v3-1-6eda0f592fca@vaisala.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: garp: fix unsigned integer underflow in garp_pdu_parse_attr [+ + +]
Author: Yizhou Zhao <zhaoyz24@mails.tsinghua.edu.cn>
Date:   Wed May 27 16:31:58 2026 +0800

    net: garp: fix unsigned integer underflow in garp_pdu_parse_attr
    
    [ Upstream commit 16e408e607a94b646fb14a2a98422c6877ae4b3c ]
    
    The receive-side GARP attribute parser computes dlen with reversed
    operands:
    
            dlen = sizeof(*ga) - ga->len;
    
    ga->len is the on-wire attribute length and includes the GARP attribute
    header. For normal attributes with data, ga->len is larger than
    sizeof(*ga), so the subtraction underflows in unsigned arithmetic.
    
    The resulting value is later passed to garp_attr_lookup(), whose length
    argument is u8. After truncation, the parsed data length usually no
    longer matches the length stored for locally registered attributes, so
    received Join/Leave events are ignored. This breaks the GARP receive path
    for common attributes, such as GVRP VLAN registration attributes.
    
    Compute the data length as the attribute length minus the header length.
    
    Fixes: eca9ebac651f ("net: Add GARP applicant-only participant")
    Reported-by: Yizhou Zhao <zhaoyz24@mails.tsinghua.edu.cn>
    Reported-by: Yuxiang Yang <yangyx22@mails.tsinghua.edu.cn>
    Reported-by: Ao Wang <wangao@seu.edu.cn>
    Reported-by: Xuewei Feng <fengxw06@126.com>
    Reported-by: Qi Li <qli01@tsinghua.edu.cn>
    Reported-by: Ke Xu <xuke@tsinghua.edu.cn>
    Signed-off-by: Yizhou Zhao <zhaoyz24@mails.tsinghua.edu.cn>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20260527083200.42861-1-zhaoyz24@mails.tsinghua.edu.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: guard timestamp cmsgs to real error queue skbs [+ + +]
Author: Kyle Zeng <kylebot@openai.com>
Date:   Sat Jun 6 19:18:19 2026 -0700

    net: guard timestamp cmsgs to real error queue skbs
    
    [ Upstream commit 1ee90b77b727df903033db873c75caac5c27ec98 ]
    
    skb_is_err_queue() treats PACKET_OUTGOING as the sole marker for an skb
    from sk_error_queue. That assumption is not true for AF_PACKET sockets:
    outgoing packet taps are also delivered to packet sockets with
    skb->pkt_type == PACKET_OUTGOING, but their skb->cb is owned by AF_PACKET
    instead of struct sock_exterr_skb.
    
    If such an skb is received with timestamping enabled, the generic
    timestamp cmsg path can read AF_PACKET control-buffer state as
    sock_exterr_skb::opt_stats. With SO_RXQ_OVFL enabled, the packet drop
    counter overlaps opt_stats. An odd drop count makes the path emit
    SCM_TIMESTAMPING_OPT_STATS with skb->len and skb->data. For non-linear
    skbs this copies past the linear head and can trigger hardened usercopy or
    disclose adjacent heap contents.
    
    Keep skb_is_err_queue() local to net/socket.c, but make it verify that
    the PACKET_OUTGOING marker is paired with the sock_rmem_free destructor
    installed by sock_queue_err_skb(). AF_PACKET receive skbs use normal
    receive ownership and no longer pass as error-queue skbs, while legitimate
    sk_error_queue entries keep the PACKET_OUTGOING marker and sock_rmem_free
    ownership.
    
    Fixes: 8605330aac5a ("tcp: fix SCM_TIMESTAMPING_OPT_STATS for normal skbs")
    Signed-off-by: Kyle Zeng <kylebot@openai.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Link: https://patch.msgid.link/20260607021819.49698-1-kylebot@openai.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: hsr: defer node table free until after RCU readers [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Fri May 29 19:49:45 2026 -0400

    net: hsr: defer node table free until after RCU readers
    
    [ Upstream commit aaec7096f9961eb223b5b149abe9495525c205d9 ]
    
    HSR node-list and node-status generic-netlink operations run under
    rcu_read_lock(). They walk hsr->node_db through hsr_get_next_node() and
    hsr_get_node_data(), but RTM_DELLINK teardown removes the same node table
    with plain list_del() and frees each node immediately.
    
    That lets a generic-netlink reader hold a struct hsr_node pointer across
    hsr_dellink(). In a KASAN build, widening the reader window after
    hsr_get_next_node() obtains the node reproduces a slab-use-after-free
    when the reader copies node->macaddress_A; the freeing stack is
    hsr_del_nodes() from hsr_dellink().
    
    Use list_del_rcu() and defer the free through the existing
    hsr_free_node_rcu() callback. This matches the lifetime rule used by the
    HSR prune paths, which already delete nodes with list_del_rcu() and
    call_rcu().
    
    Fixes: b9a1e627405d ("hsr: implement dellink to clean up resources")
    Cc: stable@vger.kernel.org # v5.3+
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Link: https://patch.msgid.link/20260513233838.3064715-2-michael.bommarito@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ replaced `list_del`+`call_rcu(hsr_free_node_rcu)` with `list_del_rcu`+`kfree_rcu(node, rcu_head)` ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: hsr: fix potential OOB access in supervision frame handling [+ + +]
Author: Luka Gejak <luka.gejak@linux.dev>
Date:   Sat May 23 15:03:30 2026 +0200

    net: hsr: fix potential OOB access in supervision frame handling
    
    [ Upstream commit f229426072fc865654a60978bb7fda790a051ff3 ]
    
    Ensure the entire TLV header is linearized before access by adding
    sizeof(struct hsr_sup_tlv) to the pskb_may_pull() calls. Without this,
    a truncated frame could cause an out-of-bounds access.
    
    Fixes: eafaa88b3eb7 ("net: hsr: Add support for redbox supervision frames")
    Signed-off-by: Luka Gejak <luka.gejak@linux.dev>
    Reviewed-by: Fernando Fernandez Mancera <fmancera@suse.de>
    Link: https://patch.msgid.link/20260523130330.61880-1-luka.gejak@linux.dev
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: lan743x: permit VLAN-tagged packets up to configured MTU [+ + +]
Author: David Thompson <davthompson@nvidia.com>
Date:   Fri May 29 21:03:00 2026 +0000

    net: lan743x: permit VLAN-tagged packets up to configured MTU
    
    [ Upstream commit 8173d22b211f615015f7b35f48ab11a6dd78dc99 ]
    
    VLAN-tagged interfaces on lan743x devices were previously unreachable via
    SSH and failed to respond to large ping packets (e.g. "ping -s 1469" given
    MTU=1500). In these scenarios, "ethtool -S" reports non-zero "RX Oversize
    Frame Errors". According to Microchip AN2948, the MAC_RX FSE (VLAN field
    size enforcement) bit determines whether frames with VLAN tags exceeding
    the base MTU plus tag length are discarded.
    
    The driver must set the MAC_RX.FSE bit before setting MAC_RX.RXEN to allow
    VLAN-tagged frames up to the interface MTU, preventing them from being
    treated as oversized. As a result, both the base and VLAN-tagged interfaces
    can use the same MTU without receive errors.
    
    Fixes: 23f0703c125b ("lan743x: Add main source files for new lan743x driver")
    Signed-off-by: David Thompson <davthompson@nvidia.com>
    Reviewed-by: Thangaraj Samynathan <Thangaraj.s@microchip.com>
    Reviewed-by: Nicolai Buchwitz <nb@tipi-net.de>
    Tested-by: Nicolai Buchwitz <nb@tipi-net.de> # lan7430 on arm64 (RevPi
    Link: https://patch.msgid.link/20260529210300.433135-1-davthompson@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mana: Add NULL guards in teardown path to prevent panic on attach failure [+ + +]
Author: Dipayaan Roy <dipayanroy@linux.microsoft.com>
Date:   Mon May 25 01:08:24 2026 -0700

    net: mana: Add NULL guards in teardown path to prevent panic on attach failure
    
    [ Upstream commit 17bfe0a8c014ee1d542ad352cd6a0a505361664a ]
    
    When queue allocation fails partway through, the error cleanup frees
    and NULLs apc->tx_qp and apc->rxqs. Multiple teardown paths such as
    mana_remove(), mana_change_mtu() recovery, and internal error handling
    in mana_alloc_queues() can subsequently call into functions that
    dereference these pointers without NULL checks:
    
    - mana_chn_setxdp() dereferences apc->rxqs[0], causing a NULL pointer
      dereference panic (CR2: 0000000000000000 at mana_chn_setxdp+0x26).
    - mana_destroy_vport() iterates apc->rxqs without a NULL check.
    - mana_fence_rqs() iterates apc->rxqs without a NULL check.
    - mana_dealloc_queues() iterates apc->tx_qp without a NULL check.
    
    Add NULL guards for apc->rxqs in mana_fence_rqs(),
    mana_destroy_vport(), and before the mana_chn_setxdp() call. Add a
    NULL guard for apc->tx_qp in mana_dealloc_queues() to skip TX queue
    draining when TX queues were never allocated or already freed.
    
    Fixes: ca9c54d2d6a5 ("net: mana: Add a driver for Microsoft Azure Network Adapter (MANA)")
    Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
    Signed-off-by: Dipayaan Roy <dipayanroy@linux.microsoft.com>
    Link: https://patch.msgid.link/20260525081129.1230035-2-dipayanroy@linux.microsoft.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mctp: ensure our nlmsg responses are initialised [+ + +]
Author: Jeremy Kerr <jk@codeconstruct.com.au>
Date:   Tue Jun 2 15:36:17 2026 +0800

    net: mctp: ensure our nlmsg responses are initialised
    
    [ Upstream commit a6a9bc544b675d8b5180f2718ec985ad267b5cbf ]
    
    Syed Faraz Abrar (@farazsth98) from Zellic, and Pumpkin (@u1f383) from
    DEVCORE Research Team working with Trend Micro Zero Day Initiative
    report that a RTM_GETNEIGH will return uninitalised data in the pad
    bytes of the ndmsg data.
    
    Ensure we're initialising the netlink data to zero, in the link, addr
    and neigh response messages.
    
    Fixes: 831119f88781 ("mctp: Add neighbour netlink interface")
    Fixes: 06d2f4c583a7 ("mctp: Add netlink route management")
    Fixes: 583be982d934 ("mctp: Add device handling and netlink interface")
    Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20260209-dev-mctp-nlmsg-v1-1-f1e30c346a43@codeconstruct.com.au
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Li hongliang <1468888505@139.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mv643xx: fix OF node refcount [+ + +]
Author: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Date:   Tue Jun 2 09:34:14 2026 +0200

    net: mv643xx: fix OF node refcount
    
    commit 4aacf509e537a711fa71bca9f234e5eb6968850e upstream.
    
    Platform devices created with platform_device_alloc() call
    platform_device_release() when the last reference to the device's
    kobject is dropped. This function calls of_node_put() unconditionally.
    This works fine for devices created with platform_device_register_full()
    but users of the split approach (platform_device_alloc() +
    platform_device_add()) must bump the reference of the of_node they
    assign manually. Add the missing call to of_node_get().
    
    Cc: stable@vger.kernel.org
    Fixes: 76723bca2802 ("net: mv643xx_eth: add DT parsing support")
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260602073414.22500-1-bartosz.golaszewski@oss.qualcomm.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: mvpp2: Add metadata support for xdp mode [+ + +]
Author: Lorenzo Bianconi <lorenzo@kernel.org>
Date:   Tue Mar 18 12:46:06 2025 +0100

    net: mvpp2: Add metadata support for xdp mode
    
    [ Upstream commit 9a45e193c88a55a536d7fd0ebfa29823d588c2cf ]
    
    Set metadata size building the skb from xdp_buff in mvpp2 driver
    mvpp2 driver sets xdp headroom to:
    
    MVPP2_MH_SIZE + MVPP2_SKB_HEADROOM
    
    where
    
    MVPP2_MH_SIZE 2
    MVPP2_SKB_HEADROOM min(max(XDP_PACKET_HEADROOM, NET_SKB_PAD), 224)
    
    so the headroom is large enough to contain xdp_frame and xdp metadata.
    Please note this patch is just compiled tested.
    
    Reviewed-by: Michal Kubiak <michal.kubiak@intel.com>
    Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
    Link: https://patch.msgid.link/20250318-mvneta-xdp-meta-v2-2-b6075778f61f@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 77a6b90ce56b ("net: mvpp2: build skb from XDP-adjusted data on XDP_PASS")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mvpp2: build skb from XDP-adjusted data on XDP_PASS [+ + +]
Author: Til Kaiser <mail@tk154.de>
Date:   Sun Jun 7 15:49:43 2026 +0200

    net: mvpp2: build skb from XDP-adjusted data on XDP_PASS
    
    [ Upstream commit 77a6b90ce56bc982dcfa94229b8e28e6abb16e95 ]
    
    When an XDP program uses bpf_xdp_adjust_head() or bpf_xdp_adjust_tail()
    and then returns XDP_PASS, mvpp2 still builds the skb from fixed offsets
    derived from the original RX descriptor. Packet geometry changes made by
    the XDP program are therefore discarded before the skb reaches the stack.
    
    Update rx_offset and rx_bytes from xdp.data and xdp.data_end for
    XDP_PASS. This makes skb_reserve() and skb_put() reflect the packet seen
    by XDP, and makes RX byte accounting for XDP_PASS follow the length of the
    skb passed to the network stack.
    
    Keep a separate rx_sync_size for page-pool recycling on skb allocation
    failure, which must stay tied to the received buffer range.
    
    Non-PASS verdicts continue to account the descriptor length because no skb
    is passed up in those cases.
    
    Fixes: 07dd0a7aae7f ("mvpp2: add basic XDP support")
    Signed-off-by: Til Kaiser <mail@tk154.de>
    Link: https://patch.msgid.link/20260607134943.21996-5-mail@tk154.de
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mvpp2: limit XDP frame size to the RX buffer [+ + +]
Author: Til Kaiser <mail@tk154.de>
Date:   Sun Jun 7 15:49:41 2026 +0200

    net: mvpp2: limit XDP frame size to the RX buffer
    
    [ Upstream commit f3c6aa078927e6fe8121c9c591ddee8716c5305a ]
    
    mvpp2 has short and long BM pools, and short pool buffers can be smaller
    than PAGE_SIZE. The XDP path nevertheless initializes every xdp_buff with
    PAGE_SIZE as frame size.
    
    XDP helpers use frame_sz to validate tail growth and to derive the hard
    end of the data area. Advertising PAGE_SIZE for short buffers can let
    bpf_xdp_adjust_tail() grow a packet past the real allocation, corrupting
    memory or later tripping skb tailroom checks.
    
    Initialize the XDP buffer with bm_pool->frag_size so XDP tailroom matches
    the actual buffer backing the packet.
    
    Fixes: 07dd0a7aae7f ("mvpp2: add basic XDP support")
    Signed-off-by: Til Kaiser <mail@tk154.de>
    Link: https://patch.msgid.link/20260607134943.21996-3-mail@tk154.de
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mvpp2: refill RX buffers before XDP or skb use [+ + +]
Author: Til Kaiser <mail@tk154.de>
Date:   Sun Jun 7 15:49:42 2026 +0200

    net: mvpp2: refill RX buffers before XDP or skb use
    
    [ Upstream commit 5e8e2a9624df72fca7c736b2966b2cbf6c9c3ff6 ]
    
    The RX error path returns the current descriptor buffer to the hardware
    BM pool. That is only valid while the driver still owns the buffer.
    
    mvpp2_rx_refill() can fail after the current buffer has been handed to
    XDP or attached to an skb. In those cases mvpp2_run_xdp() may have
    recycled, redirected, or queued the page for XDP_TX, and an skb free also
    retires the data buffer. Returning such a buffer to BM lets hardware DMA
    into memory that is no longer owned by the RX ring.
    
    Refill the BM pool before handing the current buffer to XDP or to the
    skb. If the allocation fails there, drop the packet and return the
    still-owned current buffer to BM, preserving the pool depth. Once the
    refill succeeds, later local drops retire/free the current buffer instead
    of returning it to BM.
    
    Fixes: 07dd0a7aae7f ("mvpp2: add basic XDP support")
    Fixes: d6526926de73 ("net: mvpp2: fix memory leak in mvpp2_rx")
    Signed-off-by: Til Kaiser <mail@tk154.de>
    Link: https://patch.msgid.link/20260607134943.21996-4-mail@tk154.de
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Stable-dep-of: 77a6b90ce56b ("net: mvpp2: build skb from XDP-adjusted data on XDP_PASS")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mvpp2: sync RX data at the hardware packet offset [+ + +]
Author: Til Kaiser <mail@tk154.de>
Date:   Sun Jun 7 15:49:40 2026 +0200

    net: mvpp2: sync RX data at the hardware packet offset
    
    [ Upstream commit 180235600934bef6add3be637c296d6cf3272e67 ]
    
    mvpp2 programs the RX queue packet offset, so hardware writes received
    data at dma_addr + MVPP2_SKB_HEADROOM. The current CPU sync starts at
    dma_addr and only covers rx_bytes + MVPP2_MH_SIZE bytes, which syncs the
    unused headroom and misses the same number of bytes at the packet tail.
    
    On non-coherent DMA systems this can leave the CPU reading stale cache
    contents for the end of the received frame.
    
    Use dma_sync_single_range_for_cpu() with MVPP2_SKB_HEADROOM as the range
    offset so the sync covers the Marvell header and packet data actually
    written by hardware.
    
    Fixes: e1921168bbd4 ("mvpp2: sync only the received frame")
    Signed-off-by: Til Kaiser <mail@tk154.de>
    Link: https://patch.msgid.link/20260607134943.21996-2-mail@tk154.de
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: netlink: don't set nsid on local notifications [+ + +]
Author: Ilya Maximets <i.maximets@ovn.org>
Date:   Wed May 20 19:22:36 2026 +0200

    net: netlink: don't set nsid on local notifications
    
    [ Upstream commit 88b126b39f9757e9debc322d4679239e9af089c7 ]
    
    In most cases, notifications on sockets with NETLINK_LISTEN_ALL_NSID
    do not contain NSID in their ancillary data in case the event is local
    to the listener.
    
    However, when a self-referential NSID is allocated for a namespace,
    every local notification starts sending this ID to the user space.
    
    This is problematic, because the listener cannot tell if those
    notifications are local or not anymore without making extra requests
    to figure out if the provided NSID is local or not.  The listener
    can also not figure out the local NSID beforehand as it can be
    allocated at any point in time by other processes, changing the
    structure of the future notifications for everyone.
    
    The value is practically not useful, since it's the namespace's own
    ID that the application has to obtain from other sources in order to
    figure out if it's the same or not.  So, for the application it's
    just an extra busy work with no benefits.  Moreover, applications
    that do not know about this quirk may be mishandling notifications
    with NSID set as notifications from remote namespaces.  This is the
    case for ovs-vswitchd and the iproute2's 'ip monitor' that stops
    printing 'current' and starts printing the nsid number mid-session.
    
    Lack of clear documentation for this behavior is also not helping.
    
    A search though open-source projects doesn't reveal any projects
    that use NETNSA_NSID_NOT_ASSIGNED and rely on metadata to contain
    self-referential NSIDs (expected, since the value is not useful).
    Quite the opposite, as already mentioned, there are few applications
    that rely on NSID to not be present in local events.
    
    Since the value is not useful and actively harmful in some cases,
    let's not report it for local events, making the notifications more
    consistent.
    
    Also adding some blank lines for readability.
    
    Fixes: 59324cf35aba ("netlink: allow to listen "all" netns")
    Reported-by: Matteo Perin <matteo.perin@canonical.com>
    Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
    Acked-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
    Link: https://patch.msgid.link/20260520172317.175168-3-i.maximets@ovn.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: netlink: fix sending unassigned nsid after assigned one [+ + +]
Author: Ilya Maximets <i.maximets@ovn.org>
Date:   Wed May 20 19:22:35 2026 +0200

    net: netlink: fix sending unassigned nsid after assigned one
    
    [ Upstream commit 70f8592ee90585272018a725054b6eb2ab7e99ca ]
    
    If the current skb is not shared, it is re-used directly for all the
    sockets subscribed to the notification.  If we have remote all-nsid
    socket receiving a message first, then the 'nsid_is_set' will be
    set to 'true'.  If the nsid is NOT_ASSIGNED for the next socket in
    the list, the 'nsid_is_set' will remain 'true' and the negative value
    is be delivered to the user space.  All subsequent nsid values will be
    delivered as well, since there is no code path that sets the flag
    back to 'false'.
    
    Fix that by always dropping the flag to 'false' first.
    
    Fixes: 7212462fa6fd ("netlink: don't send unknown nsid")
    Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
    Acked-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
    Link: https://patch.msgid.link/20260520172317.175168-2-i.maximets@ovn.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: openvswitch: fix possible kfree_skb of ERR_PTR [+ + +]
Author: Adrian Moreno <amorenoz@redhat.com>
Date:   Thu Jun 4 14:19:46 2026 +0200

    net: openvswitch: fix possible kfree_skb of ERR_PTR
    
    [ Upstream commit ee30dd2909d8b98619f4341c70ec8dc8e155ab02 ]
    
    After the patch in the "Fixes" tag, the allocation of the "reply" skb
    can happen either before or after locking the ovs_mutex.
    
    However, error cleanups still follow the classical reversed order,
    assuming "reply" is allocated before locking: it is freed after unlocking.
    
    If "reply" allocation happens after locking the mutex and it fails,
    "reply" is left with an ERR_PTR, and execution jumps to the correspondent
    cleanup stage which will try to free an invalid pointer.
    
    Fix this by setting the pointer to NULL after having saved its error
    value.
    
    Fixes: 893f139b9a6c ("openvswitch: Minimize ovs_flow_cmd_new|set critical sections.")
    Signed-off-by: Adrian Moreno <amorenoz@redhat.com>
    Reviewed-by: Aaron Conole <aconole@redhat.com>
    Acked-by: Eelco Chaudron <echaudro@redhat.com>
    Link: https://patch.msgid.link/20260604121946.942164-1-amorenoz@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: phy: clean the sfp upstream if phy probing fails [+ + +]
Author: Maxime Chevallier <maxime.chevallier@bootlin.com>
Date:   Thu Jun 4 11:28:15 2026 +0200

    net: phy: clean the sfp upstream if phy probing fails
    
    [ Upstream commit 48774e87bbaa0056819d4b52301e4692e50e3252 ]
    
    Sashiko reported that we don't call sfp_bus_del_upstream() in the probe
    failure path, so let's add it, otherwise the sfp-bus is left with a
    dangling 'upstream' field, that may be used later on during SFP events.
    
    This issue existed before the generic phylib sfp support, back when
    drivers were calling phy_sfp_probe themselves.
    
    Reviewed-by: Nicolai Buchwitz <nb@tipi-net.de>
    Fixes: 298e54fa810e ("net: phy: add core phylib sfp support")
    Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
    Link: https://patch.msgid.link/20260604092819.723505-2-maxime.chevallier@bootlin.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: qrtr: fix refcount saturation and potential UAF in qrtr_port_remove [+ + +]
Author: Mingyu Wang <25181214217@stu.xidian.edu.cn>
Date:   Thu Jun 4 14:48:01 2026 +0800

    net: qrtr: fix refcount saturation and potential UAF in qrtr_port_remove
    
    [ Upstream commit a2171131ecda1ed61a594a1eb715e75fdad0fef5 ]
    
    In qrtr_port_remove(), the socket reference count is decremented via
    __sock_put() before the port is removed from the qrtr_ports XArray and
    before the RCU grace period elapses.
    
    This breaks the fundamental RCU update paradigm. It exposes a race
    window where a concurrent RCU reader (such as qrtr_reset_ports() or
    qrtr_port_lookup()) can obtain a pointer to the socket from the XArray,
    and attempt to call sock_hold() on a socket whose reference count has
    already dropped to zero.
    
    This exact race condition was hit during syzkaller fuzzing, leading to
    the following refcount saturation warning and a potential Use-After-Free:
    
      refcount_t: saturated; leaking memory.
      WARNING: CPU: 3 PID: 1273 at lib/refcount.c:22 refcount_warn_saturate+0xae/0x1d0
      Modules linked in: qrtr(+) bochs drm_shmem_helper ...
      Call Trace:
       <TASK>
       qrtr_reset_ports net/qrtr/af_qrtr.c:768 [inline] [qrtr]
       __qrtr_bind.isra.0+0x48b/0x570 net/qrtr/af_qrtr.c:805 [qrtr]
       qrtr_bind+0x17d/0x210 net/qrtr/af_qrtr.c:901 [qrtr]
       kernel_bind+0xe4/0x120 net/socket.c:3592
       qrtr_ns_init+0x1a6/0x380 net/qrtr/ns.c:715 [qrtr]
       qrtr_proto_init+0x3b/0xff0 net/qrtr/af_qrtr.c:169 [qrtr]
       do_one_initcall+0xf5/0x5e0 init/main.c:1283
       ...
       </TASK>
    
    Fix this by deferring the reference count decrement until after the
    xa_erase() and the synchronize_rcu() complete.
    
    (Note: The v1 of this patch incorrectly replaced __sock_put() with
    sock_put(). As Simon Horman pointed out, the callers of qrtr_port_remove()
    still hold a reference to the socket, so freeing the socket memory here
    would lead to a subsequent UAF in the caller. Thus, the __sock_put() is
    kept, but only repositioned to close the RCU race.)
    
    Fixes: bdabad3e363d ("net: Add Qualcomm IPC router")
    Signed-off-by: Mingyu Wang <25181214217@stu.xidian.edu.cn>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20260604064801.1180388-1-w15303746062@163.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: rds: clear i_sends on setup unwind [+ + +]
Author: Yuqi Xu <xuyq21@lenovo.com>
Date:   Fri May 29 21:01:44 2026 +0800

    net: rds: clear i_sends on setup unwind
    
    commit 20cf0fb715c41111469577e85e35d15f099473e0 upstream.
    
    The RDS IB connection teardown path is written so it can run during
    partial startup and on repeated shutdown attempts. It uses NULL
    pointers to distinguish resources that are still owned from resources
    that have already been released.
    
    When rds_ib_setup_qp() fails after allocating i_sends but before
    allocating i_recvs, the sends_out path frees i_sends without clearing
    the pointer. A later shutdown pass can still treat that stale pointer
    as a live send ring allocation.
    
    Clear i_sends after vfree() in the error unwind path so the existing
    shutdown logic continues to use the correct ownership state.
    
    Fixes: 3b12f73a5c29 ("rds: ib: add error handle")
    Cc: stable@kernel.org
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Zhengchuan Liang <zcliangcn@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Signed-off-by: Yuqi Xu <xuyq21@lenovo.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Reviewed-by: Allison Henderson <achender@kernel.org>
    Link: https://patch.msgid.link/5a0f7624bb9845a7b67d26166a150b59e7f394ce.1779632468.git.xuyq21@lenovo.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: skbuff: fix missing zerocopy reference in pskb_carve helpers [+ + +]
Author: Minh Nguyen <minhnguyen.080505@gmail.com>
Date:   Tue May 26 11:12:39 2026 +0700

    net: skbuff: fix missing zerocopy reference in pskb_carve helpers
    
    commit 98d0912e9f841e5529a5b89a972805f34cb1c69d upstream.
    
    pskb_carve_inside_header() and pskb_carve_inside_nonlinear() both copy
    the old skb_shared_info header into a new buffer via memcpy(), which
    includes the destructor_arg pointer (uarg) for MSG_ZEROCOPY skbs.
    Neither function calls net_zcopy_get() for the new shinfo, creating an
    unaccounted holder: every skb_shared_info with destructor_arg set will
    call skb_zcopy_clear() once when freed, but the corresponding
    net_zcopy_get() was never called for the new copy. Repeated calls
    drive uarg->refcnt to zero prematurely, freeing ubuf_info_msgzc while
    TX skbs still hold live destructor_arg pointers.
    
    KASAN reports use-after-free on a freed ubuf_info_msgzc:
    
      BUG: KASAN: slab-use-after-free in skb_release_data+0x77b/0x810
      Read of size 8 at addr ffff88801574d3e8 by task poc/220
    
      Call Trace:
       skb_release_data+0x77b/0x810
       kfree_skb_list_reason+0x13e/0x610
       skb_release_data+0x4cd/0x810
       sk_skb_reason_drop+0xf3/0x340
       skb_queue_purge_reason+0x282/0x440
       rds_tcp_inc_free+0x1e/0x30
       rds_recvmsg+0x354/0x1780
       __sys_recvmsg+0xdf/0x180
    
      Allocated by task 219:
       msg_zerocopy_realloc+0x157/0x7b0
       tcp_sendmsg_locked+0x2892/0x3ba0
    
      Freed by task 219:
       ip_recv_error+0x74a/0xb10
       tcp_recvmsg+0x475/0x530
    
    The skb consuming the late access still referenced the same uarg via
    shinfo->destructor_arg copied by pskb_carve_inside_nonlinear() without
    a refcount bump. This has been verified to be reliably exploitable: a
    working proof-of-concept achieves full root privilege escalation from
    an unprivileged local user on a default kernel configuration.
    
    The fix follows the pattern of pskb_expand_head() which has the same
    memcpy/cloned structure. For pskb_carve_inside_header(), net_zcopy_get()
    is placed after skb_orphan_frags() succeeds, so the orphan error path
    needs no cleanup. For pskb_carve_inside_nonlinear(), net_zcopy_get() is
    placed after all failure points and just before skb_release_data(), so
    no error path needs cleanup at all -- matching pskb_expand_head() more
    closely and avoiding the need for a balancing net_zcopy_put().
    
    Fixes: 6fa01ccd8830 ("skbuff: Add pskb_extract() helper function")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-sonnet-4-6
    Signed-off-by: Minh Nguyen <minhnguyen.080505@gmail.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Link: https://patch.msgid.link/20260526041240.329462-1-minhnguyen.080505@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    [Salvatore Bonaccorso: Adjust for context changes in v6.6.y]
    Signed-off-by: Salvatore Bonaccorso <carnil@debian.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: skbuff: fix pskb_carve leaking zcopy pages [+ + +]
Author: Pavel Begunkov <asml.silence@gmail.com>
Date:   Thu May 28 19:43:53 2026 +0100

    net: skbuff: fix pskb_carve leaking zcopy pages
    
    [ Upstream commit ff6e798c2eac3ebd0501ad7e796f583fab928de8 ]
    
    When SKBFL_MANAGED_FRAG_REFS is set, frag pages are not refcounted but
    their lifetime is controlled by the attached ubuf_info. To make a copy
    of the skb_shared_info, we either should clear the flag and reference
    the frags, or keep the flag and have frags unreferenced.
    
    pskb_carve_inside_header() and pskb_carve_inside_nonlinear() don't
    follow the rule and thus can leak page references. Let's clear
    SKBFL_MANAGED_FRAG_REFS from the original skb to fix it. It's the
    simplest way to address it, but there are more performant ways to do
    that if it ever becomes a problem.
    
    Link: https://lore.kernel.org/all/20260523085809.26331-1-nvminh232@clc.fitus.edu.vn/
    Fixes: 753f1ca4e1e50 ("net: introduce managed frags infrastructure")
    Reported-by: Minh Nguyen <minhnguyen.080505@gmail.com>
    Reported-by: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
    Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Link: https://patch.msgid.link/1e2086aa69217d7f9c8da3d38f5be7160f1b4cd1.1779993185.git.asml.silence@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netfilter: bitwise: add support for doing AND, OR and XOR directly [+ + +]
Author: Jeremy Sowden <jeremy@azazel.net>
Date:   Thu Nov 14 22:08:13 2024 +0100

    netfilter: bitwise: add support for doing AND, OR and XOR directly
    
    [ Upstream commit b0ccf4f53d968e794a4ea579d5135cc1aaf1a53f ]
    
    Hitherto, these operations have been converted in user space to
    mask-and-xor operations on one register and two immediate values, and it
    is the latter which have been evaluated by the kernel.  We add support
    for evaluating these operations directly in kernel space on one register
    and either an immediate value or a second register.
    
    Pablo made a few changes to the original patch:
    
    - EINVAL if NFTA_BITWISE_SREG2 is used with fast version.
    - Allow _AND,_OR,_XOR with _DATA != sizeof(u32)
    - Dump _SREG2 or _DATA with _AND,_OR,_XOR
    
    Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: 18014147d3ee ("netfilter: nf_tables: fix dst corruption in same register operation")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: bitwise: rename some boolean operation functions [+ + +]
Author: Jeremy Sowden <jeremy@azazel.net>
Date:   Thu Nov 14 22:07:51 2024 +0100

    netfilter: bitwise: rename some boolean operation functions
    
    [ Upstream commit a12143e6084c502fc3cfaa8b717bffc8c14cf806 ]
    
    In the next patch we add support for doing AND, OR and XOR operations
    directly in the kernel, so rename some functions and an enum constant
    related to mask-and-xor boolean operations.
    
    Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: 18014147d3ee ("netfilter: nf_tables: fix dst corruption in same register operation")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: bridge: make ebt_snat ARP rewrite writable [+ + +]
Author: Yiming Qian <yimingqian591@gmail.com>
Date:   Sat May 23 12:29:10 2026 +0000

    netfilter: bridge: make ebt_snat ARP rewrite writable
    
    [ Upstream commit 67ba971ae02514d85818fe0c32549ab4bfa3bf49 ]
    
    The ebtables SNAT target keeps the Ethernet source address rewrite
    behind skb_ensure_writable(skb, 0).  This is intentional: at the bridge
    ebtables hooks the Ethernet header is addressed through
    skb_mac_header()/eth_hdr(), while skb->data points at the Ethernet
    payload.  Asking skb_ensure_writable() for ETH_HLEN bytes would check
    the payload, not the Ethernet header, and would reintroduce the small
    packet regression fixed by commit 63137bc5882a.
    
    However, the optional ARP sender hardware address rewrite is different.
    It writes through skb_store_bits() at an offset relative to skb->data:
    
            skb_store_bits(skb, sizeof(struct arphdr), info->mac, ETH_ALEN)
    
    skb_header_pointer() only safely reads the ARP header; it does not make
    the later sender hardware address range writable.  If that range is
    still held in a nonlinear skb fragment backed by a splice-imported file
    page, skb_store_bits() maps the frag page and copies the new MAC address
    directly into it.
    
    Ensure the ARP SHA range is writable before reading the ARP header and
    before calling skb_store_bits().
    
    Fixes: 63137bc5882a ("netfilter: ebtables: Fixes dropping of small packets in bridge nat")
    Reported-by: Yiming Qian <yimingqian591@gmail.com>
    Signed-off-by: Yiming Qian <yimingqian591@gmail.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: conntrack: tcp: do not force CLOSE on invalid-seq RST without direction check [+ + +]
Author: Hamza Mahfooz <hamzamahfooz@linux.microsoft.com>
Date:   Mon May 11 10:43:14 2026 -0400

    netfilter: conntrack: tcp: do not force CLOSE on invalid-seq RST without direction check
    
    commit bed6e04be8e6b9133d8b16d5a42d0e0ce674fa9a upstream.
    
    An unintended behavior in the TCP conntrack state machine allows a
    connection to be forced into the CLOSE state using an RST packet with an
    invalid sequence number.
    
    Specifically, after a SYN packet is observed, an RST with an invalid SEQ
    can transition the conntrack entry to TCP_CONNTRACK_CLOSE, regardless of
    whether the RST corresponds to the expected reply direction. The relevant
    code path assumes the RST is a response to an outgoing SYN, but does not
    validate packet direction or ensure that a matching SYN was actually sent
    in the opposite direction.
    
    As a result, a crafted packet sequence consisting of a SYN followed by an
    invalid-sequence RST can prematurely terminate an active NAT entry. This
    makes connection teardown easier than intended.
    
    So, tighten the state transition logic to ensure that RST-triggered
    CLOSE transitions only occur when the RST is a valid response to a
    previously observed SYN in the correct direction.
    
    Cc: stable@vger.kernel.org
    Fixes: 9fb9cbb1082d ("[NETFILTER]: Add nf_conntrack subsystem.")
    Signed-off-by: Hamza Mahfooz <hamzamahfooz@linux.microsoft.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: conntrack_irc: fix possible out-of-bounds read [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Wed May 27 12:20:19 2026 +0200

    netfilter: conntrack_irc: fix possible out-of-bounds read
    
    [ Upstream commit 66eba0ffce3b7e11449946b4cbbef8ea36112f56 ]
    
    When parsing fails after we've matched the command string we
    should bail out instead of trying to match a different command.
    
    This helper should be deprecated, given prevalence of TLS I doubt it has
    any relevance in 2026.
    
    Fixes: 869f37d8e48f ("[NETFILTER]: nf_conntrack/nf_nat: add IRC helper port")
    Closes: https://sashiko.dev/#/patchset/20260525182924.28456-1-fw%40strlen.de
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Reviewed-by: Fernando Fernandez Mancera <fmancera@suse.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: ctnetlink: ensure safe access to master conntrack [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Fri Jun 12 20:24:08 2026 +0000

    netfilter: ctnetlink: ensure safe access to master conntrack
    
    [ Upstream commit bffcaad9afdfe45d7fc777397d3b83c1e3ebffe5 ]
    
    Holding reference on the expectation is not sufficient, the master
    conntrack object can just go away, making exp->master invalid.
    
    To access exp->master safely:
    
    - Grab the nf_conntrack_expect_lock, this gets serialized with
      clean_from_lists() which also holds this lock when the master
      conntrack goes away.
    
    - Hold reference on master conntrack via nf_conntrack_find_get().
      Not so easy since the master tuple to look up for the master conntrack
      is not available in the existing problematic paths.
    
    This patch goes for extending the nf_conntrack_expect_lock section
    to address this issue for simplicity, in the cases that are described
    below this is just slightly extending the lock section.
    
    The add expectation command already holds a reference to the master
    conntrack from ctnetlink_create_expect().
    
    However, the delete expectation command needs to grab the spinlock
    before looking up for the expectation. Expand the existing spinlock
    section to address this to cover the expectation lookup. Note that,
    the nf_ct_expect_iterate_net() calls already grabs the spinlock while
    iterating over the expectation table, which is correct.
    
    The get expectation command needs to grab the spinlock to ensure master
    conntrack does not go away. This also expands the existing spinlock
    section to cover the expectation lookup too. I needed to move the
    netlink skb allocation out of the spinlock to keep it GFP_KERNEL.
    
    For the expectation events, the IPEXP_DESTROY event is already delivered
    under the spinlock, just move the delivery of IPEXP_NEW under the
    spinlock too because the master conntrack event cache is reached through
    exp->master.
    
    While at it, add lockdep notations to help identify what codepaths need
    to grab the spinlock.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    [ fix timer_delete -> del_timer in diff context lines since 8fa7292
    ("treewide: Switch/rename to timer_delete[_sync]()") landed in 6.15 ]
    Signed-off-by: Mark Bundschuh <mkbund@amazon.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: ebtables: fix OOB read in compat_mtw_from_user [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Tue May 19 22:52:07 2026 +0200

    netfilter: ebtables: fix OOB read in compat_mtw_from_user
    
    [ Upstream commit f438d1786d657d57790c5d138d6db3fc9fdac392 ]
    
    Luxiao Xu says:
    
     The function compat_mtw_from_user() converts ebtables extensions from
     32-bit user structures to kernel native structures. However, it lacks
     proper validation of the user-supplied match_size/target_size.
    
     When certain extensions are processed, the kernel-side translation
     logic may perform memory accesses based on the extension's expected
     size. If the user provides a size smaller than what the extension
     requires, it results in an out-of-bounds read as reported by KASAN.
    
     This fix introduces a check to ensure match_size is at least as large
     as the extension's required compatsize. This covers matches, watchers,
     and targets, while maintaining compatibility with standard targets.
    
    AFAIU this is relevant for matches that need to go though
    match->compat_from_user() call.  Those that use plain memcpy with the
    user-provided size are ok because the caller checks that size vs the
    start of the next rule entry offset (which itself is checked vs. total
    size copied from userspace).
    
    The ->compat_from_user() callbacks assume they can read compatsize bytes,
    so they need this extra check.
    
    Based on an earlier patch from Luxiao Xu.
    
    Fixes: 81e675c227ec ("netfilter: ebtables: add CONFIG_COMPAT support")
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Signed-off-by: Luxiao Xu <rakukuip@gmail.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Reviewed-by: Fernando Fernandez Mancera <fmancera@suse.de>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_conntrack: destroy stale expectfn expectations on unregister [+ + +]
Author: Weiming Shi <bestswngs@gmail.com>
Date:   Wed Jun 3 00:38:17 2026 -0700

    netfilter: nf_conntrack: destroy stale expectfn expectations on unregister
    
    [ Upstream commit c3009418f9fa1dcb3eb86f4d8c92583537b5faa3 ]
    
    NAT helpers such as nf_nat_h323 store a raw pointer to module text in
    exp->expectfn (e.g. ip_nat_q931_expect). nf_ct_helper_expectfn_unregister()
    only unlinks the callback descriptor and never walks the expectation table,
    so an expectation pending at module removal survives with a dangling
    exp->expectfn into freed module text.
    
    When the expected connection arrives, init_conntrack() invokes
    exp->expectfn(), now a stale pointer into the unloaded module. Reproduced
    on a KASAN build by loading the H.323 helpers, creating a Q.931
    expectation, unloading nf_nat_h323, then connecting to the expected port:
    
     Oops: int3: 0000 [#1] SMP KASAN NOPTI
     RIP: 0010:0xffffffffa06102d1
      init_conntrack.isra.0 (net/netfilter/nf_conntrack_core.c:1862)
      nf_conntrack_in (net/netfilter/nf_conntrack_core.c:2049)
      ipv4_conntrack_local (net/netfilter/nf_conntrack_proto.c:223)
      nf_hook_slow (net/netfilter/core.c:619)
      __ip_local_out (net/ipv4/ip_output.c:120)
      __tcp_transmit_skb (net/ipv4/tcp_output.c:1715)
      tcp_connect (net/ipv4/tcp_output.c:4374)
      tcp_v4_connect (net/ipv4/tcp_ipv4.c:345)
      __sys_connect (net/socket.c:2167)
     Modules linked in: nf_conntrack_h323 [last unloaded: nf_nat_h323]
    
    Reaching the dangling state requires CAP_SYS_MODULE in the initial user
    namespace to remove a NAT helper that still has live expectations, so this
    is a robustness fix; leaving an expectation pointing at freed text is wrong
    regardless.
    
    Add nf_ct_helper_expectfn_destroy(), which walks the expectation table and
    drops every expectation whose ->expectfn matches the descriptor being torn
    down. Call it from each NAT helper's exit path after the existing RCU grace
    period, so no expectation outlives the code it points at and no extra
    synchronize_rcu() is introduced. With the fix, the same reproducer runs to
    completion without the Oops.
    
    Fixes: f587de0e2feb ("[NETFILTER]: nf_conntrack/nf_nat: add H.323 helper port")
    Reported-by: Xiang Mei <xmei5@asu.edu>
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: Weiming Shi <bestswngs@gmail.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_log: validate MAC header was set before dumping it [+ + +]
Author: Xiang Mei <xmei5@asu.edu>
Date:   Tue Jun 9 15:55:02 2026 -0700

    netfilter: nf_log: validate MAC header was set before dumping it
    
    [ Upstream commit a84b6fedbc97078788be78dbdd7517d143ad1a77 ]
    
    The fallback path of dump_mac_header() guards the MAC header access
    only with "skb->mac_header != skb->network_header", without checking
    skb_mac_header_was_set(). When the MAC header is unset, mac_header is
    0xffff, so the test passes and skb_mac_header(skb) returns
    skb->head + 0xffff, ~64 KiB past the buffer; the loop then reads
    dev->hard_header_len bytes out of bounds into the kernel log.
    
    This is reachable via the netdev logger: nf_log_unknown_packet() calls
    dump_mac_header() unconditionally, and an skb sent through AF_PACKET
    with PACKET_QDISC_BYPASS reaches the egress hook with mac_header still
    unset (__dev_queue_xmit(), which would reset it, is bypassed).
    
    Add the skb_mac_header_was_set() check the ARPHRD_ETHER path already
    uses, and replace the open-coded MAC header length test with
    skb_mac_header_len(). Only skbs with an unset MAC header are affected;
    valid ones are dumped as before.
    
     BUG: KASAN: slab-out-of-bounds in dump_mac_header (net/netfilter/nf_log_syslog.c:831)
     Read of size 1 at addr ffff88800ea49d3f by task exploit/148
     Call Trace:
      kasan_report (mm/kasan/report.c:595)
      dump_mac_header (net/netfilter/nf_log_syslog.c:831)
      nf_log_netdev_packet (net/netfilter/nf_log_syslog.c:938 net/netfilter/nf_log_syslog.c:963)
      nf_log_packet (net/netfilter/nf_log.c:260)
      nft_log_eval (net/netfilter/nft_log.c:60)
      nft_do_chain (net/netfilter/nf_tables_core.c:285)
      nft_do_chain_netdev (net/netfilter/nft_chain_filter.c:307)
      nf_hook_slow (net/netfilter/core.c:619)
      nf_hook_direct_egress (net/packet/af_packet.c:257)
      packet_xmit (net/packet/af_packet.c:280)
      packet_sendmsg (net/packet/af_packet.c:3114)
      __sys_sendto (net/socket.c:2265)
    
    Fixes: 7eb9282cd0ef ("netfilter: ipt_LOG/ip6t_LOG: add option to print decoded MAC header")
    Reported-by: Weiming Shi <bestswngs@gmail.com>
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: Xiang Mei <xmei5@asu.edu>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: fix dst corruption in same register operation [+ + +]
Author: Fernando Fernandez Mancera <fmancera@suse.de>
Date:   Mon May 11 16:37:56 2026 +0200

    netfilter: nf_tables: fix dst corruption in same register operation
    
    [ Upstream commit 18014147d3ee7831dce53fe65d7fc8d428b02552 ]
    
    For lshift and rshift, the shift operations are performed in a loop over
    32-bit words. The loop calculates the shifted value and write it to dst,
    and then immediately reads from src to calculate the carry for the next
    iteration. Because src and dst could point to the same memory location,
    the carry is incorrectly calculated using the newly modified dst value
    instead of the original src value.
    
    Adding a temporary local variable to cache the original value before
    writing to dst and using it for the carry calculation solves the
    problem. In addition, partial overlap is rejected from control plane for
    all kind of operations including byteorder. This was tested with the
    following bytecode:
    
    table test_table ip flags 0 use 1 handle 1
    ip test_table test_chain use 3 type filter hook input prio 0 policy accept packets 0 bytes 0 flags 1
    ip test_table test_chain 2
      [ immediate reg 1 0x44332211 0x88776655 ]
      [ bitwise reg 1 = ( reg 1 << 0x08000000 ) ]
      [ cmp eq reg 1 0x66443322 0x00887766 ]
      [ counter pkts 0 bytes 0 ]
    ip test_table test_chain 4 3
      [ immediate reg 1 0x44332211 0x88776655 ]
      [ bitwise reg 1 = ( reg 1 << 0x08000000 ) ]
      [ cmp eq reg 1 0x55443322 0x00887766 ]
      [ counter pkts 21794 bytes 1917798 ]
    
    Fixes: 567d746b55bc ("netfilter: bitwise: add support for shifts.")
    Acked-by: Jeremy Sowden <jeremy@azazel.net>
    Signed-off-by: Fernando Fernandez Mancera <fmancera@suse.de>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_ct: bail out on template ct in get eval [+ + +]
Author: Jiayuan Chen <jiayuan.chen@linux.dev>
Date:   Thu May 28 19:09:19 2026 +0800

    netfilter: nft_ct: bail out on template ct in get eval
    
    [ Upstream commit 3027ecbdb5fdf9200251c21d4818e4c447ef78e1 ]
    
    I noticed this issue while looking at a historic syzbot report [1].
    
    A rule like the one below is enough to trigger the bug:
    
        table ip t {
            chain pre {
                type filter hook prerouting priority raw;
                ct zone set 1
                ct original saddr 1.2.3.4 accept
            }
        }
    
    The first expression attaches a per-cpu template ct via
    nft_ct_set_zone_eval() (nf_ct_tmpl_alloc -> kzalloc, tuple is all
    zero, nf_ct_l3num(ct) == 0). The next expression then calls
    nft_ct_get_eval() on the same skb, treats the template as a real ct
    and hits the 16-byte memcpy path. With dreg at NFT_REG32_15 this
    overflows past struct nft_regs on the kernel stack; with smaller
    dreg values it silently clobbers adjacent registers.
    
    Reject template ct at the eval entry and in nft_ct_get_fast_eval(),
    mirroring the check nft_ct_set_eval() already has. Additionally,
    bound the address copy in NFT_CT_SRC / NFT_CT_DST by priv->len
    instead of by nf_ct_l3num(ct): nf_ct_get_tuple() zeroes the tuple
    before pkt_to_tuple() fills in only the protocol-relevant leading
    bytes, so the trailing bytes of tuple->{src,dst}.u3.all are
    well-defined zero. priv->len is validated at rule load, so the
    copy size is now bounded by the destination register rather than
    by an untrusted field on the conntrack.
    
    [1]: https://syzkaller.appspot.com/bug?id=389cf09cb72926114fce90dc85a2c3231dcb647c
    
    Fixes: 45d9bcda21f4 ("netfilter: nf_tables: validate len in nft_validate_data_load()")
    Suggested-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_exthdr: fix register tracking for F_PRESENT flag [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Tue Jun 9 21:28:09 2026 +0200

    netfilter: nft_exthdr: fix register tracking for F_PRESENT flag
    
    [ Upstream commit 772cecf198da732faebb5dcfc46d66a505be8495 ]
    
    nft_exthdr_init() passes user-controlled priv->len to
    nft_parse_register_store(), which marks that many bytes in the
    register bitmap as initialized.  However, when NFT_EXTHDR_F_PRESENT
    is set, the eval paths write only 1 byte (nft_reg_store8) or
    4 bytes (*dest = 0 on TCP/DCCP error path).  When len > 4,
    registers beyond the first are never written, retaining
    uninitialized stack data from nft_regs.
    
    Bail out if userspace requests too much data when F_PRESENT is set.
    
    Reported-by: Ji'an Zhou <eilaimemedsnaimel@gmail.com>
    Fixes: c078ca3b0c5b ("netfilter: nft_exthdr: Add support for existence check")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_fib: fix stale stack leak via the OIFNAME register [+ + +]
Author: Davide Ornaghi <d.ornaghi97@gmail.com>
Date:   Mon Jun 15 11:16:35 2026 -0400

    netfilter: nft_fib: fix stale stack leak via the OIFNAME register
    
    [ Upstream commit ab185e0c4fb82dfba6fb86f8271e06f931d9c64c ]
    
    For NFT_FIB_RESULT_OIFNAME the destination register is declared with
    len = IFNAMSIZ (four 32-bit registers), but on the lookup-fail,
    RTN_LOCAL and oif-mismatch paths nft_fib{4,6}_eval() only writes one
    register via "*dest = 0". The remaining three registers are left as
    whatever was on the stack in nft_do_chain()'s struct nft_regs, and a
    downstream expression that loads the register span can leak that
    uninitialised kernel stack to userspace.
    
    The NFTA_FIB_F_PRESENT existence check has the same shape: it is only
    meaningful for NFT_FIB_RESULT_OIF, yet it was accepted for any result type
    while the eval stores a single byte via nft_reg_store8(), leaving the rest
    of the declared span stale.
    
    Fix both:
    
     - replace the bare "*dest = 0" in the eval with nft_fib_store_result(),
       which strscpy_pad()s the whole IFNAMSIZ for OIFNAME (and is already
       used on the other early-return path), and
    
     - restrict NFTA_FIB_F_PRESENT to NFT_FIB_RESULT_OIF and declare its
       destination as a single u8, so the marked span matches the one byte
       the eval writes.
    
    Fixes: f6d0cbcf09c5 ("netfilter: nf_tables: add fib expression")
    Suggested-by: Florian Westphal <fw@strlen.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: Davide Ornaghi <d.ornaghi97@gmail.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    [ kept the tree's existing `ip6_route_lookup`/`rt6_info` machinery (missing `fib6_lookup` refactor) and changed only `*dest = 0;` to `nft_fib_store_result(dest, priv, NULL)` ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_tunnel: fix use-after-free on object destroy [+ + +]
Author: Tristan Madani <tristan@talencesecurity.com>
Date:   Wed May 27 13:57:50 2026 +0000

    netfilter: nft_tunnel: fix use-after-free on object destroy
    
    commit c32b26aaa2f9216520a38b3f4bfeec846eb3eb8a upstream.
    
    nft_tunnel_obj_destroy() calls metadata_dst_free() which directly
    kfree()s the metadata_dst, ignoring the dst_entry refcount. Packets
    that took a reference via dst_hold() in nft_tunnel_obj_eval() and
    are still queued (e.g. in a netem qdisc) are left with a dangling
    pointer. When these packets are eventually dequeued, dst_release()
    operates on freed memory.
    
    Replace metadata_dst_free() with dst_release() so the metadata_dst
    is freed only after all references are dropped. The dst subsystem
    already handles metadata_dst cleanup in dst_destroy() when
    DST_METADATA is set.
    
    Fixes: af308b94a2a4 ("netfilter: nf_tables: add tunnel support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Tristan Madani <tristan@talencesecurity.com>
    Reviewed-by: Fernando Fernandez Mancera <fmancera@suse.de>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: require Ethernet MAC header before using eth_hdr() [+ + +]
Author: Zhengchuan Liang <zcliangcn@gmail.com>
Date:   Sat Apr 4 17:39:48 2026 +0800

    netfilter: require Ethernet MAC header before using eth_hdr()
    
    [ Upstream commit 62443dc21114c0bbc476fa62973db89743f2f137 ]
    
    `ip6t_eui64`, `xt_mac`, the `bitmap:ip,mac`, `hash:ip,mac`, and
    `hash:mac` ipset types, and `nf_log_syslog` access `eth_hdr(skb)`
    after either assuming that the skb is associated with an Ethernet
    device or checking only that the `ETH_HLEN` bytes at
    `skb_mac_header(skb)` lie between `skb->head` and `skb->data`.
    
    Make these paths first verify that the skb is associated with an
    Ethernet device, that the MAC header was set, and that it spans at
    least a full Ethernet header before accessing `eth_hdr(skb)`.
    
    Suggested-by: Florian Westphal <fw@strlen.de>
    Tested-by: Ren Wei <enjou1224z@gmail.com>
    Signed-off-by: Zhengchuan Liang <zcliangcn@gmail.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: synproxy: add mutex to guard hook reference counting [+ + +]
Author: Fernando Fernandez Mancera <fmancera@suse.de>
Date:   Tue May 26 23:58:31 2026 +0200

    netfilter: synproxy: add mutex to guard hook reference counting
    
    [ Upstream commit 2fcba19caaeb2a33017459d3430f057967bb91b6 ]
    
    As the synproxy infrastructure register netfilter hooks on-demand when a
    user adds the first iptables target or nftables expression, if done
    concurrently they can race each other.
    
    Introduce a mutex to serialize the refcount control blocks access from
    both frontends. While a per namespace mutex might be more efficient, it
    is not needed for target/expression like SYNPROXY.
    
    Fixes: ad49d86e07a4 ("netfilter: nf_tables: Add synproxy support")
    Signed-off-by: Fernando Fernandez Mancera <fmancera@suse.de>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: synproxy: refresh tcphdr after skb_ensure_writable [+ + +]
Author: Chris Mason <clm@meta.com>
Date:   Tue May 19 12:36:14 2026 -0700

    netfilter: synproxy: refresh tcphdr after skb_ensure_writable
    
    [ Upstream commit 92170e6afe927ab2792a3f71902845789c8e31b1 ]
    
    synproxy_tstamp_adjust() rewrites the TCP timestamp option in place
    and then patches the TCP checksum via inet_proto_csum_replace4() on
    the caller-supplied tcphdr pointer.  Both ipv4_synproxy_hook() and
    ipv6_synproxy_hook() obtain that pointer with skb_header_pointer()
    before calling in, so it may either alias skb->head directly or
    point at the caller's on-stack _tcph buffer.
    
    Between obtaining the pointer and using it, the function calls
    skb_ensure_writable(skb, optend), which on a cloned or non-linear
    skb invokes pskb_expand_head() and frees the old skb->head.  After
    that point the cached th is stale:
    
        caller (ipv[46]_synproxy_hook)
          th = skb_header_pointer(skb, ..., &_tcph)
          synproxy_tstamp_adjust(skb, protoff, th, ...)
            skb_ensure_writable(skb, optend)
              pskb_expand_head()        /* kfree(old skb->head) */
            ...
            inet_proto_csum_replace4(&th->check, ...)
                                        /* writes into freed head, or
                                           into the caller's stack copy
                                           leaving the on-wire checksum
                                           stale */
    
    The option bytes are written through skb->data and are fine; only
    the checksum update goes through th and so lands in the wrong
    place.  The result is either a write into freed slab memory or a
    packet leaving with a checksum that does not match its payload.
    
    Fix by re-deriving th from skb->data + protoff immediately after
    skb_ensure_writable() succeeds, so the subsequent checksum update
    targets the linear, writable header.
    
    Fixes: 48b1de4c110a ("netfilter: add SYNPROXY core/target")
    Assisted-by: kres (claude-opus-4-7)
    Signed-off-by: Chris Mason <clm@meta.com>
    Reviewed-by: Fernando Fernandez Mancera <fmancera@suse.de>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: x_tables: avoid leaking percpu counter pointers [+ + +]
Author: Kyle Zeng <kylebot@openai.com>
Date:   Sat Jun 6 01:10:31 2026 -0700

    netfilter: x_tables: avoid leaking percpu counter pointers
    
    [ Upstream commit f7f2fbb0e893a0238dc464f8d8c0f5609bec584f ]
    
    The native and compat get-entries paths copy the fixed rule entry header
    from the kernelized rule blob to userspace before overwriting the entry's
    counter fields with a sanitized counter snapshot.
    
    On SMP kernels, entry->counters.pcnt contains the percpu allocation
    address used by x_tables rule counters. A caller can provide a userspace
    buffer that faults during the initial fixed-header copy after pcnt has
    been copied but before the later sanitized counter copy runs. The syscall
    then returns -EFAULT while leaving the raw percpu pointer in userspace.
    
    Copy only the fixed entry prefix before counters from the kernelized rule
    blob, then copy the sanitized counter snapshot into the counter field.
    Apply this ordering to the IPv4, IPv6, and ARP native and compat
    get-entries implementations so a fault cannot expose the internal percpu
    counter pointer.
    
    Fixes: 71ae0dff02d7 ("netfilter: xtables: use percpu rule counters")
    Signed-off-by: Kyle Zeng <kylebot@openai.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: xt_cpu: prefer raw_smp_processor_id [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Tue May 19 20:10:08 2026 +0200

    netfilter: xt_cpu: prefer raw_smp_processor_id
    
    [ Upstream commit c376f07e16c02239ed44cabb97145d03f65b4d15 ]
    
    With PREEMPT_RCU we get splat:
    
    BUG: using smp_processor_id() in preemptible [..]
    caller is cpu_mt+0x53/0xd0 net/netfilter/xt_cpu.c:37
    CPU: 1 .. Comm: syz.3.1377 #0 PREEMPT(full)
    Call Trace:
     <TASK>
     dump_stack_lvl+0xe8/0x150 lib/dump_stack.c:120
     check_preemption_disabled+0xd3/0xe0 lib/smp_processor_id.c:47
     cpu_mt+0x53/0xd0 net/netfilter/xt_cpu.c:37
     [..]
    
    Just use raw version instead.
    This is similar to 14d14a5d2957 ("netfilter: nft_meta: use raw_smp_processor_id()").
    
    Fixes: 0ca743a55991 ("netfilter: nf_tables: add compatibility layer for x_tables")
    Reported-by: syzbot+690d3e3ffa7335ac10eb@syzkaller.appspotmail.com
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: xt_NFQUEUE: prefer raw_smp_processor_id [+ + +]
Author: Fernando Fernandez Mancera <fmancera@suse.de>
Date:   Fri May 22 12:47:17 2026 +0200

    netfilter: xt_NFQUEUE: prefer raw_smp_processor_id
    
    [ Upstream commit c6c5327dd18bec1e1bbf139b2cf5ae53608a9d30 ]
    
    With PREEMPT_RCU this triggers a splat because smp_processor_id() can be
    preempted while inside a RCU critical section. If xt_NFQUEUE target is
    invoked via nft_compat_eval() path, we are inside a RCU critical
    section.
    
    Just use the raw version instead.
    
    Fixes: 0ca743a55991 ("netfilter: nf_tables: add compatibility layer for x_tables")
    Signed-off-by: Fernando Fernandez Mancera <fmancera@suse.de>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netlabel: validate unlabeled address and mask attribute lengths [+ + +]
Author: Chenguang Zhao <zhaochenguang@kylinos.cn>
Date:   Wed Jun 3 09:13:53 2026 +0800

    netlabel: validate unlabeled address and mask attribute lengths
    
    [ Upstream commit 9772589b57e44aedc240211c5c3f7a684a034d3a ]
    
    netlbl_unlabel_addrinfo_get() used the address attribute length to
    determine whether the attribute data could be read as an IPv4 or IPv6
    address, but did not independently validate the corresponding mask
    attribute length.  A crafted Generic Netlink request could therefore
    provide a valid IPv4/IPv6 address attribute with a shorter mask
    attribute, which would later be read as a full struct in_addr or
    struct in6_addr.
    
    NLA_BINARY policy lengths are maximum lengths by default, so use
    NLA_POLICY_EXACT_LEN() for the unlabeled IPv4/IPv6 address and mask
    attributes.  This rejects short attributes during policy validation and
    also exposes the exact length requirements through policy introspection.
    
    Fixes: 8cc44579d1bd ("NetLabel: Introduce static network labels for unlabeled connections")
    Signed-off-by: Chenguang Zhao <zhaochenguang@kylinos.cn>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfc: hci: fix out-of-bounds read in HCP header parsing [+ + +]
Author: Ashutosh Desai <ashutoshdesai993@gmail.com>
Date:   Tue May 5 17:07:12 2026 +0000

    nfc: hci: fix out-of-bounds read in HCP header parsing
    
    commit f040e590c035bfd9553fe79ee9585caf1b14d67b upstream.
    
    Both nfc_hci_recv_from_llc() and nci_hci_data_received_cb() read
    packet->header from skb->data at function entry without first checking
    that the buffer holds at least one byte. A malicious NFC peer can send
    a 0-byte HCP frame that passes through the SHDLC layer and reaches
    these functions, causing an out-of-bounds heap read of packet->header.
    The same 0-byte frame, if queued as a non-final fragment, also causes
    the reassembly loop to underflow msg_len to UINT_MAX, triggering
    skb_over_panic() when the reassembled skb is written.
    
    Fix this by adding a pskb_may_pull() check at the entry of each
    function before packet->header is first accessed. The existing
    pskb_may_pull() checks before the reassembled hcp_skb is cast to
    struct hcp_packet remain in place to guard the 2-byte HCP message
    header.
    
    Fixes: 8b8d2e08bf0d ("NFC: HCI support")
    Fixes: 11f54f228643 ("NFC: nci: Add HCI over NCI protocol support")
    Cc: stable@vger.kernel.org
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Ashutosh Desai <ashutoshdesai993@gmail.com>
    Link: https://patch.msgid.link/20260505170712.96560-1-ashutoshdesai993@gmail.com
    Signed-off-by: David Heidelberg <david@ixit.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

nfc: llcp: Fix use-after-free in llcp_sock_release() [+ + +]
Author: Lee Jones <lee@kernel.org>
Date:   Wed Apr 29 13:40:41 2026 +0000

    nfc: llcp: Fix use-after-free in llcp_sock_release()
    
    [ Upstream commit f4268b466190dae95a7585f69b4f1f8ad097632c ]
    
    llcp_sock_release() unconditionally unlinks the socket from the local
    sockets list.  However, if the socket is still in connecting state, it
    is on the connecting list.
    
    Fix this by checking the socket state and unlinking from the correct list.
    
    Fixes: b4011239a08e ("NFC: llcp: Fix non blocking sockets connections")
    Signed-off-by: Lee Jones <lee@kernel.org>
    Link: https://patch.msgid.link/20260429134115.3558604-1-lee@kernel.org
    Signed-off-by: David Heidelberg <david@ixit.cz>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nfc: llcp: Fix use-after-free race in nfc_llcp_recv_cc() [+ + +]
Author: Lee Jones <lee@kernel.org>
Date:   Wed Apr 29 13:40:42 2026 +0000

    nfc: llcp: Fix use-after-free race in nfc_llcp_recv_cc()
    
    [ Upstream commit b493ea2765cc17cb8aa7e7544a4b6dcb05b6ed77 ]
    
    A race condition exists in the NFC LLCP connection state machine where
    the connection acceptance packet (CC) can be processed concurrently with
    socket release.  This can lead to a use-after-free of the socket object.
    
    When nfc_llcp_recv_cc() moves the socket from the connecting_sockets
    list to the sockets list, it does so without holding the socket lock.
    If llcp_sock_release() is executing concurrently, it might have already
    unlinked the socket and dropped its references, which can result in
    nfc_llcp_recv_cc() linking a freed socket into the live list.
    
    Fix this by holding lock_sock() during the state transition and list
    movement in nfc_llcp_recv_cc().  After acquiring the lock, check if
    the socket is still hashed to ensure it hasn't already been unlinked
    and marked for destruction by the release path.  This aligns the locking
    pattern with recv_hdlc() and recv_disc().
    
    Fixes: a69f32af86e3 ("NFC: Socket linked list")
    Signed-off-by: Lee Jones <lee@kernel.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20260429134115.3558604-2-lee@kernel.org
    Signed-off-by: David Heidelberg <david@ixit.cz>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nfc: nxp-nci: i2c: use rising-edge IRQ on ACPI systems [+ + +]
Author: Carl Lee <carl.lee@amd.com>
Date:   Sat May 16 19:55:18 2026 +0800

    nfc: nxp-nci: i2c: use rising-edge IRQ on ACPI systems
    
    [ Upstream commit f23bf992d65a42007c517b060ca35cebdea3525a ]
    
    Some ACPI-based platforms report incorrect IRQ trigger types (e.g.
    IRQF_TRIGGER_HIGH), which can lead to interrupt storms.
    
    Use the historically working rising-edge trigger on ACPI systems to
    avoid this regression.
    
    Device Tree-based systems continue to use the firmware-provided
    trigger type.
    
    Fixes: 57be33f85e36 ("nfc: nxp-nci: remove interrupt trigger type")
    Signed-off-by: Carl Lee <carl.lee@amd.com>
    Tested-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
    Tested-by: Mark Pearson <mpearson-lenovo@squebb.ca>
    Tested-by: Luca Stefani <luca.stefani.ge1@gmail.com>
    Link: https://patch.msgid.link/20260516-nfc-nxp-nci-i2c-restore-irq-trigger-fallback-v3-1-37ba4b6e9086@amd.com
    Signed-off-by: David Heidelberg <david@ixit.cz>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvmem: layouts: onie-tlv: fix hang on unknown types [+ + +]
Author: Andre Heider <a.heider@gmail.com>
Date:   Sat May 30 21:43:39 2026 +0100

    nvmem: layouts: onie-tlv: fix hang on unknown types
    
    commit ea41020b9018e31c2ea7e9d89021e3e6d7470883 upstream.
    
    The EEPROM on my board has a vendor specific entry of type 0x41. When
    stumbling upon that, this driver hangs in an endless loop.
    
    Fix it by keep incrementing the offset on unknown entries, so the loop
    will eventually stop.
    
    Fixes: d3c0d12f6474 ("nvmem: layouts: onie-tlv: Add new layout driver")
    Cc: Stable@vger.kernel.org
    Signed-off-by: Andre Heider <a.heider@gmail.com>
    Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Srinivas Kandagatla <srini@kernel.org>
    Link: https://patch.msgid.link/20260530204340.116743-2-srini@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
octeontx2-af: CGX: add bounds check to cgx_speed_mbps index [+ + +]
Author: Sam Daly <sam@samdaly.ie>
Date:   Sat May 30 10:26:46 2026 -0400

    octeontx2-af: CGX: add bounds check to cgx_speed_mbps index
    
    [ Upstream commit c0bf0a4f3f1f5f57aa83e1400ba4f56f0abfd542 ]
    
    cgx_speed_mbps has 13 elements but RESP_LINKSTAT_SPEED can yield values
    0-15. If it returns a value >= 13, this causes an out-of-bounds array
    access. Add a bounds check and default to speed 0 if the index is out of
    range.
    
    Fixes: 61071a871ea6 ("octeontx2-af: Forward CGX link notifications to PFs")
    Cc: Sunil Goutham <sgoutham@marvell.com>
    Cc: Linu Cherian <lcherian@marvell.com>
    Cc: Geetha sowjanya <gakula@marvell.com>
    Cc: hariprasad <hkelam@marvell.com>
    Cc: Subbaraya Sundeep <sbhatta@marvell.com>
    Cc: Andrew Lunn <andrew+netdev@lunn.ch>
    Cc: stable <stable@kernel.org>
    Signed-off-by: Sam Daly <sam@samdaly.ie>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Link: https://patch.msgid.link/2026051352-refined-demise-e88d@gregkh
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

octeontx2-af: fix memory leak in rvu_setup_hw_resources() [+ + +]
Author: Dawei Feng <dawei.feng@seu.edu.cn>
Date:   Thu Jun 4 22:37:56 2026 +0800

    octeontx2-af: fix memory leak in rvu_setup_hw_resources()
    
    commit 09a5bf856aa759513afc4afd233d15bcc711b84e upstream.
    
    If rvu_npc_exact_init() fails in rvu_setup_hw_resources(), the function
    returns directly instead of jumping to the error handling path. This
    causes a resource leak for the previously initialized CGX, NPC, fwdata,
    and MSI-X states.
    
    Fix this by replacing the direct return with goto cgx_err to ensure
    proper cleanup.
    
    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-rc6.
    
    An x86_64 allyesconfig build showed no new warnings. As we do not have
    access to Marvell OcteonTX2 RVU AF hardware to test with, no runtime
    testing was able to be performed.
    
    Fixes: 3571fe07a090 ("octeontx2-af: Drop rules for NPC MCAM")
    Cc: stable@vger.kernel.org
    Signed-off-by: Dawei Feng <dawei.feng@seu.edu.cn>
    Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
    Link: https://patch.msgid.link/20260604143756.1524482-1-dawei.feng@seu.edu.cn
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

octeontx2-af: npc: Fix CPT channel mask in npc_install_flow [+ + +]
Author: Nithin Dabilpuram <ndabilpuram@marvell.com>
Date:   Tue Jun 2 10:28:53 2026 +0530

    octeontx2-af: npc: Fix CPT channel mask in npc_install_flow
    
    [ Upstream commit 1d31eb27e570daa04f5373345f9ac98c95863be9 ]
    
    Use the CPT-aware NIX channel mask in the npc_install_flow path so that
    when the host PF installs steering rules in kernel for a VF used from
    userspace (e.g. DPDK), MCAM entries see the same channel mask semantics as
    other RX paths.
    
    Fixes: 56bcef528bd8 ("octeontx2-af: Use npc_install_flow API for promisc and broadcast entries")
    Cc: Naveen Mamindlapalli <naveenm@marvell.com>
    Signed-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com>
    Signed-off-by: Ratheesh Kannoth <rkannoth@marvell.com>
    Link: https://patch.msgid.link/20260602045853.1558530-1-rkannoth@marvell.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

octeontx2-af: replace deprecated strncpy with strscpy [+ + +]
Author: Justin Stitt <justinstitt@google.com>
Date:   Sat May 30 10:26:45 2026 -0400

    octeontx2-af: replace deprecated strncpy with strscpy
    
    [ Upstream commit 473f8f2d1bfe1103f20140fdc80cad406b4d68c0 ]
    
    `strncpy` is deprecated for use on NUL-terminated destination strings
    [1] and as such we should prefer more robust and less ambiguous string
    interfaces.
    
    We can see that linfo->lmac_type is expected to be NUL-terminated based
    on the `... - 1`'s present in the current code. Presumably making room
    for a NUL-byte at the end of the buffer.
    
    Considering the above, a suitable replacement is `strscpy` [2] due to
    the fact that it guarantees NUL-termination on the destination buffer
    without unnecessarily NUL-padding.
    
    Let's also prefer the more idiomatic strscpy usage of (dest, src,
    sizeof(dest)) rather than (dest, src, SOME_LEN).
    
    Link: https://www.kernel.org/doc/html/latest/process/deprecated.html#strncpy-on-nul-terminated-strings [1]
    Link: https://manpages.debian.org/testing/linux-manual-4.8/strscpy.9.en.html [2]
    Link: https://github.com/KSPP/linux/issues/90
    Signed-off-by: Justin Stitt <justinstitt@google.com>
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Link: https://lore.kernel.org/r/20231010-strncpy-drivers-net-ethernet-marvell-octeontx2-af-cgx-c-v1-1-a443e18f9de8@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: c0bf0a4f3f1f ("octeontx2-af: CGX: add bounds check to cgx_speed_mbps index")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
octeontx2-pf: avoid double free of pool->stack on AQ init failure [+ + +]
Author: Dawei Feng <dawei.feng@seu.edu.cn>
Date:   Sat May 30 15:47:56 2026 -0400

    octeontx2-pf: avoid double free of pool->stack on AQ init failure
    
    [ Upstream commit 9b244c242bec48b37e82b89787afd6a4c43457e1 ]
    
    otx2_pool_aq_init() frees pool->stack when mailbox sync or retry
    allocation fails, but leaves the pointer unchanged. Later,
    otx2_sq_aura_pool_init() unwinds the partial setup through
    otx2_aura_pool_free(), which frees pool->stack again. The CN20K-specific
    cn20k_pool_aq_init() implementation has the same bug in
    its corresponding error path.
    
    Set pool->stack to NULL immediately after the local free so the shared
    cleanup path does not free the same stack again while cleaning up
    partially initialized pool state.
    
    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 validation was not performed because reproducing this path
    requires OcteonTX2/CN20K hardware.
    
    Fixes: caa2da34fd25 ("octeontx2-pf: Initialize and config queues")
    Fixes: d322fbd17203 ("octeontx2-pf: Initialize cn20k specific aura and pool contexts")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
    Signed-off-by: Dawei Feng <dawei.feng@seu.edu.cn>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20260515151826.1005397-1-dawei.feng@seu.edu.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
of/kexec: refactor ima_get_kexec_buffer() to use ima_validate_range() [+ + +]
Author: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
Date:   Wed Jun 3 21:02:38 2026 +0800

    of/kexec: refactor ima_get_kexec_buffer() to use ima_validate_range()
    
    [ Upstream commit 4d02233235ed0450de9c10fcdcf3484e3c9401ce ]
    
    Refactor the OF/DT ima_get_kexec_buffer() to use a generic helper to
    validate the address range.  No functional change intended.
    
    Link: https://lkml.kernel.org/r/20251231061609.907170-3-harshit.m.mogalapalli@oracle.com
    Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
    Reviewed-by: Mimi Zohar <zohar@linux.ibm.com>
    Cc: Alexander Graf <graf@amazon.com>
    Cc: Ard Biesheuvel <ardb@kernel.org>
    Cc: Baoquan He <bhe@redhat.com>
    Cc: Borislav Betkov <bp@alien8.de>
    Cc: guoweikang <guoweikang.kernel@gmail.com>
    Cc: Henry Willard <henry.willard@oracle.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jiri Bohac <jbohac@suse.cz>
    Cc: Joel Granados <joel.granados@kernel.org>
    Cc: Jonathan McDowell <noodles@fb.com>
    Cc: Mike Rapoport <rppt@kernel.org>
    Cc: Paul Webb <paul.x.webb@oracle.com>
    Cc: Sohil Mehta <sohil.mehta@intel.com>
    Cc: Sourabh Jain <sourabhjain@linux.ibm.com>
    Cc: Thomas Gleinxer <tglx@linutronix.de>
    Cc: Yifei Liu <yifei.l.liu@oracle.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Wenshan Lan <jetlan9@163.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
parport: Fix race between port and client registration [+ + +]
Author: Ben Hutchings <benh@debian.org>
Date:   Tue May 5 20:45:12 2026 +0200

    parport: Fix race between port and client registration
    
    commit ef15ccbb3e8640a723c42ad90eaf81d66ae02017 upstream.
    
    The parport subsystem registers port devices before they are fully
    initialised, resulting in a race condition where client drivers such
    as lp can attach to ports that are not completely initialised or even
    being torn down.
    
    When the port and client drivers are built as modules and loaded
    around the same time during boot, this occasionally results in a
    crash.  I was able to make this happen reliably in a VM with a
    PC-style parallel port by patching parport_pc to fail probing:
    
    > --- a/drivers/parport/parport_pc.c
    > +++ b/drivers/parport/parport_pc.c
    > @@ -2069,7 +2069,7 @@ static struct parport *__parport_pc_probe_port(unsigned long int base,
    >       if (!p)
    >               goto out3;
    >
    > -     base_res = request_region(base, 3, p->name);
    > +     base_res = NULL;
    >       if (!base_res)
    >               goto out4;
    >
    
    and then running:
    
        while true; do
            modprobe lp & modprobe parport_pc
            wait
            rmmod lp parport_pc
        done
    
    for a few seconds.
    
    In the long term I think port registration should be changed to put
    the call to device_add() inside parport_announce_port(), but since the
    latter currently cannot fail this will require changing all port
    drivers.
    
    For now, add a flag to indicate whether a port has been "announced"
    and only try to attach client drivers to ports when the flag is set.
    
    Fixes: 6fa45a226897 ("parport: add device-model to parport subsystem")
    Closes: https://bugs.debian.org/1130365
    Closes: https://lore.kernel.org/all/6ba903ad-9897-42bb-8c2d-337385cc3746@molgen.mpg.de/
    Cc: stable <stable@kernel.org>
    Signed-off-by: Ben Hutchings <benh@debian.org>
    Acked-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
    Link: https://patch.msgid.link/afo6uBv68GDevbMD@decadent.org.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
pcnet32: stop holding device spin lock during napi_complete_done [+ + +]
Author: Oscar Maes <oscmaes92@gmail.com>
Date:   Thu May 28 16:03:20 2026 +0200

    pcnet32: stop holding device spin lock during napi_complete_done
    
    [ Upstream commit 73bf3cca7de6a73f53b6a52dc3b1c82ae5667a4d ]
    
    napi_complete_done may call gro_flush_normal (though not currently, as GRO
    is unsupported at the moment), which may result in packet TX. This will
    eventually result in calling pcnet32_start_xmit - resulting in a deadlock
    while trying to re-acquire the already locked spin lock.
    
    It is safe to split the spinlock block into two, because the hardware
    registers are still protected from concurrent access, and the two blocks
    perform unrelated operations that don't need to happen atomically.
    
    Fixes: 5b2ec6f2be51 ("pcnet32: use napi_complete_done()")
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Oscar Maes <oscmaes92@gmail.com>
    Reviewed-by: Alexander Lobakin <aleksander.lobakin@intel.com>
    Link: https://patch.msgid.link/20260528140320.5556-1-oscmaes92@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf: Fix dangling cgroup pointer in cpuctx [+ + +]
Author: Yeoreum Yun <yeoreum.yun@arm.com>
Date:   Thu May 28 23:06:58 2026 -0700

    perf: Fix dangling cgroup pointer in cpuctx
    
    [ Upstream commit 3b7a34aebbdf2a4b7295205bf0c654294283ec82 ]
    
    Commit a3c3c6667("perf/core: Fix child_total_time_enabled accounting
    bug at task exit") moves the event->state update to before
    list_del_event(). This makes the event->state test in list_del_event()
    always false; never calling perf_cgroup_event_disable().
    
    As a result, cpuctx->cgrp won't be cleared properly; causing havoc.
    
    Fixes: a3c3c6667("perf/core: Fix child_total_time_enabled accounting bug at task exit")
    Signed-off-by: Yeoreum Yun <yeoreum.yun@arm.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Tested-by: David Wang <00107082@163.com>
    Link: https://lore.kernel.org/all/aD2TspKH%2F7yvfYoO@e129823.arm.com/
    Signed-off-by: Ian Klatzco <iklatzco@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
phy: mscc: Use PHY_ID_MATCH_EXACT for VSC8584, VSC8582, VSC8575, VSC856X [+ + +]
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Thu Oct 23 21:13:49 2025 +0200

    phy: mscc: Use PHY_ID_MATCH_EXACT for VSC8584, VSC8582, VSC8575, VSC856X
    
    [ Upstream commit 1bc80d673087e5704adbb3ee8e4b785c14899cce ]
    
    As the PHYs VSC8584, VSC8582, VSC8575 and VSC856X exists only as rev B,
    we can use PHY_ID_MATCH_EXACT to match exactly on revision B of the PHY.
    Because of this change then there is not need the check if it is a
    different revision than rev B in the function vsc8584_probe() as we
    already know that this will never happen.
    These changes are a preparation for the next patch because in that patch
    we will make the PHYs VSC8574 and VSC8572 to use vsc8584_probe() and
    these PHYs have multiple revision.
    
    Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Link: https://patch.msgid.link/20251023191350.190940-2-horatiu.vultur@microchip.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pidfd: refuse access to tasks that have started exiting harder [+ + +]
Author: Christian Brauner <brauner@kernel.org>
Date:   Mon May 18 10:32:11 2026 +0200

    pidfd: refuse access to tasks that have started exiting harder
    
    commit 62c4d31d78294bd61cf3403626b789e854357177 upstream.
    
    The recent ptrace fix closed a hole where someone could rely on task->mm
    becoming NULL during do_exit() to bypass dumpability checks. This api
    here leans on on the very same check and so inherits the fix.
    
    But there is no good reason to let it succeed at all once the target has
    entered do_exit(). PF_EXITING is set by exit_signals() at the very top
    of do_exit(), before exit_mm() and exit_files() run. Once we observe it,
    the task is committed to dying and exit_files() will release the fdtable
    shortly.
    
    Fixes: 8649c322f75c ("pid: Implement pidfd_getfd syscall")
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260518-obgleich-petersilie-2d77ccccf9b9@brauner
    Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
platform/x86/intel/vsec: Fix enable_cnt imbalance on PCIe error recovery [+ + +]
Author: Lukas Wunner <lukas@wunner.de>
Date:   Sat May 30 10:37:55 2026 -0400

    platform/x86/intel/vsec: Fix enable_cnt imbalance on PCIe error recovery
    
    [ Upstream commit 348ccc754d8939e21ca5956ff45720b81d6e407f ]
    
    After a PCIe Uncorrectable Error has been reported by a device with
    Intel Vendor Specific Extended Capabilities and has been recovered
    through a Secondary Bus Reset, its driver calls intel_vsec_pci_probe()
    to rescan and reinitialize VSECs.
    
    intel_vsec_pci_probe() invokes pcim_enable_device() and thereby adds
    another devm action which calls pcim_disable_device() on driver unbind.
    
    So once the driver unbinds, pcim_disable_device() will be called as many
    times as an Uncorrectable Error occurred, plus one.  This will lead to
    an enable_cnt imbalance on driver unbind.
    
    Additionally, since commit dc957ab6aa05 ("platform/x86/intel/vsec: Add
    private data for per-device data"), a devm_kzalloc() allocation is
    leaked on every Uncorrectable Error.
    
    Avoid by splitting the VSEC rescan out of intel_vsec_pci_probe() into a
    separate helper and calling that on PCIe error recovery.
    
    Fixes: 936874b77dd0 ("platform/x86/intel/vsec: Add PCI error recovery support to Intel PMT")
    Signed-off-by: Lukas Wunner <lukas@wunner.de>
    Cc: stable@vger.kernel.org  # v6.0+
    Link: https://patch.msgid.link/bd594d09fa866dc51dddc9a447c3b23f9b1402cc.1778736835.git.lukas@wunner.de
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ptp: vclock: Switch from RCU to SRCU [+ + +]
Author: Kurt Kanzenbach <kurt@linutronix.de>
Date:   Fri May 29 19:11:47 2026 +0200

    ptp: vclock: Switch from RCU to SRCU
    
    [ Upstream commit 672bd0519e27c357c43b7f8c0d653fce3817d06e ]
    
    The usage of PTP vClocks leads immediately to the following issues with
    ptp4l with LOCKDEP and DEBUG_ATOMIC_SLEEP enabled: "BUG: sleeping function
    called from invalid context".
    
    ptp_convert_timestamp() acquires a mutex_t within a RCU read section.  This
    is illegal, because acquiring a mutex_t can result in voluntary scheduling
    request which is not allowed within a RCU read section.
    
    Replace the RCU usage with SRCU where sleeping is allowed.
    
    Reported-by: Florian Zeitz <florian.zeitz@schettke.com>
    Closes: https://lore.kernel.org/all/00a8cce8-410e-4038-98af-49be6d93d7bd@schettke.com/
    Fixes: 67d93ffc0f3c ("ptp: vclock: use mutex to fix "sleep on atomic" bug")
    Signed-off-by: Kurt Kanzenbach <kurt@linutronix.de>
    Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Link: https://patch.msgid.link/20260529-vclock_rcu-v2-1-02a5531fab92@linutronix.de
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
r8152: handle the return value of usb_reset_device() [+ + +]
Author: Chih Kai Hsu <hsu.chih.kai@realtek.com>
Date:   Thu Jun 4 17:22:47 2026 +0800

    r8152: handle the return value of usb_reset_device()
    
    [ Upstream commit 19440600e729d4f74a42591a872099cf25c7d28a ]
    
    If usb_reset_device() returns a negative error code, stop the
    process of probing.
    
    Fixes: 10c3271712f5 ("r8152: disable the ECM mode")
    Signed-off-by: Chih Kai Hsu <hsu.chih.kai@realtek.com>
    Reviewed-by: Hayes Wang <hayeswang@realtek.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://patch.msgid.link/20260604092247.27158-450-nic_swsd@realtek.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/rxe: Fix "trying to register non-static key in rxe_qp_do_cleanup" bug [+ + +]
Author: Zhu Yanjun <yanjun.zhu@linux.dev>
Date:   Fri Jun 5 19:55:44 2026 +0300

    RDMA/rxe: Fix "trying to register non-static key in rxe_qp_do_cleanup" bug
    
    commit 1c7eec4d5f3b39cdea2153abaebf1b7229a47072 upstream.
    
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:94 [inline]
     dump_stack_lvl+0x116/0x1f0 lib/dump_stack.c:120
     assign_lock_key kernel/locking/lockdep.c:986 [inline]
     register_lock_class+0x4a3/0x4c0 kernel/locking/lockdep.c:1300
     __lock_acquire+0x99/0x1ba0 kernel/locking/lockdep.c:5110
     lock_acquire kernel/locking/lockdep.c:5866 [inline]
     lock_acquire+0x179/0x350 kernel/locking/lockdep.c:5823
     __timer_delete_sync+0x152/0x1b0 kernel/time/timer.c:1644
     rxe_qp_do_cleanup+0x5c3/0x7e0 drivers/infiniband/sw/rxe/rxe_qp.c:815
     execute_in_process_context+0x3a/0x160 kernel/workqueue.c:4596
     __rxe_cleanup+0x267/0x3c0 drivers/infiniband/sw/rxe/rxe_pool.c:232
     rxe_create_qp+0x3f7/0x5f0 drivers/infiniband/sw/rxe/rxe_verbs.c:604
     create_qp+0x62d/0xa80 drivers/infiniband/core/verbs.c:1250
     ib_create_qp_kernel+0x9f/0x310 drivers/infiniband/core/verbs.c:1361
     ib_create_qp include/rdma/ib_verbs.h:3803 [inline]
     rdma_create_qp+0x10c/0x340 drivers/infiniband/core/cma.c:1144
     rds_ib_setup_qp+0xc86/0x19a0 net/rds/ib_cm.c:600
     rds_ib_cm_initiate_connect+0x1e8/0x3d0 net/rds/ib_cm.c:944
     rds_rdma_cm_event_handler_cmn+0x61f/0x8c0 net/rds/rdma_transport.c:109
     cma_cm_event_handler+0x94/0x300 drivers/infiniband/core/cma.c:2184
     cma_work_handler+0x15b/0x230 drivers/infiniband/core/cma.c:3042
     process_one_work+0x9cc/0x1b70 kernel/workqueue.c:3238
     process_scheduled_works kernel/workqueue.c:3319 [inline]
     worker_thread+0x6c8/0xf10 kernel/workqueue.c:3400
     kthread+0x3c2/0x780 kernel/kthread.c:464
     ret_from_fork+0x45/0x80 arch/x86/kernel/process.c:153
     ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245
     </TASK>
    
    The root cause is as below:
    
    In the function rxe_create_qp, the function rxe_qp_from_init is called
    to create qp, if this function rxe_qp_from_init fails, rxe_cleanup will
    be called to handle all the allocated resources, including the timers:
    retrans_timer and rnr_nak_timer.
    
    The function rxe_qp_from_init calls the function rxe_qp_init_req to
    initialize the timers: retrans_timer and rnr_nak_timer.
    
    But these timers are initialized in the end of rxe_qp_init_req.
    If some errors occur before the initialization of these timers, this
    problem will occur.
    
    The solution is to check whether these timers are initialized or not.
    If these timers are not initialized, ignore these timers.
    
    Fixes: 8700e3e7c485 ("Soft RoCE driver")
    Reported-by: syzbot+4edb496c3cad6e953a31@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=4edb496c3cad6e953a31
    Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
    Link: https://patch.msgid.link/20250419080741.1515231-1-yanjun.zhu@linux.dev
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    [ Vladislav: keep del_timer_sync() because linux-6.6.y has not renamed it
      to timer_delete_sync() yet. The actual fix is unchanged: check the timer
      .function fields before deleting the timers. ]
    Signed-off-by: Vladislav Nikolaev <vlad102nikolaev@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/srp: bound SRP_RSP sense copy by the received length [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Tue Jun 2 18:04:57 2026 -0400

    RDMA/srp: bound SRP_RSP sense copy by the received length
    
    commit 13e91fd076306f5d0cdfa14f53d69e37274723c4 upstream.
    
    srp_process_rsp() copies sense data from rsp->data + resp_data_len,
    where resp_data_len is the full 32-bit value supplied by the SRP target
    and is never checked against the number of bytes actually received
    (wc->byte_len). The copy length is bounded to SCSI_SENSE_BUFFERSIZE, so
    at most 96 bytes are copied, but the source offset is not bounded.
    
    A malicious or compromised SRP target on the InfiniBand/RoCE fabric that
    the initiator has logged into can return an SRP_RSP with
    SRP_RSP_FLAG_SNSVALID set and a large resp_data_len. The receive buffer
    is allocated at the target-chosen max_ti_iu_len, so the source of the
    sense copy lands past the bytes actually received; with resp_data_len
    near 0xFFFFFFFF it is gigabytes past the buffer and the read faults.
    
    Copy the sense data only if it has not been truncated, that is, only if
    the response header, the response data, and the sense region fit within
    the bytes actually received; otherwise drop the sense and log. The
    in-tree iSER and NVMe-RDMA receive paths already bound their parse by
    wc->byte_len; this brings ib_srp into line with them.
    
    Fixes: aef9ec39c47f ("IB: Add SCSI RDMA Protocol (SRP) initiator")
    Link: https://patch.msgid.link/r/20260602220457.2542840-1-michael.bommarito@gmail.com
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
RDMA/umem: fix kernel-doc warnings [+ + +]
Author: Randy Dunlap <rdunlap@infradead.org>
Date:   Mon Jun 15 19:58:46 2026 -0400

    RDMA/umem: fix kernel-doc warnings
    
    [ Upstream commit ff46d1392750444fab5ae5a0194764ffdc4ac0d2 ]
    
    Add or correct kernel-doc comments to eliminate warnings:
    
    Warning: include/rdma/ib_umem.h:104 function parameter 'biter' not
     described in 'rdma_umem_for_each_dma_block'
    Warning: include/rdma/ib_umem.h:140 function parameter 'pgsz_bitmap' not
     described in 'ib_umem_find_best_pgoff'
    Warning: include/rdma/ib_umem.h:141 No description found for return
     value of 'ib_umem_find_best_pgoff'
    
    Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
    Link: https://patch.msgid.link/20260224003120.3173892-1-rdunlap@infradead.org
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Stable-dep-of: 15fe76e23615 ("RDMA/umem: Fix truncation for block sizes >= 4G")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

RDMA/umem: Fix truncation for block sizes >= 4G [+ + +]
Author: Jason Gunthorpe <jgg@ziepe.ca>
Date:   Mon Jun 15 19:58:48 2026 -0400

    RDMA/umem: Fix truncation for block sizes >= 4G
    
    [ Upstream commit 15fe76e23615f502d051ef0768f86babaf08746c ]
    
    When the iommu is used the linearization of the mapping can give a single
    block that is very large split across multiple SG entries.
    
    When __rdma_block_iter_next() reassembles the split SG entries it is
    overflowing the 32 bit stack values and computed the wrong DMA addresses
    for blocks after the truncation.
    
    Use the right types to hold DMA addresses.
    
    Link: https://patch.msgid.link/r/1-v1-88303e9e509f+f7-ib_umem_types_jgg@nvidia.com
    Cc: stable@vger.kernel.org
    Fixes: a808273a495c ("RDMA/verbs: Add a DMA iterator to return aligned contiguous memory blocks")
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
RDMA: During rereg_mr ensure that REREG_ACCESS is compatible [+ + +]
Author: Jason Gunthorpe <jgg@ziepe.ca>
Date:   Mon Jun 15 18:52:07 2026 -0400

    RDMA: During rereg_mr ensure that REREG_ACCESS is compatible
    
    [ Upstream commit badad6fad60def1b9805559dd81dbab3d97b82aa ]
    
    If IB_MR_REREG_ACCESS changes from RO to RW then the umem has to be
    re-evaluated to ensure it is properly pinned as RW. Since the umem is
    hidden inside each driver's mr struct add a ib_umem_check_rereg() function
    that each driver has to call before processing IB_MR_REREG_ACCESS.
    
    mlx4 has to retain its duplicate ib_access_writable check because it
    implements IB_MR_REREG_ACCESS | IB_MR_REREG_TRANS by changing both items
    in place sequentially while the MR is live, so it will continue to not
    support this combination.
    
    Cc: stable@vger.kernel.org
    Fixes: b40656aa7d55 ("RDMA/umem: remove FOLL_FORCE usage")
    Link: https://patch.msgid.link/r/0-v1-06fb1a2d6cf5+107-rereg_access_jgg@nvidia.com
    Reported-by: Philip Tsukerman <philiptsukerman@gmail.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

RDMA: Move DMA block iterator logic into dedicated files [+ + +]
Author: Leon Romanovsky <leon@kernel.org>
Date:   Mon Jun 15 19:58:47 2026 -0400

    RDMA: Move DMA block iterator logic into dedicated files
    
    [ Upstream commit 6094ea64c69520ed1e770e7c79c43412de202bfa ]
    
    The DMA iterator logic was mixed into verbs and umem-specific code,
    forcing all users to include rdma/ib_umem.h. Move the block iterator
    logic into iter.c and rdma/iter.h so that rdma/ib_umem.h and
    rdma/ib_verbs.h can be separated in a follow-up patch.
    
    Link: https://patch.msgid.link/20260213-refactor-umem-v1-1-f3be85847922@nvidia.com
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Stable-dep-of: 15fe76e23615 ("RDMA/umem: Fix truncation for block sizes >= 4G")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rds: mark snapshot pages dirty in rds_info_getsockopt() [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Mon Jun 8 02:32:05 2026 -0700

    rds: mark snapshot pages dirty in rds_info_getsockopt()
    
    [ Upstream commit 512db8267b73a220a64180d95ab5eebe7c4964a8 ]
    
    rds_info_getsockopt() pins the destination user pages with FOLL_WRITE and
    the RDS_INFO_* producers memcpy the snapshot into them through
    kmap_atomic(). Because that copy goes through the kernel direct map, the
    dirty bit on the user PTE is never set, so unpin_user_pages() releases the
    pages without marking them dirty. A file-backed destination page can then
    be reclaimed without writeback, silently discarding the copied data.
    
    Use unpin_user_pages_dirty_lock() with make_dirty=true so the modified
    pages are marked dirty before they are unpinned.
    
    Fixes: a8c879a7ee98 ("RDS: Info and stats")
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Reviewed-by: Allison Henderson <achender@kernel.org>
    Link: https://patch.msgid.link/20260608-rds_fix-v1-1-006c88543408@debian.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "selftest/ptp: update ptp selftest to exercise the gettimex options" [+ + +]
Author: Petr Machata <petrm@nvidia.com>
Date:   Fri May 15 15:53:53 2026 +0200

    Revert "selftest/ptp: update ptp selftest to exercise the gettimex options"
    
    This reverts commit 4f3c8c7f4e1bda9c802873f3b937427dfb61301d, which is
    commit 3d07b691ee707c00afaf365440975e81bb96cd9b upstream.
    
    The cited commit allows testptp to set a configurable clock_id. That is
    done via a PTP_SYS_OFFSET_EXTENDED ioctl call, whose argument is struct
    ptp_sys_offset_extended, where the clock_id is set. However, this Linux
    version does not support the ptp_sys_offset_extended.clockid field, and
    the test case cannot be built against this tree's own UAPI headers.
    
    The reverted commit was introduced to resolve a missing dependency of
    commit c6dc458227a3 ("testptp: Add option to open PHC in readonly mode"),
    which is 76868642e427 upstream. My suspicion is that the only conflict
    between the two is the getopt string, and there is otherwise no direct
    dependency between the two.
    
    This patch therefore reverts the cited commit, with hand-resolving the
    getopt string to include 'r' (as introduced by c6dc458227a3), but not
    'y' (introduced by 06954f715deb).
    
    Reported-by: Yong Wang <yongwang@nvidia.com>
    Signed-off-by: Petr Machata <petrm@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rxrpc: Fix DATA decrypt vs splice() by copying data to buffer in recvmsg [+ + +]
Author: David Howells <dhowells@redhat.com>
Date:   Fri May 29 19:20:55 2026 -0400

    rxrpc: Fix DATA decrypt vs splice() by copying data to buffer in recvmsg
    
    [ Upstream commit d2bc90cf6c75cb96d2ce549be6c35efa3099d25b ]
    
    This improves the fix for CVE-2026-43500.
    
    Fix the pagecache corruption from in-place decryption of a DATA packet
    transmitted locally by splice() by getting rid of the packet sharing in the
    I/O thread and unconditionally extracting the packet content into a bounce
    buffer in which the buffer is decrypted.  recvmsg() (or the kernel
    equivalent) then copies the data from the bounce buffer to the destination
    buffer.  The sk_buff then remains unmodified.
    
    This has an additional advantage in that the packet is then arranged in the
    buffer with the correct alignment required for the crypto algorithms to
    process directly.  The performance of the crypto does seem to be a little
    faster and, surprisingly, the unencrypted performance doesn't seem to
    change much - possibly due to removing complexity from the I/O thread.
    
    Yet another advantage is that the I/O thread doesn't have to copy packets
    which would slow down packet distribution, ACK generation, etc..
    
    The buffer belongs to the call and is allocated initially at 2K,
    sufficiently large to hold a whole jumbo subpacket, but the buffer will be
    increased in size if needed.  However, to take this work, MSG_PEEK may
    cause a later packet to be decrypted into the buffer, in which case the
    earlier one will need re-decrypting for a subsequent recvmsg().
    
    Note that rx_pkt_offset may legitimately see 0 as a valid offset now, so
    switch to using USHRT_MAX to indicate an invalid offset.
    
    Note also that I would generally prefer to replace the buffers of the
    current sk_buff with a new kmalloc'd buffer of the right size, ditching the
    old data and frags as this makes the handling of MSG_PEEK easier and
    removes the re-decryption issue, but this looks like quite a complicated
    thing to achieve.  skb_morph() looks half way to what I want, but I don't
    want to have to allocate a new sk_buff.
    
    Fixes: d0d5c0cd1e71 ("rxrpc: Use skb_unshare() rather than skb_cow_data()")
    Reported-by: Hyunwoo Kim <imv4bel@gmail.com>
    Closes: https://lore.kernel.org/r/afKV2zGR6rrelPC7@v4bel/
    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: Simon Horman <horms@kernel.org>
    cc: Jiayuan Chen <jiayuan.chen@linux.dev>
    cc: linux-afs@lists.infradead.org
    Reviewed-by: Jeffrey Altman <jaltman@auristor.com>
    Tested-by: Marc Dionne <marc.dionne@auristor.com>
    Link: https://patch.msgid.link/20260515230516.2718212-3-dhowells@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 8bfab4b6ffc2 ("rxrpc: Fix RESPONSE packet verification to extract skb to a linear buffer")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rxrpc: Fix RESPONSE packet verification to extract skb to a linear buffer [+ + +]
Author: David Howells <dhowells@redhat.com>
Date:   Fri May 29 19:20:56 2026 -0400

    rxrpc: Fix RESPONSE packet verification to extract skb to a linear buffer
    
    [ Upstream commit 8bfab4b6ffc2fe92da86300728fc8c3c7ebffb56 ]
    
    This improves the fix for CVE-2026-43500.
    
    Fix the verification of RESPONSE packets to avoid the problem of
    overwriting a RESPONSE packet sent via splice to a local address by
    extracting the contents of the UDP packet into a kmalloc'd linear buffer
    rather than decrypting the data in place in the sk_buff (which may corrupt
    the original buffer).
    
    Fixes: 24481a7f5733 ("rxrpc: Fix conn-level packet handling to unshare RESPONSE packets")
    Reported-by: Hyunwoo Kim <imv4bel@gmail.com>
    Closes: https://lore.kernel.org/r/afKV2zGR6rrelPC7@v4bel/
    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: Simon Horman <horms@kernel.org>
    cc: Jiayuan Chen <jiayuan.chen@linux.dev>
    cc: linux-afs@lists.infradead.org
    cc: stable@kernel.org
    Reviewed-by: Jeffrey Altman <jaltman@auristor.com>
    Tested-by: Marc Dionne <marc.dionne@auristor.com>
    Link: https://patch.msgid.link/20260515230516.2718212-4-dhowells@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
scsi: core: Run queues for all non-SDEV_DEL devices from scsi_run_host_queues [+ + +]
Author: David Jeffery <djeffery@redhat.com>
Date:   Fri May 15 14:09:41 2026 -0400

    scsi: core: Run queues for all non-SDEV_DEL devices from scsi_run_host_queues
    
    [ Upstream commit 7205b58702273baf21d6ba7992e6ba15852325f7 ]
    
    While a SCSI host is in a recovery state, scsi_mq_requeue_cmd() will not
    set the requeue list for a requeued command to be kicked in the future.
    The expectation is a call to scsi_run_host_queues() will kick all SCSI
    devices once the recovery state is cleared.
    
    However, scsi_run_host_queues() uses shost_for_each_device() which uses
    scsi_device_get() and so will ignore devices in a partially removed
    state like SDEV_CANCEL. But these devices may also have requeued
    requests, leaving their requests stuck from not being kicked and causing
    the removal process of the device to hang.
    
    scsi_run_host_queues() needs to run against more devices than the macro
    shost_for_each_device() allows. Instead of using the too limiting
    scsi_device_get() state checks, only ignore devices in SDEV_DEL state or
    when unable to acquire a reference. Attempt to run the queues for all
    other devices when scsi_run_host_queues() is called.
    
    Fixes: 8b566edbdbfb ("scsi: core: Only kick the requeue list if necessary")
    Signed-off-by: David Jeffery <djeffery@redhat.com>
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Link: https://patch.msgid.link/20260515180941.9698-1-djeffery@redhat.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: fcoe: Reject FIP descriptors with zero fip_dlen in CVL walker [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Mon May 18 10:43:07 2026 -0400

    scsi: fcoe: Reject FIP descriptors with zero fip_dlen in CVL walker
    
    commit 9eed1bd59937e6828b00d2f2dfef631d964f3636 upstream.
    
    drivers/scsi/fcoe/fcoe_ctlr.c::fcoe_ctlr_recv_clr_vlink() advanced the
    descriptor cursor by an attacker-supplied fip_dlen without ever
    requiring dlen >= sizeof(struct fip_desc) in the default branch.  The
    named descriptor cases (FIP_DT_MAC, FIP_DT_NAME, FIP_DT_VN_ID) checked
    their per-type minimum lengths, but a FIP_DT_NON_CRITICAL descriptor
    (fip_dtype >= 128, which the standard requires receivers to silently
    ignore) skipped that check entirely.
    
    An unauthenticated L2 peer on the FCoE control VLAN could hang
    fcoe_ctlr_recv_work on an fcoe, qedf, or bnx2fc initiator indefinitely
    by emitting one FIP CVL frame whose single descriptor had fip_dtype ==
    FIP_DT_NON_CRITICAL and fip_dlen == 0: the cursor advanced zero bytes
    per iteration and the loop condition rlen >= sizeof(*desc) stayed true
    forever, blocking every subsequent FIP frame on that controller.
    
    Tighten the outer dlen guard to also reject dlen < sizeof(struct
    fip_desc), so a malformed descriptor whose length cannot even cover the
    descriptor header is rejected before the switch.  This is the same
    lower-bound the named cases already apply and is the minimum scope that
    closes the loop.
    
    Fixes: 97c8389d54b9 ("[SCSI] fcoe, libfcoe: Add support for FIP. FCoE discovery and keep-alive.")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Reviewed-by: Hannes Reinecke <hare@kernel.org>
    Link: https://patch.msgid.link/20260518144307.2820961-1-michael.bommarito@gmail.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: scsi_transport_fc: Widen FPIN pname walker counter to u32 [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Wed May 20 09:30:15 2026 -0400

    scsi: scsi_transport_fc: Widen FPIN pname walker counter to u32
    
    commit a9a39233ec1fc9f97ea1340a4d09bb7ec2be5153 upstream.
    
    An adjacent Fibre Channel fabric actor that can deliver an FPIN ELS
    frame to an lpfc or qla2xxx Linux initiator can trigger a non-return in
    the generic FC transport. This is not a local userspace or IP network
    path; the attacker must be able to inject fabric traffic, for example as
    a compromised switch or fabric controller, or as a same-zone N_Port on a
    fabric that permits source spoofing.
    
    The Link-Integrity and Peer-Congestion FPIN walkers used a u8 loop
    counter against the 32-bit on-wire pname_count field, and did not bound
    pname_count by the descriptor body already validated by the TLV walker.
    A pname_count of 256 therefore wraps the counter and keeps the loop
    condition true indefinitely.
    
    Factor the shared pname_list[] walk into one helper, widen the counter
    to u32, and clamp pname_count against the entries that fit in the
    descriptor body before iterating.
    
    Fixes: 3dcfe0de5a97 ("scsi: fc: Parse FPIN packets and update statistics")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: John Garry <john.g.garry@oracle.com>
    Link: https://patch.msgid.link/20260520133015.1018937-1-michael.bommarito@gmail.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: target: iscsi: Bound iscsi_encode_text_output() appends to rsp_buf [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Mon May 11 14:49:14 2026 -0400

    scsi: target: iscsi: Bound iscsi_encode_text_output() appends to rsp_buf
    
    commit bf33e01f88388c43e285492a63e539df6ffed64c upstream.
    
    iscsi_encode_text_output() concatenates "key=value\0" records into
    login->rsp_buf, an 8192-byte kzalloc(MAX_KEY_VALUE_PAIRS) buffer
    allocated in iscsit_alloc_login_setup_buffer(). The three sprintf() call
    sites in this function (lines 1398, 1411, 1424 in v7.1-rc2) never check
    the remaining buffer capacity:
    
            *length += sprintf(output_buf, "%s=%s", er->key, er->value);
            *length += 1;
            output_buf = textbuf + *length;
    
    The 8192-byte ceiling at iscsi_target_check_login_request() bounds the
    *input* Login PDU payload, but a single PDU can carry up to 2048 minimal
    four-byte "a=b\0" pairs, each unknown key expanding to a 16-byte
    "a=NotUnderstood\0" output record via iscsi_add_notunderstood_response().
    2048 * 16 = 32 KiB of output into an 8 KiB buffer, producing a ~24 KiB
    heap overrun in the kmalloc-8k slab.
    
    The fix introduces a static iscsi_encode_text_record() helper that uses
    snprintf() with a per-call bounds check against the remaining buffer,
    and threads a u32 textbuf_size parameter through
    iscsi_encode_text_output(). Both call sites in
    iscsi_target_handle_csg_zero() (PHASE_SECURITY) and
    iscsi_target_handle_csg_one() (PHASE_OPERATIONAL) pass
    MAX_KEY_VALUE_PAIRS. On overflow the encoder logs the condition, calls
    iscsi_release_extra_responses() to drop queued records, and returns -1;
    both caller sites now emit ISCSI_STATUS_CLS_INITIATOR_ERR /
    ISCSI_LOGIN_STATUS_INIT_ERR via iscsit_tx_login_rsp() before returning,
    so the initiator sees an explicit failed-login response rather than a
    silent connection drop. (Prior to this patch only the PHASE_OPERATIONAL
    caller did that; the PHASE_SECURITY caller is converted to the same
    shape.)
    
    Fixes: e48354ce078c ("iscsi-target: Add iSCSI fabric support for target v4.1")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Tested-by: John Garry <john.g.garry@oracle.com>
    Reviewed-by: John Garry <john.g.garry@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: target: iscsi: Fix CRC overread and double-free in iscsit_handle_text_cmd() [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Sat Jun 6 08:19:09 2026 -0400

    scsi: target: iscsi: Fix CRC overread and double-free in iscsit_handle_text_cmd()
    
    [ Upstream commit 778c2ab142c625a8a8afa570e0f9b7873f445d99 ]
    
    Two latent bugs in the Text-phase handler, both present since the
    original LIO integration in commit e48354ce078c ("iscsi-target: Add
    iSCSI fabric support for target v4.1"):
    
    1) DataDigest CRC buffer overread (4 bytes past text_in).
    
       text_in is kzalloc()'d at ALIGN(payload_length, 4).  rx_size is then
       incremented by ISCSI_CRC_LEN to make room for the received DataDigest
       in the iovec, but the same (now-bumped) rx_size is passed as the
       buffer length to iscsit_crc_buf():
    
           if (conn->conn_ops->DataDigest) {
                   ...
                   rx_size += ISCSI_CRC_LEN;
           }
           ...
           if (conn->conn_ops->DataDigest) {
                   data_crc = iscsit_crc_buf(text_in, rx_size, 0, NULL);
    
       iscsit_crc_buf() walks rx_size bytes of text_in with crc32c(), so
       when DataDigest is negotiated it reads 4 bytes past the end of the
       text_in allocation.  KASAN reproduces this directly on the unpatched
       mainline tree as slab-out-of-bounds in crc32c() called from the Text
       PDU path.  The OOB bytes feed crc32c() and are then compared against
       the initiator-supplied checksum, so the value does not flow back to
       the attacker, but the kernel does read past the buffer on every Text
       PDU with DataDigest=CRC32C.
    
       Fix by passing the actual padded payload length
       (ALIGN(payload_length, 4)) that was used for the kzalloc().
    
    2) Stale cmd->text_in_ptr re-free (double-free) on ERL>0 bad DataDigest
       drop.
    
       On DataDigest mismatch with ErrorRecoveryLevel > 0 the handler
       silently drops the PDU and lets the initiator plug the CmdSN gap:
    
                   kfree(text_in);
                   return 0;
    
       cmd->text_in_ptr still points at the freed buffer.  The next Text
       Request on the same ITT re-enters iscsit_setup_text_cmd(), which
       unconditionally does
    
           kfree(cmd->text_in_ptr);
           cmd->text_in_ptr = NULL;
    
       freeing the same pointer a second time.  Session teardown via
       iscsit_release_cmd() has the same shape and hits the same double-free
       if the connection is dropped before a second Text Request arrives.
    
       On an unmodified mainline tree the bug-1 CRC overread fires first on
       the initial valid Text Request and perturbs the subsequent state, so
       #4 was isolated by building a kernel with only the bug-1 hunk of this
       patch applied plus temporary printk() observability around the three
       relevant kfree() sites.  The observability prints are not part of
       this patch.  On that build, a three-PDU Text Request sequence after
       login produces two back-to-back splats:
    
           BUG: KASAN: double-free in iscsit_setup_text_cmd+0x??
           BUG: KASAN: double-free in iscsit_release_cmd+0x??
    
       showing the same pointer freed in the ERL>0 drop path and again in
       iscsit_setup_text_cmd() (next Text Request on the same ITT) and once
       more in iscsit_release_cmd() (session teardown).  On distro kernels
       with CONFIG_SLAB_FREELIST_HARDENED=y (default) the double-free
       becomes a remote kernel BUG(); on non-hardened kernels it corrupts
       the slab freelist.
    
       Fix by clearing cmd->text_in_ptr after the kfree() in the ERL>0 drop
       path.  With both hunks applied #4 is directly observable on the stock
       tree without observability printks; fixing bug-1 alone would mask #4
       less, not more, so the hunks are submitted together.
    
    Both fixes are one-liners.  The Text PDU state machine is unchanged and
    the wire protocol is unaffected.
    
    Fixes: e48354ce078c ("iscsi-target: Add iSCSI fabric support for target v4.1")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Tested-by: John Garry <john.g.garry@oracle.com>
    Reviewed-by: John Garry <john.g.garry@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: target: iscsi: Validate CHAP_R length before base64 decode [+ + +]
Author: Alexandru Hossu <hossu.alexandru@gmail.com>
Date:   Thu May 21 17:11:21 2026 +0200

    scsi: target: iscsi: Validate CHAP_R length before base64 decode
    
    commit 85db7391310b1304d2dc8ae3b0b12105a9567147 upstream.
    
    chap_server_compute_hash() allocates client_digest as
    kzalloc(chap->digest_size) and then, for BASE64-encoded responses,
    passes chap_r directly to chap_base64_decode() without checking whether
    the input length could produce more than digest_size bytes of output.
    
    chap_base64_decode() writes to the destination unconditionally as long
    as there is input to consume. With MAX_RESPONSE_LENGTH set to 128 and
    the "0b" prefix stripped by extract_param(), up to 127 base64 characters
    can reach the decoder. 127 characters decode to 95 bytes. For SHA-256
    (digest_size=32) this overflows client_digest by 63 bytes; for MD5
    (digest_size=16) the overflow is 79 bytes.
    
    The length check at line 344 fires after the write has already happened.
    
    The HEX branch in the same switch statement already validates the length
    up front. Apply the same approach to the BASE64 branch: strip trailing
    base64 padding characters, then reject any input whose data length
    exceeds DIV_ROUND_UP(digest_size * 4, 3) before calling the decoder.
    
    Stripping trailing '=' before the comparison handles both padded and
    unpadded encodings. chap_base64_decode() already returns early on '=',
    so the full original string is still passed to the decoder unchanged.
    
    The mutual CHAP path decodes CHAP_C into initiatorchg_binhex, which is
    kzalloc(CHAP_CHALLENGE_STR_LEN). extract_param() caps initiatorchg at
    CHAP_CHALLENGE_STR_LEN characters, so at most CHAP_CHALLENGE_STR_LEN-1
    base64 characters reach the decoder. The maximum decoded size,
    DIV_ROUND_UP((CHAP_CHALLENGE_STR_LEN-1) * 3, 4), is less than
    CHAP_CHALLENGE_STR_LEN, so no overflow is possible there. A comment is
    added at the call site to document this.
    
    Fixes: 1e5733883421 ("scsi: target: iscsi: Support base64 in CHAP")
    Cc: stable@vger.kernel.org
    Signed-off-by: Alexandru Hossu <hossu.alexandru@gmail.com>
    Reviewed-by: David Disseldorp <ddiss@suse.de>
    Link: https://patch.msgid.link/20260521151121.808477-1-hossu.alexandru@gmail.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sctp: diag: reject stale associations in dump_one path [+ + +]
Author: Zhao Zhang <zzhan461@ucr.edu>
Date:   Sat May 30 23:57:14 2026 +0800

    sctp: diag: reject stale associations in dump_one path
    
    commit 5eba3e48d78edd7551b992cb7ba687019b3a78da upstream.
    
    The SCTP exact sock_diag lookup can hold a transport reference, block on
    lock_sock(sk), and then resume after sctp_association_free() has marked
    the association dead and freed its bind address list.
    
    When that happens, inet_assoc_attr_size() and
    inet_diag_msg_sctpasoc_fill() can still dereference association state
    that is no longer valid for reporting. In particular,
    inet_diag_msg_sctpasoc_fill() may read an empty bind-address list as a
    real sctp_sockaddr_entry and trigger an out-of-bounds read from
    unrelated association memory.
    
    Reject the association after taking the socket lock if it has been
    reaped or detached from the endpoint, and report the lookup as stale.
    This keeps the exact dump-one path from formatting torn association
    state.
    
    Fixes: 8f840e47f190 ("sctp: add the sctp_diag.c file")
    Cc: stable@kernel.org
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Reported-by: Zhengchuan Liang <zcliangcn@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Signed-off-by: Zhao Zhang <zzhan461@ucr.edu>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Acked-by: Xin Long <lucien.xin@gmail.com>
    Link: https://patch.msgid.link/fac6043fa20a2ff68e12958c431836f692c51268.1780113823.git.zzhan461@ucr.edu
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

sctp: fix race between sctp_wait_for_connect and peeloff [+ + +]
Author: Zhenghang Xiao <kipreyyy@gmail.com>
Date:   Wed May 27 11:24:11 2026 +0800

    sctp: fix race between sctp_wait_for_connect and peeloff
    
    [ Upstream commit f14fe6395a8b3d961a61e138ad7b36ba3626dd4e ]
    
    sctp_wait_for_connect() drops and re-acquires the socket lock while
    waiting for the association to reach ESTABLISHED state. During this
    window, another thread can peeloff the association to a new socket via
    getsockopt(SCTP_SOCKOPT_PEELOFF), changing asoc->base.sk. After
    re-acquiring the old socket lock, sctp_wait_for_connect() returns
    success without noticing the migration — the caller then accesses
    the association under the wrong lock in sctp_datamsg_from_user().
    
    Add the same sk != asoc->base.sk check that sctp_wait_for_sndbuf()
    already has, returning an error if the association was migrated while
    we slept.
    
    Fixes: 668c9beb9020 ("sctp: implement assign_number for sctp_stream_interleave")
    Signed-off-by: Zhenghang Xiao <kipreyyy@gmail.com>
    Acked-by: Xin Long <lucien.xin@gmail.com>
    Link: https://patch.msgid.link/20260527032411.60959-1-kipreyyy@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sctp: fix uninit-value in __sctp_rcv_asconf_lookup() [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Mon Jun 8 08:22:34 2026 -0400

    sctp: fix uninit-value in __sctp_rcv_asconf_lookup()
    
    [ Upstream commit f8373d7090b745728de66308deeecc67e8d319ce ]
    
    __sctp_rcv_asconf_lookup() in net/sctp/input.c only checks that the ASCONF
    chunk can hold the ADDIP header and a parameter header, then calls
    af->from_addr_param(), which reads the full address (16 bytes for IPv6)
    trusting the parameter's declared length.
    
    An unauthenticated peer can send a truncated trailing ASCONF chunk that
    declares an IPv6 address parameter but stops after the 4-byte parameter
    header; reached from the no-association lookup path, from_addr_param() then
    reads uninitialized bytes past the parameter.
    
    Impact: an unauthenticated SCTP peer makes the receive path read up to 16
    bytes of uninitialized memory past a truncated ASCONF address parameter.
    
    The sibling __sctp_rcv_init_lookup() bounds parameters with
    sctp_walk_params(); this path open-codes the fetch and omits the bound.
    Verify the whole address parameter lies within the chunk before
    from_addr_param() reads it, the same class of fix as commit 51e5ad549c43
    ("net: sctp: fix KMSAN uninit-value in sctp_inq_pop").
    
    Fixes: df2185771439 ("[SCTP]: Update association lookup to look at ASCONF chunks as well")
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Acked-by: Xin Long <lucien.xin@gmail.com>
    Link: https://patch.msgid.link/20260608122234.459098-1-michael.bommarito@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sctp: purge outqueue on stale COOKIE-ECHO handling [+ + +]
Author: Xin Long <lucien.xin@gmail.com>
Date:   Wed Jun 3 14:11:44 2026 -0400

    sctp: purge outqueue on stale COOKIE-ECHO handling
    
    [ Upstream commit e374b22e9b07b72a25909621464ff74096151bfb ]
    
    sctp_stream_update() is only invoked when the association is moved into
    COOKIE_WAIT during association setup/reconfiguration. In this path, the
    outbound stream scheduler state (stream->out_curr) is expected to be
    clean, since no user data should have been transmitted yet unless the
    state machine has already partially progressed.
    
    However, a corner case exists in sctp_sf_do_5_2_6_stale(): when a
    Stale Cookie ERROR is received, the association is rolled back from
    COOKIE_ECHOED to COOKIE_WAIT. In this scenario, user data may already
    have been queued and even bundled with the COOKIE-ECHO chunk.
    
    During the rollback, sctp_stream_update() frees the old stream table
    and installs a new one, but it does not invalidate stream->out_curr.
    As a result, out_curr may still point to a freed sctp_stream_out
    entry from the previous stream state.
    
    Later, SCTP scheduler dequeue paths (FCFS, RR, PRIO, etc.) rely on
    stream->out_curr->ext, which can lead to use-after-free once the old
    stream state has been released via sctp_stream_free().
    
    This results in crashes such as (reported by Yuqi):
    
      BUG: KASAN: slab-use-after-free in sctp_sched_fcfs_dequeue+0x13a/0x140
      Read of size 8 at addr ff1100004d4d3208 by task mini_poc/9312
      CPU: 1 UID: 1001 PID: 9312 Comm: mini_poc Not tainted
         7.1.0-rc1-00305-gbd3a4795d574 #5 PREEMPT(full)
       sctp_sched_fcfs_dequeue+0x13a/0x140
       sctp_outq_flush+0x1603/0x33e0
       sctp_do_sm+0x31c9/0x5d30
       sctp_assoc_bh_rcv+0x392/0x6f0
       sctp_inq_push+0x1db/0x270
       sctp_rcv+0x138d/0x3c10
    
    Fix this by fully purging the association outqueue when handling the
    Stale Cookie case. This ensures all pending transmit and retransmit
    state is dropped, and any scheduler cached pointers are invalidated,
    making it safe to rebuild stream state during COOKIE_WAIT restart.
    
    Updating only stream->out_curr would be insufficient, since queued
    and retransmittable data would still reference the old stream state and
    trigger later use-after-free in dequeue paths.
    
    Fixes: 5bbbbe32a431 ("sctp: introduce stream scheduler foundations")
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Reported-by: Zhengchuan Liang <zcliangcn@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Reported-by: Yuqi Xu <xuyq21@lenovo.com>
    Reported-by: Ren Wei <n05ec@lzu.edu.cn>
    Signed-off-by: Xin Long <lucien.xin@gmail.com>
    Link: https://patch.msgid.link/94318159b9052907a6cbb7256aee8b5f8dfbfccb.1780510304.git.lucien.xin@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sctp: stream: fully roll back denied add-stream state [+ + +]
Author: Wyatt Feng <bronzed_45_vested@icloud.com>
Date:   Fri Jun 5 13:53:42 2026 +0800

    sctp: stream: fully roll back denied add-stream state
    
    commit a5f8a90ac9f77c678a9781c0a464b635e0d63e49 upstream.
    
    When ADD_OUT_STREAMS is denied, SCTP only shrinks the queued chunks and
    then lowers outcnt. That leaves removed stream metadata behind, so a
    later re-add can reuse a stale ext and hit a null-pointer dereference in
    the scheduler get path.
    
    Fix the rollback by tearing down the removed stream state the same way
    other stream resizes do. Unschedule the current scheduler state, drop
    the removed stream ext state with sctp_stream_outq_migrate(), and then
    reschedule the remaining streams.
    
    This keeps scheduler-private RR/FC/PRIO lists consistent while fully
    rolling back denied outgoing stream additions.
    
    Fixes: 637784ade221 ("sctp: introduce priority based stream scheduler")
    Cc: stable@kernel.org
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Reported-by: Zhengchuan Liang <zcliangcn@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Signed-off-by: Wyatt Feng <bronzed_45_vested@icloud.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Acked-by: Xin Long <lucien.xin@gmail.com>
    Link: https://patch.msgid.link/d78954ecd94954653ee299400e98d74a03a6f7d3.1780603399.git.bronzed_45_vested@icloud.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
selftests: mptcp: add test for extra_subflows underflow on userspace PM [+ + +]
Author: Tao Cui <cuitao@kylinos.cn>
Date:   Tue Jun 2 22:14:13 2026 +1000

    selftests: mptcp: add test for extra_subflows underflow on userspace PM
    
    commit 06fd2bec7aebf393288e4b78924482fe170caabc upstream.
    
    Add a test to verify that when userspace PM fails to create a subflow
    (e.g. using an unreachable address), the extra_subflows counter is not
    decremented below zero.
    
    Fixes: 77e4b94a3de6 ("mptcp: update userspace pm infos")
    Cc: stable@vger.kernel.org
    Signed-off-by: Tao Cui <cuitao@kylinos.cn>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260602-net-mptcp-misc-fixes-7-1-rc7-v2-6-856831229976@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

selftests: mptcp: drop nanoseconds width specifier [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Sat May 30 07:49:22 2026 -0400

    selftests: mptcp: drop nanoseconds width specifier
    
    [ Upstream commit 01ff78e4b3d98689184c52d97f9575dfbdc3b10f ]
    
    Using the format specifier +%s%3N with GNU date is honoured, and only
    prints 3 digits of the nanoseconds portion of the seconds since epoch,
    which corresponds to the milliseconds.
    
    The uutils implementation of date currently does not honour this, and
    always prints all 9 digits. This is a known issue [1], but can be worked
    around by adapting this test to use nanoseconds instead of microseconds,
    and then divide it by 1e6.
    
    This fix is similar to what has been done on systemd side [2], and it is
    needed to run the selftests on Ubuntu 26.04, containing uutils 0.8.0.
    
    Note that the Fixes tag is there even if this patch doesn't fix an issue
    in the kernel selftests, but it is useful for those using uutils 0.8.0.
    
    Fixes: 048d19d444be ("mptcp: add basic kselftest for mptcp")
    Cc: stable@vger.kernel.org
    Link: https://github.com/uutils/coreutils/issues/11658 [1]
    Link: https://github.com/systemd/systemd/pull/41627 [2]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260515-net-mptcp-misc-fixes-7-1-rc4-v2-6-701e96419f2f@kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
serdev: make serdev_bus_type const [+ + +]
Author: Ricardo B. Marliere <ricardo@marliere.net>
Date:   Fri May 29 15:33:00 2026 -0400

    serdev: make serdev_bus_type const
    
    [ Upstream commit 88cddfb7bf23b06876da6c3e9f296e666d0f6332 ]
    
    Now that the driver core can properly handle constant struct bus_type,
    move the serdev_bus_type variable to be a constant structure as well,
    placing it into read-only memory which can not be modified at runtime.
    
    Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: "Ricardo B. Marliere" <ricardo@marliere.net>
    Link: https://lore.kernel.org/r/20240203-bus_cleanup-tty-v1-1-86b698c82efe@marliere.net
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: 375ba7484132 ("Bluetooth: hci_qca: Convert timeout from jiffies to ms")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serdev: Provide a bustype shutdown function [+ + +]
Author: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
Date:   Fri May 29 15:33:01 2026 -0400

    serdev: Provide a bustype shutdown function
    
    [ Upstream commit 6d71c62b13c33ea858ab298fe20beaec5736edc7 ]
    
    To prepare serdev driver to migrate away from struct device_driver::shutdown
    (and then eventually remove that callback) create a serdev driver shutdown
    callback and migration code to keep the existing behaviour. Note this
    introduces a warning for each driver at register time that isn't converted
    yet to that callback.
    
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
    Link: https://patch.msgid.link/ab518883e3ed0976a19cb5b5b5faf42bd3a655b7.1765526117.git.u.kleine-koenig@baylibre.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: 375ba7484132 ("Bluetooth: hci_qca: Convert timeout from jiffies to ms")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
serial: altera_jtaguart: handle uart_add_one_port() failures [+ + +]
Author: Myeonghun Pak <mhun512@gmail.com>
Date:   Tue May 12 15:56:57 2026 +0900

    serial: altera_jtaguart: handle uart_add_one_port() failures
    
    commit ea66be25f0e934f49d24cd0c5845d13cdba3520b upstream.
    
    altera_jtaguart_probe() maps the register window before registering the
    UART port, but it ignores failures from uart_add_one_port(). If port
    registration fails, probe still returns success and the mapping remains
    live until a later remove path that is not part of probe failure cleanup.
    
    Return the uart_add_one_port() error and unmap the register window on
    that failure path.
    
    This issue was identified during our ongoing static-analysis research while
    reviewing kernel code.
    
    Fixes: 5bcd601049c6 ("serial: Add driver for the Altera JTAG UART")
    Cc: stable <stable@kernel.org>
    Co-developed-by: Ijae Kim <ae878000@gmail.com>
    Signed-off-by: Ijae Kim <ae878000@gmail.com>
    Signed-off-by: Myeonghun Pak <mhun512@gmail.com>
    Link: https://patch.msgid.link/20260512065837.79528-1-mhun512@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: dz: Convert to use a platform device [+ + +]
Author: Maciej W. Rozycki <macro@orcam.me.uk>
Date:   Fri Jun 5 04:04:20 2026 +0100

    serial: dz: Convert to use a platform device
    
    commit 5d7a49d60b8fda66da60e240fd7315232fa1754f upstream.
    
    Prevent a crash from happening as the first serial port is initialised:
    
      Console: switching to colour frame buffer device 160x64
      tgafb: SFB+ detected, rev=0x02
      fb0: Digital ZLX-E1 frame buffer device at 0x1e000000
      DECstation DZ serial driver version 1.04
      CPU 0 Unable to handle kernel paging request at virtual address 000000bc, epc == 8048b3a4, ra == 80470a78
      Oops[#1]:
      CPU: 0 UID: 0 PID: 1 Comm: swapper/0 Not tainted 6.19.0-dirty #35 NONE
      $ 0   : 00000000 1000ac00 00000004 804707ac
      $ 4   : 00000000 80e20850 80e20858 81000030
      $ 8   : 00000000 8072c81c 00000008 fefefeff
      $12   : 6c616972 00000006 80c5917f 69726420
      $16   : 80e20800 00000000 808f8968 80e20800
      $20   : 00000000 807f5a90 808b0094 808d3bc8
      $24   : 00000018 80479030
      $28   : 80c2e000 80c2fd70 00000069 80470a78
      Hi    : 00000004
      Lo    : 00000000
      epc   : 8048b3a4 __dev_fwnode+0x0/0xc
      ra    : 80470a78 serial_base_ctrl_add+0xa0/0x168
      Status: 1000ac04      IEp
      Cause : 30000008 (ExcCode 02)
      BadVA : 000000bc
      PrId  : 00000220 (R3000)
      Modules linked in:
      Process swapper/0 (pid: 1, threadinfo=(ptrval), task=(ptrval), tls=00000000)
      Stack : 00400044 00400040 8046f4cc 00000000 808a6148 808a0000 808f8968 8086983c
              808e0000 8046fc84 1000ac01 00000028 80e20700 802ba3f8 80e20700 80d34a94
              80c1b900 80e20700 80e20700 80e20700 80e20700 80444650 00000000 00000000
              00000000 807f5a90 808b0094 80447080 00400040 808e0000 80d34a94 808a6148
              80d34a94 00000004 80e20700 00000000 8076974c 80469810 80c2fe3c 1000ac01
              ...
      Call Trace:
      [<8048b3a4>] __dev_fwnode+0x0/0xc
      [<80470a78>] serial_base_ctrl_add+0xa0/0x168
      [<8046fc84>] serial_core_register_port+0x1c8/0x974
      [<808c6af0>] dz_init+0x74/0xc8
      [<800470e0>] do_one_initcall+0x44/0x2d4
      [<808b111c>] kernel_init_freeable+0x258/0x308
      [<8072e434>] kernel_init+0x20/0x114
      [<80049cd0>] ret_from_kernel_thread+0x14/0x1c
    
      Code: 27bd0018  03e00008  2402ffea <8c8200bc> 03e00008  00000000  27bdffc0  afbe0038  afb30024
    
      ---[ end trace 0000000000000000 ]---
    
    -- where a pointer is dereferenced that has been derived from a null
    pointer to the port's parent device.
    
    Since no device is available with legacy probing and it's not anymore a
    preferable way to discover devices anyway, switch the driver to using a
    platform device and use it as the port's parent device.  Update resource
    handling accordingly and only request the actual span of addresses used
    within the slot, which will have had its resource already requested by
    generic platform device code.
    
    Use platform_driver_probe() not just because the DZ device is fixed with
    solder on board and not straightforward to remove, but foremost because
    the associated TTY's major device number is the same as used by the zs
    driver and the first driver to claim it will prevent the other one from
    using it.  Either one DZ device or some SCC devices will be present in a
    given system but never both at a time, and therefore we want the major
    device number to be claimed by the first driver to actually successfully
    bind to its device and platform_driver_probe() is a way to fulfil that.
    
    An unfortunate consequence of the switch to a platform device is we now
    hand the console over from the bootconsole much later in the bootstrap.
    The firmware console handler appears good enough though to work so late
    and in particular with interrupts enabled.
    
    Conversely only starting the console port so late lets the reset code
    fully utilise our delay handlers, so switch from udelay() to fsleep()
    for transmitter draining so as to avoid busy-waiting for an excessive
    amount of time.
    
    Fixes: 84a9582fd203 ("serial: core: Start managing serial controllers to enable runtime PM")
    Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Cc: stable@vger.kernel.org # needs to use .remove_new for <= 6.10
    Link: https://patch.msgid.link/alpine.DEB.2.21.2605062326540.46195@angie.orcam.me.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

serial: dz: Fix bootconsole handover lockup [+ + +]
Author: Maciej W. Rozycki <macro@orcam.me.uk>
Date:   Fri Jun 5 04:02:50 2026 +0100

    serial: dz: Fix bootconsole handover lockup
    
    commit 7f127b2208e5e2b817243cad41fe4211a6d5a7a3 upstream.
    
    Calling dz_reset() in the course of setting up the serial device causes
    line parameters to be reset and the transmitter disabled.  We've been
    lucky in that no message is usually produced to the kernel log between
    this call and the later call to uart_set_options() in the course of
    console setup done by dz_serial_console_init(), or the system would hang
    as the console output handler in the firmware tried to access a port the
    transmitter of which has been disabled and line parameters messed up.
    
    This will change with the next change to the driver, so fix dz_reset()
    such that line parameters are set for 9600n8 console operation as with
    the system firmware and the transmitter re-enabled after reset.  This
    also means dz_pm() serves no purpose anymore, so drop it.
    
    Fixes: e6ee512f5a77 ("dz.c: Resource management")
    Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Cc: stable@vger.kernel.org # v2.6.25+
    Link: https://patch.msgid.link/alpine.DEB.2.21.2605062302010.46195@angie.orcam.me.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

serial: dz: Fix bootconsole message clobbering at chip reset [+ + +]
Author: Maciej W. Rozycki <macro@orcam.me.uk>
Date:   Wed May 6 23:42:31 2026 +0100

    serial: dz: Fix bootconsole message clobbering at chip reset
    
    commit ca904f4b42355287bc5ce8b7550ebe909cda4c2c upstream.
    
    In the DZ interface as implemented by the DC7085 gate array the serial
    transmitters are double buffered, meaning that at the time a transmitter
    is ready to accept the next character there is one in the transmit shift
    register still being sent to the line.  Issuing a master clear at this
    time causes this character to be lost, so wait an extra amount of time
    sufficient for the transmit shift register to drain at 9600bps, which is
    the baud rate setting used by the firmware console.
    
    Mind the specified 1.4us TRDY recovery time in the course and continue
    using iob() as the completion barrier, since the platforms involved use
    a write buffer that can delay and combine writes, and reorder them with
    respect to reads regardless of the MMIO locations accessed and we still
    lack a platform-independent handler for that.
    
    When called from dz_serial_console_init() this is too early for fsleep()
    to work and even before lpj has been calculated and therefore the delay
    is actually not sufficient for the transmitter to drain and is merely a
    placeholder now.  This will be addressed in a follow-up change.
    
    Fixes: e6ee512f5a77 ("dz.c: Resource management")
    Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Cc: stable@vger.kernel.org # v2.6.25+
    Link: https://patch.msgid.link/alpine.DEB.2.21.2605062259080.46195@angie.orcam.me.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: fsl_lpuart: fix rx buffer and DMA map leaks in start_rx_dma [+ + +]
Author: Shitalkumar Gandhi <shital.gandhi45@gmail.com>
Date:   Mon Apr 20 19:29:03 2026 +0530

    serial: fsl_lpuart: fix rx buffer and DMA map leaks in start_rx_dma
    
    commit 9a9254c4a2a3ca2b3da16d173f3b0dd01f397ff6 upstream.
    
    lpuart_start_rx_dma() allocates sport->rx_ring.buf with kzalloc() and
    then maps a scatterlist via dma_map_sg().  On three subsequent error
    paths the function returns directly without releasing those resources:
    
      - when dma_map_sg() returns 0 (-EINVAL):
          ring->buf is leaked.
      - when dmaengine_slave_config() fails:
          ring->buf and the DMA mapping are leaked.
      - when dmaengine_prep_dma_cyclic() returns NULL:
          ring->buf and the DMA mapping are leaked.
    
    The sole cleanup path, lpuart_dma_rx_free(), is only reached when
    lpuart_dma_rx_use is set, and the caller lpuart_rx_dma_startup() clears
    that flag on failure of lpuart_start_rx_dma().  So these resources are
    permanently leaked on every failure in this function.  Repeated port
    open/close or termios changes under error conditions will slowly consume
    memory and leave stale streaming DMA mappings behind.
    
    Fix it by introducing two error labels that unmap the scatterlist and
    free the ring buffer as appropriate.  While here, replace the misleading
    -EFAULT (bad userspace pointer) returned when dmaengine_prep_dma_cyclic()
    fails with the more accurate -ENOMEM, matching how other dmaengine users
    in the tree treat this failure.
    
    No functional change on the success path.
    
    Fixes: 5887ad43ee02 ("tty: serial: fsl_lpuart: Use cyclic DMA for Rx")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Shitalkumar Gandhi <shitalkumar.gandhi@cambiumnetworks.com>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Link: https://patch.msgid.link/20260420135903.2062024-1-shitalkumar.gandhi@cambiumnetworks.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: qcom-geni: fix UART_RX_PAR_EN bit position [+ + +]
Author: Prasanna S <prasanna.s@oss.qualcomm.com>
Date:   Tue Apr 28 09:56:13 2026 +0530

    serial: qcom-geni: fix UART_RX_PAR_EN bit position
    
    commit ca2584d841b69391ffc4144840563d2e1a0018df upstream.
    
    UART_RX_PAR_EN is incorrectly defined as bit 3, which triggers false
    framing errors (S_GP_IRQ_1_EN) and causes received data to be dropped
    when parity is enabled and the parity bit is 0.
    
    Define UART_RX_PAR_EN as bit 4 of the SE_UART_RX_TRANS_CFG register, as
    specified in the reference manual.
    
    Fixes: c4f528795d1a ("tty: serial: msm_geni_serial: Add serial driver support for GENI based QUP")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Prasanna S <prasanna.s@oss.qualcomm.com>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260428-serial-bit-correct-v1-1-9131ad5b97d8@oss.qualcomm.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: qcom_geni: fix kfifo underflow when flush precedes DMA completion IRQ [+ + +]
Author: Viken Dadhaniya <viken.dadhaniya@oss.qualcomm.com>
Date:   Sat Jun 6 08:49:44 2026 -0400

    serial: qcom_geni: fix kfifo underflow when flush precedes DMA completion IRQ
    
    [ Upstream commit 452d6fa37ae9b021f4f6d397dbae077f7296f6f4 ]
    
    When uart_flush_buffer() runs before the DMA completion IRQ is delivered,
    the following race can occur (all steps serialized by uart_port_lock):
    
      1. DMA starts: tx_remaining = N, kfifo contains N bytes
      2. DMA completes in hardware; IRQ is pending but not yet delivered
      3. uart_flush_buffer() acquires the port lock and calls kfifo_reset(),
         making kfifo_len() = 0 while tx_remaining remains N
      4. uart_flush_buffer() releases the port lock
      5. DMA IRQ fires; handle_tx_dma() acquires the port lock and calls
         uart_xmit_advance(uport, tx_remaining) on an empty kfifo
    
    uart_xmit_advance() increments kfifo->out by tx_remaining. Since
    kfifo_reset() already set both in and out to 0, out wraps past in,
    causing kfifo_len() to return UART_XMIT_SIZE - tx_remaining. The next
    start_tx_dma() call then submits a DMA transfer of stale buffer data.
    
    Fix this by snapshotting kfifo_len() at the start of handle_tx_dma()
    and skipping uart_xmit_advance() when fifo_len < tx_remaining, which
    indicates the kfifo was reset by a preceding flush.
    
    Fixes: 2aaa43c70778 ("tty: serial: qcom-geni-serial: add support for serial engine DMA")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Viken Dadhaniya <viken.dadhaniya@oss.qualcomm.com>
    Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260506-serial-dma-stale-tx-buf-v1-1-e3ccb360d719@oss.qualcomm.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: samsung_tty: Use port lock wrappers [+ + +]
Author: Thomas Gleixner <tglx@kernel.org>
Date:   Fri Jun 5 09:53:22 2026 -0400

    serial: samsung_tty: Use port lock wrappers
    
    [ Upstream commit 97d7a9aeba1d424c2359f1686d02c75d798ad184 ]
    
    When a serial port is used for kernel console output, then all
    modifications to the UART registers which are done from other contexts,
    e.g. getty, termios, are interference points for the kernel console.
    
    So far this has been ignored and the printk output is based on the
    principle of hope. The rework of the console infrastructure which aims to
    support threaded and atomic consoles, requires to mark sections which
    modify the UART registers as unsafe. This allows the atomic write function
    to make informed decisions and eventually to restore operational state. It
    also allows to prevent the regular UART code from modifying UART registers
    while printk output is in progress.
    
    All modifications of UART registers are guarded by the UART port lock,
    which provides an obvious synchronization point with the console
    infrastructure.
    
    To avoid adding this functionality to all UART drivers, wrap the
    spin_[un]lock*() invocations for uart_port::lock into helper functions
    which just contain the spin_[un]lock*() invocations for now. In a
    subsequent step these helpers will gain the console synchronization
    mechanisms.
    
    Converted with coccinelle. No functional change.
    
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: John Ogness <john.ogness@linutronix.de>
    Link: https://lore.kernel.org/r/20230914183831.587273-54-john.ogness@linutronix.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: a3bb136bff5e ("tty: serial: samsung: Remove redundant port lock acquisition in rx helpers")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: sh-sci: fix memory region release in error path [+ + +]
Author: Hongling Zeng <zenghongling@kylinos.cn>
Date:   Tue Apr 21 14:57:37 2026 +0800

    serial: sh-sci: fix memory region release in error path
    
    commit 92b1ea22454b08a39baef3a7290fb3ec50366616 upstream.
    
    The sci_request_port() function uses request_mem_region() to reserve
    I/O memory, but in the error path when sci_remap_port() fails, it
    incorrectly calls release_resource() instead of release_mem_region().
    
    This mismatch can cause resource accounting issues. Fix it by using
    the correct release function, consistent with sci_release_port().
    
    Fixes: e2651647080930a1 ("serial: sh-sci: Handle port memory region reservations.")
    Cc: stable <stable@kernel.org>
    Reported-by: kernel test robot <lkp@intel.com>
    Reported-by: Dan Carpenter <error27@gmail.com>
    Closes: https://lore.kernel.org/r/202604032356.SzEjYkBC-lkp@intel.com/
    Signed-off-by: Hongling Zeng <zenghongling@kylinos.cn>
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Link: https://patch.msgid.link/20260421065737.724187-1-zenghongling@kylinos.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: zs: Convert to use a platform device [+ + +]
Author: Maciej W. Rozycki <macro@orcam.me.uk>
Date:   Fri Jun 5 04:05:05 2026 +0100

    serial: zs: Convert to use a platform device
    
    commit 7cac59d08a73cb866ec51a483a6f3fe0f531947c upstream.
    
    Prevent a crash from happening as the first serial port is initialised:
    
      Console: switching to mono frame buffer device 160x64
      fb0: PMAG-AA frame buffer device at tc0
      DECstation Z85C30 serial driver version 0.10
      CPU 0 Unable to handle kernel paging request at virtual address 0000002c, epc == 803ab00c, ra == 803aafe0
      Oops[#1]:
      CPU: 0 PID: 1 Comm: swapper Not tainted 6.4.0-rc3-00031-g84a9582fd203-dirty #57
      $ 0   : 00000000 10012c00 803aaeb0 00000000
      $ 4   : 80e12f60 80e12f50 80e12f58 81000030
      $ 8   : 00000000 805ff37c 00000000 33433538
      $12   : 65732030 00000006 80c2915d 6c616972
      $16   : 80e12f00 807b7630 00000000 00000000
      $20   : 00000004 00000348 000001a0 807623b8
      $24   : 00000018 00000000
      $28   : 80c24000 80c25d60 8078b148 803aafe0
      Hi    : 00000000
      Lo    : 00000000
      epc   : 803ab00c serial_base_ctrl_add+0x78/0xf4
      ra    : 803aafe0 serial_base_ctrl_add+0x4c/0xf4
      Status: 10012c03      KERNEL EXL IE
      Cause : 00000008 (ExcCode 02)
      BadVA : 0000002c
      PrId  : 00000440 (R4400SC)
      Modules linked in:
      Process swapper (pid: 1, threadinfo=(ptrval), task=(ptrval), tls=00000000)
      Stack : 80760000 00000cc0 00400044 00400040 803aa02c 80d61ab8 00000000 807b7630
              80760000 807623b8 807b7628 803aa644 80386998 00000000 80e17780 80220f68
              80e17780 80d61ab8 80c17d80 80e17780 80e17780 8063c798 80e17780 80383fa0
              00000010 80e17780 00000000 80386998 807a0000 00000000 00400040 8038f848
              807623b8 80d61ab8 00000004 80e17780 00000000 803a68e4 80c25e2c 803bb884
              ...
      Call Trace:
      [<803ab00c>] serial_base_ctrl_add+0x78/0xf4
      [<803aa644>] serial_core_register_port+0x174/0x69c
      [<8077e9ac>] zs_init+0xc8/0xfc
      [<800404d4>] do_one_initcall+0x40/0x2ac
      [<8076cecc>] kernel_init_freeable+0x1e4/0x270
      [<80605bec>] kernel_init+0x20/0x108
      [<800431e8>] ret_from_kernel_thread+0x14/0x1c
    
      Code: 2442aeb0  ae120024  ae0200d0 <8c67002c> 50e00001  8c670000  3c06806e  3c05806e  afb30010
    
      ---[ end trace 0000000000000000 ]---
    
    (report at the offending commit) -- where a pointer is dereferenced that
    has been derived from a null pointer to the port's parent device.
    
    Since no device is available with legacy probing and it's not anymore a
    preferable way to discover devices anyway, switch the driver to using a
    platform device and use it as the port's parent device.  Update resource
    handling accordingly and only request the actual span of addresses used
    within the slot, which will have had its resource already requested by
    generic platform device code.
    
    Use platform_driver_probe() not just because SCC devices are fixed with
    solder on board and not straightforward to remove, but foremost because
    the associated TTY's major device number is the same as used by the dz
    driver and the first driver to claim it will prevent the other one from
    using it.  Either one DZ device or some SCC devices will be present in a
    given system but never both at a time, and therefore we want the major
    device number to be claimed by the first driver to actually successfully
    bind to its device and platform_driver_probe() is a way to fulfil that.
    
    An unfortunate consequence of the switch to a platform device is we now
    hand the console over from the bootconsole much later in the bootstrap.
    The firmware console handler appears good enough though to work so late
    and in particular with interrupts enabled.
    
    Since there is one way only remaining to reach zs_reset() now, remove
    the port initialisation marker as no longer needed and go through the
    channel reset unconditionally.
    
    Fixes: 84a9582fd203 ("serial: core: Start managing serial controllers to enable runtime PM")
    Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Cc: stable@vger.kernel.org # needs to use .remove_new for <= 6.10
    Link: https://patch.msgid.link/alpine.DEB.2.21.2605062328480.46195@angie.orcam.me.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

serial: zs: Fix bootconsole handover lockup [+ + +]
Author: Maciej W. Rozycki <macro@orcam.me.uk>
Date:   Wed May 6 23:42:39 2026 +0100

    serial: zs: Fix bootconsole handover lockup
    
    commit 6c05cf72e13314ce9b770b5951695dc5a2152920 upstream.
    
    Calling zs_reset() in the course of setting up the serial device causes
    line parameters to be reset and the transmitter disabled.  We've been
    lucky in that no message is usually produced to the kernel log between
    this call and the later call to uart_set_options() in the course of
    console setup done by zs_serial_console_init(), or the system would hang
    as the console output handler in the firmware tried to access a port the
    transmitter of which has been disabled and line parameters messed up.
    
    This will change with the next change to the driver, so fix zs_reset()
    such that line parameters are set for 9600n8 console operation as with
    the system firmware and the transmitter re-enabled after reset.  This
    also means zs_pm() serves no purpose anymore, so drop it.
    
    Fixes: 8b4a40809e53 ("zs: move to the serial subsystem")
    Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Cc: stable@vger.kernel.org # v2.6.23+
    Link: https://patch.msgid.link/alpine.DEB.2.21.2605062308040.46195@angie.orcam.me.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: zs: Fix swapped RI/DSR modem line transition counting [+ + +]
Author: Maciej W. Rozycki <macro@orcam.me.uk>
Date:   Fri Apr 10 18:19:31 2026 +0100

    serial: zs: Fix swapped RI/DSR modem line transition counting
    
    commit d15cd40cb1858f75846eaafa9a6bca841b790a92 upstream.
    
    Fix a thinko in the status interrupt handler that has caused counters
    for the RI and DSR modem line transitions to be used for the other line
    each.
    
    Fixes: 8b4a40809e53 ("zs: move to the serial subsystem")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Link: https://patch.msgid.link/alpine.DEB.2.21.2604101747110.29980@angie.orcam.me.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: zs: Switch to using channel reset [+ + +]
Author: Maciej W. Rozycki <macro@orcam.me.uk>
Date:   Wed May 6 23:42:43 2026 +0100

    serial: zs: Switch to using channel reset
    
    commit 8572955630f30948837088aa98bcbe0532d1ceac upstream.
    
    Switch the driver to using the channel reset rather than hardware reset,
    simplifying handling by removing an interference between channels that
    causes the other channel to become uninitialised afterwards.
    
    There is little difference between the two kinds of reset in terms of
    register settings that result, and we initialise the whole register set
    right away anyway.  However this prevents a hang from happening should
    the console output handler in the firmware try to access the other port
    whose transmitter has been disabled and line parameters messed up.
    
    For example this will happen if the keyboard port (port A) is chosen for
    the system console, unusually but not insanely for a headless system, as
    the port is wired to a standard DA-15 connector and an adapter can be
    easily made.  Or with the next change in place this would happen for the
    regular console port (port B), since the keyboard port (port A) will be
    initialised first.
    
    Just remove the unnecessary complication then, a channel reset is good
    enough.  We still need the initialisation marker, now per channel rather
    than per SCC, as for the console port zs_reset() will be called twice:
    once early on via zs_serial_console_init() for the console setup only,
    and then again via zs_config_port() as the port is associated with a TTY
    device.
    
    Fixes: 8b4a40809e53 ("zs: move to the serial subsystem")
    Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Cc: stable@vger.kernel.org # v2.6.23+
    Link: https://patch.msgid.link/alpine.DEB.2.21.2605062323430.46195@angie.orcam.me.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
signal: clear JOBCTL_PENDING_MASK for caller in zap_other_threads() [+ + +]
Author: Aleksandr Nogikh <nogikh@google.com>
Date:   Thu May 21 16:22:40 2026 +0200

    signal: clear JOBCTL_PENDING_MASK for caller in zap_other_threads()
    
    [ Upstream commit 90918794a4e2c3b440f8fcf3847765a8b1d81b25 ]
    
    When a multi-threaded process receives a stop signal (e.g., SIGSTOP),
    do_signal_stop() sets JOBCTL_STOP_PENDING and JOBCTL_STOP_CONSUME on all
    threads and sets signal->group_stop_count to the number of threads. If
    one of the threads concurrently calls execve(), de_thread() invokes
    zap_other_threads() to kill all other threads. zap_other_threads()
    aborts the pending group stop by resetting signal->group_stop_count to 0
    and clears the JOBCTL_PENDING_MASK for all other threads. However, it
    fails to clear the job control flags for the calling thread.
    
    When execve() completes, the calling thread returns to user mode and
    checks for pending signals. Seeing the stale JOBCTL_STOP_PENDING flag,
    it calls do_signal_stop(), which invokes task_participate_group_stop().
    Since JOBCTL_STOP_CONSUME is still set, it attempts to decrement the
    already-zero signal->group_stop_count, triggering a warning:
    
    sig->group_stop_count == 0
    WARNING: CPU: 1 PID: 6475 at kernel/signal.c:373
    task_participate_group_stop+0x215/0x2d0
    Call Trace:
     <TASK>
     do_signal_stop+0x3be/0x5c0 kernel/signal.c:2619
     get_signal+0xa8c/0x1330 kernel/signal.c:2884
     arch_do_signal_or_restart+0xbc/0x840 arch/x86/kernel/signal.c:337
     exit_to_user_mode_loop+0x8c/0x4d0 kernel/entry/common.c:98
     do_syscall_64+0x33e/0xf80 arch/x86/entry/syscall_64.c:100
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
     </TASK>
    
    Fix this race condition by clearing the JOBCTL_PENDING_MASK for the
    calling thread in zap_other_threads(), ensuring it does not retain any
    stale job control state after the thread group is destroyed. This aligns
    with other functions that tear down a thread group and abort group
    stops, such as zap_process() and complete_signal(), which correctly
    clear these flags for all threads including the current one.
    
    Fixes: 39efa3ef3a37 ("signal: Use GROUP_STOP_PENDING to stop once for a single group stop")
    Assisted-by: Gemini:gemini-3.1-pro-preview Gemini:gemini-3-flash-preview syzbot
    Reported-by: syzbot+b109633ea805cac54a61@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=b109633ea805cac54a61
    Link: https://syzkaller.appspot.com/ai_job?id=d70208cc-862b-4fe3-bf02-3031e10cd0b3
    Signed-off-by: Aleksandr Nogikh <nogikh@google.com>
    Link: https://patch.msgid.link/20260521142240.2973022-1-nogikh@google.com
    Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
slimbus: qcom-ngd-ctrl: Avoid ABBA on tx_lock/ctrl->lock [+ + +]
Author: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
Date:   Sat May 30 21:44:21 2026 +0100

    slimbus: qcom-ngd-ctrl: Avoid ABBA on tx_lock/ctrl->lock
    
    commit 55f2ea9ff83cc27a85526b14bc9b32f96a08d6ec upstream.
    
    During the SSR/PDR down notification the tx_lock is taken with the
    intent to provide synchronization with active DMA transfers.
    
    But during this period qcom_slim_ngd_down() is invoked, which ends up in
    slim_report_absent(), which takes the slim_controller lock. In multiple
    other codepaths these two locks are taken in the opposite order (i.e.
    slim_controller then tx_lock).
    
    The result is a lockdep splat, and a possible deadlock:
    
      rprocctl/449 is trying to acquire lock:
      ffff00009793e620 (&ctrl->lock){+.+.}-{4:4}, at: slim_report_absent (drivers/slimbus/core.c:322) slimbus
    
      but task is already holding lock:
      ffff00009793fb50 (&ctrl->tx_lock){+.+.}-{4:4}, at: qcom_slim_ngd_ssr_pdr_notify (drivers/slimbus/qcom-ngd-ctrl.c:1475) slim_qcom_ngd_ctrl
    
      which lock already depends on the new lock.
    
      Possible unsafe locking scenario:
    
            CPU0                    CPU1
            ----                    ----
       lock(&ctrl->tx_lock);
                                    lock(&ctrl->lock);
                                    lock(&ctrl->tx_lock);
       lock(&ctrl->lock);
    
    The assumption is that the comment refers to the desire to not call
    qcom_slim_ngd_exit_dma() while we have an ongoing DMA TX transaction.
    But any such transaction is initiated and completed within a single
    qcom_slim_ngd_xfer_msg().
    
    Prior to calling qcom_slim_ngd_exit_dma() the slim_controller is torn
    down, all child devices are notified that the slimbus is gone and the
    child devices are removed.
    
    Stop taking the tx_lock in qcom_slim_ngd_ssr_pdr_notify() to avoid the
    deadlock.
    
    Fixes: a899d324863a ("slimbus: qcom-ngd-ctrl: add Sub System Restart support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
    Signed-off-by: Srinivas Kandagatla <srini@kernel.org>
    Link: https://patch.msgid.link/20260530204421.116824-9-srini@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

slimbus: qcom-ngd-ctrl: fix OF node refcount [+ + +]
Author: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Date:   Sat May 30 21:44:14 2026 +0100

    slimbus: qcom-ngd-ctrl: fix OF node refcount
    
    commit 120134fe75c6b0ae38f14eb8b548ad1e5761f912 upstream.
    
    Platform devices created with platform_device_alloc() call
    platform_device_release() when the last reference to the device's
    kobject is dropped. This function calls of_node_put() unconditionally.
    This works fine for devices created with platform_device_register_full()
    but users of the split approach (platform_device_alloc() +
    platform_device_add()) must bump the reference of the of_node they
    assign manually. Add the missing call to of_node_get().
    
    Cc: stable@vger.kernel.org
    Fixes: 917809e2280b ("slimbus: ngd: Add qcom SLIMBus NGD driver")
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Signed-off-by: Srinivas Kandagatla <srini@kernel.org>
    Link: https://patch.msgid.link/20260530204421.116824-2-srini@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
smb: client: require net admin for CIFS SWN netlink [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Fri May 29 12:51:27 2026 -0400

    smb: client: require net admin for CIFS SWN netlink
    
    [ Upstream commit d1ebfce2c1d161186a82e77590bf7da2ea1bce91 ]
    
    CIFS_GENL_CMD_SWN_NOTIFY is the userspace witness-notify command.  The
    intended sender is the cifs.witness helper, but the generic-netlink
    operation currently has no capability flag, so any local process can send
    RESOURCE_CHANGE or CLIENT_MOVE notifications to the in-kernel witness
    handler.
    
    The same family exposes CIFS_GENL_MCGRP_SWN without multicast-group
    capability flags.  Register messages sent to that group include the witness
    registration id and, for NTLM-authenticated mounts, the username, domain,
    and password attributes copied from the CIFS session.  An unprivileged
    local process should not be able to join that group and receive those
    messages.
    
    Require CAP_NET_ADMIN for incoming SWN_NOTIFY commands with
    GENL_ADMIN_PERM, and require CAP_NET_ADMIN over the network namespace for
    joining the SWN multicast group with GENL_MCAST_CAP_NET_ADMIN.  The
    cifs.witness service runs with the privileges needed for both operations.
    
    Fixes: fed979a7e082 ("cifs: Set witness notification handler for messages from userspace daemon")
    Cc: stable@vger.kernel.org
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
soc/tegra: pmc: Fix unsafe generic_handle_irq() call [+ + +]
Author: Prathamesh Shete <pshete@nvidia.com>
Date:   Wed Jun 3 16:09:12 2026 +0800

    soc/tegra: pmc: Fix unsafe generic_handle_irq() call
    
    [ Upstream commit e6d96073af681780820c94079b978474a8a44413 ]
    
    Currently, when resuming from system suspend on Tegra platforms,
    the following warning is observed:
    
    WARNING: CPU: 0 PID: 14459 at kernel/irq/irqdesc.c:666
    Call trace:
     handle_irq_desc+0x20/0x58 (P)
     tegra186_pmc_wake_syscore_resume+0xe4/0x15c
     syscore_resume+0x3c/0xb8
     suspend_devices_and_enter+0x510/0x540
     pm_suspend+0x16c/0x1d8
    
    The warning occurs because generic_handle_irq() is being called from
    a non-interrupt context which is considered as unsafe.
    
    Fix this warning by deferring generic_handle_irq() call to an IRQ work
    which gets executed in hard IRQ context where generic_handle_irq()
    can be called safely.
    
    When PREEMPT_RT kernels are used, regular IRQ work (initialized with
    init_irq_work) is deferred to run in per-CPU kthreads in preemptible
    context rather than hard IRQ context. Hence, use the IRQ_WORK_INIT_HARD
    variant so that with PREEMPT_RT kernels, the IRQ work is processed in
    hardirq context instead of being deferred to a thread which is required
    for calling generic_handle_irq().
    
    On non-PREEMPT_RT kernels, both init_irq_work() and IRQ_WORK_INIT_HARD()
    execute in IRQ context, so this change has no functional impact for
    standard kernel configurations.
    
    Signed-off-by: Petlozu Pravareshwar <petlozup@nvidia.com>
    Signed-off-by: Prathamesh Shete <pshete@nvidia.com>
    Reviewed-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    [treding@nvidia.com: miscellaneous cleanups]
    Signed-off-by: Thierry Reding <treding@nvidia.com>
    Signed-off-by: Robert Garcia <rob_garcia@163.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
soc: qcom: ice: Fix race between qcom_ice_probe() and of_qcom_ice_get() [+ + +]
Author: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
Date:   Mon Jun 15 10:43:52 2026 -0400

    soc: qcom: ice: Fix race between qcom_ice_probe() and of_qcom_ice_get()
    
    [ Upstream commit d922113ef91e6e7e8065e9070f349365341ba32e ]
    
    The current platform driver design causes probe ordering races with
    consumers (UFS, eMMC) due to ICE's dependency on SCM firmware calls. If ICE
    probe fails (missing ICE SCM or DT registers), devm_of_qcom_ice_get() loops
    with -EPROBE_DEFER, leaving consumers non-functional even when ICE should
    be gracefully disabled. devm_of_qcom_ice_get() doesn't know if the ICE
    driver probe has failed due to above reasons or it is waiting for the SCM
    driver.
    
    Moreover, there is no devlink dependency between ICE and consumer drivers
    as 'qcom,ice' is not considered as a DT 'supplier'. So the consumer drivers
    have no idea of when the ICE driver is going to probe.
    
    To address these issues, store the error pointer in a global xarray with
    ice node phandle as a key during probe in addition to the valid ice pointer
    and synchronize both qcom_ice_probe() and of_qcom_ice_get() using a mutex.
    
    If the xarray entry is NULL, then it implies that the driver is not
    probed yet, so return -EPROBE_DEFER. If it has any error pointer, return
    that error pointer directly. Otherwise, add the devlink as usual and return
    the valid pointer to the consumer.
    
    Xarray is used instead of platform drvdata, since driver core frees the
    drvdata during probe failure. So it cannot be used to pass the error
    pointer to the consumers.
    
    Note that this change only fixes the standalone ICE DT node bindings and
    not the ones with 'ice' range embedded in the consumer nodes, where there
    is no issue.
    
    Fixes: 2afbf43a4aec ("soc: qcom: Make the Qualcomm UFS/SDCC ICE a dedicated driver")
    Reported-by: Sumit Garg <sumit.garg@oss.qualcomm.com>
    Tested-by: Sumit Garg <sumit.garg@oss.qualcomm.com> # OP-TEE as TZ
    Acked-by: Sumit Garg <sumit.garg@oss.qualcomm.com>
    Cc: stable@vger.kernel.org # 6.4
    Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
    Link: https://lore.kernel.org/r/20260518-qcom-ice-fix-v7-1-2a595382185b@oss.qualcomm.com
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    [ changed `.remove` to `.remove_new` for the void callback and replaced the `__free(device_node)` direct-return with an explicit `goto out` in `of_qcom_ice_get()` ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tap: free page on error paths in tap_get_user_xdp() [+ + +]
Author: Weiming Shi <bestswngs@gmail.com>
Date:   Thu Jun 11 06:21:06 2026 -0700

    tap: free page on error paths in tap_get_user_xdp()
    
    [ Upstream commit 3bcf7aec6a9d16438f2cec29f5d7c8d5b8edf9b2 ]
    
    tap_get_user_xdp() rejects a frame shorter than ETH_HLEN with -EINVAL,
    and returns -ENOMEM when build_skb() fails. Both paths jump to the err
    label without freeing the page that vhost_net_build_xdp() allocated for
    the frame. tap_sendmsg() discards the per-buffer return value and always
    returns 0, so vhost_tx_batch() takes the success path and never frees
    the page; each rejected frame in a batch leaks one page-frag chunk.
    
    Free the page on both error paths, before the skb is built. This is the
    tap counterpart of the same leak in tun_xdp_one().
    
    Fixes: 0efac27791ee ("tap: accept an array of XDP buffs through sendmsg()")
    Fixes: ed7f2afdd0e0 ("tap: add missing verification for short frame")
    Reported-by: Xiang Mei <xmei5@asu.edu>
    Signed-off-by: Weiming Shi <bestswngs@gmail.com>
    Reviewed-by: Dongli Zhang <dongli.zhang@oracle.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Link: https://patch.msgid.link/20260521163230.1478627-2-bestswngs@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    (cherry picked from commit 3bcf7aec6a9d16438f2cec29f5d7c8d5b8edf9b2)
    Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tcp: restrict SO_ATTACH_FILTER to priv users [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Jun 5 11:21:34 2026 +0000

    tcp: restrict SO_ATTACH_FILTER to priv users
    
    [ Upstream commit 5d39580f68e6ddeedd15e587282207489dfb3da2 ]
    
    This patch restricts the use of SO_ATTACH_FILTER (cBPF) on TCP sockets
    to users with CAP_NET_ADMIN capability.
    
    This blocks potential side-channel attack where an unprivileged application
    attaches a filter to leak TCP sequence/acknowledgment numbers.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: Tamir Shahar <tamirthesis@gmail.com>
    Reported-by: Amit Klein <aksecurity@gmail.com>
    Cc: Willem de Bruijn <willemb@google.com>
    Cc: Alexei Starovoitov <ast@kernel.org>
    Cc: Daniel Borkmann <daniel@iogearbox.net>
    Cc: Andrii Nakryiko <andrii@kernel.org>
    Cc: Martin KaFai Lau <martin.lau@linux.dev>
    Cc: Eduard Zingerman <eddyz87@gmail.com>
    Cc: Kumar Kartikeya Dwivedi <memxor@gmail.com>
    Cc: Song Liu <song@kernel.org>
    Cc: Yonghong Song <yonghong.song@linux.dev>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: John Fastabend <john.fastabend@gmail.com>
    Cc: Stanislav Fomichev <sdf@fomichev.me>
    Acked-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tee: optee: prevent use-after-free when the client exits before the supplicant [+ + +]
Author: Amirreza Zarrabi <amirreza.zarrabi@oss.qualcomm.com>
Date:   Mon Feb 16 14:24:06 2026 -0800

    tee: optee: prevent use-after-free when the client exits before the supplicant
    
    [ Upstream commit 387a926ee166814611acecb960207fe2f3c4fd3e ]
    
    Commit 70b0d6b0a199 ("tee: optee: Fix supplicant wait loop") made the
    client wait as killable so it can be interrupted during shutdown or
    after a supplicant crash. This changes the original lifetime expectations:
    the client task can now terminate while the supplicant is still processing
    its request.
    
    If the client exits first it removes the request from its queue and
    kfree()s it, while the request ID remains in supp->idr. A subsequent
    lookup on the supplicant path then dereferences freed memory, leading to
    a use-after-free.
    
    Serialise access to the request with supp->mutex:
    
      * Hold supp->mutex in optee_supp_recv() and optee_supp_send() while
        looking up and touching the request.
      * Let optee_supp_thrd_req() notice that the client has terminated and
        signal optee_supp_send() accordingly.
    
    With these changes the request cannot be freed while the supplicant still
    has a reference, eliminating the race.
    
    Fixes: 70b0d6b0a199 ("tee: optee: Fix supplicant wait loop")
    Signed-off-by: Amirreza Zarrabi <amirreza.zarrabi@oss.qualcomm.com>
    Tested-by: Ox Yeh <ox.yeh@mediatek.com>
    Reviewed-by: Sumit Garg <sumit.garg@oss.qualcomm.com>
    Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
thunderbolt: Bound root directory content to block size [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Mon May 25 05:28:26 2026 -0400

    thunderbolt: Bound root directory content to block size
    
    commit 65423079c7420e3dbf9a7aa345c243a3f5752e5d upstream.
    
    __tb_property_parse_dir() does not check that content_offset +
    content_len fits within block_len for the root directory case.
    When rootdir->length equals or exceeds block_len - 2, the entry
    loop reads past the allocated property block.
    
    Add a bounds check after computing content_offset and content_len
    to reject directories whose content extends past the block.
    
    Fixes: cdae7c07e3e3 ("thunderbolt: Add support for XDomain properties")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

thunderbolt: Clamp XDomain response data copy to allocation size [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Mon May 25 05:28:27 2026 -0400

    thunderbolt: Clamp XDomain response data copy to allocation size
    
    commit 322e93448d908434ae5545660fcbe8f5a7a8e141 upstream.
    
    tb_xdp_properties_request() derives the per-packet copy length from
    the response header without checking that it fits in the previously
    allocated data buffer.  A malicious peer can set its length field
    larger than the declared data_length, causing memcpy to write past
    the kcalloc allocation.
    
    Clamp the per-packet copy length so that the cumulative offset
    never exceeds data_len.
    
    Fixes: cdae7c07e3e3 ("thunderbolt: Add support for XDomain properties")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

thunderbolt: Limit XDomain response copy to actual frame size [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Mon May 25 05:28:29 2026 -0400

    thunderbolt: Limit XDomain response copy to actual frame size
    
    commit 4db2bd2ed4785dbadaeeab9f4e346b21ac5fb8eb upstream.
    
    tb_xdomain_copy() copies req->response_size bytes from the received
    packet buffer regardless of the actual frame size.  When a short
    response arrives, this reads past the valid frame data in the DMA
    pool buffer into stale contents from previous transactions.
    
    Use the minimum of frame size and expected response size for the
    copy length.
    
    Fixes: cdae7c07e3e3 ("thunderbolt: Add support for XDomain properties")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

thunderbolt: property: Cap recursion depth in __tb_property_parse_dir() [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Fri Jun 5 15:42:47 2026 -0400

    thunderbolt: property: Cap recursion depth in __tb_property_parse_dir()
    
    [ Upstream commit 928abe19fbf0127003abcb1ea69cabc1c897d0ab ]
    
    A DIRECTORY entry's value field is used as the dir_offset for a
    recursive call into __tb_property_parse_dir() with no depth counter.
    A crafted peer that chains DIRECTORY entries into a back-reference
    loop drives the parser until the kernel stack is exhausted and the
    guard page fires.  Any untrusted XDomain peer (cable, dock, in-line
    inspector, adjacent host) that reaches the PROPERTIES_REQUEST
    control-plane exchange can trigger this without authentication.
    
    Thread a depth counter through tb_property_parse() and
    __tb_property_parse_dir(), and reject blocks that exceed
    TB_PROPERTY_MAX_DEPTH = 8.  That is comfortably larger than any
    observed legitimate XDomain layout.
    
    Operators who do not need XDomain host-to-host discovery can disable
    the path entirely with thunderbolt.xdomain=0 on the kernel command
    line.
    
    Fixes: cdae7c07e3e3 ("thunderbolt: Add support for XDomain properties")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-6
    Assisted-by: Codex:gpt-5-4
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

thunderbolt: property: Reject dir_len < 4 to prevent size_t underflow [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Sun May 10 19:16:57 2026 -0400

    thunderbolt: property: Reject dir_len < 4 to prevent size_t underflow
    
    commit de21b59c29e31c5108ddc04210631bbfab81b997 upstream.
    
    On the non-root path, __tb_property_parse_dir() takes dir_len from
    entry->length (u16 widened to size_t).  Two distinct OOB conditions
    follow when entry->length < 4:
    
    1. The non-root path begins with kmemdup(&block[dir_offset],
       sizeof(*dir->uuid), ...) which always reads 4 dwords from
       dir_offset.  tb_property_entry_valid() only enforces
       dir_offset + entry->length <= block_len, so a crafted entry
       with dir_offset close to the end of the property block and
       entry->length in 0..3 passes that gate but lets the UUID copy
       run off the block (e.g. dir_offset = 497, dir_len = 3 in a
       500-dword block reads block[497..501]).
    
    2. After the kmemdup, content_len = dir_len - 4 underflows size_t
       to ~SIZE_MAX, nentries becomes SIZE_MAX / 4, and the entry
       walk runs OOB on each iteration until an entry fails
       validation or the kernel oopses on an unmapped page.
    
    Reject dir_len < 4 on the non-root path *before* the UUID kmemdup,
    which closes both holes.
    
    Also move INIT_LIST_HEAD(&dir->properties) up to immediately after
    the dir allocation so the new error-return path (and the existing
    uuid-alloc failure path) calling tb_property_free_dir() sees a
    walkable list rather than the zero-initialized NULL next/prev that
    list_for_each_entry_safe() would oops on.
    
    Fixes: cdae7c07e3e3 ("thunderbolt: Add support for XDomain properties")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-6
    Assisted-by: Codex:gpt-5-4
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

thunderbolt: property: Reject u32 wrap in tb_property_entry_valid() [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Sun May 10 19:16:56 2026 -0400

    thunderbolt: property: Reject u32 wrap in tb_property_entry_valid()
    
    commit 01deda0152066c6c955f0619114ea6afa070aaec upstream.
    
    entry->value is u32 and entry->length is u16; the sum is performed in
    u32 and wraps.  A malicious XDomain peer can pick
    value = 0xffffff00, length = 0x100 so the sum 0x100000000 wraps to 0
    and passes the > block_len check.  tb_property_parse() then passes
    entry->value to parse_dwdata() as a dword offset into the property
    block, reading attacker-directed memory far past the allocation.
    
    For TEXT-typed entries with the "deviceid" or "vendorid" keys this
    lands in xd->device_name / xd->vendor_name and is readable back via
    the per-XDomain device_name / vendor_name sysfs attributes; the leak
    is NUL-bounded (kstrdup() stops at the first zero byte) and
    untargeted (the attacker picks a delta, not an absolute address).
    DATA-typed entries are parsed into property->value.data but not
    generically surfaced to userspace.
    
    Use check_add_overflow() so a wrapped sum is rejected.
    
    Fixes: cdae7c07e3e3 ("thunderbolt: Add support for XDomain properties")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-6
    Assisted-by: Codex:gpt-5-4
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

thunderbolt: Reject zero-length property entries in validator [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Mon May 25 05:28:25 2026 -0400

    thunderbolt: Reject zero-length property entries in validator
    
    commit cff8eb65d1eafe7793e54b4d0cf6bf831644630b upstream.
    
    tb_property_entry_valid() accepts entries with length == 0 for
    DIRECTORY, DATA, and TEXT types.  A zero-length TEXT entry passes
    validation but causes an underflow in the null-termination logic:
    
      property->value.text[property->length * 4 - 1] = '\0';
    
    When property->length is 0 this writes to offset -1 relative to
    the allocation.
    
    Reject zero-length entries early in the validator since they have no
    valid representation in the XDomain property protocol.
    
    Fixes: cdae7c07e3e3 ("thunderbolt: Add support for XDomain properties")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

thunderbolt: Validate XDomain request packet size before type cast [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Mon May 25 05:28:28 2026 -0400

    thunderbolt: Validate XDomain request packet size before type cast
    
    commit a504b9f2797b739e0304d537e8aa4ce883ecce39 upstream.
    
    tb_xdp_handle_request() casts the received packet buffer to
    protocol-specific structs without verifying that the allocation
    is large enough for the target type.  A peer can send a minimal
    XDomain packet that passes the generic header length check but is
    shorter than the struct accessed after the cast, causing out-of-
    bounds reads from the kmemdup allocation.
    
    Plumb the packet length through xdomain_request_work and validate
    it against the expected struct size before each cast.
    
    Fixes: 8e1de7042596 ("thunderbolt: Add support for XDomain lane bonding")
    Fixes: cdae7c07e3e3 ("thunderbolt: Add support for XDomain properties")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
time: Fix off-by-one in settimeofday() usec validation [+ + +]
Author: Naveen Kumar Chaudhary <naveen.osdev@gmail.com>
Date:   Tue Jun 2 23:37:37 2026 +0530

    time: Fix off-by-one in settimeofday() usec validation
    
    [ Upstream commit ce4abda5e12622f33450159e76c8f56d28d7f03d ]
    
    The validation check uses '>' instead of '>=' when comparing tv_usec
    against USEC_PER_SEC, allowing the value 1000000 through. After
    conversion to nanoseconds (*= 1000), this produces tv_nsec ==
    NSEC_PER_SEC, violating the timespec invariant that tv_nsec must be
    less than NSEC_PER_SEC.
    
    Use '>=' to reject tv_usec values that are not in the valid range of
    0 to 999999.
    
    Fixes: 5e0fb1b57bea ("y2038: time: avoid timespec usage in settimeofday()")
    Signed-off-by: Naveen Kumar Chaudhary <naveen.osdev@gmail.com>
    Signed-off-by: Thomas Gleixner <tglx@kernel.org>
    Acked-by: John Stultz <jstultz@google.com>
    Link: https://patch.msgid.link/4rikk44zew3s6577dugmx4jyblz7o5c57niuap6ct3td5yfm6w@gh7pcumg7qor
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tools/rv: Fix cleanup after failed trace setup [+ + +]
Author: Gabriele Monaco <gmonaco@redhat.com>
Date:   Thu May 14 17:20:45 2026 +0200

    tools/rv: Fix cleanup after failed trace setup
    
    [ Upstream commit 33ec2269a4155cad7e9e42c92327dcaa9aee59a7 ]
    
    Currently if ikm_setup_trace_instance() fails, the tool returns without
    any cleanup, if rv was called with both -t and -r, this means the
    reactor is not going to be cleared.
    
    Jump to the cleanup label to restore the reactor if necessary.
    
    Fixes: 6d60f89691fc9 ("tools/rv: Add in-kernel monitor interface")
    Reviewed-by: Nam Cao <namcao@linutronix.de>
    Link: https://lore.kernel.org/r/20260514152055.229162-5-gmonaco@redhat.com
    Signed-off-by: Gabriele Monaco <gmonaco@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tracing/probes: Point the error offset correctly for eprobe argument error [+ + +]
Author: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Date:   Mon May 25 11:21:14 2026 +0900

    tracing/probes: Point the error offset correctly for eprobe argument error
    
    commit 85e0f27dd1396307913ffc5745b0c05137e9beac upstream.
    
    Fix to point the error offset correctly for eprobe argument error.
    In the cleanup commit 1b8b0cd754cd ("tracing/probes: Move event parameter
    fetching code to common parser"), due to incorrect backward compatibility
    aimed at conforming to the test specifications, the error location was set
    to 0 when a non-existent formal parameter was specified for Eprobe.
    However, this should be corrected in both the test and the implementation
    to point correct error position.
    
    Link: https://lore.kernel.org/all/177967567399.209006.1451571244515632097.stgit@devnote2/
    
    Fixes: 1b8b0cd754cd ("tracing/probes: Move event parameter fetching code to common parser")
    Cc: stable@vger.kernel.org
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Reviewed-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tty: serial: pch_uart: add check for dma_alloc_coherent() [+ + +]
Author: Zhaoyang Yu <2426767509@qq.com>
Date:   Thu Apr 9 13:41:58 2026 +0800

    tty: serial: pch_uart: add check for dma_alloc_coherent()
    
    commit 6fe472c1bbbe238e91141f7cabc1226e96a60d43 upstream.
    
    Add a check for dma_alloc_coherent() failure to prevent a potential
    NULL pointer dereference in dma_handle_rx(). Properly release DMA
    channels and the PCI device reference using a goto ladder if the
    allocation fails.
    
    Fixes: 3c6a483275f4 ("Serial: EG20T: add PCH_UART driver")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Zhaoyang Yu <2426767509@qq.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://patch.msgid.link/tencent_E328416B7CFD436F6029F2DF02AD7ED89C08@qq.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tty: serial: samsung: Remove redundant port lock acquisition in rx helpers [+ + +]
Author: Tudor Ambarus <tudor.ambarus@linaro.org>
Date:   Fri Jun 5 09:53:24 2026 -0400

    tty: serial: samsung: Remove redundant port lock acquisition in rx helpers
    
    [ Upstream commit a3bb136bff5e6a5e48cdd813246c9c4686feaaa9 ]
    
    Sashiko identified a deadlock when the console flow is engaged [1].
    
    When console flow control is enabled (UPF_CONS_FLOW),
    s3c24xx_serial_stop_tx() calls s3c24xx_serial_rx_enable() and
    s3c24xx_serial_start_tx() calls s3c24xx_serial_rx_disable().
    
    The serial core framework invokes the .stop_tx() and .start_tx()
    callbacks with the port->lock spinlock already held. Furthermore, all
    internal driver paths that invoke stop_tx (such as the DMA TX
    completion handler s3c24xx_serial_tx_dma_complete() or the PIO TX IRQ
    handler s3c24xx_serial_tx_irq()) also acquire port->lock prior to
    calling it. (Note that s3c24xx_serial_start_tx() is only invoked by the
    serial core).
    
    However, s3c24xx_serial_rx_enable() and s3c24xx_serial_rx_disable()
    unconditionally attempt to acquire port->lock again using
    uart_port_lock_irqsave(). Since spinlocks are not recursive, this
    causes a deadlock on the same CPU when console flow control is engaged.
    
    Remove the redundant lock acquisition from both rx helper functions.
    
    Cc: stable <stable@kernel.org>
    Fixes: b497549a035c ("[ARM] S3C24XX: Split serial driver into core and per-cpu drivers")
    Reported-by: John Ogness <john.ogness@linutronix.de>
    Closes: https://sashiko.dev/#/patchset/20260506121606.5805-1-john.ogness%40linutronix.de [1]
    Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
    Link: https://patch.msgid.link/20260515-samsung-tty-flow-control-deadlock-v1-1-93255edbc9bc@linaro.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tty: serial: samsung: use u32 for register interactions [+ + +]
Author: Tudor Ambarus <tudor.ambarus@linaro.org>
Date:   Fri Jun 5 09:53:23 2026 -0400

    tty: serial: samsung: use u32 for register interactions
    
    [ Upstream commit 032a725c16add79332d774348d7ad7d0d4b86479 ]
    
    All registers of the IP have 32 bits. Use u32 variables when reading
    or writing from/to the registers. The purpose of those variables becomes
    clearer.
    
    Reviewed-by: Sam Protsenko <semen.protsenko@linaro.org>
    Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
    Link: https://lore.kernel.org/r/20240119104526.1221243-9-tudor.ambarus@linaro.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: a3bb136bff5e ("tty: serial: samsung: Remove redundant port lock acquisition in rx helpers")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tun: free page on build_skb failure in tun_xdp_one() [+ + +]
Author: Weiming Shi <bestswngs@gmail.com>
Date:   Thu May 21 09:33:13 2026 -0700

    tun: free page on build_skb failure in tun_xdp_one()
    
    [ Upstream commit aa8963fdce667a42fb7f0bdd2909fadcab02f9a8 ]
    
    When build_skb() fails in tun_xdp_one(), the function sets ret to
    -ENOMEM and jumps to the out label, which returns without freeing the
    page that vhost_net_build_xdp() allocated for the frame. As with the
    short-frame rejection path, tun_sendmsg() discards the per-buffer error
    and still returns total_len, so vhost_tx_batch() takes the success path
    and never frees the page. Each build_skb() failure in a batch leaks one
    page-frag chunk.
    
    Free the page before taking the error path, matching the put_page() the
    other error exits of tun_xdp_one() already perform.
    
    Fixes: 043d222f93ab ("tuntap: accept an array of XDP buffs through sendmsg()")
    Reported-by: Xiang Mei <xmei5@asu.edu>
    Signed-off-by: Weiming Shi <bestswngs@gmail.com>
    Reviewed-by: Dongli Zhang <dongli.zhang@oracle.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Link: https://patch.msgid.link/20260521163312.1479805-2-bestswngs@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tun: free page on short-frame rejection in tun_xdp_one() [+ + +]
Author: Weiming Shi <bestswngs@gmail.com>
Date:   Wed May 20 09:00:21 2026 -0700

    tun: free page on short-frame rejection in tun_xdp_one()
    
    [ Upstream commit f4feb1e20058e407cb00f45aff47f5b7e19a6bbf ]
    
    tun_xdp_one() returns -EINVAL on a frame shorter than ETH_HLEN without
    freeing the page that vhost_net_build_xdp() allocated for it.
    tun_sendmsg() discards that -EINVAL and still returns total_len, so
    vhost_tx_batch() takes the success path and never frees the page; each
    short frame in a batch leaks one page-frag chunk.
    
    A local process that can open /dev/net/tun and /dev/vhost-net can hit
    this path: it attaches a tun/tap device as the vhost-net backend and
    feeds TX descriptors whose length minus the virtio-net header is below
    ETH_HLEN. Each kick leaks the page-frag chunks for that batch, and a
    tight submission loop exhausts host memory and triggers an OOM panic.
    Free the page before returning -EINVAL, matching the XDP-program error
    path in the same function.
    
    Fixes: 049584807f1d ("tun: add missing verification for short frame")
    Reported-by: Xiang Mei <xmei5@asu.edu>
    Signed-off-by: Weiming Shi <bestswngs@gmail.com>
    Reviewed-by: Dongli Zhang <dongli.zhang@oracle.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Link: https://patch.msgid.link/20260520160020.375349-2-bestswngs@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tunnels: do not assume transport header in iptunnel_pmtud_check_icmp() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri May 22 11:55:12 2026 +0000

    tunnels: do not assume transport header in iptunnel_pmtud_check_icmp()
    
    [ Upstream commit 509323077ef79a26ba0c60bb556e45c12c398b2d ]
    
    In some cases, iptunnel_pmtud_check_icmp() can be called while
    skb transport header is not set.
    
    This triggers an out-of-bound access, because
    (typeof(skb->transport_header))~0U is 65535.
    
    Access the icmp header based on IPv4 network header,
    after making sure icmp->type is present in skb linear part.
    
    Note that iptunnel_pmtud_check_icmpv6()) is fine.
    
    Fixes: 4cb47a8644cc ("tunnels: PMTU discovery support for directly bridged IP packets")
    Reported-by: Damiano Melotti <melotti@google.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
    Link: https://patch.msgid.link/20260522115512.1519110-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tunnels: load network headers after skb_cow() in iptunnel_pmtud_build_icmp[v6]() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Mon May 25 20:13:35 2026 +0000

    tunnels: load network headers after skb_cow() in iptunnel_pmtud_build_icmp[v6]()
    
    [ Upstream commit b4bc94353050b1fa7b702bd4c6600710dd926cff ]
    
    Sashiko found that iptunnel_pmtud_build_icmp() and
    iptunnel_pmtud_build_icmpv6() were caching ip_hdr() and ipv6_hdr()
    before an skb_cow() call which can reallocate skb->head.
    
    Fix this possible UAF by initializing the local variables
    after the skb_cow() call.
    
    Remove skb_reset_network_header() calls which were not needed.
    
    Fixes: 4cb47a8644cc ("tunnels: PMTU discovery support for directly bridged IP packets")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Link: https://patch.msgid.link/20260525201335.2361845-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
udp: clear skb->dev before running a sockmap verdict [+ + +]
Author: Sechang Lim <rhkrqnwk98@gmail.com>
Date:   Wed Jun 3 16:27:33 2026 +0000

    udp: clear skb->dev before running a sockmap verdict
    
    commit 3c94f241f776562c489876ff506f366224565c21 upstream.
    
    On the UDP receive path skb->dev is repurposed as dev_scratch (the
    truesize/state cache set by udp_set_dev_scratch()), through the
    union { struct net_device *dev; unsigned long dev_scratch; } in sk_buff.
    
    When a UDP socket is in a sockmap, sk_data_ready is
    sk_psock_verdict_data_ready(), which calls udp_read_skb() -> recv_actor()
    (sk_psock_verdict_recv) to run the attached SK_SKB verdict program in softirq.
    If that program calls a socket-lookup helper (bpf_sk_lookup_tcp/udp,
    bpf_skc_lookup_tcp), bpf_skc_lookup() does:
    
            if (skb->dev)
                    caller_net = dev_net(skb->dev);
    
    skb->dev still holds the dev_scratch value (a non-NULL integer), so dev_net()
    dereferences it as a struct net_device * and the kernel takes a general
    protection fault on a non-canonical address in softirq:
    
      Oops: general protection fault, probably for non-canonical address 0x1010000800004a0
      CPU: 1 UID: 0 PID: 1406 Comm: syz.2.19 Not tainted 7.1.0-rc6 #1 PREEMPT(full)
      RIP: 0010:bpf_skc_lookup net/core/filter.c:7033 [inline]
      RIP: 0010:bpf_sk_lookup+0x45/0x160 net/core/filter.c:7047
      Call Trace:
       <IRQ>
       bpf_prog_4675cb904b7071f8+0x12e/0x14e
       bpf_prog_run_pin_on_cpu+0xc6/0x1f0
       sk_psock_verdict_recv+0x1ba/0x350
       udp_read_skb+0x31a/0x370
       sk_psock_verdict_data_ready+0x2e3/0x600
       __udp_enqueue_schedule_skb+0x4c8/0x650
       udpv6_queue_rcv_one_skb+0x3ec/0x740
       udp6_unicast_rcv_skb+0x11d/0x140
       ip6_protocol_deliver_rcu+0x61e/0x950
       ip6_input_finish+0xa9/0x150
       NF_HOOK+0x286/0x2f0
       ip6_input+0x117/0x220
       NF_HOOK+0x286/0x2f0
       __netif_receive_skb+0x85/0x200
       process_backlog+0x374/0x9a0
       __napi_poll+0x4f/0x1c0
       net_rx_action+0x3b0/0x770
       handle_softirqs+0x15a/0x460
       do_softirq+0x57/0x80
       </IRQ>
    
    The rmem charge that dev_scratch accounted for is released by skb_recv_udp() on
    dequeue, just above, so the scratch is dead by the time recv_actor() runs. Clear
    skb->dev so bpf_skc_lookup() falls back to sock_net(skb->sk), which
    skb_set_owner_sk_safe() set just above.
    
    Fixes: 965b57b469a5 ("net: Introduce a new proto_ops ->read_skb()")
    Cc: stable@vger.kernel.org
    Signed-off-by: Sechang Lim <rhkrqnwk98@gmail.com>
    Reviewed-by: Jiayuan Chen <jiayuan.chen@linux.dev>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20260603162737.697215-1-rhkrqnwk98@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: cdc-acm: Fix bit overlap and move quirk definitions to header [+ + +]
Author: Wentao Guan <guanwentao@uniontech.com>
Date:   Fri May 22 17:13:58 2026 +0800

    USB: cdc-acm: Fix bit overlap and move quirk definitions to header
    
    commit 5eb070769ea5e18405535609d1d3f6886f3755bd upstream.
    
    The VENDOR_CLASS_DATA_IFACE and ALWAYS_POLL_CTRL quirk flags added in
    commit f58752ebcb35 ("USB: cdc-acm: Add quirks for Yoga Book 9 14IAH10
    INGENIC touchscreen") were placed inside the acm_ctrl_msg() function
    rather than in the header with the other quirk flags.  Then, their
    values (BIT(9) and BIT(10)) collided with NO_UNION_12 which is already
    BIT(9).
    
    Move the definitions to drivers/usb/class/cdc-acm.h where they belong
    and shift them to BIT(10) and BIT(11) to avoid the overlap.
    
    Fixes: f58752ebcb35 ("USB: cdc-acm: Add quirks for Yoga Book 9 14IAH10 INGENIC touchscreen")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
    Link: https://patch.msgid.link/20260522091357.1301196-1-guanwentao@uniontech.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: cdns3: gadget: fix request skipping after clearing halt [+ + +]
Author: Yongchao Wu <yongchao.wu@autochips.com>
Date:   Thu May 14 00:00:12 2026 +0800

    usb: cdns3: gadget: fix request skipping after clearing halt
    
    commit c8778ff817a7047d6848fefba99dcb27b1bf01fe upstream.
    
    According to the cdns3 datasheet, the EPRST (Endpoint Reset) command
    causes the DMA engine to reposition its internal pointer to the next
    Transfer Descriptor (TD) if it was already processing one.
    
    This issue is consistently observed during the ADB identification
    process on macOS hosts, where the host issues a Clear_Halt. Although
    commit 4bf2dd65135a ("usb: cdns3: gadget: toggle cycle bit before reset
    endpoint") attempted to avoid DMA advance by toggling the cycle bit,
    trace logs show that on certain hosts like macOS, the DMA pointer
    (EP_TRADDR) still shifts after EPRST:
    
      cdns3_ctrl_req: Clear Endpoint Feature(Halt ep1out)
      cdns3_doorbell_epx: ep1out, ep_trbaddr f9c04030  <-- Should be f9c04000
      cdns3_gadget_giveback: ep1out: req: ... length: 16384/16384
    
    As shown above, the DMA pointer jumped to the next TD, causing
    the controller to skip the initial TRBs of the request. This leads to
    data misalignment and ADB protocol hangs on macOS.
    
    Fix this by manually restoring the EP_TRADDR register to the starting
    physical address of the current request after the EPRST operation is
    complete.
    
    Fixes: 7733f6c32e36 ("usb: cdns3: Add Cadence USB3 DRD Driver")
    Cc: stable <stable@kernel.org>
    Cc: Peter Chen <peter.chen@kernel.org>
    Signed-off-by: Yongchao Wu <yongchao.wu@autochips.com>
    Acked-by: Peter Chen <peter.chen@kernel.org>
    Link: https://patch.msgid.link/20260513160012.2547894-1-yongchao.wu@autochips.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: cdns3: plat: fix leaked usb2_phy initialization on usb3_phy acquisition failure [+ + +]
Author: Peter Chen <peter.chen@cixtech.com>
Date:   Thu Jun 4 19:49:13 2026 -0400

    usb: cdns3: plat: fix leaked usb2_phy initialization on usb3_phy acquisition failure
    
    [ Upstream commit e6970cda63fd4b4546aeed9d0e2f53a7c95cd09c ]
    
    Move usb2_phy initialization after usb3_phy acquisition.
    
    Fixes: f738957277ba ("usb: cdns3: Split core.c into cdns3-plat and core.c file")
    Cc: stable <stable@kernel.org>
    Reported-by: sashiko-bot <sashiko-bot@kernel.org>
    Closes: https://lore.kernel.org/linux-devicetree/agKaEePSFknhDBg2@nchen-desktop/T/#m21e1d9c1574eb127ce03c0c2a1a49002ce435b52
    Signed-off-by: Peter Chen <peter.chen@cixtech.com>
    Link: https://patch.msgid.link/20260513085310.2217547-2-peter.chen@cixtech.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: cdns3: plat: fix unbalanced pm_runtime_forbid() call permanently leaks the runtime PM usage counter across bind/unbind cycles [+ + +]
Author: Peter Chen <peter.chen@cixtech.com>
Date:   Wed May 13 16:53:10 2026 +0800

    usb: cdns3: plat: fix unbalanced pm_runtime_forbid() call permanently leaks the runtime PM usage counter across bind/unbind cycles
    
    commit ae6f3b82324e4f39ad8443c9020787e6fc889637 upstream.
    
    Call pm_runtime_allow(dev) conditionally at cdns3_plat_remove.
    
    Fixes: f738957277ba ("usb: cdns3: Split core.c into cdns3-plat and core.c file")
    Cc: stable <stable@kernel.org>
    Reported-by: sashiko-bot <sashiko-bot@kernel.org>
    Closes: https://lore.kernel.org/linux-devicetree/agKaEePSFknhDBg2@nchen-desktop/T/#m21e1d9c1574eb127ce03c0c2a1a49002ce435b52
    Signed-off-by: Peter Chen <peter.chen@cixtech.com>
    Link: https://patch.msgid.link/20260513085310.2217547-3-peter.chen@cixtech.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: chipidea: core: convert ci_role_switch to local variable [+ + +]
Author: Xu Yang <xu.yang_2@nxp.com>
Date:   Mon Apr 27 15:57:55 2026 +0800

    usb: chipidea: core: convert ci_role_switch to local variable
    
    commit 8f6aa392653e52a45858cff5c063df550028836b upstream.
    
    When a system contains multiple USB controllers, the global ci_role_switch
    variable may be overwritten by subsequent driver initialization code.
    
    This can cause issues in the following cases:
     - The 2nd ci_hdrc_probe() sees ci_role_switch.fwnode as non-NULL even
       though the "usb-role-switch" property is not present for the controller.
     - When the ci_hdrc device is unbound and bound again, ci_role_switch
       fwnode will not be reassigned, and the old value will be used instead.
    
    Convert ci_role_switch to a local variable to fix these issues.
    
    Fixes: 05559f10ed79 ("usb: chipidea: add role switch class support")
    Cc: stable <stable@kernel.org>
    Acked-by: Peter Chen <peter.chen@kernel.org>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Signed-off-by: Xu Yang <xu.yang_2@nxp.com>
    Link: https://patch.msgid.link/20260427075755.3611217-1-xu.yang_2@nxp.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: core: Fix SuperSpeed root hub wMaxPacketSize [+ + +]
Author: Michal Pecio <michal.pecio@gmail.com>
Date:   Mon May 18 07:31:21 2026 +0200

    usb: core: Fix SuperSpeed root hub wMaxPacketSize
    
    commit d1e280334b7f0a1df441e08bd1f6a1bcc36b3bbb upstream.
    
    There is no good reason to have wBytesPerInterval < wMaxPacketSize -
    either one is too low or the other too high, and we may want to warn
    about such descriptors. Start with cleaning up our own root hubs.
    
    USB 3.2 section 10.15.1 sets wMaxPacketSize and wBytesPerInterval of
    SuperSpeed hub status endpoints at 2 bytes, so reduce wMaxPacketSize
    from its former value of 4, which was derived from USB 2.0 spec and
    the kernel's USB_MAXCHILDREN limit. They don't apply because USB 3.2
    10.15.2.1 specifies SuperSpeed hubs to have up to 15 ports.
    
    Suggested-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Signed-off-by: Michal Pecio <michal.pecio@gmail.com>
    Link: https://patch.msgid.link/20260518073121.7bc1da0f.michal.pecio@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: core: Fix up Interrupt IN endpoints with bogus wBytesPerInterval [+ + +]
Author: Michal Pecio <michal.pecio@gmail.com>
Date:   Mon May 18 07:32:07 2026 +0200

    usb: core: Fix up Interrupt IN endpoints with bogus wBytesPerInterval
    
    commit 727d045d064b7c9a24db3bce9c0485a382cb768b upstream.
    
    Tao Xue found that some common devices violate USB 3.x section 9.6.7
    by reporting wBytesPerInterval lower than the size of packets they
    actually send. I confirmed that AX88179 may set it to 0 and RTL8153
    CDC configuration sets it to 8 but sends both 8 and 16 byte packets:
    
    S Ii:11:007:3 -115:128 16 <
    C Ii:11:007:3 0:128 8 = a1000000 01000000
    S Ii:11:007:3 -115:128 16 <
    C Ii:11:007:3 0:128 16 = a12a0000 01000800 00000000 00000000
    
    Most xHCI host controllers neglect interrupt bandwidth reservations
    and let such devices exceed theirs, some fail the URB with EOVERFLOW.
    
    Assume that wBytesPerInterval lower than wMaxPacketSize is bogus and
    increase it to the worst case maximum on interrupt IN endpoints. This
    solves xHCI problems and appears to have no other effect. Interrupt
    transfers are not limited to one interval and drivers submit URBs of
    class defined size without looking at wBytesPerInterval. Any multi-
    interval transfer is considered terminated by a packet shorter than
    wMaxPacketSize regardless of wBytesPerInterval - see USB3 8.10.3.
    
    Stay in spec on OUT endpoints and isochronous. No buggy devices are
    known and we don't want to risk sending more data than the device
    is prepared to handle or confusing isoc drivers regarding altsetting
    capacities guaranteed by the device itself. And don't complain when
    wMaxPacketSize <= wBytesPerInterval < wMaxPacketSize * (bMaxBurst+1)
    because enabling this seems to be the exact goal of the spec.
    
    Reported-and-tested-by: Tao Xue <xuetao09@huawei.com>
    Closes: https://lore.kernel.org/linux-usb/20260402021400.28853-1-xuetao09@huawei.com/
    Cc: stable@vger.kernel.org
    Signed-off-by: Michal Pecio <michal.pecio@gmail.com>
    Link: https://patch.msgid.link/20260518073207.5b7d26e7.michal.pecio@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: dwc2: Fix use after free in debug code [+ + +]
Author: Dan Carpenter <error27@gmail.com>
Date:   Wed May 20 08:59:28 2026 +0300

    usb: dwc2: Fix use after free in debug code
    
    commit 9ea06a3fbf9f16e0d98c52cb3b99642be15ec281 upstream.
    
    We're not allowed to dereference "urb" after calling
    usb_hcd_giveback_urb() so save the urb->status ahead of time.
    
    Fixes: 7359d482eb4d ("staging: HCD files for the DWC2 driver")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Dan Carpenter <error27@gmail.com>
    Link: https://patch.msgid.link/ag1NwBpqT4IEQcdJ@stanley.mountain
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: dwc3: xilinx: fix error handling in zynqmp init error paths [+ + +]
Author: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
Date:   Fri Jun 5 11:31:11 2026 -0400

    usb: dwc3: xilinx: fix error handling in zynqmp init error paths
    
    [ Upstream commit c1a0ecbf32c4b397353204e2ec94c5bb9f3300ed ]
    
    Fix error handling and resource cleanup i.e remove invalid
    phy_exit() after failed phy_init(), route failures through
    proper cleanup paths and return 0 explicitly on success.
    
    Fixes: 84770f028fab ("usb: dwc3: Add driver for Xilinx platforms")
    Cc: stable@vger.kernel.org
    Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Signed-off-by: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
    Link: https://patch.msgid.link/20260519115529.2980421-1-radhey.shyam.pandey@amd.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: composite: fix integer underflow in WebUSB GET_URL handling [+ + +]
Author: Jeremy Erazo <mendozayt13@gmail.com>
Date:   Tue May 12 16:05:30 2026 +0000

    usb: gadget: composite: fix integer underflow in WebUSB GET_URL handling
    
    commit 6c5dbc104dadd79fc2923497c20bae759a18758c upstream.
    
    The WebUSB GET_URL handler in composite_setup() narrows
    landing_page_length to fit the host-supplied wLength using
    
            landing_page_length = w_length
                    - WEBUSB_URL_DESCRIPTOR_HEADER_LENGTH + landing_page_offset;
    
    If wLength is smaller than WEBUSB_URL_DESCRIPTOR_HEADER_LENGTH the
    unsigned subtraction wraps, and the subsequent
    
            memcpy(url_descriptor->URL,
                   cdev->landing_page + landing_page_offset,
                   landing_page_length - landing_page_offset);
    
    ends up copying close to UINT_MAX bytes from cdev->landing_page into
    cdev->req->buf.  KASAN reports a slab-out-of-bounds in composite_setup
    on the kmalloc-2k gadget_info allocation, and FORTIFY_SOURCE traps the
    memcpy as a 4294967293-byte field-spanning write into
    url_descriptor->URL (size 252).
    
    A USB host can reach this from a single SETUP packet against any
    gadget that has webusb/use=1 and a landingPage configured.
    
    Handle the small-wLength case before the math: when the host requested
    fewer bytes than the URL descriptor header, only the header is
    meaningful and no URL bytes need to be copied.  Setting
    landing_page_length to landing_page_offset makes the existing memcpy a
    no-op and leaves the descriptor returned to the host unchanged for all
    larger wLength values.
    
    Fixes: 93c473948c58 ("usb: gadget: add WebUSB landing page support")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Jeremy Erazo <mendozayt13@gmail.com>
    Link: https://patch.msgid.link/20260512160530.352318-1-mendozayt13@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: dummy_hcd: Reject hub port requests for non-existent ports [+ + +]
Author: Seungjin Bae <eeodqql09@gmail.com>
Date:   Mon May 18 19:43:14 2026 -0400

    usb: gadget: dummy_hcd: Reject hub port requests for non-existent ports
    
    commit 7d9633528dd40e33964d2dc74a5abbf5c4d116ce upstream.
    
    The `dummy_hub_control()` function handles USB hub class requests
    to the virtual root hub. The `GetPortStatus` case returns -EPIPE for
    requests with `wIndex != 1`, since the virtual root hub has only a
    single port. However, the `ClearPortFeature` and `SetPortFeature`
    cases lack the same check.
    
    Fix this by extending the `wIndex != 1` rejection to both cases,
    matching the existing behavior of `GetPortStatus`.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable <stable@kernel.org>
    Suggested-by: Alan Stern <stern@rowland.harvard.edu>
    Signed-off-by: Seungjin Bae <eeodqql09@gmail.com>
    Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://patch.msgid.link/20260518234314.1889396-1-eeodqql09@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: f_fs: copy only received bytes on short ep0 read [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Sun Apr 19 12:03:59 2026 -0400

    usb: gadget: f_fs: copy only received bytes on short ep0 read
    
    commit 4e036c10e7f4df5d951c69cc3697bc8e209c6d02 upstream.
    
    ffs_ep0_read() allocates its control-OUT data buffer with
    kmalloc() (not kzalloc) at the Length value from the Setup
    packet, then copies that full len to userspace regardless of
    how many bytes were actually received:
    
        data = kmalloc(len, GFP_KERNEL);
        ...
        ret = __ffs_ep0_queue_wait(ffs, data, len);
        if ((ret > 0) && (copy_to_user(buf, data, len)))
                ret = -EFAULT;
    
    __ffs_ep0_queue_wait() returns req->actual, which on a short
    control OUT transfer is strictly less than len.  The
    copy_to_user() call still copies len bytes, so on a short OUT
    the last (len - ret) bytes of the kmalloc() buffer --
    uninitialised slab residue -- are delivered to the FunctionFS
    daemon.
    
    Short ep0 OUT completions are specified USB control-transfer
    behavior and are produced by in-tree UDCs:
    
      * dwc2 continues on req->actual < req->length for ep0 DATA OUT
        (short-not-ok is the only ep0-OUT stall path).
      * aspeed_udc ends ep0 OUT on rx_len < ep->ep.maxpacket.
      * renesas_usbf logs "ep0 short packet" and completes the
        request.
      * dwc3 stalls on short IN but not on short OUT.
    
    A short ep0 OUT is therefore not evidence of a broken UDC; it is
    a normal condition f_fs has to cope with.  The sibling gadgetfs
    implementation in drivers/usb/gadget/legacy/inode.c already does
    this correctly via min(len, dev->req->actual) before
    copy_to_user().  This patch brings f_fs.c to the same safe
    pattern rather than trimming at a defensive layer.
    
    The bug is reached from the FunctionFS device node, which in
    real deployments is owned by the privileged gadget daemon
    (adbd, UMS, composite gadget services, etc.); it is not
    reachable from unprivileged userspace.  Linux host stacks
    normally reject short-wLength control OUTs before they reach
    the gadget, so reproducing this required a build that
    bypasses that host-side check.  With the bypass in place, a
    1-byte payload on a 64-byte Setup produces 63 bytes of
    non-canary slab residue in the daemon's read buffer.
    
    Fix by copying only ret (actually received) bytes to
    userspace.
    
    Fixes: ddf8abd25994 ("USB: f_fs: the FunctionFS driver")
    Cc: stable <stable@kernel.org>
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Link: https://patch.msgid.link/20260419160359.1577270-1-michael.bommarito@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: f_hid: fix device reference leak in hidg_alloc() [+ + +]
Author: Guangshuo Li <lgs201920130244@gmail.com>
Date:   Mon Apr 13 22:21:19 2026 +0800

    usb: gadget: f_hid: fix device reference leak in hidg_alloc()
    
    commit 4f88d65def6f3c90121601b4f62a4c967f3063a6 upstream.
    
    hidg_alloc() initializes hidg->dev with device_initialize() before
    calling dev_set_name(). If dev_set_name() fails, the function currently
    jumps to err_unlock and returns without calling put_device().
    
    This leaves the device reference unbalanced and prevents hidg_release()
    from being called. Calling put_device() here is also safe, since
    hidg_release() only frees resources owned by hidg.
    
    The issue was identified by a static analysis tool I developed and
    confirmed by manual review.
    
    Route the dev_set_name() failure path through err_put_device so the
    device reference is dropped properly.
    
    Fixes: 89ff3dfac604 ("usb: gadget: f_hid: fix f_hidg lifetime vs cdev")
    Cc: stable <stable@kernel.org>
    Reviewed-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
    Reviewed-by: Johan Hovold johan@kernel.org
    Link: https://patch.msgid.link/20260413142119.2977716-1-lgs201920130244@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: f_ncm: Fix net_device lifecycle with device_move [+ + +]
Author: Kuen-Han Tsai <khtsai@google.com>
Date:   Wed Jun 10 18:09:23 2026 +0000

    usb: gadget: f_ncm: Fix net_device lifecycle with device_move
    
    [ Upstream commit ec35c1969650e7cb6c8a91020e568ed46e3551b0 ]
    
    The network device outlived its parent gadget device during
    disconnection, resulting in dangling sysfs links and null pointer
    dereference problems.
    
    A prior attempt to solve this by removing SET_NETDEV_DEV entirely [1]
    was reverted due to power management ordering concerns and a NO-CARRIER
    regression.
    
    A subsequent attempt to defer net_device allocation to bind [2] broke
    1:1 mapping between function instance and network device, making it
    impossible for configfs to report the resolved interface name. This
    results in a regression where the DHCP server fails on pmOS.
    
    Use device_move to reparent the net_device between the gadget device and
    /sys/devices/virtual/ across bind/unbind cycles. This preserves the
    network interface across USB reconnection, allowing the DHCP server to
    retain their binding.
    
    Introduce gether_attach_gadget()/gether_detach_gadget() helpers and use
    __free(detach_gadget) macro to undo attachment on bind failure. The
    bind_count ensures device_move executes only on the first bind.
    
    [1] https://lore.kernel.org/lkml/f2a4f9847617a0929d62025748384092e5f35cce.camel@crapouillou.net/
    [2] https://lore.kernel.org/linux-usb/795ea759-7eaf-4f78-81f4-01ffbf2d7961@ixit.cz/
    
    Fixes: 40d133d7f542 ("usb: gadget: f_ncm: convert to new function interface with backward compatibility")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Kuen-Han Tsai <khtsai@google.com>
    Link: https://patch.msgid.link/20260309-f-ncm-revert-v2-7-ea2afbc7d9b2@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [ Use no_free_ptr() since retain_and_null_ptr() is unavailable in Linux 6.6. ]
    Signed-off-by: Jianqiang kang <jianqkang@sina.cn>
    Signed-off-by: Carlos Llamas <cmllamas@google.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: gadget: net2280: Fix double free in probe error path [+ + +]
Author: Guangshuo Li <lgs201920130244@gmail.com>
Date:   Mon Apr 27 23:36:51 2026 +0800

    usb: gadget: net2280: Fix double free in probe error path
    
    commit c8547c74988e0b5f4cbb1b895e2a57aae084f070 upstream.
    
    usb_initialize_gadget() installs gadget_release() as the release
    callback for the embedded gadget device.  The struct net2280 instance is
    therefore released through gadget_release() when the gadget device's last
    reference is dropped.
    
    The probe error path calls net2280_remove(), which tears down the
    partially initialized device and drops the gadget reference with
    usb_put_gadget().  Calling kfree(dev) afterwards can free the same object
    again.
    
    Drop the explicit kfree() and let the gadget device release callback
    handle the final free.  This issue was found by a static analysis tool
    I am developing.
    
    Fixes: f770fbec4165 ("USB: UDC: net2280: Fix memory leaks")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
    Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://patch.msgid.link/20260427153651.337846-1-lgs201920130244@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: u_ether: Fix NULL pointer deref in eth_get_drvinfo [+ + +]
Author: Kuen-Han Tsai <khtsai@google.com>
Date:   Wed Jun 10 18:09:24 2026 +0000

    usb: gadget: u_ether: Fix NULL pointer deref in eth_get_drvinfo
    
    [ Upstream commit e002e92e88e12457373ed096b18716d97e7bbb20 ]
    
    Commit ec35c1969650 ("usb: gadget: f_ncm: Fix net_device lifecycle with
    device_move") reparents the gadget device to /sys/devices/virtual during
    unbind, clearing the gadget pointer. If the userspace tool queries on
    the surviving interface during this detached window, this leads to a
    NULL pointer dereference.
    
    Unable to handle kernel NULL pointer dereference
    Call trace:
     eth_get_drvinfo+0x50/0x90
     ethtool_get_drvinfo+0x5c/0x1f0
     __dev_ethtool+0xaec/0x1fe0
     dev_ethtool+0x134/0x2e0
     dev_ioctl+0x338/0x560
    
    Add a NULL check for dev->gadget in eth_get_drvinfo(). When detached,
    skip copying the fw_version and bus_info strings, which is natively
    handled by ethtool_get_drvinfo for empty strings.
    
    Suggested-by: Val Packett <val@packett.cool>
    Reported-by: Val Packett <val@packett.cool>
    Closes: https://lore.kernel.org/linux-usb/10890524-cf83-4a71-b879-93e2b2cc1fcc@packett.cool/
    Fixes: ec35c1969650 ("usb: gadget: f_ncm: Fix net_device lifecycle with device_move")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Kuen-Han Tsai <khtsai@google.com>
    Link: https://patch.msgid.link/20260316-eth-null-deref-v1-1-07005f33be85@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Carlos Llamas <cmllamas@google.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: gadget: uvc: hold opts->lock across XU walks in uvc_function_bind [+ + +]
Author: Kai Aizen <kai.aizen.dev@gmail.com>
Date:   Fri Jun 5 14:31:27 2026 -0400

    usb: gadget: uvc: hold opts->lock across XU walks in uvc_function_bind
    
    [ Upstream commit 68aa70648b625fa684bc0b71bbfd905f4943ca20 ]
    
    uvc_function_bind() walks &opts->extension_units twice without holding
    opts->lock:
    
      - directly, for the iExtension string-descriptor fixup loop;
      - indirectly, four times via uvc_copy_descriptors() (once per speed),
        where the helper iterates uvc->desc.extension_units (which aliases
        &opts->extension_units) to size and emit XU descriptors.
    
    The configfs side (uvcg_extension_make / uvcg_extension_drop, in
    drivers/usb/gadget/function/uvc_configfs.c) takes opts->lock around its
    list_add_tail / list_del operations.  A privileged userspace process
    that holds the configfs subtree open and writes the gadget UDC name
    to bind the function while concurrently rmdir()'ing an extensions
    subdir can race uvcg_extension_drop() against the bind-time list walks
    and dereference a freed struct uvcg_extension.
    
    Hold opts->lock from the start of the XU string-descriptor fixup
    through the last uvc_copy_descriptors() call, releasing on the
    descriptor-error path via a new error_unlock label that drops the
    lock before falling through to the existing error label.  This
    matches the locking discipline of the configfs callbacks and removes
    the only remaining unsynchronised reader of the XU list during bind.
    
    Reachability: only privileged processes that can mount configfs and
    write to gadget UDC files can trigger the race, so this is a
    correctness fix rather than a security boundary.
    
    Fixes: 0525210c9840 ("usb: gadget: uvc: Allow definition of XUs in configfs")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Kai Aizen <kai.aizen.dev@gmail.com>
    Link: https://patch.msgid.link/20260430175643.67120-1-kai.aizen.dev@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: musb: omap2430: Fix use-after-free in omap2430_probe() [+ + +]
Author: Wentao Liang <vulab@iscas.ac.cn>
Date:   Fri Jun 5 11:31:07 2026 -0400

    usb: musb: omap2430: Fix use-after-free in omap2430_probe()
    
    [ Upstream commit e194ce048f5a6c549b3a23a8c568c6470f40f772 ]
    
    In omap2430_probe(), of_node_put(np) is called prematurely before the
    last access to np, leading to a use-after-free if the node's reference
    count drops to zero. Move the of_node_put() calls after the last use of
    np in both the success and error paths.
    
    Fixes: ffbe2feac59b ("usb: musb: omap2430: Fix probe regression for missing resources")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
    Link: https://patch.msgid.link/20260409101104.480623-1-vulab@iscas.ac.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: quirks: add NO_LPM for Lenovo ThinkPad USB-C Dock Gen2 hub controllers [+ + +]
Author: Stephen J. Fuhry <fuhrysteve@gmail.com>
Date:   Wed May 13 13:14:19 2026 -0400

    USB: quirks: add NO_LPM for Lenovo ThinkPad USB-C Dock Gen2 hub controllers
    
    commit 9ddb9c0deca48d2c2a22ebf4d2f35c925a520328 upstream.
    
    The Lenovo ThinkPad USB-C Dock Gen2 (17ef:a391, 17ef:a392) hub
    controllers exhibit link instability when USB Link Power Management
    is enabled, similar to the dock's Ethernet adapter (17ef:a387) which
    already carries USB_QUIRK_NO_LPM.
    
    When the dock reconnects after a transient disconnect, the hub
    controllers enter LPM states between re-enumeration retries, causing
    repeated disconnect/reconnect cycles lasting up to two minutes.
    Disabling LPM for these devices restores stable enumeration.
    
    Signed-off-by: Stephen J. Fuhry <fuhrysteve@gmail.com>
    Cc: stable <stable@kernel.org>
    Link: https://patch.msgid.link/20260513171419.44849-1-fuhrysteve@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: belkin_sa: validate interrupt status length [+ + +]
Author: Zhang Cen <rollkingzzc@gmail.com>
Date:   Tue May 19 19:11:50 2026 +0800

    USB: serial: belkin_sa: validate interrupt status length
    
    commit 4ce058df2ee02cc2a0f0fd5cd64ce6f1482a0b65 upstream.
    
    The Belkin interrupt callback treats interrupt data as a four-byte
    status report and reads LSR/MSR fields at offsets 2 and 3. The
    interrupt-in buffer length is derived from endpoint wMaxPacketSize, and
    short interrupt transfers may complete successfully with a smaller
    actual_length.
    
    Check the completed interrupt packet length before parsing status
    fields so short interrupt endpoints and short successful packets are
    ignored instead of causing out-of-bounds or stale status-byte reads.
    
    KASAN report as below:
    
    BUG: KASAN: slab-out-of-bounds in belkin_sa_read_int_callback()
    Read of size 1
    Call trace:
      belkin_sa_read_int_callback() (drivers/usb/serial/belkin_sa.c:202)
      __usb_hcd_giveback_urb() (drivers/usb/core/hcd.c:1630)
      dummy_timer() (?:?)
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Assisted-by: Codex:gpt-5.5
    Signed-off-by: Zhang Cen <rollkingzzc@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: cypress_m8: fix memory corruption with small endpoint [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Thu Jun 4 10:36:36 2026 +0200

    USB: serial: cypress_m8: fix memory corruption with small endpoint
    
    commit e1a9d791fd66ab2431b9e6f6f835823809869047 upstream.
    
    Make sure that the interrupt-out endpoint max packet size is at least
    eight bytes to avoid user-controlled slab corruption or NULL-pointer
    dereference should a malicious device report a smaller size.
    
    Fixes: 3416eaa1f8f8 ("USB: cypress_m8: Packet format is separate from characteristic size")
    Cc: stable@vger.kernel.org      # 2.6.26
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    [ johan: adjust context for 6.18 ]
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

USB: serial: cypress_m8: validate interrupt packet headers [+ + +]
Author: Zhang Cen <rollkingzzc@gmail.com>
Date:   Fri May 22 22:54:42 2026 +0800

    USB: serial: cypress_m8: validate interrupt packet headers
    
    commit 9f9bfc80c67f35a275820da7e83a35dface08281 upstream.
    
    cypress_read_int_callback() parses the interrupt-in buffer according to
    the selected Cypress packet format. Format 1 has a two-byte status/count
    header and format 2 has a one-byte combined status/count header. The
    usb-serial core sizes the interrupt-in buffer from the endpoint
    descriptor's wMaxPacketSize, and successful interrupt transfers can
    complete short when URB_SHORT_NOT_OK is not set.
    
    Check that the completed packet contains the selected header before
    reading it. Malformed short reports are ignored and the interrupt URB is
    resubmitted through the existing retry path, preventing out-of-bounds
    header-byte reads.
    
    KASAN report as below:
    KASAN slab-out-of-bounds in cypress_read_int_callback+0x240/0x7f0
    Read of size 1
    Call trace:
      cypress_read_int_callback() (drivers/usb/serial/cypress_m8.c:1009)
      __usb_hcd_giveback_urb()
      dummy_timer()
    
    Fixes: 3416eaa1f8f8 ("USB: cypress_m8: Packet format is separate from characteristic size")
    Assisted-by: Codex:gpt-5.5
    Signed-off-by: Zhang Cen <rollkingzzc@gmail.com>
    Fixes: 3416eaa1f8f8 ("USB: cypress_m8: Packet format is separate from characteristic size")
    Cc: stable@vger.kernel.org      # 2.6.26
    [ johan: use constants in header length sanity checks ]
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: digi_acceleport: fix memory corruption with small endpoints [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Thu Jun 4 14:07:58 2026 +0200

    USB: serial: digi_acceleport: fix memory corruption with small endpoints
    
    commit cb3560e8eab1dfa1cac1ed52631adf8ec6ff2cd5 upstream.
    
    Add the missing bulk-out buffer size sanity checks to avoid
    out-of-bounds memory accesses or slab corruption should a malicious
    device report smaller buffers than expected.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

USB: serial: io_ti: fix heap overflow in build_i2c_fw_hdr() [+ + +]
Author: Adrian Korwel <adriank20047@gmail.com>
Date:   Mon May 25 09:58:32 2026 -0500

    USB: serial: io_ti: fix heap overflow in build_i2c_fw_hdr()
    
    commit 0fd2b00b2d3d05e3eaa13342b3dfb0fa85c226ae upstream.
    
    build_i2c_fw_hdr() allocates a fixed-size buffer of
    (16*1024 - 512) + sizeof(struct ti_i2c_firmware_rec) bytes, then
    copies le16_to_cpu(img_header->Length) bytes into it without
    validating that Length fits within the available space after the
    firmware record header.
    
    img_header->Length is a __le16 from the firmware file and can be
    up to 65535. check_fw_sanity() validates the total firmware size
    but not img_header->Length specifically.
    
    Fix by rejecting images where img_header->Length exceeds the
    available destination space.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Signed-off-by: Adrian Korwel <adriank20047@gmail.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: io_ti: fix heap overflow in get_manuf_info() [+ + +]
Author: Adrian Korwel <adriank20047@gmail.com>
Date:   Mon May 25 09:58:31 2026 -0500

    USB: serial: io_ti: fix heap overflow in get_manuf_info()
    
    commit 183c1076eca43bbb3e7bdf597456f91d81c73e74 upstream.
    
    get_manuf_info() reads le16_to_cpu(rom_desc->Size) bytes from the
    device I2C EEPROM into a buffer allocated with kmalloc_obj(), which
    is sizeof(struct edge_ti_manuf_descriptor) = 10 bytes.
    
    The Size field comes from the device and is only validated (in
    check_i2c_image()) to make sure the descriptor fits within
    TI_MAX_I2C_SIZE (16384 bytes), not against the destination buffer size.
    A malicious USB device can therefore set Size to any value up to 16377,
    causing a heap overflow of up to 16367 bytes when plugged into a host
    running this driver.
    
    valid_csum() is called after read_rom() and also iterates
    buffer[0..Size-1], compounding the out-of-bounds access.
    
    Fix by rejecting descriptors with unexpected length before calling
    read_rom().
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Signed-off-by: Adrian Korwel <adriank20047@gmail.com>
    [ johan: amend commit message; also check for short descriptors ]
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: keyspan: fix missing indat transfer sanity check [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Wed May 20 16:26:48 2026 +0200

    USB: serial: keyspan: fix missing indat transfer sanity check
    
    commit ab8336a7e414f018430aa1af3a46944032f7ff96 upstream.
    
    Add the missing sanity check on the size of usa49wg indat transfers to
    avoid parsing stale or uninitialised slab data.
    
    Fixes: 0ca1268e109a ("USB Serial Keyspan: add support for USA-49WG & USA-28XG")
    Cc: stable@vger.kernel.org      # 2.6.23
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: kl5kusb105: fix bulk-out buffer overflow [+ + +]
Author: HyeongJun An <sammiee5311@gmail.com>
Date:   Mon Jun 8 18:09:26 2026 +0900

    USB: serial: kl5kusb105: fix bulk-out buffer overflow
    
    commit 96d47e40bf9db4a9efd5c8fb53287a508d165f14 upstream.
    
    klsi_105_prepare_write_buffer() is called by the generic write path
    with the bulk-out buffer and its size (bulk_out_size, 64 bytes). It
    stores a two-byte length header at the start of the buffer and copies
    the payload from the write fifo starting at buf + KLSI_HDR_LEN, but
    passes the full buffer size as the number of bytes to copy:
    
      count = kfifo_out_locked(&port->write_fifo, buf + KLSI_HDR_LEN,
                               size, &port->lock);
    
    When the fifo holds at least size bytes, size bytes are copied starting
    two bytes into the size-byte buffer, writing KLSI_HDR_LEN bytes past its
    end. Copy at most size - KLSI_HDR_LEN bytes instead, leaving room for
    the header as safe_serial already does.
    
    Writing bulk_out_size or more bytes to the tty triggers a slab
    out-of-bounds write, observed with KASAN by emulating the device with
    dummy_hcd and raw-gadget:
    
      BUG: KASAN: slab-out-of-bounds in kfifo_copy_out+0x83/0xc0
      Write of size 64 at addr ffff888112c62202 by task python3
       kfifo_copy_out
       klsi_105_prepare_write_buffer [kl5kusb105]
       usb_serial_generic_write_start [usbserial]
      Allocated by task 139:
       usb_serial_probe [usbserial]
      The buggy address is located 2 bytes inside of allocated 64-byte region
    
    The out-of-bounds write no longer occurs with this change applied.
    
    Fixes: 60b3013cdaf3 ("USB: kl5usb105: reimplement using generic framework")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: HyeongJun An <sammiee5311@gmail.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: mct_u232: fix memory corruption with small endpoint [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Thu Jun 4 14:11:33 2026 +0200

    USB: serial: mct_u232: fix memory corruption with small endpoint
    
    commit 915b36d701950503c4ea0f6e314b10868e59fce3 upstream.
    
    The driver overrides the maximum transfer size for a specific device
    which only accepts 16 byte packets for its 32 byte bulk-out endpoint.
    
    Make sure to never increase the maximum transfer size to prevent slab
    corruption should a malicious device report a smaller endpoint max
    packet size than expected.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

USB: serial: mct_u232: fix missing interrupt-in transfer sanity check [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Wed May 20 16:27:10 2026 +0200

    USB: serial: mct_u232: fix missing interrupt-in transfer sanity check
    
    commit 245aba83e3c288e176ed037a1f6b618b09e92ed8 upstream.
    
    Add the missing sanity check on the size of interrupt-in transfers to
    avoid parsing stale or uninitialised slab data (and leaking it to user
    space).
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: mxuport: fix memory corruption with small endpoint [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri May 22 16:19:50 2026 +0200

    USB: serial: mxuport: fix memory corruption with small endpoint
    
    commit 4085f0dbb1ce2251c9a5938d693de6593f0ab2bd upstream.
    
    Make sure that the bulk-out endpoint max packet size is at least eight
    bytes to avoid user-controlled slab corruption should a malicious device
    report a smaller size.
    
    Fixes: ee467a1f2066 ("USB: serial: add Moxa UPORT 12XX/14XX/16XX driver")
    Cc: stable@vger.kernel.org      # 3.14
    Cc: Andrew Lunn <andrew@lunn.ch>
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: omninet: fix memory corruption with small endpoint [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri May 22 16:20:58 2026 +0200

    USB: serial: omninet: fix memory corruption with small endpoint
    
    commit 60df93d30f9bdd27db17c4d80ed80ef718d7226b upstream.
    
    Make sure that the bulk-out buffers are at least as large as the
    hardcoded transfer size to avoid user-controlled slab corruption should
    a malicious device report a smaller endpoint max packet size than
    expected.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add MeiG SRM813Q [+ + +]
Author: Jan Volckaert <janvolck@gmail.com>
Date:   Sun May 17 17:32:37 2026 +0200

    USB: serial: option: add MeiG SRM813Q
    
    commit 7d2b37d3e42d19071b62f4ddbee6e16e905efbf1 upstream.
    
    Add support for the Qualcomm Technology Snapdragon X35-based MeiG
    SRM813Q module.
    
    The module can be put in different modes via AT commands to
    enable/disable GPS functionality:
    
    MODEM - PPP mode(2dee:4d63): AT+SER=1,1
    
    If#= 0: RMNET
    If#= 1: DIAG/ADB
    If#= 2: MODEM
    If#= 3: AT
    
    P:  Vendor=2dee ProdID=4d63 Rev=05.15
    S:  Manufacturer=MEIG
    S:  Product=LTE-A Module
    S:  SerialNumber=1bd51f0e
    C:  #Ifs= 4 Cfg#= 1 Atr=80 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    
    NMEA mode(2dee:4d64): AT+SER=51,1
    
    If#= 0: RMNET
    If#= 1: DIAG/ADB
    If#= 2: NMEA
    If#= 3: AT
    
    P:  Vendor=2dee ProdID=4d64 Rev=05.15
    S:  Manufacturer=MEIG
    S:  Product=LTE-A Module
    S:  SerialNumber=1bd51f0e
    C:  #Ifs= 4 Cfg#= 1 Atr=80 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    
    Signed-off-by: Jan Volckaert <janvolck@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add missing RSVD(5) flag for Rolling RW135R-GL [+ + +]
Author: Wanquan Zhong <wanquan.zhong@fibocom.com>
Date:   Wed May 20 19:32:45 2026 +0800

    USB: serial: option: add missing RSVD(5) flag for Rolling RW135R-GL
    
    commit 689f2facc689c8add11d7ff69fbbad17d65ee596 upstream.
    
    The RW135R-GL entry added in commit 01e8d0f74222 ("USB: serial: option:
    add support for Rolling Wireless RW135R-GL") was missing the
    .driver_info = RSVD(5) flag used by other Rolling Wireless MBIM laptop
    modules (e.g. RW135-GL and RW350-GL).
    
    Without this flag, the option driver incorrectly binds to the reserved
    ADB interface (If#5) in multi-interface USB modes, causing AT/MBIM
    communication failures after mode switching. This matches the handling
    of other Rolling Wireless MBIM devices.
    
    - VID:PID 33f8:1003, RW135R-GL for laptop debug M.2 cards (with MBIM
      interface for Linux/Chrome OS)
    
      0x1003: mbim, diag, AT, pipe
    
      Here are the outputs of usb-devices:
    
    T:  Bus=03 Lev=01 Prnt=01 Port=04 Cnt=02 Dev#=  8 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=33f8 ProdID=1003 Rev= 5.15
    S:  Manufacturer=Rolling Wireless S.a.r.l.
    S:  Product=Rolling RW135R-GL Module
    S:  SerialNumber=12345678
    C:* #Ifs= 5 Cfg#= 1 Atr=a0 MxPwr=500mA
    A:  FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=0e Prot=00
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    - VID:PID 33f8:1003, RW135R-GL for laptop debug M.2 cards (with MBIM
      interface for Linux/Chrome OS)
    
      0x1003: mbim, diag, AT, ADB, pipe
    
      Here are the outputs of usb-devices:
    
    T:  Bus=03 Lev=01 Prnt=01 Port=04 Cnt=02 Dev#=  7 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=33f8 ProdID=1003 Rev= 5.15
    S:  Manufacturer=Rolling Wireless S.a.r.l.
    S:  Product=Rolling RW135R-GL Module
    S:  SerialNumber=12345678
    C:* #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=500mA
    A:  FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=0e Prot=00
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    - VID:PID 33f8:1003, RW135R-GL for laptop debug M.2 cards (with MBIM
      interface for Linux/Chrome OS)
    
      0x1003: mbim, pipe
    
      Here are the outputs of usb-devices:
    
    T:  Bus=03 Lev=01 Prnt=01 Port=04 Cnt=02 Dev#=  9 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=33f8 ProdID=1003 Rev= 5.15
    S:  Manufacturer=Rolling Wireless S.a.r.l.
    S:  Product=Rolling RW135R-GL Module
    S:  SerialNumber=12345678
    C:* #Ifs= 3 Cfg#= 1 Atr=a0 MxPwr=500mA
    A:  FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=0e Prot=00
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Fixes: 01e8d0f74222 ("USB: serial: option: add support for Rolling Wireless RW135R-GL")
    Signed-off-by: Wanquan Zhong <wanquan.zhong@fibocom.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add usb-id for Dell Wireless DW5826e-m [+ + +]
Author: Jack Wu <jackbb_wu@compal.com>
Date:   Thu Jun 4 10:04:40 2026 +0800

    USB: serial: option: add usb-id for Dell Wireless DW5826e-m
    
    commit 1938fb9fe38c4f04a3f30bea44f8071c80a63be4 upstream.
    
    Add support for Dell DW5826e-m with USB-id 0x413c:0x81ea
    
    T:  Bus=03 Lev=01 Prnt=01 Port=04 Cnt=01 Dev#=  8 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=413c ProdID=81ea Rev= 5.04
    S:  Manufacturer=DELL
    S:  Product=DW5826e-m Qualcomm Snapdragon X12 Global LTE-A
    S:  SerialNumber=358988870177734
    C:* #Ifs= 7 Cfg#= 1 Atr=a0 MxPwr=500mA
    A:  FirstIf#=12 IfCount= 2 Cls=02(comm.) Sub=0e Prot=00
    I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=usbfs
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 4 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
    E:  Ad=87(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:* If#=12 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=88(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#=13 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    I:* If#=13 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=0f(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Signed-off-by: Jack Wu <jackbb_wu@compal.com>
    Reviewed-by: Lars Melin <larsm17@gmail>
    Cc: stable@vger.kernel.org
    [ johan: reserve also interface 4 ]
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: safe_serial: fix memory corruption with small endpoint [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri May 22 16:22:18 2026 +0200

    USB: serial: safe_serial: fix memory corruption with small endpoint
    
    commit 438061ed1ad85e6743e2dce826671772d81089ec upstream.
    
    Make sure that the bulk-out buffer size is at least eight bytes to avoid
    user-controlled slab corruption in "safe" mode should a malicious device
    report a smaller size.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: storage: Add quirks for PNY Elite Portable SSD [+ + +]
Author: Sam Burkels <sam@1a38.nl>
Date:   Fri May 1 15:23:46 2026 +0200

    usb: storage: Add quirks for PNY Elite Portable SSD
    
    commit b53ebb811e00be50a779ce4e7aee604178b4a825 upstream.
    
    The PNY Elite Portable SSD (USB ID 154b:f009) is a sibling of the
    already-quirked PNY Pro Elite SSDs (154b:f00b and 154b:f00d). Like its
    siblings, it uses a Phison-based USB-SATA bridge that exhibits
    firmware bugs when bound to the uas driver.
    
    Without quirks, the device fails to complete READ CAPACITY commands
    when accessed over UAS on a SuperSpeed (USB 3) port. The device
    enumerates and reports as a SCSI direct-access device, but reports
    zero logical blocks and never finishes spin-up:
    
        usb 2-3: new SuperSpeed USB device number 8 using xhci_hcd
        usb 2-3: New USB device found, idVendor=154b, idProduct=f009
        usb 2-3: Product: PNY ELITE PSSD
        usb 2-3: Manufacturer: PNY
        scsi host0: uas
        scsi 0:0:0:0: Direct-Access     PNY      PNY ELITE PSSD   0
        sd 0:0:0:0: [sda] Spinning up disk...
        [...10+ seconds of polling, no progress...]
        sd 0:0:0:0: [sda] Read Capacity(16) failed: hostbyte=DID_ERROR
        sd 0:0:0:0: [sda] Read Capacity(10) failed: hostbyte=DID_ERROR
        sd 0:0:0:0: [sda] 0 512-byte logical blocks: (0 B/0 B)
    
    Tested each individual quirk to find the minimum that fixes this:
      - US_FL_NO_ATA_1X alone: device hangs on spin-up
      - US_FL_NO_REPORT_OPCODES alone: works on USB 2.0, hangs on USB 3.0
      - US_FL_NO_ATA_1X | US_FL_NO_REPORT_OPCODES: works on both
    
    With both quirks the device enumerates correctly while still using
    the uas driver, and delivers full UAS throughput (~281 MB/s
    sequential read on a USB 3.0 Gen 1 port).
    
    The existing PNY Pro Elite entries (f00b, f00d) only set NO_ATA_1X,
    but this device additionally chokes on REPORT OPCODES under
    SuperSpeed.
    
    Signed-off-by: Sam Burkels <sam@1a38.nl>
    Acked-by: Oliver Neukum <oneukum@suse.com>
    Cc: stable <stable@kernel.org>
    Link: https://patch.msgid.link/20260501132346.86572-1-sam@1a38.nl
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: typec: altmodes/displayport: validate count before reading Status Update VDO [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Wed May 13 17:52:49 2026 +0200

    usb: typec: altmodes/displayport: validate count before reading Status Update VDO
    
    commit 8a18f896e667df491331371b55d4ad644dc51d60 upstream.
    
    A broken/malicious device can send the incorrect count for a status
    update VDO, which will cause the kernel to read uninitialized stack data
    and send it off elsewhere.
    
    Fix this up by correctly verifying the count for the update object.
    
    Assisted-by: gkh_clanker_t1000
    Cc: stable <stable@kernel.org>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Link: https://patch.msgid.link/2026051350-reacquire-sculpture-4244@gregkh
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: typec: tcpm/tcpci_maxim: validate header NDO against RX_BYTE_CNT [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Wed May 13 17:52:50 2026 +0200

    usb: typec: tcpm/tcpci_maxim: validate header NDO against RX_BYTE_CNT
    
    commit aa2f716327be1818e1cb156da8a2844804aaec2f upstream.
    
    A broken/malicious port can transmit a CRC-valid frame whose header
    advertises up to seven data objects but whose body carries fewer than
    that.  Check for this, and rightfully reject the message, instead of
    reading from uninitialized stack memory.
    
    Assisted-by: gkh_clanker_t1000
    Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Cc: "André Draszik" <andre.draszik@linaro.org>
    Cc: Badhri Jagan Sridharan <badhri@google.com>
    Cc: Amit Sunil Dhamne <amitsd@google.com>
    Cc: stable <stable@kernel.org>
    Link: https://patch.msgid.link/2026051350-sitter-canopener-9045@gregkh
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: typec: ucsi: ccg: reject firmware images without a ':' record header [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu May 14 19:10:06 2026 +0200

    usb: typec: ucsi: ccg: reject firmware images without a ':' record header
    
    commit d7486952bf74e546ee3748fb14b2d07881fa6273 upstream.
    
    do_flash() locates the first .cyacd record with
    
            p = strnchr(fw->data, fw->size, ':');
            while (p < eof) {
                    s = strnchr(p + 1, eof - p - 1, ':');
                    ...
            }
    
    If the firmware image contains no ':' byte,  strnchr() returns NULL.
    NULL compares less than the valid kernel pointer eof, so the loop body
    runs and strnchr() is called with p + 1 == (void *)1 and a length of
    roughly (unsigned long)eof, causing a wonderful crash.
    
    The not_signed_fw fallthrough earlier in do_flash() and the chip-state
    branches in ccg_fw_update_needed() allow an unsigned blob to reach this
    loop, so a root user who can place a crafted file under /lib/firmware
    and write the do_flash sysfs attribute can trigger the oops.
    
    Bail out with -EINVAL when the initial strnchr() returns NULL.
    
    Assisted-by: gkh_clanker_t1000
    Cc: stable <stable@kernel.org>
    Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Link: https://patch.msgid.link/2026051405-posture-shrill-7884@gregkh
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: typec: ucsi: Check if power role change actually happened before handling [+ + +]
Author: Myrrh Periwinkle <myrrhperiwinkle@qtmlabs.xyz>
Date:   Fri Jun 5 15:17:16 2026 -0400

    usb: typec: ucsi: Check if power role change actually happened before handling
    
    [ Upstream commit b80e7d34c7ea6a564525119d6138fbb577a23dba ]
    
    The CrOS EC may send a connector status change event with the power
    direction changed flag set even if the power direction hasn't actually
    changed after initiating a SET_PDR command internally [1]. In practice
    this happens on every system suspend due to other changes performed by
    the EC [2][3][4], causing suspend to fail.
    
    Fix this by checking if the power role change actually happened before
    handling it.
    
    [1]: https://source.chromium.org/chromiumos/chromiumos/codesearch/+/main:src/platform/ec/zephyr/subsys/pd_controller/pdc_power_mgmt.c;l=1689;drc=2d5a1cffce4e5ac8a39442cb3b764d2d5e1cf794
    [2]: https://source.chromium.org/chromiumos/chromiumos/codesearch/+/main:src/platform/ec/zephyr/subsys/pd_controller/pdc_power_mgmt.c;l=3923;drc=2d5a1cffce4e5ac8a39442cb3b764d2d5e1cf794
    [3]: https://source.chromium.org/chromiumos/chromiumos/codesearch/+/main:src/platform/ec/zephyr/subsys/pd_controller/pdc_power_mgmt.c;l=5094;drc=2d5a1cffce4e5ac8a39442cb3b764d2d5e1cf794
    [4]: https://source.chromium.org/chromiumos/chromiumos/codesearch/+/main:src/platform/ec/zephyr/subsys/pd_controller/pdc_power_mgmt.c;l=2229;drc=2d5a1cffce4e5ac8a39442cb3b764d2d5e1cf794
    
    Cc: stable <stable@kernel.org>
    Fixes: 7616f006db07 ("usb: typec: ucsi: Update power_supply on power role change")
    Signed-off-by: Myrrh Periwinkle <myrrhperiwinkle@qtmlabs.xyz>
    Reported-and-tested-by: Sergey Senozhatsky <senozhatsky@chromium.org>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Link: https://patch.msgid.link/20260519-ucsi-fix-2-v1-1-6f1239535187@qtmlabs.xyz
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: typec: ucsi: displayport: NAK DP_CMD_CONFIGURE without a payload VDO [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Wed May 13 17:52:54 2026 +0200

    usb: typec: ucsi: displayport: NAK DP_CMD_CONFIGURE without a payload VDO
    
    commit 167dd8d12226587ee554f520aed0256b7769cd5d upstream.
    
    ucsi_displayport_vdm() handles a DP_CMD_CONFIGURE by copying the first
    payload VDO from data[], but unlike the equivalent handler in
    altmodes/displayport.c it does not check that count covers a VDO beyond
    the header.  A header-only Configure VDM (count == 1) would read one u32
    past the caller's array.
    
    In the normal UCSI path the caller controls count, so this is hardening
    for non-standard delivery paths.  NAK and bail when no configuration VDO
    is present, matching the generic DP altmode driver's existing guard.
    
    Assisted-by: gkh_clanker_t1000
    Cc: Pooja Katiyar <pooja.katiyar@intel.com>
    Cc: Johan Hovold <johan@kernel.org>
    Cc: stable <stable@kernel.org>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Link: https://patch.msgid.link/2026051351-vividly-flattered-eb3d@gregkh
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: typec: ucsi: Don't update power_supply on power role change if not connected [+ + +]
Author: Myrrh Periwinkle <myrrhperiwinkle@qtmlabs.xyz>
Date:   Sat Jun 6 09:05:38 2026 -0400

    usb: typec: ucsi: Don't update power_supply on power role change if not connected
    
    [ Upstream commit d98d413ca65d0790a8f3695d0a5845538958ab84 ]
    
    We only need to update the power_supply on power role change if the port
    is connected, because otherwise the online status should be the same for
    both cases.
    
    Cc: stable <stable@kernel.org>
    Fixes: 7616f006db07 ("usb: typec: ucsi: Update power_supply on power role change")
    Signed-off-by: Myrrh Periwinkle <myrrhperiwinkle@qtmlabs.xyz>
    Reported-and-tested-by: Sergey Senozhatsky <senozhatsky@chromium.org>
    Link: https://patch.msgid.link/20260519-ucsi-fix-2-v1-2-6f1239535187@qtmlabs.xyz
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [ changed `UCSI_CONSTAT(con, CONNECTED)` accessor macro to `con->status.flags & UCSI_CONSTAT_CONNECTED` ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: typec: ucsi: validate connector number in ucsi_connector_change() [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Wed May 13 17:52:55 2026 +0200

    usb: typec: ucsi: validate connector number in ucsi_connector_change()
    
    commit 288a81a8507052bcfbf884d39a463c44c42c5fd9 upstream.
    
    The connector number in a UCSI CCI notification is a 7-bit field
    supplied by the PPM.  ucsi_connector_change() uses it to index the
    ucsi->connector[] array without checking it against the number of
    connectors the PPM reported at init time, so a buggy or malicious PPM
    (EC firmware, or an I2C-attached UCSI controller on the ccg / stm32g0 /
    glink transports) can drive schedule_work() on memory past the end of
    the array.
    
    Reject connector numbers that are zero or exceed cap.num_connectors
    before dereferencing the array.
    
    Assisted-by: gkh_clanker_t1000
    Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Cc: Benson Leung <bleung@chromium.org>
    Cc: Jameson Thies <jthies@google.com>
    Cc: Nathan Rebello <nathan.c.rebello@gmail.com>
    Cc: Johan Hovold <johan@kernel.org>
    Cc: Pooja Katiyar <pooja.katiyar@intel.com>
    Cc: Hsin-Te Yuan <yuanhsinte@chromium.org>
    Cc: Abel Vesa <abelvesa@kernel.org>
    Cc: stable <stable@kernel.org>
    Reviewed-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Reviewed-by: Benson Leung <bleung@chromium.org>
    Link: https://patch.msgid.link/2026051351-truck-steadfast-df48@gregkh
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: typec: wcove: don't write past struct pd_message in wcove_read_rx_buffer() [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Wed May 13 17:52:48 2026 +0200

    usb: typec: wcove: don't write past struct pd_message in wcove_read_rx_buffer()
    
    commit 4af7ad0e6d7aa4403dbb1dac7b9659b0421efcaa upstream.
    
    wcove_read_rx_buffer() copies the PD RX FIFO into the caller's
    struct pd_message with
    
            for (i = 0; i < USBC_RXINFO_RXBYTES(info); i++)
                    regmap_read(wcove->regmap, USBC_RX_DATA + i, msg + i);
    
    which has two problems:
    
    USBC_RXINFO_RXBYTES() is a 5-bit field (max 31) while struct pd_message
    is 30 bytes (__le16 header + __le32 payload[PD_MAX_PAYLOAD], packed).
    The byte count latched in RXINFO is the number of bytes the port partner
    put on the wire, so a malicious partner that transmits a 31-byte frame
    can drive the loop one byte past the destination if the WCOVE BMC
    receiver does not enforce the PD object-count limit in hardware. The
    existing FIXME flagged this as unverified.
    
    Independently, regmap_read() takes an unsigned int * and stores a full
    unsigned int at the destination. Passing the byte pointer msg + i means
    each iteration writes four bytes; the high three are zero (val_bits is
    8) and are normally overwritten by the next iteration, but the final
    iteration's high bytes are not. With RXBYTES == 30 the i == 29 iteration
    already writes three zero bytes past msg, which sits on the IRQ thread's
    stack in wcove_typec_irq().
    
    Clamp the loop to sizeof(struct pd_message) and read each register into
    a local before storing only its low byte, so the copy can never exceed
    the destination regardless of what RXINFO reports.
    
    Assisted-by: gkh_clanker_t1000
    Cc: stable <stable@kernel.org>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Link: https://patch.msgid.link/2026051347-clustered-deflected-9543@gregkh
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: usbtmc: check URB actual_length for interrupt-IN notifications [+ + +]
Author: Heitor Alves de Siqueira <halves@igalia.com>
Date:   Tue May 5 15:56:03 2026 -0300

    usb: usbtmc: check URB actual_length for interrupt-IN notifications
    
    commit 52f2ad3f7e5eb3b5908e1d685d4342519dc9cfcd upstream.
    
    USBTMC devices can use an optional interrupt endpoint for notification
    messages. These typically contain two-byte headers indicating the
    payload format, but the driver does not check if these headers are
    present before accessing the data buffers. In cases where the URB
    actual_length is not enough to fit these headers, the driver will either
    cause an out-of-bounds read, or consume stale leftover data from a
    previous notification.
    
    Fix by checking if actual_data contains enough bytes for the headers,
    otherwise resubmit URB to the interrupt endpoint.
    
    Fixes: dbf3e7f654c0 ("Implement an ioctl to support the USMTMC-USB488 READ_STATUS_BYTE operation.")
    Reported-by: syzbot+abbfd103085885cf16a2@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=abbfd103085885cf16a2
    Cc: stable <stable@kernel.org>
    Suggested-by: Michal Pecio <michal.pecio@gmail.com>
    Signed-off-by: Heitor Alves de Siqueira <halves@igalia.com>
    Link: https://patch.msgid.link/20260505-usbtmc-iin-size-v3-1-a36113f62db7@igalia.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: usbtmc: reject interrupt endpoints with small wMaxPacketSize [+ + +]
Author: Heitor Alves de Siqueira <halves@igalia.com>
Date:   Tue May 5 15:56:04 2026 -0300

    usb: usbtmc: reject interrupt endpoints with small wMaxPacketSize
    
    commit 121d2f682ba912b1427cddca7cf84840f41cc620 upstream.
    
    The USB488 subclass specification requires interrupt wMaxPacketSize to
    be 0x02, unless the device sends vendor-specific notifications.
    Endpoints that advertise less than 2 bytes for wMaxPacketSize are
    unlikely to work with the current driver, as URBs will not have enough
    space for interrupt headers. Considering that any notification URBs will
    be ignored by the driver, reject these endpoints early during probe.
    
    Fixes: 041370cce889 ("USB: usbtmc: refactor endpoint retrieval")
    Cc: stable <stable@kernel.org>
    Suggested-by: Michal Pecio <michal.pecio@gmail.com>
    Signed-off-by: Heitor Alves de Siqueira <halves@igalia.com>
    Link: https://patch.msgid.link/20260505-usbtmc-iin-size-v3-2-a36113f62db7@igalia.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usbip: vudc: Fix use after free bug in vudc_remove due to race condition [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Fri Apr 17 12:35:52 2026 -0400

    usbip: vudc: Fix use after free bug in vudc_remove due to race condition
    
    commit d96209626a29ea64666be98c30b30ac82e5f1be6 upstream.
    
    This patch follows up Zheng Wang's 2023 report of a use-after-free in
    vudc_remove(). The original thread stalled on Shuah Khan's request for
    runtime testing of the unplug/unbind path. This patch supplies that
    testing and keeps Zheng's original fix shape.
    
    In vudc_probe(), v_init_timer() binds udc->tr_timer.timer to v_timer().
    usbip_sockfd_store() starts the timer via v_start_timer()/v_kick_timer().
    vudc_remove() can then free the containing struct vudc while the timer is
    still pending or executing.
    
    KASAN confirms the race on an unpatched x86_64 QEMU guest with
    CONFIG_KASAN=y, CONFIG_USBIP_VUDC=y, CONFIG_USB_ZERO=y, and a tight loop
    that repeatedly writes a socket fd to usbip_sockfd, closes the socket
    pair, and unbinds/rebinds usbip-vudc.0:
    
      BUG: KASAN: slab-use-after-free in __run_timer_base.part.0+0x8ba/0x8e0
      Write of size 8 at addr ffff888001b80740 by task trigger_and_unb/239
      Allocated by task 239:
        vudc_probe+0x4d/0xaa0
      Freed by task 239:
        kfree+0x18f/0x520
        device_release_driver_internal+0x388/0x540
        unbind_store+0xd9/0x100
    
    This lands in the timer core rather than v_timer() itself because the
    embedded timer_list is being walked after its containing struct vudc has
    already been freed. The underlying lifetime bug is the same one Zheng
    reported.
    
    With v_stop_timer() called from vudc_remove() and the timer deleted
    synchronously, the same harness completed 5000 bind/unbind iterations
    with no KASAN report.
    
    Fixes: b6a0ca111867 ("usbip: vudc: Add UDC specific ops")
    Cc: stable <stable@kernel.org>
    Reported-by: Zheng Wang <zyytlz.wz@163.com>
    Closes: https://lore.kernel.org/linux-usb/20230317100954.2626573-1-zyytlz.wz@163.com/
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Acked-by: Shuah Khan <skhan@linuxfoundation.org>
    Link: https://patch.msgid.link/20260417163552.807548-1-michael.bommarito@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
vsock/vmci: fix sk_ack_backlog leak on failed handshake [+ + +]
Author: Raf Dickson <rafdog35@gmail.com>
Date:   Tue May 26 10:43:56 2026 +0000

    vsock/vmci: fix sk_ack_backlog leak on failed handshake
    
    commit c05fa14db43ebef3bd862ca9d073981c0358b3f0 upstream.
    
    When vmci_transport_recv_connecting_server() returns an error,
    vmci_transport_recv_listen() calls vsock_remove_pending() but never
    calls sk_acceptq_removed(). This leaves sk_ack_backlog incremented
    permanently.
    
    Repeated handshake failures (malformed packets, queue pair alloc
    failure, event subscribe failure) cause sk_ack_backlog to climb
    toward sk_max_ack_backlog. Once it reaches the limit the listener
    permanently refuses all new connections with -ECONNREFUSED, a
    silent denial of service requiring a process restart to recover.
    
    The two existing sk_acceptq_removed() calls in af_vsock.c do not
    cover this path: line 764 checks vsock_is_pending() which returns
    false after vsock_remove_pending(), and line 1889 is only reached
    on successful accept().
    
    Fix by balancing sk_acceptq_added() with sk_acceptq_removed() on
    the error path.
    
    Fixes: d021c344051a ("VSOCK: Introduce VM Sockets")
    Cc: stable@vger.kernel.org
    Signed-off-by: Raf Dickson <rafdog35@gmail.com>
    Acked-by: Stefano Garzarella <sgarzare@redhat.com>
    Link: https://patch.msgid.link/20260526104356.469928-1-rafdog35@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
vsock: keep poll shutdown state consistent [+ + +]
Author: Ziyu Zhang <ziyuzhang201@gmail.com>
Date:   Wed May 20 00:56:36 2026 +0800

    vsock: keep poll shutdown state consistent
    
    [ Upstream commit aae9d8a5528b8ee9ff8dc5d3558b8a9f852a724a ]
    
    vsock_poll() reads vsk->peer_shutdown before taking the socket lock
    to set EPOLLHUP and EPOLLRDHUP, then reads it again after taking
    the lock to report EOF readability. A shutdown packet can update
    peer_shutdown while poll is waiting for the lock, so one poll invocation
    can report EOF readability without the corresponding HUP/RDHUP bits.
    
    For connectible sockets, take one peer_shutdown snapshot after
    lock_sock() and use it for all peer-shutdown-derived poll bits. For
    datagram sockets, which do not take lock_sock() in poll(), take one
    lockless READ_ONCE() snapshot and pair it with WRITE_ONCE() on the
    writer side.
    
    This keeps the peer-shutdown-derived bits internally consistent for each
    poll pass.
    
    Fixes: d021c344051a ("VSOCK: Introduce VM Sockets")
    Signed-off-by: Ziyu Zhang <ziyuzhang201@gmail.com>
    Link: https://patch.msgid.link/20260519165636.62542-1-ziyuzhang201@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
vxlan: do not reuse cached ip_hdr() value after skb_tunnel_check_pmtu() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Mon May 25 20:36:42 2026 +0000

    vxlan: do not reuse cached ip_hdr() value after skb_tunnel_check_pmtu()
    
    [ Upstream commit 7d9ef0cb271555d8cf39fefe6c981e1493b25ecf ]
    
    skb_tunnel_check_pmtu() can change skb->head.
    
    Reusing old_iph afer skb_tunnel_check_pmtu() can cause an UAF.
    
    Use instead ip_hdr(skb) as done in drivers/net/bareudp.c
    and drivers/net/geneve.c.
    
    Found by Sashiko.
    
    Fixes: 4cb47a8644cc ("tunnels: PMTU discovery support for directly bridged IP packets")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Link: https://patch.msgid.link/20260525203642.2389723-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

vxlan: vnifilter: fix spurious notification on VNI update [+ + +]
Author: Andy Roulin <aroulin@nvidia.com>
Date:   Tue Jun 2 11:51:37 2026 -0700

    vxlan: vnifilter: fix spurious notification on VNI update
    
    [ Upstream commit 84683b5b60c7274e2c8f7f413d39d78d3db5540f ]
    
    When a VNI is re-added with the same attributes (e.g. same group or no
    group), vxlan_vni_update() sends a spurious RTM_NEWTUNNEL notification
    even though nothing changed.
    
    The bug is that 'if (changed)' tests whether the pointer is non-NULL,
    not the bool value it points to. Since every caller passes a valid
    pointer, the condition is always true and the notification fires
    unconditionally.
    
    Fix by dereferencing the pointer: 'if (*changed)'.
    
    Reproducer:
    
     # ip link add vxlan100 type vxlan dstport 4789 local 10.0.0.1 \
          nolearning external vnifilter
     # ip link set vxlan100 up
     # bridge monitor vni &
     # bridge vni add vni 1000 dev vxlan100
     # bridge vni add vni 1000 dev vxlan100  # spurious notification
    
    Fixes: f9c4bb0b245c ("vxlan: vni filtering support on collect metadata device")
    Signed-off-by: Andy Roulin <aroulin@nvidia.com>
    Reviewed-by: Petr Machata <petrm@nvidia.com>
    Link: https://patch.msgid.link/20260602185138.253265-3-aroulin@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

vxlan: vnifilter: send notification on VNI add [+ + +]
Author: Andy Roulin <aroulin@nvidia.com>
Date:   Tue Jun 2 11:51:36 2026 -0700

    vxlan: vnifilter: send notification on VNI add
    
    [ Upstream commit aa6ca1c5c338907817374b59f7551fd855a88754 ]
    
    When a new VNI is added to a vxlan device with vnifilter enabled,
    no RTM_NEWTUNNEL notification is sent to userspace. This means
    'bridge monitor vni' never shows VNI add events, even though
    VNI delete events are reported correctly.
    
    The bug is in vxlan_vni_add(), where the notification is guarded by
    'if (changed)'. The 'changed' flag is set by vxlan_vni_update_group()
    only when the multicast group or remote IP is modified, but for a
    new VNI added without a group (e.g. in L3 VxLAN interface scenarios),
    the function returns early without setting changed=true. Since this
    is a new VNI, the notification should be sent unconditionally.
    
    The notification is not guarded by the return value of
    vxlan_vni_update_group() because, at this point, the VNI has already
    been inserted into the hash table and list with no rollback on error.
    The VNI will be visible in 'bridge vni show' regardless, so userspace
    should be informed. This is consistent with vxlan_vni_del() which also
    notifies unconditionally.
    
    The 'if (changed)' guard remains correct in vxlan_vni_update(), which
    handles the case where a VNI already exists and is being re-added --
    there, we only want to notify if the group/remote actually changed.
    
    Reproducer:
    
     # ip link add vxlan100 type vxlan dstport 4789 local 10.0.0.1 \
          nolearning external vnifilter
     # ip link set vxlan100 up
     # bridge monitor vni &
     # bridge vni add vni 1000 dev vxlan100    # no notification
     # bridge vni delete vni 1000 dev vxlan100 # notification received
    
    Fixes: f9c4bb0b245c ("vxlan: vni filtering support on collect metadata device")
    Reported-by: Chirag Shah <chirag@nvidia.com>
    Signed-off-by: Andy Roulin <aroulin@nvidia.com>
    Reviewed-by: Petr Machata <petrm@nvidia.com>
    Link: https://patch.msgid.link/20260602185138.253265-2-aroulin@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
wifi: nl80211: reject oversized EMA RNR lists [+ + +]
Author: Yuqi Xu <xuyuqiabc@gmail.com>
Date:   Fri May 29 23:25:37 2026 +0800

    wifi: nl80211: reject oversized EMA RNR lists
    
    commit 4cd92957e8f8cc4ebfe8a5d4203c14c592fde6b1 upstream.
    
    nl80211_parse_rnr_elems() stores the parsed element count in a
    u8-backed cfg80211_rnr_elems::cnt field and uses that count to size
    the flexible array allocation.
    
    Reject nested NL80211_ATTR_EMA_RNR_ELEMS input once the count reaches
    255, before incrementing it again. This keeps the parser aligned with
    the data structure it fills and matches the existing bound check used
    by nl80211_parse_mbssid_elems().
    
    Fixes: dbbb27e183b1 ("cfg80211: support RNR for EMA AP")
    Cc: stable@kernel.org
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Zhengchuan Liang <zcliangcn@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Assisted-by: Codex:gpt-5.4
    Signed-off-by: Yuqi Xu <xuyuqiabc@gmail.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Link: https://patch.msgid.link/20260529152542.1412734-1-n05ec@lzu.edu.cn
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
wireguard: send: append trailer after expanding head [+ + +]
Author: Jason A. Donenfeld <Jason@zx2c4.com>
Date:   Fri May 29 19:31:34 2026 +0200

    wireguard: send: append trailer after expanding head
    
    commit f75e3eb08fe31d30a9af6ed80cdd22e6772837e2 upstream.
    
    With how this is currently written, we add the trailer, zero it out, and
    then add the header space on. If that header space requires a
    reallocation + copy, the zeros in the trailer aren't copied, because the
    skb len hasn't actually been yet expanded to cover that. Instead add the
    padding at the end of the process rather than at the beginning.
    
    Fixes: e7096c131e51 ("net: WireGuard secure network tunnel")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Link: https://patch.msgid.link/20260529173134.3080773-2-Jason@zx2c4.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/CPU/AMD: Call the spectral chicken in the Zen2 init function [+ + +]
Author: Borislav Petkov (AMD) <bp@alien8.de>
Date:   Wed Nov 1 11:20:01 2023 +0100

    x86/CPU/AMD: Call the spectral chicken in the Zen2 init function
    
    commit cfbf4f992bfce1fa9f2f347a79cbbea0368e7971 upstream.
    
    No functional change.
    
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Nikolay Borisov <nik.borisov@suse.com>
    Link: http://lore.kernel.org/r/20231120104152.13740-6-bp@alien8.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

x86/CPU/AMD: Move the Zen3 BTC_NO detection to the Zen3 init function [+ + +]
Author: Borislav Petkov (AMD) <bp@alien8.de>
Date:   Wed Nov 1 11:28:31 2023 +0100

    x86/CPU/AMD: Move the Zen3 BTC_NO detection to the Zen3 init function
    
    commit affc66cb96f865b3763a8e18add52e133d864f04 upstream.
    
    No functional changes.
    
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Nikolay Borisov <nik.borisov@suse.com>
    Link: http://lore.kernel.org/r/20231120104152.13740-4-bp@alien8.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

x86/CPU/AMD: Rename init_amd_zn() to init_amd_zen_common() [+ + +]
Author: Borislav Petkov (AMD) <bp@alien8.de>
Date:   Wed Nov 1 12:34:29 2023 +0100

    x86/CPU/AMD: Rename init_amd_zn() to init_amd_zen_common()
    
    commit 7c81ad8e8bc28a1847e87c5afe1bae6bffb2f73e upstream.
    
    Call it from all Zen init functions.
    
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Nikolay Borisov <nik.borisov@suse.com>
    Link: http://lore.kernel.org/r/20231120104152.13740-7-bp@alien8.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/kexec: add a sanity check on previous kernel's ima kexec buffer [+ + +]
Author: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
Date:   Wed Jun 3 21:02:39 2026 +0800

    x86/kexec: add a sanity check on previous kernel's ima kexec buffer
    
    [ Upstream commit c5489d04337b47e93c0623e8145fcba3f5739efd ]
    
    When the second-stage kernel is booted via kexec with a limiting command
    line such as "mem=<size>", the physical range that contains the carried
    over IMA measurement list may fall outside the truncated RAM leading to a
    kernel panic.
    
        BUG: unable to handle page fault for address: ffff97793ff47000
        RIP: ima_restore_measurement_list+0xdc/0x45a
        #PF: error_code(0x0000) – not-present page
    
    Other architectures already validate the range with page_is_ram(), as done
    in commit cbf9c4b9617b ("of: check previous kernel's ima-kexec-buffer
    against memory bounds") do a similar check on x86.
    
    Without carrying the measurement list across kexec, the attestation
    would fail.
    
    Link: https://lkml.kernel.org/r/20251231061609.907170-4-harshit.m.mogalapalli@oracle.com
    Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
    Fixes: b69a2afd5afc ("x86/kexec: Carry forward IMA measurement log on kexec")
    Reported-by: Paul Webb <paul.x.webb@oracle.com>
    Reviewed-by: Mimi Zohar <zohar@linux.ibm.com>
    Cc: Alexander Graf <graf@amazon.com>
    Cc: Ard Biesheuvel <ardb@kernel.org>
    Cc: Baoquan He <bhe@redhat.com>
    Cc: Borislav Betkov <bp@alien8.de>
    Cc: guoweikang <guoweikang.kernel@gmail.com>
    Cc: Henry Willard <henry.willard@oracle.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jiri Bohac <jbohac@suse.cz>
    Cc: Joel Granados <joel.granados@kernel.org>
    Cc: Jonathan McDowell <noodles@fb.com>
    Cc: Mike Rapoport <rppt@kernel.org>
    Cc: Sohil Mehta <sohil.mehta@intel.com>
    Cc: Sourabh Jain <sourabhjain@linux.ibm.com>
    Cc: Thomas Gleinxer <tglx@linutronix.de>
    Cc: Yifei Liu <yifei.l.liu@oracle.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Wenshan Lan <jetlan9@163.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

x86/kexec: Disable KCOV instrumentation after load_segments() [+ + +]
Author: Aleksandr Nogikh <nogikh@google.com>
Date:   Thu Jun 4 08:30:31 2026 +0800

    x86/kexec: Disable KCOV instrumentation after load_segments()
    
    [ Upstream commit 917e3ad3321e75ca0223d5ccf26ceda116aa51e1 ]
    
    The load_segments() function changes segment registers, invalidating GS base
    (which KCOV relies on for per-cpu data). When CONFIG_KCOV is enabled, any
    subsequent instrumented C code call (e.g. native_gdt_invalidate()) begins
    crashing the kernel in an endless loop.
    
    To reproduce the problem, it's sufficient to do kexec on a KCOV-instrumented
    kernel:
    
      $ kexec -l /boot/otherKernel
      $ kexec -e
    
    The real-world context for this problem is enabling crash dump collection in
    syzkaller. For this, the tool loads a panic kernel before fuzzing and then
    calls makedumpfile after the panic. This workflow requires both CONFIG_KEXEC
    and CONFIG_KCOV to be enabled simultaneously.
    
    Adding safeguards directly to the KCOV fast-path (__sanitizer_cov_trace_pc())
    is also undesirable as it would introduce an extra performance overhead.
    
    Disabling instrumentation for the individual functions would be too fragile,
    so disable KCOV instrumentation for the entire machine_kexec_64.c and
    physaddr.c. If coverage-guided fuzzing ever needs these components in the
    future, other approaches should be considered.
    
    The problem is not relevant for 32 bit kernels as CONFIG_KCOV is not supported
    there.
    
      [ bp: Space out comment for better readability. ]
    
    Fixes: 0d345996e4cb ("x86/kernel: increase kcov coverage under arch/x86/kernel folder")
    Signed-off-by: Aleksandr Nogikh <nogikh@google.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260325154825.551191-1-nogikh@google.com
    Signed-off-by: Miles Wang <13621186580@139.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xfrm: ah: use skb_to_full_sk in async output callbacks [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Fri May 15 11:45:31 2026 -0400

    xfrm: ah: use skb_to_full_sk in async output callbacks
    
    commit 79d8be262377f7112cfa3088dfc4142d5a2533f3 upstream.
    
    When AH output is offloaded to an asynchronous crypto provider
    (hardware accelerators such as AMD CCP, or a forced-async software
    shim used for testing), the digest completion fires
    ah_output_done() / ah6_output_done() on a workqueue.  The egress
    skb at that point may have been originated by a TCP listener
    sending a SYN-ACK, which sets skb->sk to a request_sock via
    skb_set_owner_edemux(); it may also have been originated by an
    inet_timewait_sock retransmit.  Neither is a full struct sock, and
    passing the raw skb->sk to xfrm_output_resume() then forwards a
    non-full socket through the rest of the xfrm output chain.
    
    xfrm_output_resume() and its downstream consumers expect a full
    sk where they dereference at all.  The natural egress path
    through ah_output_done() does not crash today because the
    consumers that read past sock_common are either gated by
    sk_fullsock() or short-circuit on flags that are clear on a fresh
    request_sock; an exhaustive walk of the 50 most plausible
    consumers under sch_fq, dev_queue_xmit, netfilter, tc-egress and
    cgroup-egress BPF found no current unguarded deref.  The bug is
    still a real type confusion that future consumer changes could
    turn into a memory-corruption primitive.
    
    This is the same bug class fixed for ESP in commit 1620c88887b1
    ("xfrm: Fix the usage of skb->sk").  Apply the analogous fix to
    AH: convert skb->sk to a full socket pointer (or NULL) via
    skb_to_full_sk() before handing it to xfrm_output_resume().
    
    The same async AH callbacks were touched recently for an
    independent ESN-related ICV layout bug in commit ec54093e6a8f
    ("xfrm: ah: account for ESN high bits in async callbacks"); the
    sk type-confusion addressed here is orthogonal.  This patch is
    part of an ongoing audit of the AH callback paths; an ah_output
    ihl-validation hardening series is also currently under review on
    netdev.
    
    Reproduced under UML + KASAN + lockdep with a forced-async
    hmac(sha1) shim that registers at priority 9999 and wraps the
    sync in-tree hmac-sha1-lib.  With the shim loaded, ah_output_done
    runs on every SYN-ACK egress through a transport-mode AH SA and
    skb->sk arrives as a request_sock (TCP_NEW_SYN_RECV); after this
    patch, xfrm_output_resume() receives the listener (the result of
    sk_to_full_sk()) and consumer derefs land on full-sock fields as
    intended.
    
    Fixes: 9ab1265d5231 ("xfrm: Use actual socket sk instead of skb socket for xfrm_output_resume")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfrm: Check for underflow in xfrm_state_mtu [+ + +]
Author: David Ahern <dahern@nvidia.com>
Date:   Wed May 13 10:49:14 2026 -0600

    xfrm: Check for underflow in xfrm_state_mtu
    
    [ Upstream commit 742b04d0550b0ec89dcbc99537ec88653bd1ad90 ]
    
    Leo Lin reported OOB write issue in esp component:
    
      xfrm_state_mtu() returns u32 but performs its arithmetic in unsigned
      modulo-2^32 space using an attacker-influenced "header_len + authsize +
      net_adj" subtracted from a small "mtu" argument. A nobody user can
      install an IPv4 ESP tunnel SA with a large authentication key
      (XFRMA_ALG_AUTH_TRUNC, e.g. hmac(sha512), 64-byte key, 64-byte trunc),
      configure a small interface MTU (68 bytes), and set XFRMA_TFCPAD to a
      large value. When a single UDP datagram is then sent through the
      tunnel, xfrm_state_mtu() underflows to a near-2^32 value, and
      esp_output() consumes it as a signed int via:
    
            padto      = min(x->tfcpad, xfrm_state_mtu(x, mtu_cached))
            esp.tfclen = padto - skb->len   (assigned to int)
    
      esp.tfclen ends up negative (e.g. -207). It is sign-extended to size_t
      when passed to memset() inside esp_output_fill_trailer(), producing a
      ~16 EB write of zeroes at skb_tail_pointer(skb). KASAN logs it as
      "Write of size 18446744073709551537 at addr ffff888...".
    
    Check for underflow and return 1. This causes the sendmsg attempt to
    fail with ENETUNREACH.
    
    Fixes: c5c252389374 ("[XFRM]: Optimize MTU calculation")
    Reported-by: Leo Lin <leo@depthfirst.com>
    Assisted-by: Codex:26.506.31004
    Signed-off-by: David Ahern <dahern@nvidia.com>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xfrm: esp: restore combined single-frag length gate [+ + +]
Author: Jingguo Tan <tanjingguo@huawei.com>
Date:   Mon May 18 17:06:48 2026 +0800

    xfrm: esp: restore combined single-frag length gate
    
    commit dfa0d7b0ff1eb6b2c416b8fdb9b4f2cefba57a40 upstream.
    
    The ESP out-of-place fast path appends the trailer in esp_output_head()
    before esp_output_tail() allocates the destination page frag. The
    head-side gate currently checks skb->data_len and tailen separately, but
    the tail code allocates a single destination frag from the combined
    post-trailer skb->data_len.
    
    Reject the page-frag fast path when the combined aligned length exceeds a
    page. Otherwise skb_page_frag_refill() may fall back to a single page while
    the destination sg still spans the combined skb->data_len.
    
    Restore this combined-length page gate for both IPv4 and IPv6.
    
    Fixes: 5bd8baab087d ("esp: limit skb_page_frag_refill use to a single page")
    Cc: stable@vger.kernel.org
    Signed-off-by: Lin Ma <malin89@huawei.com>
    Signed-off-by: Chenyuan Mi <michenyuan@huawei.com>
    Signed-off-by: Jingguo Tan <tanjingguo@huawei.com>
    Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfrm: espintcp: do not reuse an in-progress partial send [+ + +]
Author: Wyatt Feng <bronzed_45_vested@icloud.com>
Date:   Wed Jun 3 00:46:27 2026 +0800

    xfrm: espintcp: do not reuse an in-progress partial send
    
    commit c381039ade2e161ab08c0eda73c4f8b9a7115928 upstream.
    
    espintcp keeps a single in-flight transmit in ctx->partial.
    Before building a new sk_msg, espintcp_sendmsg() first tries to flush
    that state through espintcp_push_msgs().
    
    For blocking callers, espintcp_push_msgs() may return success even when
    the previous partial send is still pending. espintcp_sendmsg() would
    then reinitialize emsg->skmsg and reuse ctx->partial while the old
    transfer still owns that state.
    
    Do not rebuild the send message when ctx->partial is still in progress.
    If espintcp_push_msgs() returns with emsg->len still set, fail the new
    send instead of overwriting the live partial state.
    
    This is a memory-safety fix: reusing the live partial-send state can
    leave a stale offset attached to a new sk_msg and lead to an out-of-
    bounds read in the send path.
    
    tcp_sendmsg_locked() already handles waiting for send buffer memory, so
    the fix here is just to preserve espintcp's one-message-at-a-time
    transmit state.
    
    Fixes: e27cca96cd68 ("xfrm: add espintcp (RFC 8229)")
    Cc: stable@kernel.org
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Reported-by: Zhengchuan Liang <zcliangcn@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Assisted-by: Codex:GPT-5.4
    Signed-off-by: Wyatt Feng <bronzed_45_vested@icloud.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfrm: input: hold netns during deferred transport reinjection [+ + +]
Author: Zhengchuan Liang <zcliangcn@gmail.com>
Date:   Fri May 22 17:31:55 2026 +0800

    xfrm: input: hold netns during deferred transport reinjection
    
    commit c16f74dc1d75d0e2e7670076d5375deda110ebeb upstream.
    
    Transport-mode reinjection stores a struct net pointer in skb->cb and
    uses it later from xfrm_trans_reinject(). That pointer must stay valid
    until the deferred callback runs.
    
    Take a netns reference when queueing deferred reinjection work and drop
    it after the callback completes. Use maybe_get_net() so the queueing
    path does not revive a namespace that is already being torn down.
    
    This keeps the existing workqueue design and fixes the netns lifetime
    handling in one place for all users of xfrm_trans_queue_net().
    
    Fixes: 7b3801927e52 ("xfrm: introduce xfrm_trans_queue_net")
    Cc: stable@kernel.org
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Co-developed-by: Luxing Yin <tr0jan@lzu.edu.cn>
    Signed-off-by: Luxing Yin <tr0jan@lzu.edu.cn>
    Signed-off-by: Zhengchuan Liang <zcliangcn@gmail.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Assisted-by: Codex:gpt-5.4
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfrm: policy: fix use-after-free on inexact bin in xfrm_policy_bysel_ctx() [+ + +]
Author: Sanghyun Park <sanghyun.park.cnu@gmail.com>
Date:   Tue Jun 2 18:49:05 2026 +0900

    xfrm: policy: fix use-after-free on inexact bin in xfrm_policy_bysel_ctx()
    
    [ Upstream commit 7f2d76c9c03257c0782afef9d95321fa04096f60 ]
    
    Fix the race by pruning the bin while still holding xfrm_policy_lock,
    before dropping it. Use __xfrm_policy_inexact_prune_bin() directly since
    the lock is already held. The wrapper xfrm_policy_inexact_prune_bin()
    becomes unused and is removed.
    
    Race:
    
      CPU0 (XFRM_MSG_DELPOLICY)           CPU1 (XFRM_MSG_NEWSPDINFO)
      ==========================          ==========================
      xfrm_policy_bysel_ctx():
        spin_lock_bh(xfrm_policy_lock)
        bin = xfrm_policy_inexact_lookup()
        __xfrm_policy_unlink(pol)
        spin_unlock_bh(xfrm_policy_lock)
        xfrm_policy_kill(ret)
        // wide window, lock not held
                                           xfrm_hash_rebuild():
                                             spin_lock_bh(xfrm_policy_lock)
                                             __xfrm_policy_inexact_flush():
                                               kfree_rcu(bin)  // bin freed
                                             spin_unlock_bh(xfrm_policy_lock)
        xfrm_policy_inexact_prune_bin(bin)
        // UAF: bin is freed
    
    Fixes: 6be3b0db6db8 ("xfrm: policy: add inexact policy search tree infrastructure")
    Signed-off-by: Sanghyun Park <sanghyun.park.cnu@gmail.com>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xfrm: route MIGRATE notifications to caller's netns [+ + +]
Author: Maoyi Xie <maoyixie.tju@gmail.com>
Date:   Mon May 4 22:27:36 2026 +0800

    xfrm: route MIGRATE notifications to caller's netns
    
    commit 7e2a4f7ca0952820731ef7bdadfc9a9e9d3571b4 upstream.
    
    xfrm_send_migrate() in net/xfrm/xfrm_user.c and pfkey_send_migrate()
    in net/key/af_key.c both hardcode &init_net for the multicast that
    announces a successful XFRM_MSG_MIGRATE / SADB_X_MIGRATE.
    
    XFRM_MSG_MIGRATE arrives on a per-netns NETLINK_XFRM socket, and the
    rest of the xfrm/af_key netlink path was made netns-aware in 2008.
    The other 14 multicast paths in xfrm_user.c route their event using
    xs_net(x), xp_net(xp) or sock_net(skb->sk); only the migrate path
    was missed.
    
    Two consequences of the init_net hardcoding:
    
      1. The notification (selector, old/new endpoint addresses, and the
         km_address) is delivered to listeners on init_net's
         XFRMNLGRP_MIGRATE / pfkey BROADCAST_ALL groups rather than on
         the issuing netns. An IKE daemon running in init_net therefore
         receives migration notifications originating from any other
         netns on the host.
    
      2. An IKE daemon running inside a non-init netns and subscribed
         to its own XFRMNLGRP_MIGRATE / pfkey groups never receives the
         notification of its own migration. IKEv2 MOBIKE / address-update
         handling inside a netns is silently broken.
    
    Thread struct net through km_migrate() and the xfrm_mgr.migrate
    function pointer, drop the &init_net override in xfrm_send_migrate()
    and pfkey_send_migrate(), and pass the caller's net (already in
    scope in xfrm_migrate() via sock_net(skb->sk)) all the way down.
    struct xfrm_mgr is in-tree only and not exported as a stable API,
    so the function-pointer signature change is internal.
    
    pfkey_broadcast() is already netns-aware via net_generic(net,
    pfkey_net_id) since the pernet conversion. The five other
    pfkey_broadcast() callers in af_key.c already pass xs_net(x),
    sock_net(sk) or a per-netns net, so this only removes the
    &init_net outlier.
    
    Fixes: 5c79de6e79cd ("[XFRM]: User interface for handling XFRM_MSG_MIGRATE")
    Cc: stable@vger.kernel.org # v5.15+
    Signed-off-by: Maoyi Xie <maoyi.xie@ntu.edu.sg>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xhci: tegra: Fix ghost USB device on dual-role port unplug [+ + +]
Author: Wei-Cheng Chen <weichengc@nvidia.com>
Date:   Thu Jun 4 20:19:11 2026 +0800

    xhci: tegra: Fix ghost USB device on dual-role port unplug
    
    [ Upstream commit 5a4c828b8b29b47534814ade26d9aee09d5101fc ]
    
    When a USB device is unplugged from the dual-role port, the device-mode
    path in tegra_xhci_id_work() explicitly clears both SS and HS port power
    via direct hub_control ClearPortFeature(POWER) calls. This preempts the
    xHCI controller's normal disconnect processing -- PORT_CSC is never
    generated, the USB core never sees the disconnect, and the device remains
    in its internal tree as a ghost visible in lsusb.
    
    Add an otg_set_port_power flag to control whether the dual-role switch
    path performs explicit port power management. SoCs that need it
    (Tegra124 / Tegra210 / Tegra186) set the flag; later SoCs (Tegra194 and
    beyond) rely on the PHY mode change to handle disconnect naturally and
    skip all port power calls.
    
    Within the port power path, otg_reset_sspi additionally gates the SSPI
    reset sequence on host-mode entry for SoCs that require it.
    
    Flags set per SoC:
      Tegra124, Tegra186  -> otg_set_port_power
      Tegra210            -> otg_set_port_power, otg_reset_sspi
      Tegra194 and later  -> (none)
    
    [ Backport to 6.6.y: keep the host-mode snapshot in the existing
      tegra->lock section, retain pm_runtime_mark_last_busy() in the host
      port-power path, and resolve context around the SoC ops/Tegra234
      entries. ]
    
    Fixes: f836e7843036 ("usb: xhci-tegra: Add OTG support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Wei-Cheng Chen <weichengc@nvidia.com>
    Link: https://patch.msgid.link/20260505112630.217704-1-weichengc@nvidia.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
zram: fix use-after-free in zram_bvec_write_partial() [+ + +]
Author: Cunlong Li <shenxiaogll@gmail.com>
Date:   Thu May 28 10:48:44 2026 +0800

    zram: fix use-after-free in zram_bvec_write_partial()
    
    commit 732fd9f0b9c1cdc6dfd77162ded60df005182cc0 upstream.
    
    zram_read_page() picks the sync or async backing device read path based on
    whether the parent bio is NULL.  zram_bvec_write_partial() passes its
    parent bio down, so for ZRAM_WB slots the read is dispatched
    asynchronously and zram_read_page() returns 0 while the bio is still in
    flight.  The caller then runs memcpy_from_bvec(), zram_write_page() and
    __free_page() on the buffer, leaving the async read to write into a freed
    page.
    
    zram_bvec_read_partial() was switched to NULL in commit 4e3c87b9421d
    ("zram: fix synchronous reads") for the same reason; the write_partial
    counterpart was missed.
    
    Link: https://lore.kernel.org/20260528-zram-v3-1-cab86eef8764@gmail.com
    Fixes: 8e654f8fbff5 ("zram: read page from backing device")
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org>
    Signed-off-by: Cunlong Li <shenxiaogll@gmail.com>
    Cc: Jens Axboe <axboe@kernel.dk>
    Cc: Minchan Kim <minchan@kernel.org>
    Cc: Yisheng Xie <xieyisheng1@huawei.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>