Changelog in Linux kernel 6.6.135

 
arm64: dts: hisilicon: hi3798cv200: Add missing dma-ranges [+ + +]
Author: Shawn Guo <shawnguo@kernel.org>
Date:   Fri Feb 27 15:22:10 2026 +0800

    arm64: dts: hisilicon: hi3798cv200: Add missing dma-ranges
    
    commit 1af997cad473d505248df6d9577183bb91f69670 upstream.
    
    Reboot starts failing on Poplar since commit 8424ecdde7df ("arm64: mm:
    Set ZONE_DMA size based on devicetree's dma-ranges"), which effectively
    changes zone_dma_bits from 30 to 32 for arm64 platforms that do not
    properly define dma-ranges in device tree.  It's unclear how Poplar reboot
    gets broken by this change exactly, but a dma-ranges limiting zone_dma to
    the first 1 GB fixes the regression.
    
    Fixes: 2f20182ed670 ("arm64: dts: hisilicon: add dts files for hi3798cv200-poplar board")
    Cc: stable@vger.kernel.org
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Wei Xu <xuwei5@hisilicon.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: dts: hisilicon: poplar: Correct PCIe reset GPIO polarity [+ + +]
Author: Shawn Guo <shawnguo@kernel.org>
Date:   Fri Feb 27 15:19:58 2026 +0800

    arm64: dts: hisilicon: poplar: Correct PCIe reset GPIO polarity
    
    commit c1f2b0f2b5e37b2c27540a175aea2755a3799433 upstream.
    
    The PCIe reset GPIO on Poplar is actually active low.  The active high
    worked before because kernel driver didn't respect the setting from DT.
    This is changed since commit 1d26a55fbeb9 ("PCI: histb: Switch to using
    gpiod API"), and thus PCIe on Poplar got brken since then.
    
    Fix the problem by correcting the polarity.
    
    Fixes: 32fa01761bd9 ("arm64: dts: hi3798cv200: enable PCIe support for poplar board")
    Cc: stable@vger.kernel.org
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Wei Xu <xuwei5@hisilicon.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: dts: imx8mq-librem5: Bump BUCK1 suspend voltage up to 0.85V [+ + +]
Author: Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>
Date:   Sat Feb 21 19:15:19 2026 +0100

    arm64: dts: imx8mq-librem5: Bump BUCK1 suspend voltage up to 0.85V
    
    commit 511f76bf1dce5acf8907b65a7d1bc8f7e7c0d637 upstream.
    
    The minimal voltage of VDD_SOC sourced from BUCK1 is 0.81V, which
    is the currently set value. However, BD71837 only guarantees accuracy
    of ±0.01V, and this still doesn't factor other reasons for actual
    voltage to slightly drop in, resulting in the possibility of running
    out of the operational range.
    
    Bump the voltage up to 0.85V, which should give enough headroom.
    
    Cc: stable@vger.kernel.org
    Fixes: 8f0216b006e5 ("arm64: dts: Add a device tree for the Librem 5 phone")
    Signed-off-by: Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>
    Signed-off-by: Frank Li <Frank.Li@nxp.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ASoC: simple-card-utils: Don't use __free(device_node) at graph_util_parse_dai() [+ + +]
Author: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Date:   Thu Apr 9 18:13:50 2026 +0800

    ASoC: simple-card-utils: Don't use __free(device_node) at graph_util_parse_dai()
    
    [ Upstream commit de74ec718e0788e1998eb7289ad07970e27cae27 ]
    
    commit 419d1918105e ("ASoC: simple-card-utils: use __free(device_node) for
    device node") uses __free(device_node) for dlc->of_node, but we need to
    keep it while driver is in use.
    
    Don't use __free(device_node) in graph_util_parse_dai().
    
    Fixes: 419d1918105e ("ASoC: simple-card-utils: use __free(device_node) for device node")
    Reported-by: Thuan Nguyen <thuan.nguyen-hong@banvien.com.vn>
    Reported-by: Detlev Casanova <detlev.casanova@collabora.com>
    Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
    Tested-by: Thuan Nguyen <thuan.nguyen-hong@banvien.com.vn>
    Tested-by: Detlev Casanova <detlev.casanova@collabora.com>
    Link: https://patch.msgid.link/87eczisyhh.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    [ The function asoc_graph_parse_dai() was renamed to graph_util_parse_dai() in
    commit b5a95c5bf6d6 ("ASoC: simple_card_utils.h: convert not to use asoc_xxx()")
    in 6.7. The fix should be applied to asoc_graph_parse_dai() instead in 6.6. ]
    Signed-off-by: Alva Lan <alvalan9@foxmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
batman-adv: hold claim backbone gateways by reference [+ + +]
Author: Haoze Xie <royenheart@gmail.com>
Date:   Mon Apr 6 21:17:28 2026 +0800

    batman-adv: hold claim backbone gateways by reference
    
    commit 82d8701b2c930d0e96b0dbc9115a218d791cb0d2 upstream.
    
    batadv_bla_add_claim() can replace claim->backbone_gw and drop the old
    gateway's last reference while readers still follow the pointer.
    
    The netlink claim dump path dereferences claim->backbone_gw->orig and
    takes claim->backbone_gw->crc_lock without pinning the underlying
    backbone gateway. batadv_bla_check_claim() still has the same naked
    pointer access pattern.
    
    Reuse batadv_bla_claim_get_backbone_gw() in both readers so they operate
    on a stable gateway reference until the read-side work is complete.
    This keeps the dump and claim-check paths aligned with the lifetime
    rules introduced for the other BLA claim readers.
    
    Fixes: 23721387c409 ("batman-adv: add basic bridge loop avoidance code")
    Fixes: 04f3f5bf1883 ("batman-adv: add B.A.T.M.A.N. Dump BLA claims via netlink")
    Cc: stable@vger.kernel.org
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Co-developed-by: Yuan Tan <yuantan098@gmail.com>
    Signed-off-by: Yuan Tan <yuantan098@gmail.com>
    Suggested-by: Xin Liu <bird@lzu.edu.cn>
    Signed-off-by: Haoze Xie <royenheart@gmail.com>
    Signed-off-by: Ao Zhou <n05ec@lzu.edu.cn>
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

batman-adv: reject oversized global TT response buffers [+ + +]
Author: Ruide Cao <caoruide123@gmail.com>
Date:   Thu Apr 2 23:12:31 2026 +0800

    batman-adv: reject oversized global TT response buffers
    
    commit 3a359bf5c61d52e7f09754108309d637532164a6 upstream.
    
    batadv_tt_prepare_tvlv_global_data() builds the allocation length for a
    global TT response in 16-bit temporaries. When a remote originator
    advertises a large enough global TT, the TT payload length plus the VLAN
    header offset can exceed 65535 and wrap before kmalloc().
    
    The full-table response path still uses the original TT payload length when
    it fills tt_change, so the wrapped allocation is too small and
    batadv_tt_prepare_tvlv_global_data() writes past the end of the heap object
    before the later packet-size check runs.
    
    Fix this by rejecting TT responses whose TVLV value length cannot fit in
    the 16-bit TVLV payload length field.
    
    Fixes: 7ea7b4a14275 ("batman-adv: make the TT CRC logic VLAN specific")
    Cc: stable@vger.kernel.org
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Co-developed-by: Yuan Tan <yuantan098@gmail.com>
    Signed-off-by: Yuan Tan <yuantan098@gmail.com>
    Suggested-by: Xin Liu <bird@lzu.edu.cn>
    Tested-by: Ren Wei <enjou1224z@gmail.com>
    Signed-off-by: Ruide Cao <caoruide123@gmail.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/i915/gt: fix refcount underflow in intel_engine_park_heartbeat [+ + +]
Author: Sebastian Brzezinka <sebastian.brzezinka@intel.com>
Date:   Wed Apr 1 12:10:07 2026 +0200

    drm/i915/gt: fix refcount underflow in intel_engine_park_heartbeat
    
    commit 4c71fd099513bfa8acab529b626e1f0097b76061 upstream.
    
    A use-after-free / refcount underflow is possible when the heartbeat
    worker and intel_engine_park_heartbeat() race to release the same
    engine->heartbeat.systole request.
    
    The heartbeat worker reads engine->heartbeat.systole and calls
    i915_request_put() on it when the request is complete, but clears
    the pointer in a separate, non-atomic step. Concurrently, a request
    retirement on another CPU can drop the engine wakeref to zero, triggering
    __engine_park() -> intel_engine_park_heartbeat(). If the heartbeat
    timer is pending at that point, cancel_delayed_work() returns true and
    intel_engine_park_heartbeat() reads the stale non-NULL systole pointer
    and calls i915_request_put() on it again, causing a refcount underflow:
    
    ```
    <4> [487.221889] Workqueue: i915-unordered engine_retire [i915]
    <4> [487.222640] RIP: 0010:refcount_warn_saturate+0x68/0xb0
    ...
    <4> [487.222707] Call Trace:
    <4> [487.222711]  <TASK>
    <4> [487.222716]  intel_engine_park_heartbeat.part.0+0x6f/0x80 [i915]
    <4> [487.223115]  intel_engine_park_heartbeat+0x25/0x40 [i915]
    <4> [487.223566]  __engine_park+0xb9/0x650 [i915]
    <4> [487.223973]  ____intel_wakeref_put_last+0x2e/0xb0 [i915]
    <4> [487.224408]  __intel_wakeref_put_last+0x72/0x90 [i915]
    <4> [487.224797]  intel_context_exit_engine+0x7c/0x80 [i915]
    <4> [487.225238]  intel_context_exit+0xf1/0x1b0 [i915]
    <4> [487.225695]  i915_request_retire.part.0+0x1b9/0x530 [i915]
    <4> [487.226178]  i915_request_retire+0x1c/0x40 [i915]
    <4> [487.226625]  engine_retire+0x122/0x180 [i915]
    <4> [487.227037]  process_one_work+0x239/0x760
    <4> [487.227060]  worker_thread+0x200/0x3f0
    <4> [487.227068]  ? __pfx_worker_thread+0x10/0x10
    <4> [487.227075]  kthread+0x10d/0x150
    <4> [487.227083]  ? __pfx_kthread+0x10/0x10
    <4> [487.227092]  ret_from_fork+0x3d4/0x480
    <4> [487.227099]  ? __pfx_kthread+0x10/0x10
    <4> [487.227107]  ret_from_fork_asm+0x1a/0x30
    <4> [487.227141]  </TASK>
    ```
    
    Fix this by replacing the non-atomic pointer read + separate clear with
    xchg() in both racing paths. xchg() is a single indivisible hardware
    instruction that atomically reads the old pointer and writes NULL. This
    guarantees only one of the two concurrent callers obtains the non-NULL
    pointer and performs the put, the other gets NULL and skips it.
    
    Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/15880
    Fixes: 058179e72e09 ("drm/i915/gt: Replace hangcheck by heartbeats")
    Cc: <stable@vger.kernel.org> # v5.5+
    Signed-off-by: Sebastian Brzezinka <sebastian.brzezinka@intel.com>
    Reviewed-by: Krzysztof Karas <krzysztof.karas@intel.com>
    Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com>
    Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com>
    Link: https://lore.kernel.org/r/d4c1c14255688dd07cc8044973c4f032a8d1559e.1775038106.git.sebastian.brzezinka@intel.com
    (cherry picked from commit 13238dc0ee4f9ab8dafa2cca7295736191ae2f42)
    Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
EDAC/mc: Fix error path ordering in edac_mc_alloc() [+ + +]
Author: Borislav Petkov (AMD) <bp@alien8.de>
Date:   Tue Mar 31 14:16:23 2026 +0200

    EDAC/mc: Fix error path ordering in edac_mc_alloc()
    
    commit 51520e03e70d6c73e33ee7cbe0319767d05764fe upstream.
    
    When the mci->pvt_info allocation in edac_mc_alloc() fails, the error path
    will call put_device() which will end up calling the device's release
    function.
    
    However, the init ordering is wrong such that device_initialize() happens
    *after* the failed allocation and thus the device itself and the release
    function pointer are not initialized yet when they're called:
    
      MCE: In-kernel MCE decoding enabled.
      ------------[ cut here ]------------
      kobject: '(null)': is not initialized, yet kobject_put() is being called.
      WARNING: lib/kobject.c:734 at kobject_put, CPU#22: systemd-udevd
      CPU: 22 UID: 0 PID: 538 Comm: systemd-udevd Not tainted 7.0.0-rc1+ #2 PREEMPT(full)
      RIP: 0010:kobject_put
      Call Trace:
       <TASK>
       edac_mc_alloc+0xbe/0xe0 [edac_core]
       amd64_edac_init+0x7a4/0xff0 [amd64_edac]
       ? __pfx_amd64_edac_init+0x10/0x10 [amd64_edac]
       do_one_initcall
       ...
    
    Reorder the calling sequence so that the device is initialized and thus the
    release function pointer is properly set before it can be used.
    
    This was found by Claude while reviewing another EDAC patch.
    
    Fixes: 0bbb265f7089 ("EDAC/mc: Get rid of silly one-shot struct allocation in edac_mc_alloc()")
    Reported-by: Claude Code:claude-opus-4.5
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
    Cc: stable@kernel.org
    Link: https://patch.msgid.link/20260331121623.4871-1-bp@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Input: uinput - fix circular locking dependency with ff-core [+ + +]
Author: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com>
Date:   Tue Apr 7 12:50:31 2026 +0500

    Input: uinput - fix circular locking dependency with ff-core
    
    commit 4cda78d6f8bf2b700529f2fbccb994c3e826d7c2 upstream.
    
    A lockdep circular locking dependency warning can be triggered
    reproducibly when using a force-feedback gamepad with uinput (for
    example, playing ELDEN RING under Wine with a Flydigi Vader 5
    controller):
    
      ff->mutex -> udev->mutex -> input_mutex -> dev->mutex -> ff->mutex
    
    The cycle is caused by four lock acquisition paths:
    
    1. ff upload: input_ff_upload() holds ff->mutex and calls
       uinput_dev_upload_effect() -> uinput_request_submit() ->
       uinput_request_send(), which acquires udev->mutex.
    
    2. device create: uinput_ioctl_handler() holds udev->mutex and calls
       uinput_create_device() -> input_register_device(), which acquires
       input_mutex.
    
    3. device register: input_register_device() holds input_mutex and
       calls kbd_connect() -> input_register_handle(), which acquires
       dev->mutex.
    
    4. evdev release: evdev_release() calls input_flush_device() under
       dev->mutex, which calls input_ff_flush() acquiring ff->mutex.
    
    Fix this by introducing a new state_lock spinlock to protect
    udev->state and udev->dev access in uinput_request_send() instead of
    acquiring udev->mutex.  The function only needs to atomically check
    device state and queue an input event into the ring buffer via
    uinput_dev_event() -- both operations are safe under a spinlock
    (ktime_get_ts64() and wake_up_interruptible() do not sleep).  This
    breaks the ff->mutex -> udev->mutex link since a spinlock is a leaf in
    the lock ordering and cannot form cycles with mutexes.
    
    To keep state transitions visible to uinput_request_send(), protect
    writes to udev->state in uinput_create_device() and
    uinput_destroy_device() with the same state_lock spinlock.
    
    Additionally, move init_completion(&request->done) from
    uinput_request_send() to uinput_request_submit() before
    uinput_request_reserve_slot().  Once the slot is allocated,
    uinput_flush_requests() may call complete() on it at any time from
    the destroy path, so the completion must be initialised before the
    request becomes visible.
    
    Lock ordering after the fix:
    
      ff->mutex -> state_lock (spinlock, leaf)
      udev->mutex -> state_lock (spinlock, leaf)
      udev->mutex -> input_mutex -> dev->mutex -> ff->mutex (no back-edge)
    
    Fixes: ff462551235d ("Input: uinput - switch to the new FF interface")
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/CABXGCsMoxag+kEwHhb7KqhuyxfmGGd0P=tHZyb1uKE0pLr8Hkg@mail.gmail.com/
    Signed-off-by: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com>
    Link: https://patch.msgid.link/20260407075031.38351-1-mikhail.v.gavrilov@gmail.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: uinput - take event lock when submitting FF request "event" [+ + +]
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Tue Apr 7 22:16:27 2026 -0700

    Input: uinput - take event lock when submitting FF request "event"
    
    commit ff14dafde15c11403fac61367a34fea08926e9ee upstream.
    
    To avoid racing with FF playback events and corrupting device's event
    queue take event_lock spinlock when calling uinput_dev_event() when
    submitting a FF upload or erase "event".
    
    Tested-by: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com>
    Link: https://patch.msgid.link/adXkf6MWzlB8LA_s@google.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
lib/crypto: chacha: Zeroize permuted_state before it leaves scope [+ + +]
Author: Eric Biggers <ebiggers@kernel.org>
Date:   Wed Mar 25 20:29:20 2026 -0700

    lib/crypto: chacha: Zeroize permuted_state before it leaves scope
    
    commit e5046823f8fa3677341b541a25af2fcb99a5b1e0 upstream.
    
    Since the ChaCha permutation is invertible, the local variable
    'permuted_state' is sufficient to compute the original 'state', and thus
    the key, even after the permutation has been done.
    
    While the kernel is quite inconsistent about zeroizing secrets on the
    stack (and some prominent userspace crypto libraries don't bother at all
    since it's not guaranteed to work anyway), the kernel does try to do it
    as a best practice, especially in cases involving the RNG.
    
    Thus, explicitly zeroize 'permuted_state' before it goes out of scope.
    
    Fixes: c08d0e647305 ("crypto: chacha20 - Add a generic ChaCha20 stream cipher implementation")
    Cc: stable@vger.kernel.org
    Acked-by: Ard Biesheuvel <ardb@kernel.org>
    Link: https://lore.kernel.org/r/20260326032920.39408-1-ebiggers@kernel.org
    Signed-off-by: Eric Biggers <ebiggers@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 6.6.135 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Sat Apr 18 10:39:53 2026 +0200

    Linux 6.6.135
    
    Link: https://lore.kernel.org/r/20260413155724.497323914@linuxfoundation.org
    Tested-by: Brett A C Sheffield <bacs@librecast.net>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Pavel Machek (CIP) <pavel@nabladev.com>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Tested-by: Barry K. Nathan <barryn@pobox.com>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Miguel Ojeda <ojeda@kernel.org>
    Tested-by: Shung-Hsi Yu <shung-hsi.yu@suse.com>
    Tested-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
MIPS: Always record SEGBITS in cpu_data.vmbits [+ + +]
Author: Maciej W. Rozycki <macro@orcam.me.uk>
Date:   Fri Apr 10 01:51:50 2026 +0100

    MIPS: Always record SEGBITS in cpu_data.vmbits
    
    commit 8374c2cb83b95b3c92f129fd56527225c20a058c upstream.
    
    With a 32-bit kernel running on 64-bit MIPS hardware the hardcoded value
    of `cpu_vmbits' only records the size of compatibility useg and does not
    reflect the size of native xuseg or the complete range of values allowed
    in the VPN2 field of TLB entries.
    
    An upcoming change will need the actual VPN2 value range permitted even
    in 32-bit kernel configurations, so always include the `vmbits' member
    in `struct cpuinfo_mips' and probe for SEGBITS when running on 64-bit
    hardware and resorting to the currently hardcoded value of 31 on 32-bit
    processors.  No functional change for users of `cpu_vmbits'.
    
    Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

MIPS: mm: Rewrite TLB uniquification for the hidden bit feature [+ + +]
Author: Maciej W. Rozycki <macro@orcam.me.uk>
Date:   Fri Apr 10 01:51:52 2026 +0100

    MIPS: mm: Rewrite TLB uniquification for the hidden bit feature
    
    commit 540760b77b8fc49d39d1b2b76196e5ec57711a32 upstream.
    
    Before the introduction of the EHINV feature, which lets software mark
    TLB entries invalid, certain older implementations of the MIPS ISA were
    equipped with an analogous bit, as a vendor extension, which however is
    hidden from software and only ever set at reset, and then any software
    write clears it, making the intended TLB entry valid.
    
    This feature makes it unsafe to read a TLB entry with TLBR, modify the
    page mask, and write the entry back with TLBWI, because this operation
    will implicitly clear the hidden bit and this may create a duplicate
    entry, as with the presence of the hidden bit there is no guarantee all
    the entries across the TLB are unique each.
    
    Usually the firmware has already uniquified TLB entries before handing
    control over, in which case we only need to guarantee at bootstrap no
    clash will happen with the VPN2 values chosen in local_flush_tlb_all().
    
    However with systems such as Mikrotik RB532 we get handed the TLB as at
    reset, with the hidden bit set across the entries and possibly duplicate
    entries present.  This then causes a machine check exception when page
    sizes are reset in r4k_tlb_uniquify() and prevents the system from
    booting.
    
    Rewrite the algorithm used in r4k_tlb_uniquify() then such as to avoid
    the reuse of ASID/VPN values across the TLB.  Get rid of global entries
    first as they may be blocking the entire address space, e.g. 16 256MiB
    pages will exhaust the whole address space of a 32-bit CPU and a single
    big page can exhaust the 32-bit compatibility space on a 64-bit CPU.
    
    Details of the algorithm chosen are given across the code itself.
    
    Fixes: 9f048fa48740 ("MIPS: mm: Prevent a TLB shutdown on initial uniquification")
    Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Cc: stable@vger.kernel.org # v6.18+
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

MIPS: mm: Suppress TLB uniquification on EHINV hardware [+ + +]
Author: Maciej W. Rozycki <macro@orcam.me.uk>
Date:   Fri Apr 10 01:51:51 2026 +0100

    MIPS: mm: Suppress TLB uniquification on EHINV hardware
    
    commit 74283cfe216392c7b776ebf6045b5b15ed9dffcd upstream.
    
    Hardware that supports the EHINV feature, mandatory for R6 ISA and FTLB
    implementation, lets software mark TLB entries invalid, which eliminates
    the need to ensure no duplicate matching entries are ever created.  This
    feature is already used by local_flush_tlb_all(), via the UNIQUE_ENTRYHI
    macro, making the preceding call to r4k_tlb_uniquify() superfluous.
    
    The next change will also modify uniquification code such that it'll
    become incompatible with the FTLB and MMID features, as well as MIPSr6
    CPUs that do not implement 4KiB pages.
    
    Therefore prevent r4k_tlb_uniquify() from being used on EHINV hardware,
    as denoted by `cpu_has_tlbinv'.
    
    Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mm: filemap: fix nr_pages calculation overflow in filemap_map_pages() [+ + +]
Author: Baolin Wang <baolin.wang@linux.alibaba.com>
Date:   Tue Mar 17 17:29:55 2026 +0800

    mm: filemap: fix nr_pages calculation overflow in filemap_map_pages()
    
    commit f58df566524ebcdfa394329c64f47e3c9257516e upstream.
    
    When running stress-ng on my Arm64 machine with v7.0-rc3 kernel, I
    encountered some very strange crash issues showing up as "Bad page state":
    
    "
    [  734.496287] BUG: Bad page state in process stress-ng-env  pfn:415735fb
    [  734.496427] page: refcount:0 mapcount:1 mapping:0000000000000000 index:0x4cf316 pfn:0x415735fb
    [  734.496434] flags: 0x57fffe000000800(owner_2|node=1|zone=2|lastcpupid=0x3ffff)
    [  734.496439] raw: 057fffe000000800 0000000000000000 dead000000000122 0000000000000000
    [  734.496440] raw: 00000000004cf316 0000000000000000 0000000000000000 0000000000000000
    [  734.496442] page dumped because: nonzero mapcount
    "
    
    After analyzing this page’s state, it is hard to understand why the
    mapcount is not 0 while the refcount is 0, since this page is not where
    the issue first occurred.  By enabling the CONFIG_DEBUG_VM config, I can
    reproduce the crash as well and captured the first warning where the issue
    appears:
    
    "
    [  734.469226] page: refcount:33 mapcount:0 mapping:00000000bef2d187 index:0x81a0 pfn:0x415735c0
    [  734.469304] head: order:5 mapcount:0 entire_mapcount:0 nr_pages_mapped:0 pincount:0
    [  734.469315] memcg:ffff000807a8ec00
    [  734.469320] aops:ext4_da_aops ino:100b6f dentry name(?):"stress-ng-mmaptorture-9397-0-2736200540"
    [  734.469335] flags: 0x57fffe400000069(locked|uptodate|lru|head|node=1|zone=2|lastcpupid=0x3ffff)
    ......
    [  734.469364] page dumped because: VM_WARN_ON_FOLIO((_Generic((page + nr_pages - 1),
    const struct page *: (const struct folio *)_compound_head(page + nr_pages - 1), struct page *:
    (struct folio *)_compound_head(page + nr_pages - 1))) != folio)
    [  734.469390] ------------[ cut here ]------------
    [  734.469393] WARNING: ./include/linux/rmap.h:351 at folio_add_file_rmap_ptes+0x3b8/0x468,
    CPU#90: stress-ng-mlock/9430
    [  734.469551]  folio_add_file_rmap_ptes+0x3b8/0x468 (P)
    [  734.469555]  set_pte_range+0xd8/0x2f8
    [  734.469566]  filemap_map_folio_range+0x190/0x400
    [  734.469579]  filemap_map_pages+0x348/0x638
    [  734.469583]  do_fault_around+0x140/0x198
    ......
    [  734.469640]  el0t_64_sync+0x184/0x188
    "
    
    The code that triggers the warning is: "VM_WARN_ON_FOLIO(page_folio(page +
    nr_pages - 1) != folio, folio)", which indicates that set_pte_range()
    tried to map beyond the large folio’s size.
    
    By adding more debug information, I found that 'nr_pages' had overflowed
    in filemap_map_pages(), causing set_pte_range() to establish mappings for
    a range exceeding the folio size, potentially corrupting fields of pages
    that do not belong to this folio (e.g., page->_mapcount).
    
    After above analysis, I think the possible race is as follows:
    
    CPU 0                                                  CPU 1
    filemap_map_pages()                                   ext4_setattr()
       //get and lock folio with old inode->i_size
       next_uptodate_folio()
    
                                                              .......
                                                              //shrink the inode->i_size
                                                              i_size_write(inode, attr->ia_size);
    
       //calculate the end_pgoff with the new inode->i_size
       file_end = DIV_ROUND_UP(i_size_read(mapping->host), PAGE_SIZE) - 1;
       end_pgoff = min(end_pgoff, file_end);
    
       ......
       //nr_pages can be overflowed, cause xas.xa_index > end_pgoff
       end = folio_next_index(folio) - 1;
       nr_pages = min(end, end_pgoff) - xas.xa_index + 1;
    
       ......
       //map large folio
       filemap_map_folio_range()
                                                              ......
                                                              //truncate folios
                                                              truncate_pagecache(inode, inode->i_size);
    
    To fix this issue, move the 'end_pgoff' calculation before
    next_uptodate_folio(), so the retrieved folio stays consistent with the
    file end to avoid 'nr_pages' calculation overflow.  After this patch, the
    crash issue is gone.
    
    Link: https://lkml.kernel.org/r/1cf1ac59018fc647a87b0dad605d4056a71c14e4.1773739704.git.baolin.wang@linux.alibaba.com
    Fixes: 743a2753a02e ("filemap: cap PTE range to be created to allowed zero fill in folio_map_range()")
    Signed-off-by: Baolin Wang <baolin.wang@linux.alibaba.com>
    Reported-by: Yuanhe Shu <xiangzao@linux.alibaba.com>
    Tested-by: Yuanhe Shu <xiangzao@linux.alibaba.com>
    Acked-by: Kiryl Shutsemau (Meta) <kas@kernel.org>
    Acked-by: David Hildenbrand (Arm) <david@kernel.org>
    Cc: Christian Brauner <brauner@kernel.org>
    Cc: Daniel Gomez <da.gomez@samsung.com>
    Cc: "Darrick J. Wong" <djwong@kernel.org>
    Cc: Dave Chinner <dchinner@redhat.com>
    Cc: David Howells <dhowells@redhat.com>
    Cc: Hannes Reinecke <hare@suse.de>
    Cc: Lorenzo Stoakes (Oracle) <ljs@kernel.org>
    Cc: Luis Chamberalin <mcgrof@kernel.org>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Pankaj Raghav <p.raghav@samsung.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mmc: vub300: fix NULL-deref on disconnect [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Mar 27 11:52:05 2026 +0100

    mmc: vub300: fix NULL-deref on disconnect
    
    commit dff34ef879c5e73298443956a8b391311ba78d57 upstream.
    
    Make sure to deregister the controller before dropping the reference to
    the driver data on disconnect to avoid NULL-pointer dereferences or
    use-after-free.
    
    Fixes: 88095e7b473a ("mmc: Add new VUB300 USB-to-SD/SDIO/MMC driver")
    Cc: stable@vger.kernel.org # 3.0+
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mptcp: fix slab-use-after-free in __inet_lookup_established [+ + +]
Author: Jiayuan Chen <jiayuan.chen@linux.dev>
Date:   Mon Apr 6 11:15:10 2026 +0800

    mptcp: fix slab-use-after-free in __inet_lookup_established
    
    commit 9b55b253907e7431210483519c5ad711a37dafa1 upstream.
    
    The ehash table lookups are lockless and rely on
    SLAB_TYPESAFE_BY_RCU to guarantee socket memory stability
    during RCU read-side critical sections. Both tcp_prot and
    tcpv6_prot have their slab caches created with this flag
    via proto_register().
    
    However, MPTCP's mptcp_subflow_init() copies tcpv6_prot into
    tcpv6_prot_override during inet_init() (fs_initcall, level 5),
    before inet6_init() (module_init/device_initcall, level 6) has
    called proto_register(&tcpv6_prot). At that point,
    tcpv6_prot.slab is still NULL, so tcpv6_prot_override.slab
    remains NULL permanently.
    
    This causes MPTCP v6 subflow child sockets to be allocated via
    kmalloc (falling into kmalloc-4k) instead of the TCPv6 slab
    cache. The kmalloc-4k cache lacks SLAB_TYPESAFE_BY_RCU, so
    when these sockets are freed without SOCK_RCU_FREE (which is
    cleared for child sockets by design), the memory can be
    immediately reused. Concurrent ehash lookups under
    rcu_read_lock can then access freed memory, triggering a
    slab-use-after-free in __inet_lookup_established.
    
    Fix this by splitting the IPv6-specific initialization out of
    mptcp_subflow_init() into a new mptcp_subflow_v6_init(), called
    from mptcp_proto_v6_init() before protocol registration. This
    ensures tcpv6_prot_override.slab correctly inherits the
    SLAB_TYPESAFE_BY_RCU slab cache.
    
    Fixes: b19bc2945b40 ("mptcp: implement delegated actions")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260406031512.189159-1-jiayuan.chen@linux.dev
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/mlx5: Update the list of the PCI supported devices [+ + +]
Author: Michael Guralnik <michaelgur@nvidia.com>
Date:   Fri Apr 3 12:17:56 2026 +0300

    net/mlx5: Update the list of the PCI supported devices
    
    commit a9d4f4f6e65e0bf9bbddedecc84d67249991979c upstream.
    
    Add the upcoming ConnectX-10 NVLink-C2C device ID to the table of
    supported PCI device IDs.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Michael Guralnik <michaelgur@nvidia.com>
    Reviewed-by: Patrisious Haddad <phaddad@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20260403091756.139583-1-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/tls: fix use-after-free in -EBUSY error path of tls_do_encryption [+ + +]
Author: Muhammad Alifa Ramdhan <ramdhan@starlabs.sg>
Date:   Fri Apr 3 09:36:17 2026 +0800

    net/tls: fix use-after-free in -EBUSY error path of tls_do_encryption
    
    commit a9b8b18364fffce4c451e6f6fd218fa4ab646705 upstream.
    
    The -EBUSY handling in tls_do_encryption(), introduced by commit
    859054147318 ("net: tls: handle backlogging of crypto requests"), has
    a use-after-free due to double cleanup of encrypt_pending and the
    scatterlist entry.
    
    When crypto_aead_encrypt() returns -EBUSY, the request is enqueued to
    the cryptd backlog and the async callback tls_encrypt_done() will be
    invoked upon completion. That callback unconditionally restores the
    scatterlist entry (sge->offset, sge->length) and decrements
    ctx->encrypt_pending. However, if tls_encrypt_async_wait() returns an
    error, the synchronous error path in tls_do_encryption() performs the
    same cleanup again, double-decrementing encrypt_pending and
    double-restoring the scatterlist.
    
    The double-decrement corrupts the encrypt_pending sentinel (initialized
    to 1), making tls_encrypt_async_wait() permanently skip the wait for
    pending async callbacks. A subsequent sendmsg can then free the
    tls_rec via bpf_exec_tx_verdict() while a cryptd callback is still
    pending, resulting in a use-after-free when the callback fires on the
    freed record.
    
    Fix this by skipping the synchronous cleanup when the -EBUSY async
    wait returns an error, since the callback has already handled
    encrypt_pending and sge restoration.
    
    Fixes: 859054147318 ("net: tls: handle backlogging of crypto requests")
    Cc: stable@vger.kernel.org
    Signed-off-by: Muhammad Alifa Ramdhan <ramdhan@starlabs.sg>
    Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
    Link: https://patch.msgid.link/20260403013617.2838875-1-ramdhan@starlabs.sg
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net: altera-tse: fix skb leak on DMA mapping error in tse_start_xmit() [+ + +]
Author: David Carlier <devnexen@gmail.com>
Date:   Wed Apr 1 22:12:18 2026 +0100

    net: altera-tse: fix skb leak on DMA mapping error in tse_start_xmit()
    
    commit 6dede3967619b5944003227a5d09fdc21ed57d10 upstream.
    
    When dma_map_single() fails in tse_start_xmit(), the function returns
    NETDEV_TX_OK without freeing the skb. Since NETDEV_TX_OK tells the
    stack the packet was consumed, the skb is never freed, leaking memory
    on every DMA mapping failure.
    
    Add dev_kfree_skb_any() before returning to properly free the skb.
    
    Fixes: bbd2190ce96d ("Altera TSE: Add main and header file for Altera Ethernet Driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: David Carlier <devnexen@gmail.com>
    Link: https://patch.msgid.link/20260401211218.279185-1-devnexen@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: lan966x: fix page_pool error handling in lan966x_fdma_rx_alloc_page_pool() [+ + +]
Author: David Carlier <devnexen@gmail.com>
Date:   Sun Apr 5 06:52:39 2026 +0100

    net: lan966x: fix page_pool error handling in lan966x_fdma_rx_alloc_page_pool()
    
    commit 3fd0da4fd8851a7e62d009b7db6c4a05b092bc19 upstream.
    
    page_pool_create() can return an ERR_PTR on failure. The return value
    is used unconditionally in the loop that follows, passing the error
    pointer through xdp_rxq_info_reg_mem_model() into page_pool_use_xdp_mem(),
    which dereferences it, causing a kernel oops.
    
    Add an IS_ERR check after page_pool_create() to return early on failure.
    
    Fixes: 11871aba1974 ("net: lan96x: Use page_pool API")
    Cc: stable@vger.kernel.org
    Signed-off-by: David Carlier <devnexen@gmail.com>
    Link: https://patch.msgid.link/20260405055241.35767-2-devnexen@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: qualcomm: qca_uart: report the consumed byte on RX skb allocation failure [+ + +]
Author: Pengpeng Hou <pengpeng@iscas.ac.cn>
Date:   Thu Apr 2 15:12:07 2026 +0800

    net: qualcomm: qca_uart: report the consumed byte on RX skb allocation failure
    
    commit b76254c55dc8f23edc089027dd3f8792554c69fb upstream.
    
    qca_tty_receive() consumes each input byte before checking whether a
    completed frame needs a fresh receive skb. When the current byte completes
    a frame, the driver delivers that frame and then allocates a new skb for
    the next one.
    
    If that allocation fails, the current code returns i even though data[i]
    has already been consumed and may already have completed the delivered
    frame. Since serdev interprets the return value as the number of accepted
    bytes, this under-reports progress by one byte and can replay the final
    byte of the completed frame into a fresh parser state on the next call.
    
    Return i + 1 in that failure path so the accepted-byte count matches the
    actual receive-state progress.
    
    Fixes: dfc768fbe618 ("net: qualcomm: add QCA7000 UART driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn>
    Reviewed-by: Stefan Wahren <wahrenst@gmx.net>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20260402071207.4036-1-pengpeng@iscas.ac.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: rfkill: prevent unlimited numbers of rfkill events from being created [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Mar 30 11:14:13 2026 +0200

    net: rfkill: prevent unlimited numbers of rfkill events from being created
    
    commit ea245d78dec594372e27d8c79616baf49e98a4a1 upstream.
    
    Userspace can create an unlimited number of rfkill events if the system
    is so configured, while not consuming them from the rfkill file
    descriptor, causing a potential out of memory situation.  Prevent this
    from bounding the number of pending rfkill events at a "large" number
    (i.e. 1000) to prevent abuses like this.
    
    Cc: Johannes Berg <johannes@sipsolutions.net>
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Cc: stable <stable@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Link: https://patch.msgid.link/2026033013-disfigure-scroll-e25e@gregkh
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: stmmac: fix integer underflow in chain mode [+ + +]
Author: Tyllis Xu <livelycarpet87@gmail.com>
Date:   Tue Mar 31 23:47:07 2026 -0500

    net: stmmac: fix integer underflow in chain mode
    
    commit 51f4e090b9f87b40c21b6daadb5c06e6c0a07b67 upstream.
    
    The jumbo_frm() chain-mode implementation unconditionally computes
    
        len = nopaged_len - bmax;
    
    where nopaged_len = skb_headlen(skb) (linear bytes only) and bmax is
    BUF_SIZE_8KiB or BUF_SIZE_2KiB.  However, the caller stmmac_xmit()
    decides to invoke jumbo_frm() based on skb->len (total length including
    page fragments):
    
        is_jumbo = stmmac_is_jumbo_frm(priv, skb->len, enh_desc);
    
    When a packet has a small linear portion (nopaged_len <= bmax) but a
    large total length due to page fragments (skb->len > bmax), the
    subtraction wraps as an unsigned integer, producing a huge len value
    (~0xFFFFxxxx).  This causes the while (len != 0) loop to execute
    hundreds of thousands of iterations, passing skb->data + bmax * i
    pointers far beyond the skb buffer to dma_map_single().  On IOMMU-less
    SoCs (the typical deployment for stmmac), this maps arbitrary kernel
    memory to the DMA engine, constituting a kernel memory disclosure and
    potential memory corruption from hardware.
    
    Fix this by introducing a buf_len local variable clamped to
    min(nopaged_len, bmax).  Computing len = nopaged_len - buf_len is then
    always safe: it is zero when the linear portion fits within a single
    descriptor, causing the while (len != 0) loop to be skipped naturally,
    and the fragment loop in stmmac_xmit() handles page fragments afterward.
    
    Fixes: 286a83721720 ("stmmac: add CHAINED descriptor mode support (V4)")
    Cc: stable@vger.kernel.org
    Signed-off-by: Tyllis Xu <LivelyCarpet87@gmail.com>
    Link: https://patch.msgid.link/20260401044708.1386919-1-LivelyCarpet87@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
netfilter: nft_ct: fix use-after-free in timeout object destroy [+ + +]
Author: Tuan Do <tuan@calif.io>
Date:   Fri Apr 3 00:33:17 2026 -0700

    netfilter: nft_ct: fix use-after-free in timeout object destroy
    
    commit f8dca15a1b190787bbd03285304b569631160eda upstream.
    
    nft_ct_timeout_obj_destroy() frees the timeout object with kfree()
    immediately after nf_ct_untimeout(), without waiting for an RCU grace
    period. Concurrent packet processing on other CPUs may still hold
    RCU-protected references to the timeout object obtained via
    rcu_dereference() in nf_ct_timeout_data().
    
    Add an rcu_head to struct nf_ct_timeout and use kfree_rcu() to defer
    freeing until after an RCU grace period, matching the approach already
    used in nfnetlink_cttimeout.c.
    
    KASAN report:
     BUG: KASAN: slab-use-after-free in nf_conntrack_tcp_packet+0x1381/0x29d0
     Read of size 4 at addr ffff8881035fe19c by task exploit/80
    
     Call Trace:
      nf_conntrack_tcp_packet+0x1381/0x29d0
      nf_conntrack_in+0x612/0x8b0
      nf_hook_slow+0x70/0x100
      __ip_local_out+0x1b2/0x210
      tcp_sendmsg_locked+0x722/0x1580
      __sys_sendto+0x2d8/0x320
    
     Allocated by task 75:
      nft_ct_timeout_obj_init+0xf6/0x290
      nft_obj_init+0x107/0x1b0
      nf_tables_newobj+0x680/0x9c0
      nfnetlink_rcv_batch+0xc29/0xe00
    
     Freed by task 26:
      nft_obj_destroy+0x3f/0xa0
      nf_tables_trans_destroy_work+0x51c/0x5c0
      process_one_work+0x2c4/0x5a0
    
    Fixes: 7e0b2b57f01d ("netfilter: nft_ct: add ct timeout support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Tuan Do <tuan@calif.io>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_set_pipapo: do not rely on ZERO_SIZE_PTR [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Mon Apr 13 04:32:23 2026 +0000

    netfilter: nft_set_pipapo: do not rely on ZERO_SIZE_PTR
    
    commit 07ace0bbe03b3d8e85869af1dec5e4087b1d57b8 upstream
    
    pipapo relies on kmalloc(0) returning ZERO_SIZE_PTR (i.e., not NULL
    but pointer is invalid).
    
    Rework this to not call slab allocator when we'd request a 0-byte
    allocation.
    
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Mukul Sikka <mukul.sikka@broadcom.com>
    Signed-off-by: Brennan Lamoreaux <brennan.lamoreaux@broadcom.com>
    [Keerthana: In older stable branches (v6.6 and earlier), the allocation logic in
    pipapo_clone() still relies on `src->rules` rather than `src->rules_alloc`
    (introduced in v6.9 via 9f439bd6ef4f). Consequently, the previously
    backported INT_MAX clamping check uses `src->rules`. This patch correctly
    moves that `src->rules > (INT_MAX / ...)` check inside the new
    `if (src->rules > 0)` block]
    Signed-off-by: Keerthana K <keerthana.kalyanasundaram@broadcom.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nfc: pn533: allocate rx skb before consuming bytes [+ + +]
Author: Pengpeng Hou <pengpeng@iscas.ac.cn>
Date:   Sun Apr 5 08:40:00 2026 +0800

    nfc: pn533: allocate rx skb before consuming bytes
    
    commit c71ba669b570c7b3f86ec875be222ea11dacb352 upstream.
    
    pn532_receive_buf() reports the number of accepted bytes to the serdev
    core. The current code consumes bytes into recv_skb and may already hand
    a complete frame to pn533_recv_frame() before allocating a fresh receive
    buffer.
    
    If that alloc_skb() fails, the callback returns 0 even though it has
    already consumed bytes, and it leaves recv_skb as NULL for the next
    receive callback. That breaks the receive_buf() accounting contract and
    can also lead to a NULL dereference on the next skb_put_u8().
    
    Allocate the receive skb lazily before consuming the next byte instead.
    If allocation fails, return the number of bytes already accepted.
    
    Fixes: c656aa4c27b1 ("nfc: pn533: add UART phy driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn>
    Link: https://patch.msgid.link/20260405094003.3-pn533-v2-pengpeng@iscas.ac.cn
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
pmdomain: imx8mp-blk-ctrl: Keep the NOC_HDCP clock enabled [+ + +]
Author: Jacky Bai <ping.bai@nxp.com>
Date:   Fri Mar 20 16:43:46 2026 +0800

    pmdomain: imx8mp-blk-ctrl: Keep the NOC_HDCP clock enabled
    
    commit e91d5f94acf68618ea3ad9c92ac28614e791ae7d upstream.
    
    Keep the NOC_HDCP clock always enabled to fix the potential hang
    caused by the NoC ADB400 port power down handshake.
    
    Fixes: 77b0ddb42add ("soc: imx: add i.MX8MP HDMI blk ctrl HDCP/HRV_MWR")
    Signed-off-by: Jacky Bai <ping.bai@nxp.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "arm64: dts: imx8mq-librem5: Set the DVS voltages lower" [+ + +]
Author: Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>
Date:   Sat Feb 21 19:15:18 2026 +0100

    Revert "arm64: dts: imx8mq-librem5: Set the DVS voltages lower"
    
    commit 4cd46ea0eb4504f7f4fea92cb4601c5c9a3e545e upstream.
    
    This reverts commit c24a9b698fb02cd0723fa8375abab07f94b97b10.
    
    It's been found that there's a significant per-unit variance in accepted
    supply voltages and the current set still makes some units unstable.
    
    Revert back to nominal values.
    
    Cc: stable@vger.kernel.org
    Fixes: c24a9b698fb0 ("arm64: dts: imx8mq-librem5: Set the DVS voltages lower")
    Signed-off-by: Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>
    Signed-off-by: Frank Li <Frank.Li@nxp.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "drm: Fix use-after-free on framebuffers and property blobs when calling drm_dev_unplug" [+ + +]
Author: Maarten Lankhorst <dev@lankhorst.se>
Date:   Mon Apr 13 10:03:33 2026 +0200

    Revert "drm: Fix use-after-free on framebuffers and property blobs when calling drm_dev_unplug"
    
    commit 45ebe43ea00d6b9f5b3e0db9c35b8ca2a96b7e70 upstream.
    
    This reverts commit 6bee098b91417654703e17eb5c1822c6dfd0c01d.
    
    Den 2026-03-25 kl. 22:11, skrev Simona Vetter:
    > On Wed, Mar 25, 2026 at 10:26:40AM -0700, Guenter Roeck wrote:
    >> Hi,
    >>
    >> On Fri, Mar 13, 2026 at 04:17:27PM +0100, Maarten Lankhorst wrote:
    >>> When trying to do a rather aggressive test of igt's "xe_module_load
    >>> --r reload" with a full desktop environment and game running I noticed
    >>> a few OOPSes when dereferencing freed pointers, related to
    >>> framebuffers and property blobs after the compositor exits.
    >>>
    >>> Solve this by guarding the freeing in drm_file with drm_dev_enter/exit,
    >>> and immediately put the references from struct drm_file objects during
    >>> drm_dev_unplug().
    >>>
    >>
    >> With this patch in v6.18.20, I get the warning backtraces below.
    >> The backtraces are gone with the patch reverted.
    >
    > Yeah, this needs to be reverted, reasoning below. Maarten, can you please
    > take care of that and feed the revert through the usual channels? I don't
    > think it's critical enough that we need to fast-track this into drm.git
    > directly.
    >
    > Quoting the patch here again:
    >
    >>  drivers/gpu/drm/drm_file.c| 5 ++++-
    >>  drivers/gpu/drm/drm_mode_config.c | 9 ++++++---
    >>  2 files changed, 10 insertions(+), 4 deletions(-)
    >>
    >> diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c
    >> index ec820686b3021..f52141f842a1f 100644
    >> --- a/drivers/gpu/drm/drm_file.c
    >> +++ b/drivers/gpu/drm/drm_file.c
    >> @@ -233,6 +233,7 @@ static void drm_events_release(struct drm_file *file_priv)
    >>  void drm_file_free(struct drm_file *file)
    >>  {
    >>  struct drm_device *dev;
    >> +int idx;
    >>
    >>  if (!file)
    >>  return;
    >> @@ -249,9 +250,11 @@ void drm_file_free(struct drm_file *file)
    >>
    >>  drm_events_release(file);
    >>
    >> -if (drm_core_check_feature(dev, DRIVER_MODESET)) {
    >> +if (drm_core_check_feature(dev, DRIVER_MODESET) &&
    >> +drm_dev_enter(dev, &idx)) {
    >
    > This is misplaced for two reasons:
    >
    > - Even if we'd want to guarantee that we hold a drm_dev_enter/exit
    >   reference during framebuffer teardown, we'd need to do this
    >   _consistently over all callsites. Not ad-hoc in just one place that a
    >   testcase hits. This also means kerneldoc updates of the relevant hooks
    >   and at least a bunch of acks from other driver people to document the
    >   consensus.
    >
    > - More importantly, this is driver responsibilities in general unless we
    >   have extremely good reasons to the contrary. Which means this must be
    >   placed in xe.
    >
    >>  drm_fb_release(file);
    >>  drm_property_destroy_user_blobs(dev, file);
    >> +drm_dev_exit(idx);
    >>  }
    >>
    >>  if (drm_core_check_feature(dev, DRIVER_SYNCOBJ))
    >> diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
    >> index 84ae8a23a3678..e349418978f79 100644
    >> --- a/drivers/gpu/drm/drm_mode_config.c
    >> +++ b/drivers/gpu/drm/drm_mode_config.c
    >> @@ -583,10 +583,13 @@ void drm_mode_config_cleanup(struct drm_device *dev)
    >>   */
    >>  WARN_ON(!list_empty(&dev->mode_config.fb_list));
    >>  list_for_each_entry_safe(fb, fbt, &dev->mode_config.fb_list, head) {
    >> -struct drm_printer p = drm_dbg_printer(dev, DRM_UT_KMS, "[leaked fb]");
    >> +if (list_empty(&fb->filp_head) || drm_framebuffer_read_refcount(fb) > 1) {
    >> +struct drm_printer p = drm_dbg_printer(dev, DRM_UT_KMS, "[leaked fb]");
    >
    > This is also wrong:
    >
    > - Firstly, it's a completely independent bug, we do not smash two bugfixes
    >   into one patch.
    >
    > - Secondly, it's again a driver bug: drm_mode_cleanup must be called when
    >   the last drm_device reference disappears (hence the existence of
    >   drmm_mode_config_init), not when the driver gets unbound. The fact that
    >   this shows up in a callchain from a devres cleanup means the intel
    >   driver gets this wrong (like almost everyone else because historically
    >   we didn't know better).
    >
    >   If we don't follow this rule, then we get races with this code here
    >   running concurrently with drm_file fb cleanups, which just does not
    >   work. Review pointed that out, but then shrugged it off with a confused
    >   explanation:
    >
    >   https://lore.kernel.org/all/e61e64c796ccfb17ae673331a3df4b877bf42d82.camel@linux.intel.com/
    >
    >   Yes this also means a lot of the other drm_device teardown that drivers
    >   do happens way too early. There is a massive can of worms here of a
    >   magnitude that most likely is much, much bigger than what you can
    >   backport to stable kernels. Hotunplug is _hard_.
    
    Back to the drawing board, and fixing it in the intel display driver
    instead.
    
    Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
    Fixes: 6bee098b9141 ("drm: Fix use-after-free on framebuffers and property blobs when calling drm_dev_unplug")
    Reported-by: Guenter Roeck <linux@roeck-us.net>
    Tested-by: Guenter Roeck <linux@roeck-us.net>
    Acked-by: Simona Vetter <simona.vetter@ffwll.ch>
    Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
    Link: https://patch.msgid.link/20260326082217.39941-2-dev@lankhorst.se
    [ Thorsten: adjust to the v6.6.y/v6.6.y backports of 6bee098b9141 ]
    Signed-off-by: Thorsten Leemhuis <linux@leemhuis.info>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "mptcp: add needs_id for netlink appending addr" [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Sun Apr 12 12:58:02 2026 -0400

    Revert "mptcp: add needs_id for netlink appending addr"
    
    [ Upstream commit 8e2760eaab778494fc1fa257031e0e1799647f46 ]
    
    This commit was originally adding the ability to add MPTCP endpoints
    with ID 0 by accident. The in-kernel PM, handling MPTCP endpoints at the
    net namespace level, is not supposed to handle endpoints with such ID,
    because this ID 0 is reserved to the initial subflow, as mentioned in
    the MPTCPv1 protocol [1], a per-connection setting.
    
    Note that 'ip mptcp endpoint add id 0' stops early with an error, but
    other tools might still request the in-kernel PM to create MPTCP
    endpoints with this restricted ID 0.
    
    In other words, it was wrong to call the mptcp_pm_has_addr_attr_id
    helper to check whether the address ID attribute is set: if it was set
    to 0, a new MPTCP endpoint would be created with ID 0, which is not
    expected, and might cause various issues later.
    
    Fixes: 584f38942626 ("mptcp: add needs_id for netlink appending addr")
    Cc: stable@vger.kernel.org
    Link: https://datatracker.ietf.org/doc/html/rfc8684#section-3.2-9 [1]
    Reviewed-by: Geliang Tang <geliang@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260407-net-mptcp-revert-pm-needs-id-v2-1-7a25cbc324f8@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ applied changes to net/mptcp/pm_netlink.c instead of renamed net/mptcp/pm_kernel.c ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "PCI: Enable ACS after configuring IOMMU for OF platforms" [+ + +]
Author: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
Date:   Tue Mar 31 14:44:55 2026 +0530

    Revert "PCI: Enable ACS after configuring IOMMU for OF platforms"
    
    This reverts commit ec494c0260bf57a6fa3aa43a91daf7a774f8bd97 which is
    commit c41e2fb67e26b04d919257875fa954aa5f6e392e upstream.
    
    The original commit attempted to enable ACS in pci_dma_configure() prior
    to IOMMU group assignment in iommu_init_device() to fix the ACS enablement
    issue for OF platforms. But that assumption doesn't hold true for kernel
    versions prior to v6.15, because on these older kernels,
    pci_dma_configure() is called *after* iommu_init_device(). So the IOMMU
    groups are already created before the ACS gets enabled. This causes the
    devices that should have been split into separate groups by ACS, getting
    merged into one group, thereby breaking the IOMMU isolation as reported on
    the AMD machines.
    
    So revert the offending commit to restore the IOMMU group assignment on
    those affected machines. It should be noted that ACS has never really
    worked on kernel versions prior to v6.15, so the revert doesn't make any
    difference for OF platforms.
    
    Reported-by: John Hancock <john@kernel.doghat.io>
    Reported-by: bjorn.forsman@gmail.com
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=221234
    Fixes: b20b659c2c6a ("PCI: Enable ACS after configuring IOMMU for OF platforms")
    Cc: Linux kernel regressions list <regressions@lists.linux.dev>
    Link: https://lore.kernel.org/regressions/2c30f181-ffc6-4d63-a64e-763cf4528f48@leemhuis.info
    Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rxrpc: Fix call removal to use RCU safe deletion [+ + +]
Author: David Howells <dhowells@redhat.com>
Date:   Wed Apr 8 13:12:32 2026 +0100

    rxrpc: Fix call removal to use RCU safe deletion
    
    commit 146d4ab94cf129ee06cd467cb5c71368a6b5bad6 upstream.
    
    Fix rxrpc call removal from the rxnet->calls list to use list_del_rcu()
    rather than list_del_init() to prevent stuffing up reading
    /proc/net/rxrpc/calls from potentially getting into an infinite loop.
    
    This, however, means that list_empty() no longer works on an entry that's
    been deleted from the list, making it harder to detect prior deletion.  Fix
    this by:
    
    Firstly, make rxrpc_destroy_all_calls() only dump the first ten calls that
    are unexpectedly still on the list.  Limiting the number of steps means
    there's no need to call cond_resched() or to remove calls from the list
    here, thereby eliminating the need for rxrpc_put_call() to check for that.
    
    rxrpc_put_call() can then be fixed to unconditionally delete the call from
    the list as it is the only place that the deletion occurs.
    
    Fixes: 2baec2c3f854 ("rxrpc: Support network namespacing")
    Closes: https://sashiko.dev/#/patchset/20260319150150.4189381-1-dhowells%40redhat.com
    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: Jeffrey Altman <jaltman@auristor.com>
    cc: Linus Torvalds <torvalds@linux-foundation.org>
    cc: Simon Horman <horms@kernel.org>
    cc: linux-afs@lists.infradead.org
    cc: stable@kernel.org
    Link: https://patch.msgid.link/20260408121252.2249051-5-dhowells@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rxrpc: Fix key reference count leak from call->key [+ + +]
Author: Anderson Nascimento <anderson@allelesecurity.com>
Date:   Wed Apr 8 13:12:36 2026 +0100

    rxrpc: Fix key reference count leak from call->key
    
    commit d666540d217e8d420544ebdfbadeedd623562733 upstream.
    
    When creating a client call in rxrpc_alloc_client_call(), the code obtains
    a reference to the key.  This is never cleaned up and gets leaked when the
    call is destroyed.
    
    Fix this by freeing call->key in rxrpc_destroy_call().
    
    Before the patch, it shows the key reference counter elevated:
    
    $ cat /proc/keys | grep afs@54321
    1bffe9cd I--Q--i 8053480 4169w 3b010000  1000  1000 rxrpc     afs@54321: ka
    $
    
    After the patch, the invalidated key is removed when the code exits:
    
    $ cat /proc/keys | grep afs@54321
    $
    
    Fixes: f3441d4125fc ("rxrpc: Copy client call parameters into rxrpc_call earlier")
    Signed-off-by: Anderson Nascimento <anderson@allelesecurity.com>
    Co-developed-by: David Howells <dhowells@redhat.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    Reviewed-by: Jeffrey Altman <jaltman@auristor.com>
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: Simon Horman <horms@kernel.org>
    cc: linux-afs@lists.infradead.org
    cc: stable@kernel.org
    Link: https://patch.msgid.link/20260408121252.2249051-9-dhowells@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rxrpc: Fix key/keyring checks in setsockopt(RXRPC_SECURITY_KEY/KEYRING) [+ + +]
Author: David Howells <dhowells@redhat.com>
Date:   Wed Apr 8 13:12:43 2026 +0100

    rxrpc: Fix key/keyring checks in setsockopt(RXRPC_SECURITY_KEY/KEYRING)
    
    commit 2afd86ccbb2082a3c4258aea8c07e5bb6267bc2f upstream.
    
    An AF_RXRPC socket can be both client and server at the same time.  When
    sending new calls (ie. it's acting as a client), it uses rx->key to set the
    security, and when accepting incoming calls (ie. it's acting as a server),
    it uses rx->securities.
    
    setsockopt(RXRPC_SECURITY_KEY) sets rx->key to point to an rxrpc-type key
    and setsockopt(RXRPC_SECURITY_KEYRING) sets rx->securities to point to a
    keyring of rxrpc_s-type keys.
    
    Now, it should be possible to use both rx->key and rx->securities on the
    same socket - but for userspace AF_RXRPC sockets rxrpc_setsockopt()
    prevents that.
    
    Fix this by:
    
     (1) Remove the incorrect check rxrpc_setsockopt(RXRPC_SECURITY_KEYRING)
         makes on rx->key.
    
     (2) Move the check that rxrpc_setsockopt(RXRPC_SECURITY_KEY) makes on
         rx->key down into rxrpc_request_key().
    
     (3) Remove rxrpc_request_key()'s check on rx->securities.
    
    This (in combination with a previous patch) pushes the checks down into the
    functions that set those pointers and removes the cross-checks that prevent
    both key and keyring being set.
    
    Fixes: 17926a79320a ("[AF_RXRPC]: Provide secure RxRPC sockets for use by userspace and kernel both")
    Closes: https://sashiko.dev/#/patchset/20260401105614.1696001-10-dhowells@redhat.com
    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: Anderson Nascimento <anderson@allelesecurity.com>
    cc: Luxiao Xu <rakukuip@gmail.com>
    cc: Yuan Tan <yuantan098@gmail.com>
    cc: Simon Horman <horms@kernel.org>
    cc: linux-afs@lists.infradead.org
    cc: stable@kernel.org
    Link: https://patch.msgid.link/20260408121252.2249051-16-dhowells@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rxrpc: Fix missing error checks for rxkad encryption/decryption failure [+ + +]
Author: David Howells <dhowells@redhat.com>
Date:   Wed Apr 8 13:12:44 2026 +0100

    rxrpc: Fix missing error checks for rxkad encryption/decryption failure
    
    commit f93af41b9f5f798823d0d0fb8765c2a936d76270 upstream.
    
    Add error checking for failure of crypto_skcipher_en/decrypt() to various
    rxkad function as the crypto functions can fail with ENOMEM at least.
    
    Fixes: 17926a79320a ("[AF_RXRPC]: Provide secure RxRPC sockets for use by userspace and kernel both")
    Closes: https://sashiko.dev/#/patchset/20260401105614.1696001-10-dhowells@redhat.com
    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: Jeffrey Altman <jaltman@auristor.com>
    cc: Simon Horman <horms@kernel.org>
    cc: linux-afs@lists.infradead.org
    cc: stable@kernel.org
    Link: https://patch.msgid.link/20260408121252.2249051-17-dhowells@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rxrpc: fix reference count leak in rxrpc_server_keyring() [+ + +]
Author: Luxiao Xu <rakukuip@gmail.com>
Date:   Wed Apr 8 13:12:42 2026 +0100

    rxrpc: fix reference count leak in rxrpc_server_keyring()
    
    commit f125846ee79fcae537a964ce66494e96fa54a6de upstream.
    
    This patch fixes a reference count leak in rxrpc_server_keyring()
    by checking if rx->securities is already set.
    
    Fixes: 17926a79320a ("[AF_RXRPC]: Provide secure RxRPC sockets for use by userspace and kernel both")
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Co-developed-by: Yuan Tan <yuantan098@gmail.com>
    Signed-off-by: Yuan Tan <yuantan098@gmail.com>
    Suggested-by: Xin Liu <bird@lzu.edu.cn>
    Tested-by: Ren Wei <enjou1224z@gmail.com>
    Signed-off-by: Luxiao Xu <rakukuip@gmail.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: Simon Horman <horms@kernel.org>
    cc: linux-afs@lists.infradead.org
    cc: stable@kernel.org
    Link: https://patch.msgid.link/20260408121252.2249051-15-dhowells@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rxrpc: Only put the call ref if one was acquired [+ + +]
Author: Douya Le <ldy3087146292@gmail.com>
Date:   Wed Apr 8 13:12:38 2026 +0100

    rxrpc: Only put the call ref if one was acquired
    
    commit 6331f1b24a3e85465f6454e003a3e6c22005a5c5 upstream.
    
    rxrpc_input_packet_on_conn() can process a to-client packet after the
    current client call on the channel has already been torn down.  In that
    case chan->call is NULL, rxrpc_try_get_call() returns NULL and there is
    no reference to drop.
    
    The client-side implicit-end error path does not account for that and
    unconditionally calls rxrpc_put_call().  This turns a protocol error
    path into a kernel crash instead of rejecting the packet.
    
    Only drop the call reference if one was actually acquired.  Keep the
    existing protocol error handling unchanged.
    
    Fixes: 5e6ef4f1017c ("rxrpc: Make the I/O thread take over the call and local processor work")
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Signed-off-by: Douya Le <ldy3087146292@gmail.com>
    Co-developed-by: Yuan Tan <tanyuan98@gmail.com>
    Signed-off-by: Yuan Tan <tanyuan98@gmail.com>
    Suggested-by: Xin Liu <bird@lzu.edu.cn>
    Signed-off-by: Ao Zhou <n05ec@lzu.edu.cn>
    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: Simon Horman <horms@kernel.org>
    cc: linux-afs@lists.infradead.org
    cc: stable@kernel.org
    Link: https://patch.msgid.link/20260408121252.2249051-11-dhowells@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rxrpc: reject undecryptable rxkad response tickets [+ + +]
Author: Yuqi Xu <xuyuqiabc@gmail.com>
Date:   Wed Apr 8 13:12:39 2026 +0100

    rxrpc: reject undecryptable rxkad response tickets
    
    commit fe4447cd95623b1cfacc15f280aab73a6d7340b2 upstream.
    
    rxkad_decrypt_ticket() decrypts the RXKAD response ticket and then
    parses the buffer as plaintext without checking whether
    crypto_skcipher_decrypt() succeeded.
    
    A malformed RESPONSE can therefore use a non-block-aligned ticket
    length, make the decrypt operation fail, and still drive the ticket
    parser with attacker-controlled bytes.
    
    Check the decrypt result and abort the connection with RXKADBADTICKET
    when ticket decryption fails.
    
    Fixes: 17926a79320a ("[AF_RXRPC]: Provide secure RxRPC sockets for use by userspace and kernel both")
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Co-developed-by: Yuan Tan <yuantan098@gmail.com>
    Signed-off-by: Yuan Tan <yuantan098@gmail.com>
    Suggested-by: Xin Liu <bird@lzu.edu.cn>
    Tested-by: Ren Wei <enjou1224z@gmail.com>
    Signed-off-by: Yuqi Xu <xuyuqiabc@gmail.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: Simon Horman <horms@kernel.org>
    cc: linux-afs@lists.infradead.org
    cc: stable@kernel.org
    Link: https://patch.msgid.link/20260408121252.2249051-12-dhowells@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
scsi: ufs: core: Fix use-after free in init error and remove paths [+ + +]
Author: André Draszik <andre.draszik@linaro.org>
Date:   Thu Apr 9 14:01:47 2026 +0800

    scsi: ufs: core: Fix use-after free in init error and remove paths
    
    [ Upstream commit f8fb2403ddebb5eea0033d90d9daae4c88749ada ]
    
    devm_blk_crypto_profile_init() registers a cleanup handler to run when
    the associated (platform-) device is being released. For UFS, the
    crypto private data and pointers are stored as part of the ufs_hba's
    data structure 'struct ufs_hba::crypto_profile'. This structure is
    allocated as part of the underlying ufshcd and therefore Scsi_host
    allocation.
    
    During driver release or during error handling in ufshcd_pltfrm_init(),
    this structure is released as part of ufshcd_dealloc_host() before the
    (platform-) device associated with the crypto call above is released.
    Once this device is released, the crypto cleanup code will run, using
    the just-released 'struct ufs_hba::crypto_profile'. This causes a
    use-after-free situation:
    
      Call trace:
       kfree+0x60/0x2d8 (P)
       kvfree+0x44/0x60
       blk_crypto_profile_destroy_callback+0x28/0x70
       devm_action_release+0x1c/0x30
       release_nodes+0x6c/0x108
       devres_release_all+0x98/0x100
       device_unbind_cleanup+0x20/0x70
       really_probe+0x218/0x2d0
    
    In other words, the initialisation code flow is:
    
      platform-device probe
        ufshcd_pltfrm_init()
          ufshcd_alloc_host()
            scsi_host_alloc()
              allocation of struct ufs_hba
              creation of scsi-host devices
        devm_blk_crypto_profile_init()
          devm registration of cleanup handler using platform-device
    
    and during error handling of ufshcd_pltfrm_init() or during driver
    removal:
    
      ufshcd_dealloc_host()
        scsi_host_put()
          put_device(scsi-host)
            release of struct ufs_hba
      put_device(platform-device)
        crypto cleanup handler
    
    To fix this use-after free, change ufshcd_alloc_host() to register a
    devres action to automatically cleanup the underlying SCSI device on
    ufshcd destruction, without requiring explicit calls to
    ufshcd_dealloc_host(). This way:
    
        * the crypto profile and all other ufs_hba-owned resources are
          destroyed before SCSI (as they've been registered after)
        * a memleak is plugged in tc-dwc-g210-pci.c remove() as a
          side-effect
        * EXPORT_SYMBOL_GPL(ufshcd_dealloc_host) can be removed fully as
          it's not needed anymore
        * no future drivers using ufshcd_alloc_host() could ever forget
          adding the cleanup
    
    Fixes: cb77cb5abe1f ("blk-crypto: rename blk_keyslot_manager to blk_crypto_profile")
    Fixes: d76d9d7d1009 ("scsi: ufs: use devm_blk_ksm_init()")
    Cc: stable@vger.kernel.org
    Signed-off-by: André Draszik <andre.draszik@linaro.org>
    Link: https://lore.kernel.org/r/20250124-ufshcd-fix-v4-1-c5d0144aae59@linaro.org
    Reviewed-by: Bean Huo <beanhuo@micron.com>
    Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
    Acked-by: Eric Biggers <ebiggers@kernel.org>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    [ Delete modifications about ufshcd_parse_operating_points() for it's added from
    commit 72208ebe181e3("scsi: ufs: core: Add support for parsing OPP")
    and that in ufshcd_pltfrm_remove() for it's added from commit
    897df60c16d54("scsi: ufs: pltfrm: Dellocate HBA during ufshcd_pltfrm_remove()"). ]
    Signed-off-by: Robert Garcia <rob_garcia@163.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
seg6: separate dst_cache for input and output paths in seg6 lwtunnel [+ + +]
Author: Andrea Mayer <andrea.mayer@uniroma2.it>
Date:   Sun Apr 12 12:58:30 2026 -0400

    seg6: separate dst_cache for input and output paths in seg6 lwtunnel
    
    [ Upstream commit c3812651b522fe8437ebb7063b75ddb95b571643 ]
    
    The seg6 lwtunnel uses a single dst_cache per encap route, shared
    between seg6_input_core() and seg6_output_core(). These two paths
    can perform the post-encap SID lookup in different routing contexts
    (e.g., ip rules matching on the ingress interface, or VRF table
    separation). Whichever path runs first populates the cache, and the
    other reuses it blindly, bypassing its own lookup.
    
    Fix this by splitting the cache into cache_input and cache_output,
    so each path maintains its own cached dst independently.
    
    Fixes: 6c8702c60b88 ("ipv6: sr: add support for SRH encapsulation and injection with lwtunnels")
    Cc: stable@vger.kernel.org
    Signed-off-by: Andrea Mayer <andrea.mayer@uniroma2.it>
    Reviewed-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
    Reviewed-by: Justin Iurman <justin.iurman@gmail.com>
    Link: https://patch.msgid.link/20260404004405.4057-2-andrea.mayer@uniroma2.it
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ added missing dst reference loop guard in seg6_output_core() ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tipc: fix bc_ackers underflow on duplicate GRP_ACK_MSG [+ + +]
Author: Oleh Konko <security@1seal.org>
Date:   Thu Apr 2 09:48:57 2026 +0000

    tipc: fix bc_ackers underflow on duplicate GRP_ACK_MSG
    
    commit 48a5fe38772b6f039522469ee6131a67838221a8 upstream.
    
    The GRP_ACK_MSG handler in tipc_group_proto_rcv() currently decrements
    bc_ackers on every inbound group ACK, even when the same member has
    already acknowledged the current broadcast round.
    
    Because bc_ackers is a u16, a duplicate ACK received after the last
    legitimate ACK wraps the counter to 65535. Once wrapped,
    tipc_group_bc_cong() keeps reporting congestion and later group
    broadcasts on the affected socket stay blocked until the group is
    recreated.
    
    Fix this by ignoring duplicate or stale ACKs before touching bc_acked or
    bc_ackers. This makes repeated GRP_ACK_MSG handling idempotent and
    prevents the underflow path.
    
    Fixes: 2f487712b893 ("tipc: guarantee that group broadcast doesn't bypass group unicast")
    Cc: stable@vger.kernel.org
    Signed-off-by: Oleh Konko <security@1seal.org>
    Reviewed-by: Tung Nguyen <tung.quang.nguyen@est.tech>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/41a4833f368641218e444fdcff822039.security@1seal.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: gadget: f_hid: move list and spinlock inits from bind to alloc [+ + +]
Author: Michael Zimmermann <sigmaepsilon92@gmail.com>
Date:   Sat Apr 11 21:02:47 2026 -0400

    usb: gadget: f_hid: move list and spinlock inits from bind to alloc
    
    [ Upstream commit 4e0a88254ad59f6c53a34bf5fa241884ec09e8b2 ]
    
    There was an issue when you did the following:
    - setup and bind an hid gadget
    - open /dev/hidg0
    - use the resulting fd in EPOLL_CTL_ADD
    - unbind the UDC
    - bind the UDC
    - use the fd in EPOLL_CTL_DEL
    
    When CONFIG_DEBUG_LIST was enabled, a list_del corruption was reported
    within remove_wait_queue (via ep_remove_wait_queue). After some
    debugging I found out that the queues, which f_hid registers via
    poll_wait were the problem. These were initialized using
    init_waitqueue_head inside hidg_bind. So effectively, the bind function
    re-initialized the queues while there were still items in them.
    
    The solution is to move the initialization from hidg_bind to hidg_alloc
    to extend their lifetimes to the lifetime of the function instance.
    
    Additionally, I found many other possibly problematic init calls in the
    bind function, which I moved as well.
    
    Signed-off-by: Michael Zimmermann <sigmaepsilon92@gmail.com>
    Cc: stable <stable@kernel.org>
    Link: https://patch.msgid.link/20260331184844.2388761-1-sigmaepsilon92@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
virtio_net: clamp rss_max_key_size to NETDEV_RSS_KEY_LEN [+ + +]
Author: Srujana Challa <schalla@marvell.com>
Date:   Wed Apr 8 09:39:21 2026 -0400

    virtio_net: clamp rss_max_key_size to NETDEV_RSS_KEY_LEN
    
    [ Upstream commit b4e5f04c58a29c499faa85d12952ca9a4faf1cb9 ]
    
    rss_max_key_size in the virtio spec is the maximum key size supported by
    the device, not a mandatory size the driver must use. Also the value 40
    is a spec minimum, not a spec maximum.
    
    The current code rejects RSS and can fail probe when the device reports a
    larger rss_max_key_size than the driver buffer limit. Instead, clamp the
    effective key length to min(device rss_max_key_size, NETDEV_RSS_KEY_LEN)
    and keep RSS enabled.
    
    This keeps probe working on devices that advertise larger maximum key sizes
    while respecting the netdev RSS key buffer size limit.
    
    Fixes: 3f7d9c1964fc ("virtio_net: Add hash_key_length check")
    Cc: stable@vger.kernel.org
    Signed-off-by: Srujana Challa <schalla@marvell.com>
    Acked-by: Michael S. Tsirkin <mst@redhat.com>
    Link: https://patch.msgid.link/20260326142344.1171317-1-schalla@marvell.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ changed clamp target from NETDEV_RSS_KEY_LEN to VIRTIO_NET_RSS_MAX_KEY_SIZE ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
wifi: brcmsmac: Fix dma_free_coherent() size [+ + +]
Author: Thomas Fourier <fourier.thomas@gmail.com>
Date:   Wed Feb 18 14:07:37 2026 +0100

    wifi: brcmsmac: Fix dma_free_coherent() size
    
    commit 12cd7632757a54ce586e36040210b1a738a0fc53 upstream.
    
    dma_alloc_consistent() may change the size to align it. The new size is
    saved in alloced.
    
    Change the free size to match the allocation size.
    
    Fixes: 5b435de0d786 ("net: wireless: add brcm80211 drivers")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Thomas Fourier <fourier.thomas@gmail.com>
    Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
    Link: https://patch.msgid.link/20260218130741.46566-3-fourier.thomas@gmail.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: rt2x00usb: fix devres lifetime [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Mar 27 12:32:19 2026 +0100

    wifi: rt2x00usb: fix devres lifetime
    
    commit 25369b22223d1c56e42a0cd4ac9137349d5a898e upstream.
    
    USB drivers bind to USB interfaces and any device managed resources
    should have their lifetime tied to the interface rather than parent USB
    device. This avoids issues like memory leaks when drivers are unbound
    without their devices being physically disconnected (e.g. on probe
    deferral or configuration changes).
    
    Fix the USB anchor lifetime so that it is released on driver unbind.
    
    Fixes: 8b4c0009313f ("rt2x00usb: Use usb anchor to manage URB")
    Cc: stable@vger.kernel.org      # 4.7
    Cc: Vishal Thanki <vishalthanki@gmail.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Acked-by: Stanislaw Gruszka <stf_xl@wp.pl>
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Link: https://patch.msgid.link/20260327113219.1313748-1-johan@kernel.org
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
X.509: Fix out-of-bounds access when parsing extensions [+ + +]
Author: Lukas Wunner <lukas@wunner.de>
Date:   Tue Apr 7 12:58:18 2026 +0200

    X.509: Fix out-of-bounds access when parsing extensions
    
    commit d702c3408213bb12bd570bb97204d8340d141c51 upstream.
    
    Leo reports an out-of-bounds access when parsing a certificate with
    empty Basic Constraints or Key Usage extension because the first byte of
    the extension is read before checking its length.  Fix it.
    
    The bug can be triggered by an unprivileged user by submitting a
    specially crafted certificate to the kernel through the keyrings(7) API.
    Leo has demonstrated this with a proof-of-concept program responsibly
    disclosed off-list.
    
    Fixes: 30eae2b037af ("KEYS: X.509: Parse Basic Constraints for CA")
    Fixes: 567671281a75 ("KEYS: X.509: Parse Key Usage")
    Reported-by: Leo Lin <leo@depthfirst.com> # off-list
    Signed-off-by: Lukas Wunner <lukas@wunner.de>
    Reviewed-by: Ignat Korchagin <ignat@linux.win>
    Cc: stable@vger.kernel.org # v6.4+
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/CPU: Fix FPDSS on Zen1 [+ + +]
Author: Borislav Petkov (AMD) <bp@alien8.de>
Date:   Tue Apr 7 11:40:03 2026 +0200

    x86/CPU: Fix FPDSS on Zen1
    
    commit e55d98e7756135f32150b9b8f75d580d0d4b2dd3 upstream.
    
    Zen1's hardware divider can leave, under certain circumstances, partial
    results from previous operations.  Those results can be leaked by
    another, attacker thread.
    
    Fix that with a chicken bit.
    
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
xfrm: clear trailing padding in build_polexpire() [+ + +]
Author: Yasuaki Torimaru <yasuakitorimaru@gmail.com>
Date:   Thu Mar 26 14:58:00 2026 +0900

    xfrm: clear trailing padding in build_polexpire()
    
    commit 71a98248c63c535eaa4d4c22f099b68d902006d0 upstream.
    
    build_expire() clears the trailing padding bytes of struct
    xfrm_user_expire after setting the hard field via memset_after(),
    but the analogous function build_polexpire() does not do this for
    struct xfrm_user_polexpire.
    
    The padding bytes after the __u8 hard field are left
    uninitialized from the heap allocation, and are then sent to
    userspace via netlink multicast to XFRMNLGRP_EXPIRE listeners,
    leaking kernel heap memory contents.
    
    Add the missing memset_after() call, matching build_expire().
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Signed-off-by: Yasuaki Torimaru <yasuakitorimaru@gmail.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Breno Leitao <leitao@debian.org>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xfrm_user: fix info leak in build_report() [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Apr 6 17:34:22 2026 +0200

    xfrm_user: fix info leak in build_report()
    
    commit d10119968d0e1f2b669604baf2a8b5fdb72fa6b4 upstream.
    
    struct xfrm_user_report is a __u8 proto field followed by a struct
    xfrm_selector which means there is three "empty" bytes of padding, but
    the padding is never zeroed before copying to userspace.  Fix that up by
    zeroing the structure before setting individual member variables.
    
    Cc: stable <stable@kernel.org>
    Cc: Steffen Klassert <steffen.klassert@secunet.com>
    Cc: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Eric Dumazet <edumazet@google.com>
    Cc: Jakub Kicinski <kuba@kernel.org>
    Cc: Paolo Abeni <pabeni@redhat.com>
    Cc: Simon Horman <horms@kernel.org>
    Assisted-by: gregkh_clanker_t1000
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>