Changelog in Linux kernel 6.12.94

 
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>

 
accel/ivpu: Add bounds checks for firmware log indices [+ + +]
Author: Andrzej Kacprowski <andrzej.kacprowski@linux.intel.com>
Date:   Fri May 29 13:58:42 2026 +0200

    accel/ivpu: Add bounds checks for firmware log indices
    
    commit dd1311bcf0e62f0c515115f46a3813370f4a4bb1 upstream.
    
    Add validation that read and write indices in the firmware log buffer
    are within valid bounds (< data_size) before using them. If
    out-of-bounds indices are encountered (from firmware), clamp them to
    safe values instead of proceeding with invalid offsets.
    
    This prevents potential out-of-bounds buffer access when firmware
    supplies invalid log indices.
    
    Fixes: 1fc1251149a7 ("accel/ivpu: Refactor functions in ivpu_fw_log.c")
    Cc: stable@vger.kernel.org # v6.18+
    Signed-off-by: Andrzej Kacprowski <andrzej.kacprowski@linux.intel.com>
    Reviewed-by: Karol Wachowski <karol.wachowski@linux.intel.com>
    Signed-off-by: Karol Wachowski <karol.wachowski@linux.intel.com>
    Link: https://patch.msgid.link/20260529115842.135378-1-andrzej.kacprowski@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

accel/ivpu: Add buffer overflow check in MS get_info_ioctl [+ + +]
Author: Andrzej Kacprowski <andrzej.kacprowski@linux.intel.com>
Date:   Fri May 29 14:08:41 2026 +0200

    accel/ivpu: Add buffer overflow check in MS get_info_ioctl
    
    commit fb176425837693f50c5c9fc8db6fbb04af22bd0a upstream.
    
    Add validation that the info size returned from the metric stream info
    query is not exceeded when checked against the allocated buffer size.
    If the firmware returns a size larger than the buffer, reject the
    operation with -EOVERFLOW instead of proceeding with an incorrect
    buffer copy.
    
    Fixes: cdfad4db7756 ("accel/ivpu: Add NPU profiling support")
    Cc: stable@vger.kernel.org # v6.18+
    Signed-off-by: Andrzej Kacprowski <andrzej.kacprowski@linux.intel.com>
    Reviewed-by: Karol Wachowski <karol.wachowski@linux.intel.com>
    Signed-off-by: Karol Wachowski <karol.wachowski@linux.intel.com>
    Link: https://patch.msgid.link/20260529120841.135852-1-andrzej.kacprowski@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

accel/ivpu: Fix signed integer truncation in IPC receive [+ + +]
Author: Andrzej Kacprowski <andrzej.kacprowski@linux.intel.com>
Date:   Mon Jun 1 18:16:43 2026 +0200

    accel/ivpu: Fix signed integer truncation in IPC receive
    
    commit d9faef564438d1e4579c692c046603e7ada7bdf4 upstream.
    
    Fix potential buffer overflow where firmware-supplied data_size is cast
    to signed int before being used in min_t(). Large unsigned values
    (>= 0x80000000) become negative, causing unsigned wraparound and
    oversized memcpy operations that can overflow the stack buffer.
    
    Change min_t(int, ...) to min() as both values are unsigned and can be
    handled by min() without explicit cast.
    
    Fixes: 3b434a3445ff ("accel/ivpu: Use threaded IRQ to handle JOB done messages")
    Cc: stable@vger.kernel.org # v6.12+
    Signed-off-by: Andrzej Kacprowski <andrzej.kacprowski@linux.intel.com>
    Reviewed-by: Karol Wachowski <karol.wachowski@linux.intel.com>
    Signed-off-by: Karol Wachowski <karol.wachowski@linux.intel.com>
    Link: https://patch.msgid.link/20260601161643.229342-1-andrzej.kacprowski@linux.intel.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: seq: dummy: fix UMP event stack overread [+ + +]
Author: Kyle Zeng <kylebot@openai.com>
Date:   Fri Jun 5 01:02:04 2026 -0700

    ALSA: seq: dummy: fix UMP event stack overread
    
    [ Upstream commit 2b5ff4db5d7aa5b981d966df02e687f79ad7b311 ]
    
    The dummy sequencer port forwards events by copying an incoming
    struct snd_seq_event into a stack temporary, rewriting source and
    destination, and dispatching the temporary to subscribers. That legacy
    event storage is smaller than struct snd_seq_ump_event.
    
    When a UMP event reaches the dummy client, the copy leaves the UMP flag
    set but only provides legacy-sized stack storage. The subscriber
    delivery path then uses snd_seq_event_packet_size() and copies a
    UMP-sized packet from that stack object, reading past the end of the
    temporary.
    
    Use the existing union __snd_seq_event storage and copy the packet size
    reported for the incoming event before rewriting the common routing
    fields. This preserves the full UMP packet for UMP events while keeping
    legacy event handling unchanged.
    
    Fixes: 32cb23a0f911 ("ALSA: seq: dummy: Allow UMP conversion")
    Signed-off-by: Kyle Zeng <kylebot@openai.com>
    Link: https://patch.msgid.link/20260605080204.32045-1-kylebot@openai.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>

ALSA: timer: Forcibly close timer instances at closing [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Sat Jun 6 18:11:40 2026 +0200

    ALSA: timer: Forcibly close timer instances at closing
    
    commit da3039e91d1f835874ed6e9a33ea19ee80c2cb92 upstream.
    
    When snd_timer object is freed via snd_timer_free() and still pending
    snd_timer_instance objects are assigned to the timer object, it tries
    to unlink all instances and just set NULL to each ti->timer, then
    releases the resources immediately.  The problem is, however, when
    there are slave timer instances that are associated with a master
    instance linked to this timer: namely, those slave instances still
    point to the freed timer object although the master instance is
    unlinked, which may lead to user-after-free.  The bug can be easily
    triggered particularly when a new userspace-driven timers
    (CONFIG_SND_UTIMER) is involved, since it can create and delete the
    timer object via a simple file open/close, while the other
    applications may keep accessing to that timer.
    
    This patch is an attempt to paper over the problem above: now instead
    of just unlinking, call snd_timer_close[_locked]() forcibly for each
    pending timer instance, so that all assigned slave timer instances are
    properly detached, too.  Since snd_timer_close() might be called later
    by the driver that created that instance, the check of
    SNDRV_TIMER_IFLG_DEAD is added at the beginning, too.
    
    Reported-by: Kyle Zeng <kylebot@openai.com>
    Tested-by: Kyle Zeng <kylebot@openai.com>
    Fixes: 37745918e0e7 ("ALSA: timer: Introduce virtual userspace-driven timers")
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260606161145.1933447-1-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:15:49 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.12.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:15:48 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.12.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:15:47 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.12.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:15:52 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.12.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:15:51 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.12.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:15:50 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.12.y]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: tlb: Allow XZR argument to TLBI ops [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Jun 11 14:40:23 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.12.y]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: tlb: Optimize ARM64_WORKAROUND_REPEAT_TLBI [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Thu Jun 11 14:40:24 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.12.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: allow __do_kernel_fault() to report execution of memory faults [+ + +]
Author: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Date:   Mon May 11 15:53:55 2026 +0200

    ARM: allow __do_kernel_fault() to report execution of memory faults
    
    commit 40b466db1dffb41f0529035c59c5739636d0e5b8 upstream.
    
    Allow __do_kernel_fault() to detect the execution of memory, so we can
    provide the same fault message as do_page_fault() would do. This is
    required when we split the kernel address fault handling from the
    main do_page_fault() code path.
    
    Reviewed-by: Xie Yuanbin <xieyuanbin1@huawei.com>
    Tested-by: Xie Yuanbin <xieyuanbin1@huawei.com>
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: fix branch predictor hardening [+ + +]
Author: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Date:   Mon May 11 15:53:57 2026 +0200

    ARM: fix branch predictor hardening
    
    commit fd2dee1c6e2256f726ba33fd3083a7be0efc80d3 upstream.
    
    __do_user_fault() may be called with indeterminent interrupt enable
    state, which means we may be preemptive at this point. This causes
    problems when calling harden_branch_predictor(). For example, when
    called from a data abort, do_alignment_fault()->do_bad_area().
    
    Move harden_branch_predictor() out of __do_user_fault() and into the
    calling contexts.
    
    Moving it into do_kernel_address_page_fault(), we can be sure that
    interrupts will be disabled here.
    
    Converting do_translation_fault() to use do_kernel_address_page_fault()
    rather than do_bad_area() means that we keep branch predictor handling
    for translation faults. Interrupts will also be disabled at this call
    site.
    
    do_sect_fault() needs special handling, so detect user mode accesses
    to kernel-addresses, and add an explicit call to branch predictor
    hardening.
    
    Finally, add branch predictor hardening to do_alignment() for the
    faulting case (user mode accessing kernel addresses) before interrupts
    are enabled.
    
    This should cover all cases where harden_branch_predictor() is called,
    ensuring that it is always has interrupts disabled, also ensuring that
    it is called early in each call path.
    
    Reviewed-by: Xie Yuanbin <xieyuanbin1@huawei.com>
    Tested-by: Xie Yuanbin <xieyuanbin1@huawei.com>
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: fix hash_name() fault [+ + +]
Author: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Date:   Mon May 11 15:53:56 2026 +0200

    ARM: fix hash_name() fault
    
    commit 7733bc7d299d682f2723dc38fc7f370b9bf973e9 upstream.
    
    Zizhi Wo reports:
    
    "During the execution of hash_name()->load_unaligned_zeropad(), a
     potential memory access beyond the PAGE boundary may occur. For
     example, when the filename length is near the PAGE_SIZE boundary.
     This triggers a page fault, which leads to a call to
     do_page_fault()->mmap_read_trylock(). If we can't acquire the lock,
     we have to fall back to the mmap_read_lock() path, which calls
     might_sleep(). This breaks RCU semantics because path lookup occurs
     under an RCU read-side critical section."
    
    This is seen with CONFIG_DEBUG_ATOMIC_SLEEP=y and CONFIG_KFENCE=y.
    
    Kernel addresses (with the exception of the vectors/kuser helper
    page) do not have VMAs associated with them. If the vectors/kuser
    helper page faults, then there are two possibilities:
    
    1. if the fault happened while in kernel mode, then we're basically
       dead, because the CPU won't be able to vector through this page
       to handle the fault.
    2. if the fault happened while in user mode, that means the page was
       protected from user access, and we want to fault anyway.
    
    Thus, we can handle kernel addresses from any context entirely
    separately without going anywhere near the mmap lock. This gives us
    an entirely non-sleeping path for all kernel mode kernel address
    faults.
    
    As we handle the kernel address faults before interrupts are enabled,
    this change has the side effect of improving the branch predictor
    hardening, but does not completely solve the issue.
    
    Reported-by: Zizhi Wo <wozizhi@huaweicloud.com>
    Reported-by: Xie Yuanbin <xieyuanbin1@huawei.com>
    Link: https://lore.kernel.org/r/20251126090505.3057219-1-wozizhi@huaweicloud.com
    Reviewed-by: Xie Yuanbin <xieyuanbin1@huawei.com>
    Tested-by: Xie Yuanbin <xieyuanbin1@huawei.com>
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: group is_permission_fault() with is_translation_fault() [+ + +]
Author: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Date:   Mon May 11 15:53:54 2026 +0200

    ARM: group is_permission_fault() with is_translation_fault()
    
    commit dea20281ac88226615761c570c8ff7adc18e6ac2 upstream.
    
    Group is_permission_fault() with is_translation_fault(), which is
    needed to use is_permission_fault() in __do_kernel_fault(). As
    this is static inline, there is no need for this to be under
    CONFIG_MMU.
    
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.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: 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: 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>

 
block: fix handling of dead zone write plugs [+ + +]
Author: Damien Le Moal <dlemoal@kernel.org>
Date:   Wed May 13 20:11:29 2026 +0900

    block: fix handling of dead zone write plugs
    
    commit 836efd35c472d89c838d7b17ef339ddb3286ffc5 upstream.
    
    Shin'ichiro reported hard to reproduce unaligned write errors with zoned
    block devices. Under normal operation conditions (e.g. running XFS on an
    SMR disk), these errors are nearly impossible to trigger. But using a
    "slow" kernel with many debug options enables and some specific use
    cases (e.g. fio zbd test case 46), the errors can be reproduced fairly
    easily.
    
    The unaligned write errors come from mishandling a valid reference
    counting pattern of zone write plugs. Such pattern triggers for instance
    if a process A writes a zone (not necessarilly to the full state),
    another process B immediately resets the zone and immediately following
    the completion of the zone reset, starts issuing writes to the zone.
    With such pattern, in some cases, the zone write plugs worker thread of
    the device may still be holding a reference to the zone write plug of
    the zone taken when process A was writing to the zone. The following
    zone reset from process B marks the zone as dead but does not remove the
    zone write plug from the device hash table as a reference to the plug
    still exist. Once process B starts issuing new writes, the zone write
    plug is seen as dead and the writes from process B are immediately
    failed, despite this write pattern being perfectly legal.
    
    Fix this by allowing restoring a dead zone write plug to a live state if
    a write is issued to the zone when the zone is: marked as dead, empty
    and the write sector corresponds to the first sector of the zone (that
    is, the write is aligned to the zone write pointer). This is done with
    the new helper function disk_check_zone_wplug_dead(), which restores a
    dead zone write plug to a live state by clearing the BLK_ZONE_WPLUG_DEAD
    flag and restoring the initial reference to the zone write plug taken
    when the plug was added to the device hash table.
    
    Reported-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
    Fixes: b7d4ffb51037 ("block: fix zone write plug removal")
    Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
    Tested-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
    Link: https://patch.msgid.link/20260513111129.108809-1-dlemoal@kernel.org
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    [ context conflict due to different line offsets in blk-zoned.c ]
    Signed-off-by: Gyokhan Kochmarla <gyokhan@amazon.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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: 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_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: ISO: Fix data-race on iso_pi fields in hci_get_route calls [+ + +]
Author: SeungJu Cheon <suunj1331@gmail.com>
Date:   Mon Jun 1 20:19:07 2026 +0900

    Bluetooth: ISO: Fix data-race on iso_pi fields in hci_get_route calls
    
    [ Upstream commit 9ca7053d6215d89c33f28893bfd1625a32919d3f ]
    
    iso_connect_bis(), iso_connect_cis(), iso_listen_bis(), and
    iso_conn_big_sync() call hci_get_route() using iso_pi(sk)->dst,
    iso_pi(sk)->src, and iso_pi(sk)->src_type without holding lock_sock().
    
    These fields may be modified concurrently by connect() or setsockopt()
    on the same socket, resulting in data-races reported by KCSAN.
    
    Fix this by snapshotting the required fields under lock_sock() before
    calling hci_get_route().
    
    BUG: KCSAN: data-race in memcmp+0x45/0xb0
    
    race at unknown origin, with read to 0xffff8880122135cf of 1 bytes
    by task 333 on cpu 1:
     memcmp+0x45/0xb0
     hci_get_route+0x27e/0x490
     iso_connect_cis+0x4c/0xa10
     iso_sock_connect+0x60e/0xb30
     __sys_connect_file+0xbd/0xe0
     __sys_connect+0xe0/0x110
     __x64_sys_connect+0x40/0x50
     x64_sys_call+0xcad/0x1c60
     do_syscall_64+0x133/0x590
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Fixes: 241f51931c35 ("Bluetooth: ISO: Avoid circular locking dependency")
    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>

Bluetooth: ISO: Fix not releasing hdev reference on iso_conn_big_sync [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Mon Jun 1 14:45:42 2026 -0400

    Bluetooth: ISO: Fix not releasing hdev reference on iso_conn_big_sync
    
    [ Upstream commit 5cbf290b79351971f20c7a533247e8d58a3f970c ]
    
    hci_get_route() returns a reference-counted hci_dev pointer via
    hci_dev_hold(). The function exits normally or with an error without ever
    releasing it.
    
    Fixes: 07a9342b94a9 ("Bluetooth: ISO: Send BIG Create Sync via hci_sync")
    Reported-by: Sashiko <sashiko-bot@kernel.org>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: ISO: Fix not using bc_sid as advertisement SID [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Fri Jun 6 14:32:49 2025 -0400

    Bluetooth: ISO: Fix not using bc_sid as advertisement SID
    
    [ Upstream commit 5842c01a9ed1d515c8ba2d6d3733eac78ace89c1 ]
    
    Currently bc_sid is being ignore when acting as Broadcast Source role,
    so this fix it by passing the bc_sid and then use it when programming
    the PA:
    
    < HCI Command: LE Set Exte.. (0x08|0x0036) plen 25
            Handle: 0x01
            Properties: 0x0000
            Min advertising interval: 140.000 msec (0x00e0)
            Max advertising interval: 140.000 msec (0x00e0)
            Channel map: 37, 38, 39 (0x07)
            Own address type: Random (0x01)
            Peer address type: Public (0x00)
            Peer address: 00:00:00:00:00:00 (OUI 00-00-00)
            Filter policy: Allow Scan Request from Any, Allow Connect Request from Any (0x00)
            TX power: Host has no preference (0x7f)
            Primary PHY: LE 1M (0x01)
            Secondary max skip: 0x00
            Secondary PHY: LE 2M (0x02)
            SID: 0x01
            Scan request notifications: Disabled (0x00)
    
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Stable-dep-of: 9ca7053d6215 ("Bluetooth: ISO: Fix data-race on iso_pi fields in hci_get_route calls")
    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: 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>

 
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>
 
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>

clk: qcom: x1e80100-dispcc: Stop disp_cc_mdss_mdp_clk_src from getting parked [+ + +]
Author: Hans de Goede <johannes.goede@oss.qualcomm.com>
Date:   Sat Apr 25 14:33:51 2026 +0200

    clk: qcom: x1e80100-dispcc: Stop disp_cc_mdss_mdp_clk_src from getting parked
    
    [ Upstream commit bc27dbefae6ed11376d991a2921eff806ffef67c ]
    
    Parking disp_cc_mdss_mdp_clk_src at 19.2MHz causing the EFI GOP framebuffer
    to stop functioning. The EFI GOP framebuffer should keep working until
    the msm display driver loads, to help with boot debugging and to ensure
    display output when the msm module is not in the initramfs.
    
    Switch disp_cc_mdss_mdp_clk_src over to clk_rcg2_shared_no_init_park_ops
    to keep the EFI GOP working after binding the x1e80100-dispcc driver.
    
    Suggested-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Signed-off-by: Hans de Goede <johannes.goede@oss.qualcomm.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Fixes: 01a0a6cc8cfd ("clk: qcom: Park shared RCGs upon registration")
    Link: https://lore.kernel.org/r/20260425123351.6292-1-johannes.goede@oss.qualcomm.com
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: samsung: gs101: Fix missing USI7_USI DIV clock in peric0_clk_regs [+ + +]
Author: Kuan-Wei Chiu <visitorckw@gmail.com>
Date:   Tue May 5 17:14:57 2026 +0000

    clk: samsung: gs101: Fix missing USI7_USI DIV clock in peric0_clk_regs
    
    [ Upstream commit 78ee734b36284d82454e87a92094fdb926985b47 ]
    
    In the peric0_clk_regs array, the divider register offset for USI6 was
    accidentally listed twice, while the divider for USI7 was omitted.
    
    Missing this DIV register causes the USI7 clock divider setting to be
    lost and reset to its hardware default value during a suspend/resume
    cycle.
    
    Replace the duplicated USI6 DIV entry with the correct USI7 DIV
    register.
    
    Fixes: 893f133a040b ("clk: samsung: gs101: add support for cmu_peric0")
    Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
    Reviewed-by: Peter Griffin <peter.griffin@linaro.org>
    Reviewed-by: Tudor Ambarus <tudor.ambarus@linaro.org>
    Link: https://patch.msgid.link/20260505171457.1960837-1-visitorckw@gmail.com
    Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
devlink: Release nested relation on devlink free [+ + +]
Author: Mark Bloch <mbloch@nvidia.com>
Date:   Thu May 28 22:14:10 2026 +0300

    devlink: Release nested relation on devlink free
    
    [ Upstream commit 3522b21fd7e1863d0734537737bd59f1b90d0190 ]
    
    devlink relation state is normally released from devl_unregister(), which
    calls devlink_rel_put(). This misses devlink instances that get a nested
    relation before registration and then fail probe before devl_register() is
    reached.
    
    That flow can happen for SFs. The child devlink gets linked to its
    parent before registration, then a later probe error calls devlink_free()
    directly. Since the instance was never registered, devl_unregister() is not
    called and devlink->rel is leaked.
    
    Release any pending relation from devlink_free() as well. The registered
    path is unchanged because devl_unregister() already clears devlink->rel
    before devlink_free() runs.
    
    Fixes: c137743bce02 ("devlink: introduce object and nested devlink relationship infra")
    Signed-off-by: Mark Bloch <mbloch@nvidia.com>
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Link: https://patch.msgid.link/20260528191411.3270532-1-mbloch@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@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>

 
dma-debug: fix physical address retrieval in debug_dma_sync_sg_for_device [+ + +]
Author: Li RongQing <lirongqing@baidu.com>
Date:   Wed Jun 3 20:37:08 2026 +0800

    dma-debug: fix physical address retrieval in debug_dma_sync_sg_for_device
    
    [ Upstream commit 9bfaa86b405381326c971984fd6da184c289713f ]
    
    In debug_dma_sync_sg_for_device(), when iterating over a scatterlist,
    the debug entry population mistakenly uses the head of the scatterlist
    'sg' to fetch the physical address via sg_phys(), instead of using the
    current iterator variable 's'.
    
    This causes dma-debug to track the physical address of the very first
    scatterlist entry for all subsequent entries in the list.
    
    Fix this by passing the correct loop iterator 's' to sg_phys()
    
    Fixes: 9d4f645a1fd49ee ("dma-debug: store a phys_addr_t in struct dma_debug_entry")
    Signed-off-by: Li RongQing <lirongqing@baidu.com>
    Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Link: https://lore.kernel.org/r/20260603123708.1665-1-lirongqing@baidu.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/amd/display: add missing CSC entries for BT.2020 for DCE IPs [+ + +]
Author: Leorize <leorize+oss@disroot.org>
Date:   Wed May 27 23:58:54 2026 -0700

    drm/amd/display: add missing CSC entries for BT.2020 for DCE IPs
    
    commit 6590fe323ce2807f5d9454e7fccf3fab875d4352 upstream.
    
    DCE-based hardware does not have the CSC matrices for BT.2020, which
    causes the driver to fallback to the GPU built-in matrices. This does
    not appear to cause any issues for RGB sinks, but causes major color
    artifacts for YCbCr ones (e.g. black becomes green).
    
    This commit adds the missing CSC matrices (taken from DC common) to DCE
    CSC tables, resolving the issue.
    
    Closes: https://gitlab.freedesktop.org/drm/amd/-/work_items/3358
    Closes: https://gitlab.freedesktop.org/drm/amd/-/work_items/5333
    Assisted-by: oh-my-pi:GPT-5.5
    Signed-off-by: Leorize <leorize+oss@disroot.org>
    Reviewed-by: Alex Hung <alex.hung@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 51e6668ab4baf55b082c376318d51ef965757196)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Bound VBIOS record-chain walk loops [+ + +]
Author: Harry Wentland <harry.wentland@amd.com>
Date:   Tue May 12 15:24:22 2026 -0400

    drm/amd/display: Bound VBIOS record-chain walk loops
    
    commit ff287df16a1a58aca78b08d1f3ee09fc44da0351 upstream.
    
    [Why & How]
    All record-chain walk loops in bios_parser.c and bios_parser2.c use
    for(;;) and only terminate on a 0xFF record_type sentinel or zero
    record_size. A malformed VBIOS image missing the terminator record
    causes unbounded iteration at probe time, potentially hundreds of
    thousands of iterations with record_size=1. In the final iterations
    near the BIOS image boundary, struct casts beyond the 2-byte header
    validated by GET_IMAGE can also read out of bounds.
    
    Cap all 14 record-chain walk loops to BIOS_MAX_NUM_RECORD (256)
    iterations. The atombios.h defines up to 22 distinct record types
    and atomfirmware.h has 13. Assuming an average of less than 10
    records per type (which is reasonable since most are connector-
    based) 256 is a generous upper bound.
    
    Fixes: 4562236b3bc0 ("drm/amd/dc: Add dc display driver (v2)")
    Assisted-by: Copilot:claude-opus-4.6 Mythos
    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 95700a3d660287ed657d6892f7be9ffc0e294a93)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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: fix smu13 power limit default/cap calculation [+ + +]
Author: Yang Wang <kevinyang.wang@amd.com>
Date:   Tue May 19 11:18:12 2026 +0800

    drm/amd/pm: fix smu13 power limit default/cap calculation
    
    commit bb204f19e4a115f094a6a3c4d82fcf48862d0766 upstream.
    
    smu_v13_0_0_get_power_limit() and smu_v13_0_7_get_power_limit() mix
    runtime power_limit with PP table limits when reporting default/min/max.
    
    When current power limit query succeeds, default_power_limit was set to the
    runtime value instead of the PP table default, and min/max could be derived
    from inconsistent bases (MsgLimits/runtime), leading to incorrect cap info.
    
    Use SocketPowerLimitAc/Dc as the PP default base (pp_limit), keep
    current_power_limit as runtime value, and derive min/max from pp_limit with
    OD percentages.
    
    Closes: https://gitlab.freedesktop.org/drm/amd/-/work_items/5227
    Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
    Reviewed-by: Kenneth Feng <kenneth.feng@amd.com>
    Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 1eaf26db95901ca70737503a89b831dd763c8453)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/pm: mark metrics.energy_accumulator is invalid for smu 14.0.2 [+ + +]
Author: Yang Wang <kevinyang.wang@amd.com>
Date:   Fri May 29 11:47:31 2026 +0800

    drm/amd/pm: mark metrics.energy_accumulator is invalid for smu 14.0.2
    
    commit ee193c5bbd5e2b56bbeb54ef554414b43a6fc896 upstream.
    
    EnergyAccumulator is unsupported on SMU 14.0.2, mark it invalid.
    
    Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
    Reviewed-by: Asad Kamal <asad.kamal@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 646b05043eeed04b51c14aad22a400a8250af4b7)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/pm: smu_v14_0_0: use SoftMin for gfxclk in set_soft_freq_limited_range [+ + +]
Author: Priya Hosur <Priya.Hosur@amd.com>
Date:   Thu May 7 13:31:37 2026 +0530

    drm/amd/pm: smu_v14_0_0: use SoftMin for gfxclk in set_soft_freq_limited_range
    
    commit 03b70e0d8aa26bab89a0f1394c1c80a871925e42 upstream.
    
    In smu_v14_0_0_set_soft_freq_limited_range(), the gfxclk floor is
    programmed via SetHardMinGfxClk together with SetSoftMaxGfxClk. Under
    power_dpm_force_performance_level=high this pins HardMin to peak gfxclk.
    
    In PMFW arbitration HardMin has higher priority than SoftMax, so the
    firmware thermal/PPT throttler cannot clamp gfxclk via SoftMax once
    HardMin is set to peak. Replace SetHardMinGfxClk with SetSoftMinGfxclk
    so the driver still requests peak performance but the firmware
    throttler retains the ability to clamp gfxclk under thermal/PPT
    pressure. SoftMax handling is unchanged and no other clock domains
    are affected.
    
    Signed-off-by: Priya Hosur <Priya.Hosur@amd.com>
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 3ea273267fd29cbf6d83ee72329f59eb5042605b)
    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: 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/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/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/v3d: Fix vaddr leak when indirect CSD has zeroed workgroups [+ + +]
Author: MaĂ­ra Canal <mcanal@igalia.com>
Date:   Tue Jun 2 14:50:14 2026 -0300

    drm/v3d: Fix vaddr leak when indirect CSD has zeroed workgroups
    
    commit ae7676952790f421c40918e2586a2c9f12a682b6 upstream.
    
    v3d_rewrite_csd_job_wg_counts_from_indirect() maps both the indirect
    buffer and the workgroup buffer and is expected to release them before
    returning. When any of the workgroup counts read from the buffer is zero,
    the function bailed out early and skipped the cleanup, leaking the vaddr
    mappings of both BOs.
    
    Jump to the cleanup path instead of returning directly, so the mappings
    are always dropped.
    
    Cc: stable@vger.kernel.org
    Fixes: 18b8413b25b7 ("drm/v3d: Create a CPU job extension for a indirect CSD job")
    Suggested-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
    Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
    Link: https://patch.msgid.link/20260602-v3d-fix-indirect-csd-v4-1-654309e32bc0@igalia.com
    Signed-off-by: MaĂ­ra Canal <mcanal@igalia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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/xe: Clear pending_disable before signaling suspend fence [+ + +]
Author: Tangudu Tilak Tirumalesh <tilak.tirumalesh.tangudu@intel.com>
Date:   Wed Jun 3 12:22:16 2026 +0530

    drm/xe: Clear pending_disable before signaling suspend fence
    
    commit 54f2a0442a30fe7a0f6bc8345e81f8b2db8effbd upstream.
    
    In the schedule-disable done path for suspend, we
    signal the suspend fence before clearing pending_disable.
    
    That wakeup can let suspend_wait complete and resume be queued
    immediately. The resume path may then reach enable_scheduling()
    while pending_disable is still set and hit the
    !exec_queue_pending_disable(q) assertion.
    
    Fix this by clearing pending_disable before signaling
    the suspend fence, so any resumed transition observes a
    consistent state.
    
    Fixes: 87651f31ae4e ("drm/xe/guc_submit: fix race around suspend_pending")
    Cc: stable@vger.kernel.org # v7.0+
    Signed-off-by: Tangudu Tilak Tirumalesh <tilak.tirumalesh.tangudu@intel.com>
    Reviewed-by: Thomas Hellstrom <thomas.hellstrom@linux.intel.com>
    Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
    Link: https://patch.msgid.link/20260603065217.3131066-3-tilak.tirumalesh.tangudu@intel.com
    (cherry picked from commit 4b1ae138b0e103d753773956a84eebc2edbf62c4)
    Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/xe: fix refcount leak in xe_range_fence_insert() [+ + +]
Author: Wentao Liang <vulab@iscas.ac.cn>
Date:   Wed Jun 10 10:27:05 2026 -0700

    drm/xe: fix refcount leak in xe_range_fence_insert()
    
    [ Upstream commit ba36786b21d19082e696eda85bfcd49e7071944a ]
    
    xe_range_fence_insert() acquires a reference on fence via
    dma_fence_get() and stores it in rfence->fence.  It then calls
    dma_fence_add_callback() and handles two cases: when the callback
    is successfully registered (err == 0) the fence is transferred to
    the tree for later cleanup; when the fence is already signaled
    (err == -ENOENT) it manually drops the extra reference with
    dma_fence_put(fence).
    
    However, dma_fence_add_callback() can fail with other errors
    (e.g. -EINVAL) and in that case the code falls through to the free:
    label without releasing the acquired reference, leaking it.
    
    Fix the leak by adding an else branch that calls dma_fence_put()
    before jumping to free: for any error other than -ENOENT.
    
    Fixes: 845f64bdbfc9 ("drm/xe: Introduce a range-fence utility")
    Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
    Reviewed-by: Matthew Brost <matthew.brost@intel.com>
    Signed-off-by: Matthew Brost <matthew.brost@intel.com>
    Link: https://patch.msgid.link/20260610172705.3450560-1-matthew.brost@intel.com
    (cherry picked from commit 98c4a4201290823c2c5c7ba21692bd9a64b61021)
    Signed-off-by: Matthew Brost <matthew.brost@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
erofs: add sysfs node to drop internal caches [+ + +]
Author: Chunhai Guo <guochunhai@vivo.com>
Date:   Tue Nov 12 21:11:48 2024 -0700

    erofs: add sysfs node to drop internal caches
    
    [ Upstream commit db80b98305f73ca83891e4228ead5f0324118b00 ]
    
    Add a sysfs node to drop compression-related caches, currently used to
    drop in-memory pclusters and cached compressed folios.
    
    Signed-off-by: Chunhai Guo <guochunhai@vivo.com>
    Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    Link: https://lore.kernel.org/r/20241113041148.749129-1-guochunhai@vivo.com
    Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    Stable-dep-of: 1aee05e814d2 ("erofs: fix use-after-free on sbi->sync_decompress")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

erofs: fix use-after-free on sbi->sync_decompress [+ + +]
Author: Gao Xiang <xiang@kernel.org>
Date:   Fri May 22 16:27:16 2026 +0800

    erofs: fix use-after-free on sbi->sync_decompress
    
    [ Upstream commit 1aee05e814d292064bf5fa15733741040cdc48ba ]
    
    z_erofs_decompress_kickoff() can race with filesystem unmount, causing
    a use-after-free on sbi->sync_decompress.
    
    When I/O completes, z_erofs_endio() calls z_erofs_decompress_kickoff()
    to queue z_erofs_decompressqueue_work() asynchronously. Then, after all
    folios are unlocked, unmount workflow can proceed and sbi will be freed
    before accessing to sbi->sync_decompress.
    
    Thread (unmount)        I/O completion        kworker
                            queue_work
                                                  z_erofs_decompressqueue_work
                                                   (all folios are unlocked)
    cleanup_mnt
     ..
     erofs_kill_sb
      erofs_sb_free
       kfree(sbi)
                            access sbi->sync_decompress  // UAF!!
    
    Fixes: 40452ffca3c1 ("erofs: add sysfs node to control sync decompression strategy")
    Reported-by: syzbot+52bae5c495dbe261a0bc@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=52bae5c495dbe261a0bc
    Reviewed-by: Chao Yu <chao@kernel.org>
    Reviewed-by: Jianan Huang <jnhuang95@gmail.com>
    Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

erofs: tidy up synchronous decompression [+ + +]
Author: Gao Xiang <xiang@kernel.org>
Date:   Mon Jan 12 11:43:30 2026 +0800

    erofs: tidy up synchronous decompression
    
    [ Upstream commit cc831ab33644088c1eef78936de24701014d520a ]
    
     - Get rid of `sbi->opt.max_sync_decompress_pages` since it's fixed as
       3 all the time;
    
     - Add Z_EROFS_MAX_SYNC_DECOMPRESS_BYTES in bytes instead of in pages,
       since for non-4K pages, 3-page limitation makes no sense;
    
     - Move `sync_decompress` to sbi to avoid unexpected remount impact;
    
     - Fold z_erofs_is_sync_decompress() into its caller;
    
     - Better description of sysfs entry `sync_decompress`.
    
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    Stable-dep-of: 1aee05e814d2 ("erofs: fix use-after-free on sbi->sync_decompress")
    Signed-off-by: Sasha Levin <sashal@kernel.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>

 
fs/qnx6: fix pointer arithmetic in directory iteration [+ + +]
Author: Arpith Kalaginanavoor <arpithk@nvidia.com>
Date:   Tue May 26 05:38:58 2026 -0700

    fs/qnx6: fix pointer arithmetic in directory iteration
    
    commit 89c4a1167f3a0a0efd2ec3e1801036d2eb65ae1a upstream.
    
    The conversion to qnx6_get_folio() in commit b2aa61556fcf
    ("qnx6: Convert qnx6_get_page() to qnx6_get_folio()")
    introduced a regression in directory iteration. The pointer 'de'
    and the 'limit' address were calculated using byte offsets from
    a char pointer without scaling by the size of a QNX6 directory
    entry.
    
    This causes the driver to read from incorrect memory offsets,
    leading to "invalid direntry size" errors and premature
    termination of directory scans.
    
    Fix this by casting 'kaddr' to 'struct qnx6_dir_entry *' before
    applying the offset and last_entry(...) increments. This allows the
    compiler to correctly scale the pointer arithmetic by the 32-byte
    stride of the directory entry structure.
    
    Fixes: b2aa61556fcf ("qnx6: Convert qnx6_get_page() to qnx6_get_folio()")
    Cc: stable@vger.kernel.org
    Signed-off-by: Arpith Kalaginanavoor <arpithk@nvidia.com>
    Link: https://patch.msgid.link/20260526123858.1683035-1-arpithk@nvidia.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>

 
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: zynq: fix runtime PM leak on remove [+ + +]
Author: Ruoyu Wang <ruoyuw560@gmail.com>
Date:   Tue Jun 9 15:33:13 2026 +0800

    gpio: zynq: fix runtime PM leak on remove
    
    [ Upstream commit 6edb934de9bda3b7abcec856eaee6fc8b4278dd1 ]
    
    pm_runtime_get_sync() increments the runtime PM usage counter even when it
    returns an error. zynq_gpio_remove() uses it to keep the controller active
    while removing the GPIO chip, but never drops the usage counter again.
    
    Balance the get with pm_runtime_put_noidle() after disabling runtime PM.
    
    Fixes: 3242ba117e9b ("gpio: Add driver for Zynq GPIO controller")
    Signed-off-by: Ruoyu Wang <ruoyuw560@gmail.com>
    Link: https://patch.msgid.link/20260609073313.5-1-ruoyuw560@gmail.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.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:01:58 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>

 
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>

 
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>

 
ima: kexec: move IMA log copy from kexec load to execute [+ + +]
Author: Steven Chen <chenste@linux.microsoft.com>
Date:   Tue Jun 9 14:58:44 2026 -0700

    ima: kexec: move IMA log copy from kexec load to execute
    
    [ Upstream commit 9f0ec4b16f2b41d663f688a8012e9e52b2657eba ]
    
    The IMA log is currently copied to the new kernel during kexec 'load' using
    ima_dump_measurement_list(). However, the IMA measurement list copied at
    kexec 'load' may result in loss of IMA measurements records that only
    occurred after the kexec 'load'. Move the IMA measurement list log copy
    from kexec 'load' to 'execute'
    
    Make the kexec_segment_size variable a local static variable within the
    file, so it can be accessed during both kexec 'load' and 'execute'.
    
    Define kexec_post_load() as a wrapper for calling ima_kexec_post_load() and
    machine_kexec_post_load().  Replace the existing direct call to
    machine_kexec_post_load() with kexec_post_load().
    
    When there is insufficient memory to copy all the measurement logs, copy as
    much of the measurement list as possible.
    
    Co-developed-by: Tushar Sugandhi <tusharsu@linux.microsoft.com>
    Signed-off-by: Tushar Sugandhi <tusharsu@linux.microsoft.com>
    Cc: Eric Biederman <ebiederm@xmission.com>
    Cc: Baoquan He <bhe@redhat.com>
    Cc: Vivek Goyal <vgoyal@redhat.com>
    Cc: Dave Young <dyoung@redhat.com>
    Signed-off-by: Steven Chen <chenste@linux.microsoft.com>
    Tested-by: Stefan Berger <stefanb@linux.ibm.com> # ppc64/kvm
    Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
    (cherry picked from commit 9f0ec4b16f2b41d663f688a8012e9e52b2657eba)
    Signed-off-by: Sherry Yang <sherry.yang@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ima: kexec: skip IMA segment validation after kexec soft reboot [+ + +]
Author: Steven Chen <chenste@linux.microsoft.com>
Date:   Tue Jun 9 14:58:43 2026 -0700

    ima: kexec: skip IMA segment validation after kexec soft reboot
    
    [ Upstream commit 9ee8888a80fe2bd20ce929ffbc1dedd57607a778 ]
    
    Currently, the function kexec_calculate_store_digests() calculates and
    stores the digest of the segment during the kexec_file_load syscall,
    where the  IMA segment is also allocated.
    
    Later, the IMA segment will be updated with the measurement log at the
    kexec execute stage when a kexec reboot is initiated. Therefore, the
    digests should be updated for the IMA segment in the  normal case. The
    problem is that the content of memory segments carried over to the new
    kernel during the kexec systemcall can be changed at kexec 'execute'
    stage, but the size and the location of the memory segments cannot be
    changed at kexec 'execute' stage.
    
    To address this, skip the calculation and storage of the digest for the
    IMA segment in kexec_calculate_store_digests() so that it is not added
    to the purgatory_sha_regions.
    
    With this change, the IMA segment is not included in the digest
    calculation, storage, and verification.
    
    Cc: Eric Biederman <ebiederm@xmission.com>
    Cc: Baoquan He <bhe@redhat.com>
    Cc: Vivek Goyal <vgoyal@redhat.com>
    Cc: Dave Young <dyoung@redhat.com>
    Co-developed-by: Tushar Sugandhi <tusharsu@linux.microsoft.com>
    Signed-off-by: Tushar Sugandhi <tusharsu@linux.microsoft.com>
    Signed-off-by: Steven Chen <chenste@linux.microsoft.com>
    Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
    Acked-by: Baoquan He <bhe@redhat.com>
    Tested-by: Stefan Berger <stefanb@linux.ibm.com> # ppc64/kvm
    [zohar@linux.ibm.com: Fixed Signed-off-by tag to match author's email ]
    Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
    (cherry picked from commit 9ee8888a80fe2bd20ce929ffbc1dedd57607a778)
    Signed-off-by: Sherry Yang <sherry.yang@oracle.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>

 
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>

 
io_uring/kbuf: don't truncate end buffer for bundles [+ + +]
Author: Jens Axboe <axboe@kernel.dk>
Date:   Sun Jun 7 16:05:47 2026 -0600

    io_uring/kbuf: don't truncate end buffer for bundles
    
    Commit 70f4886bcbb929e88038c8807f1daf7fc587ae7c upstream.
    
    If buffers have been peeked for a bundle receive, the kernel will
    truncate the end buffer, if the available length is shorter than the
    buffer itself. This is unnecessary, as applications iterating bundle
    receives must always use the minimum size of the buffer length and the
    remaining number of bytes in the bundle. The examples in liburing do
    that as well, eg examples/proxy.c.
    
    If the kernel does truncate this buffer AND the current transfer fails,
    then the buffer will be left with a smaller size than what is otherwise
    available.
    
    Just remove the buffer truncation, as it's not necessary in the first
    place.
    
    Link: https://lore.kernel.org/io-uring/CAAEr8jbY60noGj1fw_k91UJRBkyiRVoS6=nLhZ7Svwidjn4CAA@mail.gmail.com/
    Reported-by: Federico Brasili <federico.brasili@gmail.com>
    Cc: stable@vger.kernel.org
    Fixes: 35c8711c8fc4 ("io_uring/kbuf: add helpers for getting/peeking multiple buffers")
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
io_uring/net: inherit IORING_CQE_F_BUF_MORE across bundle recv retries [+ + +]
Author: Clément Léger <cleger@meta.com>
Date:   Thu Jun 4 09:07:13 2026 -0700

    io_uring/net: inherit IORING_CQE_F_BUF_MORE across bundle recv retries
    
    commit ed46f39c47eb5530a9c161481a2080d3a869cfaf upstream.
    
    When a bundle recv retries inside io_recv_finish(), the merge logic OR
    the saved cflags from the previous iteration with the cflags returned by
    the new iteration:
      cflags = req->cqe.flags | (cflags & CQE_F_MASK);
    
    Bits listed in CQE_F_MASK are inherited from the new iteration, and all
    other bits (notably IORING_CQE_F_BUFFER and the buffer ID) come from the
    saved cflags. Before this change CQE_F_MASK covered only
    IORING_CQE_F_SOCK_NONEMPTY and IORING_CQE_F_MORE.
    
    When using provided buffer rings (IOU_PBUF_RING_INC) with incremental
    mode, and bundle recv, io_kbuf_inc_commit() can leave the head ring
    entry partially consumed, __io_put_kbufs() then sets
    IORING_CQE_F_BUF_MORE on the returned cflags so userspace knows the
    buffer ID will be reused for subsequent completions.
    
    Because IORING_CQE_F_BUF_MORE was not in CQE_F_MASK, the merge above
    silently dropped it whenever the final retry iteration partially
    consumed the buffer, and the subsequent req->cqe.flags = cflags &
    ~CQE_F_MASK save would have left a stale IORING_CQE_F_BUF_MORE in the
    carried-over cflags had one been present. Userspace would then
    wrongfully advance it ring head past an entry the kernel still uses.
    
    Add IORING_CQE_F_BUF_MORE to CQE_F_MASK so it is both inherited from the
    new iteration into the user-visible CQE and stripped from the saved
    cflags between iterations.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Clément Léger <cleger@meta.com>
    Assisted-by: Claude:claude-opus-4.6
    Fixes: ae98dbf43d75 ("io_uring/kbuf: add support for incremental buffer consumption")
    Link: https://patch.msgid.link/20260604160715.2482972-1-cleger@meta.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
io_uring/wait: fix min_timeout behavior [+ + +]
Author: Christian A. Ehrhardt <lk@c--e.de>
Date:   Sat Jun 6 22:11:20 2026 +0200

    io_uring/wait: fix min_timeout behavior
    
    Commit 29fe1bd01b99714f3136f922230a643c2742cda9 upstream.
    
    The wakeup condition if a min timeout is present and has expired is that
    at least _one_ CQE was posted. Thus set the cq_tail target to
    ->cq_min_tail + 1. Without this commit a spurious wakeup can result in a
    premature wakeup because io_should_wake() will return true even if _no_
    CQE was posted at all.
    
    Cc: Tip ten Brink <tip@tenbrinkmeijs.com>
    Fixes: e15cb2200b93 ("io_uring: fix min_wait wakeups for SQPOLL")
    Cc: stable@vger.kernel.org
    Signed-off-by: Christian A. Ehrhardt <lk@c--e.de>
    Link: https://patch.msgid.link/20260606201120.1441447-1-lk@c--e.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    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>

 
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>

 
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: 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: 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: 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: 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>

 
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 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 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>

 
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: SEV: Decouple the need to sync the GHCB SA from the need to free the SA [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Fri May 29 20:35:41 2026 +0200

    KVM: SEV: Decouple the need to sync the GHCB SA from the need to free the SA
    
    commit f041dc80de4abbdd0909d871bf64f3f87d2350ff upstream.
    
    Decouple synchronizing the GHCB SA from freeing/unpinning the SA, so that
    the free/unpin path can be reused when freeing a vCPU.
    
    Opportunistically add a WARN to harden KVM against stomping over (and thus
    leaking) an already-allocated scratch area.
    
    Cc: stable@vger.kernel.org
    Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com>
    Reviewed-by: Michael Roth <michael.roth@amd.com>
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Message-ID: <20260501202250.2115252-17-seanjc@google.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Message-ID: <20260529183549.1104619-17-pbonzini@redhat.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: VMX: Update SVI during runtime APICv activation [+ + +]
Author: Dongli Zhang <dongli.zhang@oracle.com>
Date:   Fri Jun 12 14:10:01 2026 -0700

    KVM: VMX: Update SVI during runtime APICv activation
    
    commit b2849bec936be642b5420801f902337f2507648e upstream.
    
    The APICv (apic->apicv_active) can be activated or deactivated at runtime,
    for instance, because of APICv inhibit reasons. Intel VMX employs different
    mechanisms to virtualize LAPIC based on whether APICv is active.
    
    When APICv is activated at runtime, GUEST_INTR_STATUS is used to configure
    and report the current pending IRR and ISR states. Unless a specific vector
    is explicitly included in EOI_EXIT_BITMAP, its EOI will not be trapped to
    KVM. Intel VMX automatically clears the corresponding ISR bit based on the
    GUEST_INTR_STATUS.SVI field.
    
    When APICv is deactivated at runtime, the VM_ENTRY_INTR_INFO_FIELD is used
    to specify the next interrupt vector to invoke upon VM-entry. The
    VMX IDT_VECTORING_INFO_FIELD is used to report un-invoked vectors on
    VM-exit. EOIs are always trapped to KVM, so the software can manually clear
    pending ISR bits.
    
    There are scenarios where, with APICv activated at runtime, a guest-issued
    EOI may not be able to clear the pending ISR bit.
    
    Taking vector 236 as an example, here is one scenario.
    
    1. Suppose APICv is inactive. Vector 236 is pending in the IRR.
    2. To handle KVM_REQ_EVENT, KVM moves vector 236 from the IRR to the ISR,
    and configures the VM_ENTRY_INTR_INFO_FIELD via vmx_inject_irq().
    3. After VM-entry, vector 236 is invoked through the guest IDT. At this
    point, the data in VM_ENTRY_INTR_INFO_FIELD is no longer valid. The guest
    interrupt handler for vector 236 is invoked.
    4. Suppose a VM exit occurs very early in the guest interrupt handler,
    before the EOI is issued.
    5. Nothing is reported through the IDT_VECTORING_INFO_FIELD because
    vector 236 has already been invoked in the guest.
    6. Now, suppose APICv is activated. Before the next VM-entry, KVM calls
    kvm_vcpu_update_apicv() to activate APICv.
    7. Unfortunately, GUEST_INTR_STATUS.SVI is not configured, although
    vector 236 is still pending in the ISR.
    8. After VM-entry, the guest finally issues the EOI for vector 236.
    However, because SVI is not configured, vector 236 is not cleared.
    9. ISR is stalled forever on vector 236.
    
    Here is another scenario.
    
    1. Suppose APICv is inactive. Vector 236 is pending in the IRR.
    2. To handle KVM_REQ_EVENT, KVM moves vector 236 from the IRR to the ISR,
    and configures the VM_ENTRY_INTR_INFO_FIELD via vmx_inject_irq().
    3. VM-exit occurs immediately after the next VM-entry. The vector 236 is
    not invoked through the guest IDT. Instead, it is saved to the
    IDT_VECTORING_INFO_FIELD during the VM-exit.
    4. KVM calls kvm_queue_interrupt() to re-queue the un-invoked vector 236
    into vcpu->arch.interrupt. A KVM_REQ_EVENT is requested.
    5. Now, suppose APICv is activated. Before the next VM-entry, KVM calls
    kvm_vcpu_update_apicv() to activate APICv.
    6. Although APICv is now active, KVM still uses the legacy
    VM_ENTRY_INTR_INFO_FIELD to re-inject vector 236. GUEST_INTR_STATUS.SVI is
    not configured.
    7. After the next VM-entry, vector 236 is invoked through the guest IDT.
    Finally, an EOI occurs. However, due to the lack of GUEST_INTR_STATUS.SVI
    configuration, vector 236 is not cleared from the ISR.
    8. ISR is stalled forever on vector 236.
    
    Using QEMU as an example, vector 236 is stuck in ISR forever.
    
    (qemu) info lapic 1
    dumping local APIC state for CPU 1
    
    LVT0     0x00010700 active-hi edge  masked                      ExtINT (vec 0)
    LVT1     0x00010400 active-hi edge  masked                      NMI
    LVTPC    0x00000400 active-hi edge                              NMI
    LVTERR   0x000000fe active-hi edge                              Fixed  (vec 254)
    LVTTHMR  0x00010000 active-hi edge  masked                      Fixed  (vec 0)
    LVTT     0x000400ec active-hi edge                 tsc-deadline Fixed  (vec 236)
    Timer    DCR=0x0 (divide by 2) initial_count = 0 current_count = 0
    SPIV     0x000001ff APIC enabled, focus=off, spurious vec 255
    ICR      0x000000fd physical edge de-assert no-shorthand
    ICR2     0x00000000 cpu 0 (X2APIC ID)
    ESR      0x00000000
    ISR      236
    IRR      37(level) 236
    
    The issue isn't applicable to AMD SVM as KVM simply writes vmcb01 directly
    irrespective of whether L1 (vmcs01) or L2 (vmcb02) is active (unlike VMX,
    there is no need/cost to switch between VMCBs).  In addition,
    APICV_INHIBIT_REASON_IRQWIN ensures AMD SVM AVIC is not activated until
    the last interrupt is EOI'd.
    
    Fix the bug by configuring Intel VMX GUEST_INTR_STATUS.SVI if APICv is
    activated at runtime.
    
    Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com>
    Reviewed-by: Chao Gao <chao.gao@intel.com>
    Link: https://patch.msgid.link/20251110063212.34902-1-dongli.zhang@oracle.com
    [sean: call out that SVM writes vmcb01 directly, tweak comment]
    Link: https://patch.msgid.link/20251205231913.441872-2-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    (cherry picked from commit b2849bec936be642b5420801f902337f2507648e)
    Cc: stable@vger.kernel.org # 6.6.x and above
    Cc: Gulshan Gabel <gulshan.gabel@nutanix.com>
    Signed-off-by: Jon Kohler <jon@nutanix.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
l2tp: pppol2tp: hold reference to session in pppol2tp_ioctl() [+ + +]
Author: Lee Jones <lee@kernel.org>
Date:   Wed May 27 13:36:29 2026 +0000

    l2tp: pppol2tp: hold reference to session in pppol2tp_ioctl()
    
    [ Upstream commit a213a8950414c684999dcf03edeea6c46ede172e ]
    
    pppol2tp_ioctl() read sock->sk->sk_user_data directly without any
    locks or reference counting.  If a controllable sleep was induced during
    copy_from_user() (e.g. via a userfaultfd page fault sleep), a concurrent
    socket close could trigger pppol2tp_session_close() asynchronously.  This
    frees the l2tp_session structure via the l2tp_session_del_work workqueue.
    Upon resuming, the ioctl thread dereferences the stale session pointer,
    resulting in a Use-After-Free (UAF).
    
    Fix this by securely fetching the session reference using the RCU-safe,
    refcounted helper pppol2tp_sock_to_session(sk) on entry.  This locks the
    session's refcount across the sleep.  We structured the function to exit
    via standard err breaks, guaranteeing that l2tp_session_put() is cleanly
    called on all return paths to drop the reference.
    
    To preserve existing behavior we validate the session and its magic
    signature only for the specific L2TP commands that require it.  This
    ensures that generic/unknown ioctls called on an unconnected socket
    still return -ENOIOCTLCMD and correctly fall back to generic handlers
    (e.g. in sock_do_ioctl()).
    
    Signed-off-by: Lee Jones <lee@kernel.org>
    Fixes: fd558d186df2 ("l2tp: Split pppol2tp patch into separate l2tp and ppp parts")
    Link: https://patch.msgid.link/20260527133630.2120612-1-lee@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

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

    Linux 6.12.94
    
    Link: https://lore.kernel.org/r/20260616145044.869532709@linuxfoundation.org
    Tested-by: Brett A C Sheffield <bacs@librecast.net>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Tested-by: Shung-Hsi Yu <shung-hsi.yu@suse.com>
    Tested-by: Dominique Martinet <dominique.martinet@atmark-techno.com>
    Tested-by: Miguel Ojeda <ojeda@kernel.org>
    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: Ron Economos <re@w6rz.net>
    Tested-by: Pavel Machek (CIP) <pavel@nabladev.com>
    Tested-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mailbox: Fix NULL message support in mbox_send_message() [+ + +]
Author: Jassi Brar <jassisinghbrar@gmail.com>
Date:   Fri Mar 27 17:00:40 2026 -0500

    mailbox: Fix NULL message support in mbox_send_message()
    
    commit c58e9456e30c7098cbcd9f04571992be8a2e4e63 upstream.
    
    The active_req field serves double duty as both the "is a TX in
    flight" flag (NULL means idle) and the storage for the in-flight
    message pointer. When a client sends NULL via mbox_send_message(),
    active_req is set to NULL, which the framework misinterprets as
    "no active request". This breaks the TX state machine by:
    
     - tx_tick() short-circuits on (!mssg), skipping the tx_done
       callback and the tx_complete completion
     - txdone_hrtimer() skips the channel entirely since active_req
       is NULL, so poll-based TX-done detection never fires.
    
    Fix this by introducing a MBOX_NO_MSG sentinel value that means
    "no active request," freeing NULL to be valid message data. The
    sentinel is defined in the subsystem-internal mailbox.h so that
    controller drivers within drivers/mailbox/ can reference it, but
    it is not exposed to clients outside the subsystem.
    
    Fifteen in-tree callers send NULL (doorbell-style IPCs on Qualcomm,
    Tegra, TI, Xilinx, i.MX, SCMI, and PCC platforms). All were
    audited for regression:
    
     - Most already work around the bug via knows_txdone=true with a
       manual mbox_client_txdone() call, making the framework's
       tracking irrelevant. These are unaffected.
    
     - Poll-based callers (Xilinx zynqmp/r5) are strictly better off:
       the poll timer now correctly detects NULL-active channels
       instead of silently skipping them.
    
     - irq-qcom-mpm.c was a pre-existing bug -- the only Qualcomm
       caller that omitted the knows_txdone + mbox_client_txdone()
       pattern. Fixed in a companion commit ("irqchip/qcom-mpm: Fix
       missing mailbox TX done acknowledgment").
    
     - No caller sets both a tx_done callback and sends NULL, nor
       combines tx_block=true with NULL sends, so the newly reachable
       callback/completion paths are never exercised.
    
    Also update tegra-hsp's flush callback, which directly inspects
    active_req to wait for the channel to drain: the old "!= NULL"
    check becomes "!= MBOX_NO_MSG", otherwise flush spins until
    timeout since the sentinel is non-NULL.
    
    The only tradeoff is that 'MBOX_NO_MSG' can not be used as a message
    by clients.
    
    Reported-by: Joonwon Kang <joonwonkang@google.com>
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
    Signed-off-by: Joonwon Kang <joonwonkang@google.com>
    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/huge_memory: update file PMD counter before folio_put() [+ + +]
Author: Yin Tirui <yintirui@huawei.com>
Date:   Tue May 26 18:13:37 2026 +0800

    mm/huge_memory: update file PMD counter before folio_put()
    
    commit 8d878059924f12c1bc24556a92ec56add74de3c8 upstream.
    
    __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>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/hugetlb: avoid false positive lockdep assertion [+ + +]
Author: Lorenzo Stoakes <ljs@kernel.org>
Date:   Mon Jun 15 17:09:55 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: 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 09:28:59 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>

 
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: dw_mmc-rockchip: Add missing private data for very old controllers [+ + +]
Author: Heiko Stuebner <heiko@sntech.de>
Date:   Fri May 22 20:43:07 2026 +0200

    mmc: dw_mmc-rockchip: Add missing private data for very old controllers
    
    commit 1e9a4850afa0ceb63984fb1a9f3e86d0fc4fd18f upstream.
    
    The really old controllers (rk2928, rk3066, rk3188) do not support UHS
    speeds at all, and thus never handled phase data.
    
    For that reason it never had a parse_dt callback and no driver private
    data at all.
    
    Commit ff6f0286c896 ("mmc: dw_mmc-rockchip: Add memory clock auto-gating
    support") makes the private data sort of mandatory, because the init
    function checks whether phases are configured internally or through the
    clock controller.
    
    This results in the old SoCs then experiencing NULL-pointer dereferences
    when they try to access that private-data struct.
    
    While we could have if (priv) conditionals in all places, it's way less
    cluttery to just give the old types their private-data struct.
    
    Fixes: ff6f0286c896 ("mmc: dw_mmc-rockchip: Add memory clock auto-gating support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Acked-by: Shawn Lin <shawn.lin@rock-chips.com>
    Signed-off-by: Ulf Hansson <ulfh@kernel.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 2 22:14:18 2026 +1000

    mptcp: add-addr: always drop other suboptions
    
    commit bd34fa0257261b76964df1c98f44b3cb4ee14620 upstream.
    
    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: 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: 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: fix missing wakeups in edge scenarios [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Mon Jun 15 23:59:17 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: pm: fix extra_subflows underflow on userspace PM subflow creation [+ + +]
Author: Tao Cui <cuitao@kylinos.cn>
Date:   Tue Jun 2 22:14:12 2026 +1000

    mptcp: pm: fix extra_subflows underflow on userspace PM subflow creation
    
    commit 14e9fea30b68fc75b2b3d97396a7e6adb544bd2a upstream.
    
    The userspace PM increments extra_subflows after __mptcp_subflow_connect()
    succeeds, but __mptcp_subflow_connect() calls mptcp_pm_close_subflow()
    on failure to roll back the pre-increment done by the kernel PM's fill_*()
    helpers. Because the userspace PM hasn't incremented yet at that point,
    this decrement is spurious and causes extra_subflows to underflow.
    
    Fix it by aligning the userspace PM with the kernel PM: increment
    extra_subflows before calling __mptcp_subflow_connect(), so the existing
    error path in subflow.c correctly rolls it back on failure. Also simplify
    the error handling by taking pm.lock only when needed for cleanup.
    
    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-5-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: 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>

 
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/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/mlx5: Use effective affinity mask for IRQ selection [+ + +]
Author: Fushuai Wang <wangfushuai@baidu.com>
Date:   Fri Jun 5 18:21:12 2026 +0800

    net/mlx5: Use effective affinity mask for IRQ selection
    
    [ Upstream commit a7767290e77ca2e926b49f8bfa29daa12262c612 ]
    
    When a sf is created after a CPU has been taken offline, the IRQ pool may
    contain IRQs with affinity masks that include the offline CPU. Since only
    online CPUs should be considered for IRQ placement, cpumask_subset() check
    would fail because the iter_mask contains offline CPUs that are not present
    in req_mask, causing sf creation to fail.
    
    This is an example:
      1. When mlx5 driver loads, it initializes the IRQ pools.
         For sf_ctrl_pool with ≤64 sf:
         - xa_num_irqs = {N, N} (There is only one slot)
      2. When the first SF is created:
         - The ctrl IRQ is allocated with mask=cpu_online_mask={0-191}
      2. We take CPU 20 offline
      3. Existing ctl irq still have mask={0-191}
      4. Create a new SF:
         - req_mask={0-19,21-191}
         - iter_mask={0-191}
         - {0-191} is NOT a subset of {0-19,21-191}
         - least_loaded_irq=NULL
      5. Try to allocate a new irq via irq_pool_request_irq()
      6. xa_alloc() fails because the pool is full(There is only one slot)
      7. sf creation fails with error
    
    Use irq_get_effective_affinity_mask() instead, which returns the IRQ's
    actual effective affinity that already excludes offline CPUs.
    
    Fixes: 061f5b23588a ("net/mlx5: SF, Use all available cpu for setting cpu affinity")
    Suggested-by: Shay Drory <shayd@nvidia.com>
    Signed-off-by: Fushuai Wang <wangfushuai@baidu.com>
    Reviewed-by: Shay Drory <shayd@nvidia.com>
    Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/20260605102112.91772-1-fushuai.wang@linux.dev
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx5e: xsk: Fix DMA and xdp_frame leak on XDP_TX xmit failure [+ + +]
Author: Dragos Tatulea <dtatulea@nvidia.com>
Date:   Thu Jun 4 16:54:46 2026 +0300

    net/mlx5e: xsk: Fix DMA and xdp_frame leak on XDP_TX xmit failure
    
    [ Upstream commit b69004f5a6ad32da84d8aa5b23b9c0caafe6252e ]
    
    In the XSK branch of mlx5e_xmit_xdp_buff(), when sq->xmit_xdp_frame()
    returns false (e.g. XDPSQ is full), the function returns without
    unmapping the DMA address or freeing the xdp_frame allocated by
    xdp_convert_zc_to_xdp_frame(). The xdpi_fifo push only happens on
    success, so the completion path cannot recover these entries.
    
    With CONFIG_DMA_API_DEBUG=y, the leak surfaces on driver unbind:
    
      DMA-API: pci 0000:08:00.0: device driver has pending DMA
      allocations while released from device [count=1116]
      One of leaked entries details: [device address=0x000000010ffd7028]
      [size=1534 bytes] [mapped with DMA_TO_DEVICE] [mapped as phy]
      WARNING: kernel/dma/debug.c:881 at dma_debug_device_change+0x127/0x180
      ...
      DMA-API: Mapped at:
       debug_dma_map_phys+0x4b/0xd0
       dma_map_phys+0xfd/0x2d0
       mlx5e_xdp_handle+0x5ae/0xac0 [mlx5_core]
       mlx5e_xsk_skb_from_cqe_mpwrq_linear+0xc4/0x170 [mlx5_core]
       mlx5e_handle_rx_cqe_mpwrq+0xc1/0x290 [mlx5_core]
    
    Add the missing unmap + xdp_return_frame, matching the cleanup already
    done in mlx5e_xdp_xmit(). has_frags is rejected earlier in this branch,
    so no per-frag unmap is needed.
    
    Fixes: 84a0a2310d6d ("net/mlx5e: XDP_TX from UMEM support")
    Signed-off-by: Dragos Tatulea <dtatulea@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/20260604135446.456119-1-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.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: fix pedit partial COW leading to page cache corruption [+ + +]
Author: Rajat Gupta <rajat.gupta@oss.qualcomm.com>
Date:   Sun May 31 08:32:21 2026 -0400

    net/sched: fix pedit partial COW leading to page cache corruption
    
    [ Upstream commit 899ee91156e57784090c5565e4f31bd7dbffbc5a ]
    
    tcf_pedit_act() computes the COW range for skb_ensure_writable()
    once before the key loop using tcfp_off_max_hint, but the hint does
    not account for the runtime header offset added by typed keys. This
    can leave part of the write region un-COW'd.
    
    Fix by moving skb_ensure_writable() inside the per-key loop where
    the actual write offset is known, and add overflow checking on the
    offset arithmetic. For negative offsets (e.g. Ethernet header edits
    at ingress), use skb_cow() to COW the headroom instead. Guard
    offset_valid() against INT_MIN, where negation is undefined.
    
    Fixes: 8b796475fd78 ("net/sched: act_pedit: really ensure the skb is writable")
    Reported-by: Yiming Qian <yimingqian591@gmail.com>
    Reported-by: Keenan Dong <keenanat2000@gmail.com>
    Reported-by: Han Guidong <2045gemini@gmail.com>
    Reported-by: Zhang Cen <rollkingzzc@gmail.com>
    Reviewed-by: Han Guidong <2045gemini@gmail.com>
    Tested-by: Han Guidong <2045gemini@gmail.com>
    Reviewed-by: Davide Caratti <dcaratti@redhat.com>
    Tested-by: Davide Caratti <dcaratti@redhat.com>
    Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Tested-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Reviewed-by: Victor Nogueira <victor@mojatatu.com>
    Tested-by: Victor Nogueira <victor@mojatatu.com>
    Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Signed-off-by: Rajat Gupta <rajat.gupta@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260531123221.48732-1-jhs@mojatatu.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: add pskb_may_pull() to skb_gro_receive_list() [+ + +]
Author: HanQuan <eilaimemedsnaimel@gmail.com>
Date:   Thu Jun 4 14:46:25 2026 +0000

    net: add pskb_may_pull() to skb_gro_receive_list()
    
    [ Upstream commit f2bb3434544454099a5b6dec213567267b05d79d ]
    
    skb_gro_receive_list() calls skb_pull(skb, skb_gro_offset(skb)) without
    first ensuring the data is in the linear area via pskb_may_pull(). When
    the skb arrives via napi_gro_frags(), skb_headlen can be 0 (all data in
    page fragments) while skb_gro_offset is non-zero (after IP+TCP header
    parsing). The skb_pull() then decrements skb->len by skb_gro_offset
    but skb->data_len stays unchanged, hitting BUG_ON(skb->len < skb->data_len)
    in __skb_pull().
    
    The UDP fraglist GRO path already contains this guard at
    udp_offload.c:749. Adding it to skb_gro_receive_list() itself provides
    centralized protection for all callers (TCP, UDP, and any future
    protocols), and ensures the precondition of skb_pull() is satisfied
    before it is called.
    
    On pskb_may_pull() failure, set NAPI_GRO_CB(skb)->flush = 1 so the
    skb is not held as a new GRO head and is instead delivered through the
    normal receive path, matching the UDP handling.
    
    Fixes: 8d95dc474f85 ("net: add code for TCP fraglist GRO")
    Reported-by: HanQuan <eilaimemedsnaimel@gmail.com>
    Reported-by: MingXuan <bwnie0730@outlook.com>
    Signed-off-by: HanQuan <eilaimemedsnaimel@gmail.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    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: 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: ibm: emac: Fix use-after-free during device removal [+ + +]
Author: Rosen Penev <rosenp@gmail.com>
Date:   Wed Jun 3 15:12:17 2026 -0700

    net: ibm: emac: Fix use-after-free during device removal
    
    [ Upstream commit a0130d682222ae21afc395aead7cd2d87e1a8358 ]
    
    The driver was using devm_register_netdev() which causes unregister_netdev()
    to be deferred until the devres cleanup phase, which runs after emac_remove()
    returns. This creates a use-after-free window where:
    
    1. emac_remove() is called, which tears down hardware (cancels work, detaches
       modules, unregisters from MAL)
    2. emac_remove() returns
    3. devres cleanup runs and finally calls unregister_netdev()
    
    During step 3, the network stack might still process packets, triggering
    emac_irq(), emac_poll(), or other handlers that access now-freed hardware
    resources (dev->emacp, dev->mal, etc.).
    
    Fix this by replacing devm_register_netdev() with manual register_netdev()
    and calling unregister_netdev() at the beginning of emac_remove(), before
    any hardware teardown. This ensures the network device is fully stopped and
    unregistered before hardware resources are released.
    
    The change is safe because:
    - dev->ndev is assigned very early in probe (before any error paths that
      could bypass emac_remove)
    - platform_set_drvdata() is only called after successful registration, so
      emac_remove() only runs for fully registered devices
    - unregister_netdev() is idempotent and safe to call on any registered device
    
    Fixes: a4dd8535a527 ("net: ibm: emac: use devm for register_netdev")
    Signed-off-by: Rosen Penev <rosenp@gmail.com>
    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: introduce EXPORT_IPV6_MOD() and EXPORT_IPV6_MOD_GPL() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Jun 16 14:36:27 2026 +0200

    net: introduce EXPORT_IPV6_MOD() and EXPORT_IPV6_MOD_GPL()
    
    [ Upstream commit 54568a84c95bdea20227cf48d41f198d083e78dd ]
    
    We have many EXPORT_SYMBOL(x) in networking tree because IPv6
    can be built as a module.
    
    CONFIG_IPV6=y is becoming the norm.
    
    Define a EXPORT_IPV6_MOD(x) which only exports x
    for modular IPv6.
    
    Same principle applies to EXPORT_IPV6_MOD_GPL()
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
    Link: https://patch.msgid.link/20250212132418.1524422-2-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    (cherry picked from commit 54568a84c95bdea20227cf48d41f198d083e78dd)
    [needed as dependency for tcp: secure_seq: add back ports to TS offset]
    Signed-off-by: Heiko Stuebner <heiko.stuebner@cherry.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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: 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: 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: phy: micrel: fix LAN8814 QSGMII soft reset [+ + +]
Author: Robert Marko <robert.marko@sartura.hr>
Date:   Tue Apr 28 15:41:01 2026 +0200

    net: phy: micrel: fix LAN8814 QSGMII soft reset
    
    [ Upstream commit e027c218c482c6a0ae1948129ccda3b0a2033368 ]
    
    LAN8814 QSGMII soft reset was moved into the probe function to avoid
    triggering it for each of 4 PHY-s in the package.
    
    However, that broke QSGMII link between the MAC and PHY on most LAN8814
    PHY-s, specificaly for us on the Microchip LAN969x switch.
    Reading the QSGMII status registers it was visible that lanes were only
    partially synced.
    
    It looks like the reset timing is crucial, so lets move the reset back
    into the .config_init function but guard it with phy_package_init_once()
    to avoid it being triggered on each of 4 PHY-s in the package.
    Change the probe function to use phy_package_probe_once() for coma and PtP
    setup.
    
    Fixes: 347bf638d39f ("net: phy: micrel: lan8814 fix reset of the QSGMII interface")
    Signed-off-by: Robert Marko <robert.marko@sartura.hr>
    Link: https://patch.msgid.link/20260428134138.1741253-1-robert.marko@sartura.hr
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Joël Esponde <joel.esponde@leroy-agon.com>
    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_sched: act_pedit: use RCU in tcf_pedit_dump() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jul 9 09:02:01 2025 +0000

    net_sched: act_pedit: use RCU in tcf_pedit_dump()
    
    [ Upstream commit 9d096746572616a50cac4906f528a1959c0ee1c2 ]
    
    Also storing tcf_action into struct tcf_pedit_params
    makes sure there is no discrepancy in tcf_pedit_act().
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20250709090204.797558-10-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 899ee91156e5 ("net/sched: fix pedit partial COW leading to page cache corruption")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netdev: fix double-free in netdev_nl_bind_rx_doit() [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Fri Jun 5 18:21:24 2026 -0700

    netdev: fix double-free in netdev_nl_bind_rx_doit()
    
    [ Upstream commit c849de7d8757a7af801fc4a4058f71d481d367f2 ]
    
    Sashiko flags that genlmsg_reply() always consumes the skb.
    The error path calls nlmsg_free(rsp) so we can't jump directly
    to it. Let's not unbind, just propagate the error to the user.
    This is the typical way of handling genlmsg_reply() failures.
    They shouldn't happen unless user does something silly like
    calling the kernel with an already-full rcvbuf.
    
    Reported-by: Sashiko <sashiko-bot@kernel.org>
    Fixes: 170aafe35cb9 ("netdev: support binding dma-buf to netdevice")
    Reviewed-by: Bobby Eshleman <bobbyeshleman@meta.com>
    Acked-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Nikolay Aleksandrov <razor@blackwall.org>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    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_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 19:07:05 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: 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: 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 09:34:53 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 older `ip6_route_lookup()`/`rt6_info` IPv6 context 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: revalidate bridge ports [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Tue Jun 2 17:04:25 2026 +0200

    netfilter: revalidate bridge ports
    
    [ Upstream commit ccb9fd4b87538ccf19ccff78ee26700526d94867 ]
    
    ebt_redirect_tg() dereferences br_port_get_rcu() return without a
    NULL check, causing a kernel panic when the bridge port has been
    removed between the original hook invocation and an NFQUEUE
    reinject.
    
    A mere NULL check isn't sufficient, however.  As sashiko review
    points out userspace can not only remove the port from the bridge,
    it could also place the device in a different virtual device, e.g.
    macvlan.
    
    If this happens, we must drop the packet, there is no way for us to
    reinject it into the bridge path.
    
    Switch to _upper API, we don't need the bridge port structure.
    Also, this fix keeps another bug intact:
    
    Both nfnetlink_log and nfnetlink_queue use CONFIG_BRIDGE_NETFILTER
    too aggressive, which prevents certain logging features when queueing
    in bridge family: NETFILTER_FAMILY_BRIDGE can be enabled while the old
    CONFIG_BRIDGE_NETFILTER cruft is off.
    
    Fixes tag is a common ancestor, this was always broken.
    
    Fixes: f350a0a87374 ("bridge: use rx_handler_data pointer to store net_bridge_port pointer")
    Reported-by: Ji'an Zhou <eilaimemedsnaimel@gmail.com>
    Assisted-by: Claude:claude-sonnet-4-6
    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: 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: 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_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>

 
nvmem: core: fix use-after-free bugs in error paths [+ + +]
Author: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Date:   Sat May 30 21:43:40 2026 +0100

    nvmem: core: fix use-after-free bugs in error paths
    
    commit 5b6b6fc491899d583eaa75344e094796ae9b530b upstream.
    
    Fix several instances of error paths in which we call
    __nvmem_device_put() - which may end up freeing the underlying memory
    and other resources - and then keep on using the nvmem structure. Always
    put the reference to the nvmem device as the last step before returning
    the error code.
    
    Cc: stable@vger.kernel.org
    Fixes: 7ae6478b304b ("nvmem: core: rework nvmem cell instance creation")
    Fixes: e888d445ac33 ("nvmem: resolve cells from DT at registration time")
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Signed-off-by: Srinivas Kandagatla <srini@kernel.org>
    Link: https://patch.msgid.link/20260530204340.116743-3-srini@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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: Fix initialization of mcam's entry2target_pffunc field [+ + +]
Author: Suman Ghosh <sumang@marvell.com>
Date:   Fri May 29 17:07:05 2026 +0530

    octeontx2-af: Fix initialization of mcam's entry2target_pffunc field
    
    [ Upstream commit 9a85ec3dc28b6df246801c19e4d9bae6297a25b0 ]
    
    NPC mcam entry stores a mapping between mcam entry and target pcifunc.
    During initialization of this field, API kmalloc_array has been used which
    caused some junk values to array. Whereas, the array is expected to be
    initialized by 0. This patch fixes the same by using kcalloc instead of
    kmalloc_array.
    
    Fixes: 55307fcb9258 ("octeontx2-af: Add mbox messages to install and delete MCAM rules")
    Signed-off-by: Suman Ghosh <sumang@marvell.com>
    Signed-off-by: Subbaraya Sundeep <sbhatta@marvell.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/1780054625-17090-1-git-send-email-sbhatta@marvell.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.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-pf: Fix NDC sync operation errors [+ + +]
Author: Geetha sowjanya <gakula@marvell.com>
Date:   Fri May 29 17:07:57 2026 +0530

    octeontx2-pf: Fix NDC sync operation errors
    
    [ Upstream commit a910fb8f7b9e4c566db363e6c2ec378dc7153995 ]
    
    On system reboot "rvu_nicpf 0002:03:00.0: NDC sync operation failed"
    error messages are shown, even if the operations is successful.
    This is due to wrong if error check in ndc_syc() function.
    
    Fixes: 42c45ac1419c ("octeontx2-af: Sync NIX and NPA contexts from NDC to LLC/DRAM")
    Signed-off-by: Geetha sowjanya <gakula@marvell.com>
    Signed-off-by: Subbaraya Sundeep <sbhatta@marvell.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/1780054677-17249-1-git-send-email-sbhatta@marvell.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.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>

 
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>

 
pinctrl: mcp23s08: Initialize mcp->dev and mcp->addr before regmap init [+ + +]
Author: Judith Mendez <jm@ti.com>
Date:   Wed May 13 18:11:53 2026 -0500

    pinctrl: mcp23s08: Initialize mcp->dev and mcp->addr before regmap init
    
    commit 8473c3a197b57ff01396f7a2ec6ddf65383820d4 upstream.
    
    Regmap initialization triggers regcache_maple_populate() which attempts
    SPI read to populate cache. SPI read requires mcp->dev and mcp->addr to
    be set, without them, NULL pointer dereference occurs during probe.
    
    Move initialization before mcp23s08_spi_regmap_init() call.
    
    Cc: stable@vger.kernel.org
    Fixes: f9f4fda15e72 ("pinctrl: mcp23s08: init reg_defaults from HW at probe and switch cache type")
    Signed-off-by: Judith Mendez <jm@ti.com>
    Signed-off-by: Linus Walleij <linusw@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
pmdomain: imx: fix OF node refcount [+ + +]
Author: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Date:   Thu May 21 10:36:27 2026 +0200

    pmdomain: imx: fix OF node refcount
    
    commit fba0510cd62666951dcc0221527edc0c47ae6599 upstream.
    
    for_each_child_of_node_scoped() decrements the reference count of the
    nod after each iteration. Assigning it without incrementing the refcount
    to a dynamically allocated platform device will result in a double put
    in platform_device_release(). Add the missing call to of_node_get().
    
    Cc: stable@vger.kernel.org
    Fixes: 3e4d109ee8fc ("pmdomain: imx: gpc: Simplify with scoped for each OF child loop")
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Signed-off-by: Ulf Hansson <ulfh@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/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: Add helpers for umem dmabuf revoke lock [+ + +]
Author: Jacob Moroni <jmoroni@google.com>
Date:   Mon Jun 15 17:29:09 2026 -0400

    RDMA/umem: Add helpers for umem dmabuf revoke lock
    
    [ Upstream commit 3a0b171302eea1732a168e26db3b8461f51cc1f9 ]
    
    Added helpers to acquire and release the umem dmabuf revoke
    lock. The intent is to avoid the need for drivers to peek
    into the ib_umem_dmabuf internals to get the dma_resv_lock
    and bring us one step closer to abstracting ib_umem_dmabuf
    away from drivers in general.
    
    Signed-off-by: Jacob Moroni <jmoroni@google.com>
    Link: https://patch.msgid.link/20260305170826.3803155-5-jmoroni@google.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Stable-dep-of: badad6fad60d ("RDMA: During rereg_mr ensure that REREG_ACCESS is compatible")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

RDMA/umem: Add ib_umem_dmabuf_get_pinned_and_lock helper [+ + +]
Author: Jacob Moroni <jmoroni@google.com>
Date:   Mon Jun 15 17:29:07 2026 -0400

    RDMA/umem: Add ib_umem_dmabuf_get_pinned_and_lock helper
    
    [ Upstream commit 553dfa8cbd0c6d36adae042d9738ddf8f8765ac7 ]
    
    Move the inner logic of ib_umem_dmabuf_get_pinned_with_dma_device()
    to a new static function that returns with the lock held upon success.
    
    The intent is to allow reuse for the future get_pinned_revocable_and_lock
    function.
    
    Signed-off-by: Jacob Moroni <jmoroni@google.com>
    Link: https://patch.msgid.link/20260305170826.3803155-2-jmoroni@google.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Stable-dep-of: badad6fad60d ("RDMA: During rereg_mr ensure that REREG_ACCESS is compatible")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    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 18:52:13 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 18:52:15 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/umem: Move umem dmabuf revoke logic into helper function [+ + +]
Author: Jacob Moroni <jmoroni@google.com>
Date:   Mon Jun 15 17:29:08 2026 -0400

    RDMA/umem: Move umem dmabuf revoke logic into helper function
    
    [ Upstream commit 797291a66ce346c96114b72222fc290d402da005 ]
    
    This same logic will eventually be reused from within the
    invalidate_mappings callback which already has the dma_resv_lock
    held, so break it out into a separate function so it can be reused.
    
    Signed-off-by: Jacob Moroni <jmoroni@google.com>
    Link: https://patch.msgid.link/20260305170826.3803155-3-jmoroni@google.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Stable-dep-of: badad6fad60d ("RDMA: During rereg_mr ensure that REREG_ACCESS is compatible")
    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 17:29:10 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 18:52:14 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 fa361565a7275cc43c6ca1abec9ec4fcc9ec51f1, 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>

 
rtase: Avoid sleeping in get_stats64() [+ + +]
Author: Justin Lai <justinlai0215@realtek.com>
Date:   Wed Jun 3 14:18:16 2026 +0800

    rtase: Avoid sleeping in get_stats64()
    
    commit 9fc237f8d49f06d05f0f8e80361047b718894e81 upstream.
    
    The .ndo_get_stats64 callback must not sleep because it can be
    called when reading /proc/net/dev.
    
    rtase_get_stats64() calls rtase_dump_tally_counter(), which polls
    the tally counter dump bit with read_poll_timeout(). This may
    sleep while waiting for the hardware counter dump to complete.
    
    Use read_poll_timeout_atomic() instead to avoid sleeping in the
    get_stats64() path.
    
    Fixes: 079600489960 ("rtase: Implement net_device_ops")
    Cc: stable@vger.kernel.org
    Signed-off-by: Justin Lai <justinlai0215@realtek.com>
    Link: https://patch.msgid.link/20260603061816.31356-1-justinlai0215@realtek.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rtase: Reset TX subqueue when clearing TX ring [+ + +]
Author: Justin Lai <justinlai0215@realtek.com>
Date:   Tue Jun 2 19:46:59 2026 +0800

    rtase: Reset TX subqueue when clearing TX ring
    
    commit ab1ecaabe74b7d86c38ab2ab44bd56cdcc33645a upstream.
    
    rtase_tx_clear() clears the TX ring and resets the ring indexes.
    However, the TX queue state and BQL accounting are not reset at
    the same time.
    
    This may leave __QUEUE_STATE_STACK_XOFF asserted after
    rtase_sw_reset(), preventing new TX packets from being scheduled.
    
    Reset the TX subqueue when clearing the TX ring so the TX queue
    state and BQL accounting are restored together.
    
    Fixes: 5a2a2f15244c ("rtase: Implement the rtase_down function")
    Cc: stable@vger.kernel.org
    Signed-off-by: Justin Lai <justinlai0215@realtek.com>
    Reviewed-by: Alexander Lobakin <aleksander.lobakin@intel.com>
    Link: https://patch.msgid.link/20260602114659.12335-1-justinlai0215@realtek.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rust: arm64: set uwtable llvm module flag for CONFIG_UNWIND_TABLES [+ + +]
Author: Alice Ryhl <aliceryhl@google.com>
Date:   Wed May 27 18:18:07 2026 +0000

    rust: arm64: set uwtable llvm module flag for CONFIG_UNWIND_TABLES
    
    commit ac35b5580ace12e5d0a0b5e61e36d2c4e1ffa29c upstream.
    
    Due to a rustc bug [1] the -Cforce-unwind-tables=y flag only emits the
    uwtable annotation for functions, but not for the module. This means
    that compiler-generated functions such as 'asan.module_ctor' do not
    receive the uwtable annotation.
    
    When CONFIG_UNWIND_PATCH_PAC_INTO_SCS is enabled, this leads to boot
    failures because the dwarf information emitted for the kasan
    constructors is wrong, which causes the SCS boot patching code to
    patch the constructor in an illegal manner. Specifically, the paciasp
    instruction is patched, but the autiasp instruction is not. This
    mismatch leads to a crash when the constructor is called during boot.
    
            ==================================================================
            BUG: KASAN: global-out-of-bounds in do_basic_setup+0x4c/0x90
            Read of size 8 at addr ffffffe3cc7eb488 by task swapper/0/1
    
    Specifically the faulting instruction is the (*fn)() to invoke the
    constructor in do_ctors() of the init/main.c file.
    
    Once the fix lands in rustc, this flag can be made conditional on the
    rustc version. Note that passing the flag on a rustc with the fix
    present has no effect.
    
    [ The fix [1] has landed for Rust 1.98.0 (expected release on
      2026-08-20).
    
      Thus add a version check as discussed.
    
        - Miguel ]
    
    Fixes: d077242d68a3 ("rust: support for shadow call stack sanitizer")
    Cc: stable@kernel.org
    Link: https://github.com/rust-lang/rust/pull/156973 [1]
    Reported-by: Bo Ye <bo.ye@mediatek.com>
    Debugged-by: Isaac Manjarres <isaacmanjarres@google.com>
    Debugged-by: Sami Tolvanen <samitolvanen@google.com>
    Tested-by: Isaac Manjarres <isaacmanjarres@google.com>
    Signed-off-by: Alice Ryhl <aliceryhl@google.com>
    Link: https://patch.msgid.link/20260527-uwtable-module-flag-v1-1-caa41342be4b@google.com
    [ Adjusted link and comment. - Miguel ]
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rust: kasan/kbuild: fix rustc-option when cross-compiling [+ + +]
Author: Alice Ryhl <aliceryhl@google.com>
Date:   Thu May 7 11:14:42 2026 +0000

    rust: kasan/kbuild: fix rustc-option when cross-compiling
    
    commit 4a44b17406cb5a93f90af3df9392b3a45eb336fb upstream.
    
    The Makefile version of rustc-option currently checks whether the option
    exists for the host target instead of the target actually being compiled
    for. It was done this way in commit 46e24a545cdb ("rust: kasan/kbuild:
    fix missing flags on first build") to avoid a circular dependency on
    target.json. However, because of this, rustc-option currently does not
    function when cross-compiling from x86_64 to aarch64 if
    CONFIG_SHADOW_CALL_STACK is enabled. This is because KBUILD_RUSTFLAGS
    contains -Zfixed-x18 under this configuration. Since that flag does not
    exist on the host target, rustc-option runs into a compilation failure
    every time, leading to all flags being rejected as unsupported.
    
    To fix this, update rustc-option to pass a --target parameter so that
    the host target is not used. For targets using target.json, use a
    built-in target that is as close as possible to the target created with
    target.json to avoid the circular dependency on target.json.
    
    One scenario where this causes a boot failure:
    * Cross-compiled from x86_64 to aarch64.
    * With CONFIG_SHADOW_CALL_STACK=y
    * With CONFIG_KASAN_SW_TAGS=y
    * With CONFIG_KASAN_INLINE=n
    Then the resulting kernel image will fail to boot when it first calls
    into Rust code with a crash along the lines of "Unable to handle kernel
    paging request at virtual address 0ffffffc08541796". This is because the
    call threshold is not specified, so rustc will inline kasan operations,
    but the kasan shadow offset is not specified, which leads to the inlined
    kasan instructions being incorrect.
    
    Note that the -Zsanitizer=kernel-hwaddress parameter itself does not
    lead to a rustc-option failure despite being aarch64-specific because
    RUSTFLAGS_KASAN has not yet been added to KBUILD_RUSTFLAGS when
    rustc-option is evaluated by the kasan Makefile.
    
    Cc: stable@vger.kernel.org
    Fixes: 46e24a545cdb ("rust: kasan/kbuild: fix missing flags on first build")
    Signed-off-by: Alice Ryhl <aliceryhl@google.com>
    Link: https://patch.msgid.link/20260507-rustc-option-cross-v2-1-2f650a49c2b5@google.com
    [ Edited slightly:
        - Reset variable to avoid using the environment.
        - Use a simply expanded variable flavor for simplicity.
        - Export variable so that behavior in sub-`make`s is consistent.
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    
      This matches other variables. - Miguel ]
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>

rust: x86: support Rust >= 1.98.0 target spec [+ + +]
Author: Miguel Ojeda <ojeda@kernel.org>
Date:   Sat May 30 13:49:25 2026 +0200

    rust: x86: support Rust >= 1.98.0 target spec
    
    commit 905b06d32a52afe32fcf5f30cf298c9ea6359f11 upstream.
    
    Starting with Rust 1.98.0 (expected 2026-08-20), the target spec will not
    support `x86-softfloat` anymore [1]. Instead, `softfloat` should be used,
    which is an alias. Otherwise, one gets:
    
        error: error loading target specification: rustc-abi: invalid rustc abi: 'x86-softfloat'. allowed values: 'x86-sse2', 'softfloat' at line 3 column 32
          |
          = help: run `rustc --print target-list` for a list of built-in targets
    
    Thus conditionally use one or the other depending on the version.
    
    The alias has existed since Rust 1.95.0 (released 2026-04-16) [2], but
    use the newer version instead to avoid changing how the build works for
    existing compilers, at least until more testing takes place.
    
    Cc: Ralf Jung <post@ralfj.de>
    Cc: stable@vger.kernel.org # Needed in 6.12.y and later (Rust is pinned in older LTSs).
    Link: https://github.com/rust-lang/rust/pull/157151 [1]
    Link: https://github.com/rust-lang/rust/pull/151154 [2]
    Reviewed-by: Alice Ryhl <aliceryhl@google.com>
    Link: https://patch.msgid.link/20260530114925.260754-1-ojeda@kernel.org
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sched_ext: Don't warn on NULL cgrp_moving_from in scx_cgroup_move_task() [+ + +]
Author: Tejun Heo <tj@kernel.org>
Date:   Mon Jun 15 13:37:30 2026 -0400

    sched_ext: Don't warn on NULL cgrp_moving_from in scx_cgroup_move_task()
    
    [ Upstream commit 02e545c4297a26dbbc41df81b831e7f605bcd306 ]
    
    A WARN fires when systemd's user manager writes "+cpu +memory +pids" to
    its own subtree_control while a sched_ext scheduler is loaded:
    
      WARNING: at kernel/sched/ext.c:3227 scx_cgroup_move_task+0xa8/0xb0
       scx_cgroup_move_task+0xa8/0xb0
       sched_move_task+0x134/0x290
       cpu_cgroup_attach+0x39/0x70
       cgroup_migrate_execute+0x37d/0x450
       cgroup_update_dfl_csses+0x1e3/0x270
       cgroup_subtree_control_write+0x3e7/0x440
    
    scx_cgroup_can_attach() arms cgrp_moving_from only when a task's cpu
    cgroup changes. It can still be NULL when scx_cgroup_move_task() runs,
    through this sequence:
    
      Step                               Result
      ---------------------------------  ----------------------------------
      1. cpu enabled on cgroup G         cpu css = A
      2. cpu toggled off then on for G   A killed, B created (same cgroup)
      3. an exiting task keeps A alive   migration skips it, A now stale
      4. +memory migrates G              stale A vs current B pulls cpu in
      5. cpu attach runs for all tasks   hits a live, cpu-unchanged task
      6. scx_cgroup_move_task() on it    cgrp_moving_from NULL -> WARN
    
    The mismatch is that scx_cgroup_can_attach() keys on cgroup identity
    while migration drives the move on css identity, so a NULL cgrp_moving_from
    here is a legitimate css-only migration, not a missing prep.
    
    The call is already gated on cgrp_moving_from, so just drop the warning.
    ops.cgroup_prep_move() and ops.cgroup_move() stay paired.
    
    Fixes: 819513666966 ("sched_ext: Add cgroup support")
    Cc: stable@vger.kernel.org # v6.12+
    Reported-by: Matt Fleming <mfleming@cloudflare.com>
    Closes: https://lore.kernel.org/all/20260601124156.2205704-1-mfleming@cloudflare.com/
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Reviewed-by: Andrea Righi <arighi@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    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 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>

 
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: Balance pm_runtime enablement for NGD [+ + +]
Author: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
Date:   Sat May 30 21:44:20 2026 +0100

    slimbus: qcom-ngd-ctrl: Balance pm_runtime enablement for NGD
    
    commit 6a003446b725c44b9e3ffa111b0effbaa2d43085 upstream.
    
    The pm_runtime_enable() and pm_runtime_use_autosuspend() calls are
    supposed to be balanced on exit, add these calls.
    
    Fixes: 917809e2280b ("slimbus: ngd: Add qcom SLIMBus NGD driver")
    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-8-srini@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

slimbus: qcom-ngd-ctrl: Correct PDR and SSR cleanup ownership [+ + +]
Author: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
Date:   Sat May 30 21:44:17 2026 +0100

    slimbus: qcom-ngd-ctrl: Correct PDR and SSR cleanup ownership
    
    commit 960b53a3f76fa214c2fc493734ae7b3c5e713bbf upstream.
    
    PDR and SSR callbacks are registred from the controller probe function,
    but currently released from the child device's remove function.
    
    The remove() function should only be unwinding what was done in the
    same device's probe() function.
    
    Fixes: 917809e2280b ("slimbus: ngd: Add qcom SLIMBus NGD driver")
    Cc: stable@vger.kernel.org
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Reviewed-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com>
    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-5-srini@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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>

slimbus: qcom-ngd-ctrl: Fix probe error path ordering [+ + +]
Author: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
Date:   Sat May 30 21:44:16 2026 +0100

    slimbus: qcom-ngd-ctrl: Fix probe error path ordering
    
    commit 2c22ff152d380ec3d3af099fa05d0ac5ca9b4c1e upstream.
    
    qcom_slim_ngd_ctrl_probe() first registers the SSR callback then
    allocates the PDR context, as such the error path needs to come in
    opposite order to allow us to unroll each step.
    
    Fixes: 16f14551d0df ("slimbus: qcom-ngd: cleanup in probe error path")
    Cc: stable@vger.kernel.org
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Reviewed-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com>
    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-4-srini@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

slimbus: qcom-ngd-ctrl: Fix up platform_driver registration [+ + +]
Author: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
Date:   Sat May 30 21:44:15 2026 +0100

    slimbus: qcom-ngd-ctrl: Fix up platform_driver registration
    
    commit 8663e8334d7b6007f5d8a4e5dd270246f35107a6 upstream.
    
    Device drivers should not invoke platform_driver_register()/unregister()
    in their probe and remove paths. They should further not rely on
    platform_driver_unregister() as their only means of "deleting" their
    child devices.
    
    Introduce a helper to unregister the child device and move the
    platform_driver_register()/unregister() to module_init()/exit().
    
    Fixes: 917809e2280b ("slimbus: ngd: Add qcom SLIMBus NGD driver")
    Cc: stable@vger.kernel.org
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Reviewed-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com>
    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-3-srini@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

slimbus: qcom-ngd-ctrl: Initialize controller resources in controller [+ + +]
Author: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
Date:   Sat May 30 21:44:19 2026 +0100

    slimbus: qcom-ngd-ctrl: Initialize controller resources in controller
    
    commit 07c564ea5fb859b7381429de935d5df4781947c6 upstream.
    
    The work structs and work queue are controller resources, create and
    destroy them in the controller context. Creating them as part of the
    child device's probe path seems to be okay now that the controller's
    probe has been updated, but if for some reason the child does not probe
    successfully a SSR or PDR notification will schedule_work() on an
    uninitialized "ngd_up_work".
    
    Move the initialization of these controller resources to the controller
    probe function to avoid any issues, and to clarify the ownership.
    
    Fixes: 917809e2280b ("slimbus: ngd: Add qcom SLIMBus NGD driver")
    Cc: stable@vger.kernel.org
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Reviewed-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com>
    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-7-srini@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

slimbus: qcom-ngd-ctrl: Register callbacks after creating the ngd [+ + +]
Author: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
Date:   Sat May 30 21:44:18 2026 +0100

    slimbus: qcom-ngd-ctrl: Register callbacks after creating the ngd
    
    commit 2a9d50e9ea406e0c8735938484adc20515ef1b47 upstream.
    
    When the remoteproc starts in parallel with the NGD driver being probed,
    or the remoteproc is already up when the PDR lookup is being registered,
    or in the theoretical event that we get an interrupt from the hardware,
    these callbacks will operate on uninitialized data. This result in
    issues to boot the affected boards.
    
    One such example can be seen in the following fault, where
    qcom_slim_ngd_ssr_pdr_notify() schedules work on the NULL ngd_up_work.
    
    [   21.858578] ------------[ cut here ]------------
    [   21.858745] WARNING: kernel/workqueue.c:2338 at __queue_work+0x5e0/0x790, CPU#2: kworker/2:2/116
    ...
    [   21.859251] Call trace:
    [   21.859255]  __queue_work+0x5e0/0x790 (P)
    [   21.859265]  queue_work_on+0x6c/0xf0
    [   21.859273]  qcom_slim_ngd_ssr_pdr_notify+0x110/0x150 [slim_qcom_ngd_ctrl]
    [   21.859304]  qcom_slim_ngd_ssr_notify+0x24/0x40 [slim_qcom_ngd_ctrl]
    [   21.859318]  notifier_call_chain+0xa4/0x230
    [   21.859329]  srcu_notifier_call_chain+0x64/0xb8
    [   21.859338]  ssr_notify_start+0x40/0x78 [qcom_common]
    [   21.859355]  rproc_start+0x130/0x230
    [   21.859367]  rproc_boot+0x3d4/0x518
    ...
    
    Move the enablement of interrupts, and the registration of SSR and PDR
    until after the NGD device has been registered.
    
    This could be further refined by moving initialization to the control
    driver probe and by removing the platform driver model from the picture.
    
    Fixes: 917809e2280b ("slimbus: ngd: Add qcom SLIMBus NGD driver")
    Cc: stable@vger.kernel.org
    Reviewed-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com>
    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-6-srini@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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 May 18 19:22:17 2026 +0530

    soc: qcom: ice: Fix race between qcom_ice_probe() and of_qcom_ice_get()
    
    commit d922113ef91e6e7e8065e9070f349365341ba32e upstream.
    
    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>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

soc: qcom: ice: Return -ENODEV if the ICE platform device is not found [+ + +]
Author: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
Date:   Mon May 18 19:22:18 2026 +0530

    soc: qcom: ice: Return -ENODEV if the ICE platform device is not found
    
    [ Upstream commit 5a4dc805a80e6fe303d6a4748cd451ea15987ffd ]
    
    By the time the consumer driver calls devm_of_qcom_ice_get(), all the
    platform devices for ICE nodes would've been created by
    of_platform_default_populate().
    
    So for the absence of any platform device, -ENODEV should not returned, not
    -EPROBE_DEFER.
    
    Fixes: 2afbf43a4aec ("soc: qcom: Make the Qualcomm UFS/SDCC ICE a dedicated driver")
    Tested-by: Sumit Garg <sumit.garg@oss.qualcomm.com> # OP-TEE as TZ
    Acked-by: Sumit Garg <sumit.garg@oss.qualcomm.com>
    Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
    Link: https://lore.kernel.org/r/20260518-qcom-ice-fix-v7-2-2a595382185b@oss.qualcomm.com
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
spi: cadence-quadspi: fix unclocked access on unbind [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Wed Jun 10 10:08:09 2026 +0800

    spi: cadence-quadspi: fix unclocked access on unbind
    
    [ Upstream commit 233db2cb14db8b1935dda52a6affd97276462b82 ]
    
    Make sure that the controller is runtime resumed before disabling it
    during driver unbind to avoid an unclocked register access.
    
    This issue was flagged by Sashiko when reviewing a controller
    deregistration fix.
    
    Fixes: 0578a6dbfe75 ("spi: spi-cadence-quadspi: add runtime pm support")
    Cc: stable@vger.kernel.org      # 6.7
    Cc: Dhruva Gole <d-gole@ti.com>
    Link: https://sashiko.dev/#/patchset/20260414134319.978196-1-johan%40kernel.org?part=2
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20260421125354.1534871-4-johan@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    [ Context adaptation performed. ]
    Signed-off-by: Robert Garcia <rob_garcia@163.com>
    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>

tcp: secure_seq: add back ports to TS offset [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Jun 16 14:36:29 2026 +0200

    tcp: secure_seq: add back ports to TS offset
    
    [ Upstream commit 165573e41f2f66ef98940cf65f838b2cb575d9d1 ]
    
    This reverts 28ee1b746f49 ("secure_seq: downgrade to per-host timestamp offsets")
    
    tcp_tw_recycle went away in 2017.
    
    Zhouyan Deng reported off-path TCP source port leakage via
    SYN cookie side-channel that can be fixed in multiple ways.
    
    One of them is to bring back TCP ports in TS offset randomization.
    
    As a bonus, we perform a single siphash() computation
    to provide both an ISN and a TS offset.
    
    Fixes: 28ee1b746f49 ("secure_seq: downgrade to per-host timestamp offsets")
    Reported-by: Zhouyan Deng <dengzhouyan_nwpu@163.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
    Acked-by: Florian Westphal <fw@strlen.de>
    Link: https://patch.msgid.link/20260302205527.1982836-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    (cherry picked from commit 165573e41f2f66ef98940cf65f838b2cb575d9d1)
    [kept the DCCP functions in the header, as DCCP was not retired yet
     in 6.12]
    Signed-off-by: Heiko Stuebner <heiko.stuebner@cherry.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tcp: use EXPORT_IPV6_MOD[_GPL]() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Jun 16 14:36:28 2026 +0200

    tcp: use EXPORT_IPV6_MOD[_GPL]()
    
    [ Upstream commit 6dc4c2526f6d11f36c4e26d0231b345eabab584c ]
    
    Use EXPORT_IPV6_MOD[_GPL]() for symbols that don't need
    to be exported unless CONFIG_IPV6=m
    
    tcp_hashinfo and tcp_openreq_init_rwin() are no longer
    used from any module anyway.
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
    Link: https://patch.msgid.link/20250212132418.1524422-4-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    (cherry picked from commit 6dc4c2526f6d11f36c4e26d0231b345eabab584c)
    [needed as dependency for tcp: secure_seq: add back ports to TS offset]
    Signed-off-by: Heiko Stuebner <heiko.stuebner@cherry.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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>

tee: shm: fix shm leak in register_shm_helper() [+ + +]
Author: Georgiy Osokin <g.osokin@auroraos.dev>
Date:   Wed Apr 8 18:52:03 2026 +0300

    tee: shm: fix shm leak in register_shm_helper()
    
    commit 26682f5efc276e3ad96d102019472bfbf03833b2 upstream.
    
    register_shm_helper() allocates shm before calling
    iov_iter_npages(). If iov_iter_npages() returns 0, the function
    jumps to err_ctx_put and leaks shm.
    
    This can be triggered by TEE_IOC_SHM_REGISTER with
    struct tee_ioctl_shm_register_data where length is 0.
    
    Jump to err_free_shm instead.
    
    Fixes: 7bdee4157591 ("tee: Use iov_iter to better support shared buffer registration")
    Cc: stable@vger.kernel.org
    Cc: lvc-project@linuxtesting.org
    Signed-off-by: Georgiy Osokin <g.osokin@auroraos.dev>
    Reviewed-by: Sumit Garg <sumit.garg@oss.qualcomm.com>
    Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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: 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>

 
timers/migration: Fix livelock in tmigr_handle_remote_up() [+ + +]
Author: Amit Matityahu <amitmat@amazon.com>
Date:   Wed Jun 3 17:01:39 2026 +0000

    timers/migration: Fix livelock in tmigr_handle_remote_up()
    
    commit d486b4934a8e504376b85cdb3766f306d57aff5b upstream.
    
    tmigr_handle_remote_cpu() skips timer_expire_remote() when cpu ==
    smp_processor_id(), assuming the local softirq path already handled this
    CPU's timers.
    
    This assumption is wrong because jiffies can advance after the handling of
    the CPU's global timers in run_timer_base(BASE_GLOBAL) and before
    tmigr_handle_remote() evaluates the expiry times.
    
    As a consequence a timer which expires after the CPU local timer wheel
    advanced and becomes expired in the remote handling is ignored and the
    callback is never invoked and removed from the timer wheel.
    
    What's worse is that fetch_next_timer_interrupt_remote() keeps reporting it
    as expired, and the event is re-queued with expires == now on each
    iteration.  The goto-again loop spins indefinitely.
    
    Fix this by calling timer_expire_remote() unconditionally. That's minimal
    overhead for the common case as __run_timer_base() returns immediately if
    there is nothing to expire in the local wheel.
    
    [ tglx: Amend change log and add a comment ]
    
    Fixes: 7ee988770326 ("timers: Implement the hierarchical pull model")
    Reported-by: Alon Kariv <alonka@amazon.com>
    Signed-off-by: Amit Matityahu <amitmat@amazon.com>
    Signed-off-by: Thomas Gleixner <tglx@kernel.org>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260603170139.33628-1-amitmat@amazon.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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>

 
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: 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: 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: 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>

 
vsock/virtio: fix potential unbounded skb queue [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Apr 30 12:26:52 2026 +0000

    vsock/virtio: fix potential unbounded skb queue
    
    commit 059b7dbd20a6f0c539a45ddff1573cb8946685b5 upstream.
    
    virtio_transport_inc_rx_pkt() checks vvs->rx_bytes + len > vvs->buf_alloc.
    
    virtio_transport_recv_enqueue() skips coalescing for packets
    with VIRTIO_VSOCK_SEQ_EOM.
    
    If fed with packets with len == 0 and VIRTIO_VSOCK_SEQ_EOM,
    a very large number of packets can be queued
    because vvs->rx_bytes stays at 0.
    
    Fix this by estimating the skb metadata size:
    
            (Number of skbs in the queue) * SKB_TRUESIZE(0)
    
    Fixes: 077706165717 ("virtio/vsock: don't use skbuff state to account credit")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Arseniy Krasnov <AVKrasnov@sberdevices.ru>
    Cc: Stefan Hajnoczi <stefanha@redhat.com>
    Cc: Stefano Garzarella <sgarzare@redhat.com>
    Cc: "Michael S. Tsirkin" <mst@redhat.com>
    Cc: Jason Wang <jasowang@redhat.com>
    Cc: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
    Cc: "Eugenio Pérez" <eperezma@redhat.com>
    Cc: virtualization@lists.linux.dev
    Link: https://patch.msgid.link/20260430122653.554058-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

vsock/virtio: fix skb overhead accounting to preserve full buf_alloc [+ + +]
Author: Stefano Garzarella <sgarzare@redhat.com>
Date:   Mon May 18 11:06:56 2026 +0200

    vsock/virtio: fix skb overhead accounting to preserve full buf_alloc
    
    commit c6087c5aaad6d1b8be1a1a641e0a422218ade911 upstream.
    
    After commit 059b7dbd20a6 ("vsock/virtio: fix potential unbounded skb
    queue"), virtio_transport_inc_rx_pkt() subtracts per-skb overhead from
    buf_alloc when checking whether a new packet fits. This reduces the
    effective receive buffer below what the user configured via
    SO_VM_SOCKETS_BUFFER_SIZE, causing legitimate data packets to be
    silently dropped and applications that rely on the full buffer size
    to deadlock.
    
    Also, the reduced space is not communicated to the remote peer, so
    its credit calculation accounts more credit than the receiver will
    actually accept, causing data loss (there is no retransmission).
    
    With this approach we currently have failures in
    tools/testing/vsock/vsock_test.c. Test 18 sometimes fails, while
    test 22 always fails in this way:
        18 - SOCK_STREAM MSG_ZEROCOPY...hash mismatch
    
        22 - SOCK_STREAM virtio credit update + SO_RCVLOWAT...send failed:
        Resource temporarily unavailable
    
    Fix by allowing at most `buf_alloc * 2` as the total budget for payload
    plus skb overhead in virtio_transport_inc_rx_pkt(), similar to how
    SO_RCVBUF is doubled to reserve space for sk_buff metadata.
    This preserves the full buf_alloc for payload under normal operation,
    while still bounding the skb queue growth.
    
    With this patch, all tests in tools/testing/vsock/vsock_test.c are
    now passing again.
    
    Fixes: 059b7dbd20a6 ("vsock/virtio: fix potential unbounded skb queue")
    Cc: stable@vger.kernel.org
    Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
    Link: https://patch.msgid.link/20260518090656.134588-3-sgarzare@redhat.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

vsock/virtio: fix skb overhead overflow on 32-bit builds [+ + +]
Author: Stefano Garzarella <sgarzare@redhat.com>
Date:   Thu May 21 14:47:32 2026 +0200

    vsock/virtio: fix skb overhead overflow on 32-bit builds
    
    commit 4157501b9a8ff1bbe32ff5a7d8aece7ab18eff40 upstream.
    
    On 32-bit architectures, both skb_queue_len() and SKB_TRUESIZE(0) evaluate
    to 32-bit values. The multiplication can overflow before being assigned to
    the u64 skb_overhead variable, making the skb overhead check ineffective.
    
    Cast skb_queue_len() to u64 so the multiplication is always performed in
    64-bit arithmetic.
    
    This issue was reported by Sashiko while reviewing another patch.
    
    Fixes: 059b7dbd20a6 ("vsock/virtio: fix potential unbounded skb queue")
    Closes: https://sashiko.dev/#/patchset/20260518090656.134588-1-sgarzare%40redhat.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
    Acked-by: Michael S. Tsirkin <mst@redhat.com>
    Link: https://patch.msgid.link/20260521124732.125771-1-sgarzare@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    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>

 
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: mac80211: limit injected antenna index in ieee80211_parse_tx_radiotap [+ + +]
Author: Deepanshu Kartikey <kartikey406@gmail.com>
Date:   Sun May 31 06:47:21 2026 +0530

    wifi: mac80211: limit injected antenna index in ieee80211_parse_tx_radiotap
    
    [ Upstream commit 6c0cf89f36ac0c0fd8687a4ccdce2efb23a9c663 ]
    
    When parsing the radiotap header of an injected frame,
    ieee80211_parse_tx_radiotap() uses the IEEE80211_RADIOTAP_ANTENNA value
    directly as a shift count:
    
            info->control.antennas |= BIT(*iterator.this_arg);
    
    *iterator.this_arg is an 8-bit value taken straight from the frame
    supplied by userspace, so BIT() can be asked to shift by up to 255. That
    is undefined behaviour on the unsigned long and is reported by UBSAN:
    
      UBSAN: shift-out-of-bounds in net/mac80211/tx.c:2174:30
      shift exponent 235 is too large for 64-bit type 'unsigned long'
      Call Trace:
       ieee80211_parse_tx_radiotap+0xadb/0x1950 net/mac80211/tx.c:2174
       ieee80211_monitor_start_xmit+0xb1f/0x1250 net/mac80211/tx.c:2451
       ...
       packet_sendmsg+0x3eb6/0x50f0 net/packet/af_packet.c:3109
    
    info->control.antennas is a 2-bit bitmap (u8 antennas:2), so only antenna
    indices 0 and 1 can ever be represented. Ignore any larger value instead
    of shifting out of bounds.
    
    Reported-by: syzbot+8e0622f6d9446420271f@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=8e0622f6d9446420271f
    Fixes: ef246a1480cc ("wifi: mac80211: support antenna control in injection")
    Signed-off-by: Deepanshu Kartikey <kartikey406@gmail.com>
    Link: https://patch.msgid.link/20260531011721.102941-1-kartikey406@gmail.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    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>

wifi: remove zero-length arrays [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Mon Jun 8 13:32:16 2026 +0000

    wifi: remove zero-length arrays
    
    commit a85b8544d46390469b6ca72d6bfd3ecb7be985ff upstream.
    
    All of these are really meant to be variable-length, and
    in the case of s1g_beacon it's actually accessed. Make that
    one in particular, and a couple of others (that aren't used
    as arrays now), actually variable.
    
    Reported-by: syzbot+fd222bb38e916df26fa4@syzkaller.appspotmail.com
    Fixes: 1e1f706fc2ce ("wifi: cfg80211/mac80211: correctly parse S1G beacon optional elements")
    Link: https://patch.msgid.link/20250614003037.a3e82e882251.I2e8b58e56ff2a9f8b06c66f036578b7c1d4e4685@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Carlos Llamas <cmllamas@google.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
writeback: Avoid contention on wb->list_lock when switching inodes [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Wed Apr 9 17:12:59 2025 +0200

    writeback: Avoid contention on wb->list_lock when switching inodes
    
    [ Upstream commit e1b849cfa6b61f1c866a908c9e8dd9b5aaab820b ]
    
    There can be multiple inode switch works that are trying to switch
    inodes to / from the same wb. This can happen in particular if some
    cgroup exits which owns many (thousands) inodes and we need to switch
    them all. In this case several inode_switch_wbs_work_fn() instances will
    be just spinning on the same wb->list_lock while only one of them makes
    forward progress. This wastes CPU cycles and quickly leads to softlockup
    reports and unusable system.
    
    Instead of running several inode_switch_wbs_work_fn() instances in
    parallel switching to the same wb and contending on wb->list_lock, run
    just one work item per wb and manage a queue of isw items switching to
    this wb.
    
    Acked-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

writeback: Fix use after free in inode_switch_wbs_work_fn() [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Mon Apr 13 11:36:19 2026 +0200

    writeback: Fix use after free in inode_switch_wbs_work_fn()
    
    [ Upstream commit 6689f01d6740cf358932b3e97ee968c6099800d9 ]
    
    inode_switch_wbs_work_fn() has a loop like:
    
      wb_get(new_wb);
      while (1) {
        list = llist_del_all(&new_wb->switch_wbs_ctxs);
        /* Nothing to do? */
        if (!list)
          break;
        ... process the items ...
      }
    
    Now adding of items to the list looks like:
    
    wb_queue_isw()
      if (llist_add(&isw->list, &wb->switch_wbs_ctxs))
        queue_work(isw_wq, &wb->switch_work);
    
    Because inode_switch_wbs_work_fn() loops when processing isw items, it
    can happen that wb->switch_work is pending while wb->switch_wbs_ctxs is
    empty. This is a problem because in that case wb can get freed (no isw
    items -> no wb reference) while the work is still pending causing
    use-after-free issues.
    
    We cannot just fix this by cancelling work when freeing wb because that
    could still trigger problematic 0 -> 1 transitions on wb refcount due to
    wb_get() in inode_switch_wbs_work_fn(). It could be all handled with
    more careful code but that seems unnecessarily complex so let's avoid
    that until it is proven that the looping actually brings practical
    benefit. Just remove the loop from inode_switch_wbs_work_fn() instead.
    That way when wb_queue_isw() queues work, we are guaranteed we have
    added the first item to wb->switch_wbs_ctxs and nobody is going to
    remove it (and drop the wb reference it holds) until the queued work
    runs.
    
    Fixes: e1b849cfa6b6 ("writeback: Avoid contention on wb->list_lock when switching inodes")
    CC: stable@vger.kernel.org
    Signed-off-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20260413093618.17244-2-jack@suse.cz
    Acked-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.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: hold dev ref until after transport_finish NF_HOOK [+ + +]
Author: Qi Tang <tpluszz77@gmail.com>
Date:   Fri Jun 12 11:13:27 2026 +0000

    xfrm: hold dev ref until after transport_finish NF_HOOK
    
    [ Upstream commit 1c428b03840094410c5fb6a5db30640486bbbfcb ]
    
    After async crypto completes, xfrm_input_resume() calls dev_put()
    immediately on re-entry before the skb reaches transport_finish.
    The skb->dev pointer is then used inside NF_HOOK and its okfn,
    which can race with device teardown.
    
    Remove the dev_put from the async resumption entry and instead
    drop the reference after the NF_HOOK call in transport_finish,
    using a saved device pointer since NF_HOOK may consume the skb.
    This covers NF_DROP, NF_QUEUE and NF_STOLEN paths that skip
    the okfn.
    
    For non-transport exits (decaps, gro, drop) and secondary
    async return points, release the reference inline when
    async is set.
    
    Suggested-by: Florian Westphal <fw@strlen.de>
    Fixes: acf568ee859f ("xfrm: Reinject transport-mode packets through tasklet")
    Cc: stable@vger.kernel.org
    Signed-off-by: Qi Tang <tpluszz77@gmail.com>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    [ xfrm_inner_mode_input() always completes synchronously in this kernel
    version and cannot return -EINPROGRESS. That requires
    7ac64f4598b4 ("xfrm: add mode_cbs module functionality"), which is not
    present, so the async dev_put path is unreachable and the hunk was
    omitted ]
    Signed-off-by: Simon Liebold <simonlie@amazon.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xfrm: hold device only for the asynchronous decryption [+ + +]
Author: Jianbo Liu <jianbol@nvidia.com>
Date:   Fri Jun 12 11:13:26 2026 +0000

    xfrm: hold device only for the asynchronous decryption
    
    [ Upstream commit b05d42eefac737ce3cd80114d3579111023941b8 ]
    
    The dev_hold() on skb->dev during packet reception was originally
    added to prevent the device from being released prematurely during
    asynchronous decryption operations.
    
    As current hardware can offload decryption, this asynchronous path is
    not always utilized. This often results in a pattern of dev_hold()
    immediately followed by dev_put() for each packet, creating
    unnecessary reference counting overhead detrimental to performance.
    
    This patch optimizes this by skipping the dev_hold() and subsequent
    dev_put() when asynchronous decryption is not being performed.
    
    Signed-off-by: Jianbo Liu <jianbol@nvidia.com>
    Reviewed-by: Cosmin Ratiu <cratiu@nvidia.com>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Stable-dep-of: 1c428b038400 ("xfrm: hold dev ref until after transport_finish NF_HOOK")
    Signed-off-by: Simon Liebold <simonlie@amazon.de>
    Signed-off-by: Sasha Levin <sashal@kernel.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>

 
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>