Changelog in Linux kernel 6.6.121

 
alpha: don't reference obsolete termio struct for TC* constants [+ + +]
Author: Sam James <[email protected]>
Date:   Fri Dec 5 08:14:57 2025 +0000

    alpha: don't reference obsolete termio struct for TC* constants
    
    [ Upstream commit 9aeed9041929812a10a6d693af050846942a1d16 ]
    
    Similar in nature to ab107276607af90b13a5994997e19b7b9731e251. glibc-2.42
    drops the legacy termio struct, but the ioctls.h header still defines some
    TC* constants in terms of termio (via sizeof). Hardcode the values instead.
    
    This fixes building Python for example, which falls over like:
      ./Modules/termios.c:1119:16: error: invalid application of 'sizeof' to incomplete type 'struct termio'
    
    Link: https://bugs.gentoo.org/961769
    Link: https://bugs.gentoo.org/962600
    Signed-off-by: Sam James <[email protected]>
    Reviewed-by: Magnus Lindholm <[email protected]>
    Link: https://lore.kernel.org/r/6ebd3451908785cad53b50ca6bc46cfe9d6bc03c.1764922497.git.sam@gentoo.org
    Signed-off-by: Magnus Lindholm <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ALSA: ac97: fix a double free in snd_ac97_controller_register() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Mon Jan 12 12:25:58 2026 -0500

    ALSA: ac97: fix a double free in snd_ac97_controller_register()
    
    [ Upstream commit 830988b6cf197e6dcffdfe2008c5738e6c6c3c0f ]
    
    If ac97_add_adapter() fails, put_device() is the correct way to drop
    the device reference. kfree() is not required.
    Add kfree() if idr_alloc() fails and in ac97_adapter_release() to do
    the cleanup.
    
    Found by code review.
    
    Fixes: 74426fbff66e ("ALSA: ac97: add an ac97 bus")
    Cc: [email protected]
    Signed-off-by: Haoxiang Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: ac97bus: Use guard() for mutex locks [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Mon Jan 12 12:25:57 2026 -0500

    ALSA: ac97bus: Use guard() for mutex locks
    
    [ Upstream commit c07824a14d99c10edd4ec4c389d219af336ecf20 ]
    
    Replace the manual mutex lock/unlock pairs with guard() for code
    simplification.
    
    Only code refactoring, and no behavior change.
    
    Signed-off-by: Takashi Iwai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Stable-dep-of: 830988b6cf19 ("ALSA: ac97: fix a double free in snd_ac97_controller_register()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: usb-audio: Update for native DSD support quirks [+ + +]
Author: Jussi Laako <[email protected]>
Date:   Thu Dec 11 17:22:21 2025 +0200

    ALSA: usb-audio: Update for native DSD support quirks
    
    [ Upstream commit da3a7efff64ec0d63af4499eea3a46a2e13b5797 ]
    
    Maintenance patch for native DSD support.
    
    Add set of missing device and vendor quirks; TEAC, Esoteric, Luxman and
    Musical Fidelity.
    
    Signed-off-by: Jussi Laako <[email protected]>
    Signed-off-by: Takashi Iwai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
arm64: dts: add off-on-delay-us for usdhc2 regulator [+ + +]
Author: Haibo Chen <[email protected]>
Date:   Wed Nov 19 11:22:40 2025 +0800

    arm64: dts: add off-on-delay-us for usdhc2 regulator
    
    [ Upstream commit ca643894a37a25713029b36cfe7d1bae515cac08 ]
    
    For SD card, according to the spec requirement, for sd card power reset
    operation, it need sd card supply voltage to be lower than 0.5v and keep
    over 1ms, otherwise, next time power back the sd card supply voltage to
    3.3v, sd card can't support SD3.0 mode again.
    
    To match such requirement on imx8qm-mek board, add 4.8ms delay between
    sd power off and power on.
    
    Fixes: 307fd14d4b14 ("arm64: dts: imx: add imx8qm mek support")
    Reviewed-by: Frank Li <[email protected]>
    Signed-off-by: Haibo Chen <[email protected]>
    Signed-off-by: Shawn Guo <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: imx8mp: Fix LAN8740Ai PHY reference clock on DH electronics i.MX8M Plus DHCOM [+ + +]
Author: Marek Vasut <[email protected]>
Date:   Tue Dec 2 14:41:51 2025 +0100

    arm64: dts: imx8mp: Fix LAN8740Ai PHY reference clock on DH electronics i.MX8M Plus DHCOM
    
    [ Upstream commit c63749a7ddc59ac6ec0b05abfa0a21af9f2c1d38 ]
    
    Add missing 'clocks' property to LAN8740Ai PHY node, to allow the PHY driver
    to manage LAN8740Ai CLKIN reference clock supply. This fixes sporadic link
    bouncing caused by interruptions on the PHY reference clock, by letting the
    PHY driver manage the reference clock and assure there are no interruptions.
    
    This follows the matching PHY driver recommendation described in commit
    bedd8d78aba3 ("net: phy: smsc: LAN8710/20: add phy refclk in support")
    
    Fixes: 8d6712695bc8 ("arm64: dts: imx8mp: Add support for DH electronics i.MX8M Plus DHCOM and PDK2")
    Signed-off-by: Marek Vasut <[email protected]>
    Tested-by: Christoph Niedermaier <[email protected]>
    Signed-off-by: Shawn Guo <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ARM: 9461/1: Disable HIGHPTE on PREEMPT_RT kernels [+ + +]
Author: Sebastian Andrzej Siewior <[email protected]>
Date:   Tue Nov 11 16:54:37 2025 +0100

    ARM: 9461/1: Disable HIGHPTE on PREEMPT_RT kernels
    
    [ Upstream commit fedadc4137234c3d00c4785eeed3e747fe9036ae ]
    
    gup_pgd_range() is invoked with disabled interrupts and invokes
    __kmap_local_page_prot() via pte_offset_map(), gup_p4d_range().
    With HIGHPTE enabled, __kmap_local_page_prot() invokes kmap_high_get()
    which uses a spinlock_t via lock_kmap_any(). This leads to an
    sleeping-while-atomic error on PREEMPT_RT because spinlock_t becomes a
    sleeping lock and must not be acquired in atomic context.
    
    The loop in map_new_virtual() uses wait_queue_head_t for wake up which
    also is using a spinlock_t.
    
    Since HIGHPTE is rarely needed at all, turn it off for PREEMPT_RT
    to allow the use of get_user_pages_fast().
    
    [arnd: rework patch to turn off HIGHPTE instead of HAVE_PAST_GUP]
    
    Co-developed-by: Arnd Bergmann <[email protected]>
    
    Acked-by: Linus Walleij <[email protected]>
    Reviewed-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Sebastian Andrzej Siewior <[email protected]>
    Signed-off-by: Russell King (Oracle) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ARM: dts: imx6q-ba16: fix RTC interrupt level [+ + +]
Author: Ian Ray <[email protected]>
Date:   Mon Dec 1 11:56:05 2025 +0200

    ARM: dts: imx6q-ba16: fix RTC interrupt level
    
    [ Upstream commit e6a4eedd49ce27c16a80506c66a04707e0ee0116 ]
    
    RTC interrupt level should be set to "LOW". This was revealed by the
    introduction of commit:
    
      f181987ef477 ("rtc: m41t80: use IRQ flags obtained from fwnode")
    
    which changed the way IRQ type is obtained.
    
    Fixes: 56c27310c1b4 ("ARM: dts: imx: Add Advantech BA-16 Qseven module")
    Signed-off-by: Ian Ray <[email protected]>
    Signed-off-by: Shawn Guo <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
arp: do not assume dev_hard_header() does not change skb->head [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Wed Jan 7 21:22:50 2026 +0000

    arp: do not assume dev_hard_header() does not change skb->head
    
    [ Upstream commit c92510f5e3f82ba11c95991824a41e59a9c5ed81 ]
    
    arp_create() is the only dev_hard_header() caller
    making assumption about skb->head being unchanged.
    
    A recent commit broke this assumption.
    
    Initialize @arp pointer after dev_hard_header() call.
    
    Fixes: db5b4e39c4e6 ("ip6_gre: make ip6gre_header() robust")
    Reported-by: [email protected]
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ASoC: amd: yc: Add quirk for Honor MagicBook X16 2025 [+ + +]
Author: Andrew Elantsev <[email protected]>
Date:   Wed Dec 10 23:38:00 2025 +0300

    ASoC: amd: yc: Add quirk for Honor MagicBook X16 2025
    
    [ Upstream commit e2cb8ef0372665854fca6fa7b30b20dd35acffeb ]
    
    Add a DMI quirk for the Honor MagicBook X16 2025 laptop
    fixing the issue where the internal microphone was
    not detected.
    
    Signed-off-by: Andrew Elantsev <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_sai: Add missing registers to cache default [+ + +]
Author: Alexander Stein <[email protected]>
Date:   Tue Dec 16 11:22:45 2025 +0100

    ASoC: fsl_sai: Add missing registers to cache default
    
    [ Upstream commit 90ed688792a6b7012b3e8a2f858bc3fe7454d0eb ]
    
    Drivers does cache sync during runtime resume, setting all writable
    registers. Not all writable registers are set in cache default, resulting
    in the erorr message:
      fsl-sai 30c30000.sai: using zero-initialized flat cache, this may cause
      unexpected behavior
    
    Fix this by adding missing writable register defaults.
    
    Signed-off-by: Alexander Stein <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
atm: Fix dma_free_coherent() size [+ + +]
Author: Thomas Fourier <[email protected]>
Date:   Wed Jan 7 10:01:36 2026 +0100

    atm: Fix dma_free_coherent() size
    
    commit 4d984b0574ff708e66152763fbfdef24ea40933f upstream.
    
    The size of the buffer is not the same when alloc'd with
    dma_alloc_coherent() in he_init_tpdrq() and freed.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: <[email protected]>
    Signed-off-by: Thomas Fourier <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
bnxt_en: Fix potential data corruption with HW GRO/LRO [+ + +]
Author: Srijit Bose <[email protected]>
Date:   Wed Dec 31 00:36:25 2025 -0800

    bnxt_en: Fix potential data corruption with HW GRO/LRO
    
    [ Upstream commit ffeafa65b2b26df2f5b5a6118d3174f17bd12ec5 ]
    
    Fix the max number of bits passed to find_first_zero_bit() in
    bnxt_alloc_agg_idx().  We were incorrectly passing the number of
    long words.  find_first_zero_bit() may fail to find a zero bit and
    cause a wrong ID to be used.  If the wrong ID is already in use, this
    can cause data corruption.  Sometimes an error like this can also be
    seen:
    
    bnxt_en 0000:83:00.0 enp131s0np0: TPA end agg_buf 2 != expected agg_bufs 1
    
    Fix it by passing the correct number of bits MAX_TPA_P5.  Use
    DECLARE_BITMAP() to more cleanly define the bitmap.  Add a sanity
    check to warn if a bit cannot be found and reset the ring [MChan].
    
    Fixes: ec4d8e7cf024 ("bnxt_en: Add TPA ID mapping logic for 57500 chips.")
    Reviewed-by: Ray Jui <[email protected]>
    Signed-off-by: Srijit Bose <[email protected]>
    Signed-off-by: Michael Chan <[email protected]>
    Reviewed-by: Vadim Fedorenko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf, test_run: Subtract size of xdp_frame from allowed metadata size [+ + +]
Author: Toke Høiland-Jørgensen <[email protected]>
Date:   Mon Jan 5 12:47:45 2026 +0100

    bpf, test_run: Subtract size of xdp_frame from allowed metadata size
    
    [ Upstream commit e558cca217790286e799a8baacd1610bda31b261 ]
    
    The xdp_frame structure takes up part of the XDP frame headroom,
    limiting the size of the metadata. However, in bpf_test_run, we don't
    take this into account, which makes it possible for userspace to supply
    a metadata size that is too large (taking up the entire headroom).
    
    If userspace supplies such a large metadata size in live packet mode,
    the xdp_update_frame_from_buff() call in xdp_test_run_init_page() call
    will fail, after which packet transmission proceeds with an
    uninitialised frame structure, leading to the usual Bad Stuff.
    
    The commit in the Fixes tag fixed a related bug where the second check
    in xdp_update_frame_from_buff() could fail, but did not add any
    additional constraints on the metadata size. Complete the fix by adding
    an additional check on the metadata size. Reorder the checks slightly to
    make the logic clearer and add a comment.
    
    Link: https://lore.kernel.org/r/[email protected]
    Fixes: b6f1f780b393 ("bpf, test_run: Fix packet size check for live packet mode")
    Reported-by: Yinhao Hu <[email protected]>
    Reported-by: Kaiyan Mei <[email protected]>
    Signed-off-by: Toke Høiland-Jørgensen <[email protected]>
    Reviewed-by: Amery Hung <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf: Fix an issue in bpf_prog_test_run_xdp when page size greater than 4K [+ + +]
Author: Yonghong Song <[email protected]>
Date:   Wed Jun 11 20:50:32 2025 -0700

    bpf: Fix an issue in bpf_prog_test_run_xdp when page size greater than 4K
    
    [ Upstream commit 4fc012daf9c074772421c904357abf586336b1ca ]
    
    The bpf selftest xdp_adjust_tail/xdp_adjust_frags_tail_grow failed on
    arm64 with 64KB page:
       xdp_adjust_tail/xdp_adjust_frags_tail_grow:FAIL
    
    In bpf_prog_test_run_xdp(), the xdp->frame_sz is set to 4K, but later on
    when constructing frags, with 64K page size, the frag data_len could
    be more than 4K. This will cause problems in bpf_xdp_frags_increase_tail().
    
    To fix the failure, the xdp->frame_sz is set to be PAGE_SIZE so kernel
    can test different page size properly. With the kernel change, the user
    space and bpf prog needs adjustment. Currently, the MAX_SKB_FRAGS default
    value is 17, so for 4K page, the maximum packet size will be less than 68K.
    To test 64K page, a bigger maximum packet size than 68K is desired. So two
    different functions are implemented for subtest xdp_adjust_frags_tail_grow.
    Depending on different page size, different data input/output sizes are used
    to adapt with different page size.
    
    Signed-off-by: Yonghong Song <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Stable-dep-of: e558cca21779 ("bpf, test_run: Subtract size of xdp_frame from allowed metadata size")
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix reference count leak in bpf_prog_test_run_xdp() [+ + +]
Author: Tetsuo Handa <[email protected]>
Date:   Thu Jan 8 21:36:48 2026 +0900

    bpf: Fix reference count leak in bpf_prog_test_run_xdp()
    
    [ Upstream commit ec69daabe45256f98ac86c651b8ad1b2574489a7 ]
    
    syzbot is reporting
    
      unregister_netdevice: waiting for sit0 to become free. Usage count = 2
    
    problem. A debug printk() patch found that a refcount is obtained at
    xdp_convert_md_to_buff() from bpf_prog_test_run_xdp().
    
    According to commit ec94670fcb3b ("bpf: Support specifying ingress via
    xdp_md context in BPF_PROG_TEST_RUN"), the refcount obtained by
    xdp_convert_md_to_buff() will be released by xdp_convert_buff_to_md().
    
    Therefore, we can consider that the error handling path introduced by
    commit 1c1949982524 ("bpf: introduce frags support to
    bpf_prog_test_run_xdp()") forgot to call xdp_convert_buff_to_md().
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=881d65229ca4f9ae8c84
    Fixes: 1c1949982524 ("bpf: introduce frags support to bpf_prog_test_run_xdp()")
    Signed-off-by: Tetsuo Handa <[email protected]>
    Reviewed-by: Toke Høiland-Jørgensen <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Make variables in bpf_prog_test_run_xdp less confusing [+ + +]
Author: Amery Hung <[email protected]>
Date:   Mon Sep 22 16:33:53 2025 -0700

    bpf: Make variables in bpf_prog_test_run_xdp less confusing
    
    [ Upstream commit 7eb83bff02ad5e82e8c456c58717ef181c220870 ]
    
    Change the variable naming in bpf_prog_test_run_xdp() to make the
    overall logic less confusing. As different modes were added to the
    function over the time, some variables got overloaded, making
    it hard to understand and changing the code becomes error-prone.
    
    Replace "size" with "linear_sz" where it refers to the size of metadata
    and data. If "size" refers to input data size, use test.data_size_in
    directly.
    
    Replace "max_data_sz" with "max_linear_sz" to better reflect the fact
    that it is the maximum size of metadata and data (i.e., linear_sz). Also,
    xdp_rxq.frags_size is always PAGE_SIZE, so just set it directly instead
    of subtracting headroom and tailroom and adding them back.
    
    Signed-off-by: Amery Hung <[email protected]>
    Signed-off-by: Martin KaFai Lau <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Stable-dep-of: e558cca21779 ("bpf, test_run: Subtract size of xdp_frame from allowed metadata size")
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Support specifying linear xdp packet data size for BPF_PROG_TEST_RUN [+ + +]
Author: Amery Hung <[email protected]>
Date:   Mon Sep 22 16:33:54 2025 -0700

    bpf: Support specifying linear xdp packet data size for BPF_PROG_TEST_RUN
    
    [ Upstream commit fe9544ed1a2e9217b2c5285c3a4ac0dc5a38bd7b ]
    
    To test bpf_xdp_pull_data(), an xdp packet containing fragments as well
    as free linear data area after xdp->data_end needs to be created.
    However, bpf_prog_test_run_xdp() always fills the linear area with
    data_in before creating fragments, leaving no space to pull data. This
    patch will allow users to specify the linear data size through
    ctx->data_end.
    
    Currently, ctx_in->data_end must match data_size_in and will not be the
    final ctx->data_end seen by xdp programs. This is because ctx->data_end
    is populated according to the xdp_buff passed to test_run. The linear
    data area available in an xdp_buff, max_linear_sz, is alawys filled up
    before copying data_in into fragments.
    
    This patch will allow users to specify the size of data that goes into
    the linear area. When ctx_in->data_end is different from data_size_in,
    only ctx_in->data_end bytes of data will be put into the linear area when
    creating the xdp_buff.
    
    While ctx_in->data_end will be allowed to be different from data_size_in,
    it cannot be larger than the data_size_in as there will be no data to
    copy from user space. If it is larger than the maximum linear data area
    size, the layout suggested by the user will not be honored. Data beyond
    max_linear_sz bytes will still be copied into fragments.
    
    Finally, since it is possible for a NIC to produce a xdp_buff with empty
    linear data area, allow it when calling bpf_test_init() from
    bpf_prog_test_run_xdp() so that we can test XDP kfuncs with such
    xdp_buff. This is done by moving lower-bound check to callers as most of
    them already do except bpf_prog_test_run_skb(). The change also fixes a
    bug that allows passing an xdp_buff with data < ETH_HLEN. This can
    happen when ctx is used and metadata is at least ETH_HLEN.
    
    Signed-off-by: Amery Hung <[email protected]>
    Signed-off-by: Martin KaFai Lau <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Stable-dep-of: e558cca21779 ("bpf, test_run: Subtract size of xdp_frame from allowed metadata size")
    Signed-off-by: Sasha Levin <[email protected]>

bpf: test_run: Fix ctx leak in bpf_prog_test_run_xdp error path [+ + +]
Author: Shardul Bankar <[email protected]>
Date:   Tue Oct 14 17:30:37 2025 +0530

    bpf: test_run: Fix ctx leak in bpf_prog_test_run_xdp error path
    
    commit 7f9ee5fc97e14682e36fe22ae2654c07e4998b82 upstream.
    
    Fix a memory leak in bpf_prog_test_run_xdp() where the context buffer
    allocated by bpf_ctx_init() is not freed when the function returns early
    due to a data size check.
    
    On the failing path:
      ctx = bpf_ctx_init(...);
      if (kattr->test.data_size_in - meta_sz < ETH_HLEN)
          return -EINVAL;
    
    The early return bypasses the cleanup label that kfree()s ctx, leading to a
    leak detectable by kmemleak under fuzzing. Change the return to jump to the
    existing free_ctx label.
    
    Fixes: fe9544ed1a2e ("bpf: Support specifying linear xdp packet data size for BPF_PROG_TEST_RUN")
    Reported-by: BPF Runtime Fuzzer (BRF)
    Signed-off-by: Shardul Bankar <[email protected]>
    Signed-off-by: Martin KaFai Lau <[email protected]>
    Acked-by: Jiri Olsa <[email protected]>
    Acked-by: Daniel Borkmann <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
bridge: fix C-VLAN preservation in 802.1ad vlan_tunnel egress [+ + +]
Author: Alexandre Knecht <[email protected]>
Date:   Sun Dec 28 03:00:57 2025 +0100

    bridge: fix C-VLAN preservation in 802.1ad vlan_tunnel egress
    
    [ Upstream commit 3128df6be147768fe536986fbb85db1d37806a9f ]
    
    When using an 802.1ad bridge with vlan_tunnel, the C-VLAN tag is
    incorrectly stripped from frames during egress processing.
    
    br_handle_egress_vlan_tunnel() uses skb_vlan_pop() to remove the S-VLAN
    from hwaccel before VXLAN encapsulation. However, skb_vlan_pop() also
    moves any "next" VLAN from the payload into hwaccel:
    
        /* move next vlan tag to hw accel tag */
        __skb_vlan_pop(skb, &vlan_tci);
        __vlan_hwaccel_put_tag(skb, vlan_proto, vlan_tci);
    
    For QinQ frames where the C-VLAN sits in the payload, this moves it to
    hwaccel where it gets lost during VXLAN encapsulation.
    
    Fix by calling __vlan_hwaccel_clear_tag() directly, which clears only
    the hwaccel S-VLAN and leaves the payload untouched.
    
    This path is only taken when vlan_tunnel is enabled and tunnel_info
    is configured, so 802.1Q bridges are unaffected.
    
    Tested with 802.1ad bridge + VXLAN vlan_tunnel, verified C-VLAN
    preserved in VXLAN payload via tcpdump.
    
    Fixes: 11538d039ac6 ("bridge: vlan dst_metadata hooks in ingress and egress paths")
    Signed-off-by: Alexandre Knecht <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Acked-by: Nikolay Aleksandrov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
btrfs: always detect conflicting inodes when logging inode refs [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Thu Dec 11 15:06:26 2025 +0000

    btrfs: always detect conflicting inodes when logging inode refs
    
    commit 7ba0b6461bc4edb3005ea6e00cdae189bcf908a5 upstream.
    
    After rename exchanging (either with the rename exchange operation or
    regular renames in multiple non-atomic steps) two inodes and at least
    one of them is a directory, we can end up with a log tree that contains
    only of the inodes and after a power failure that can result in an attempt
    to delete the other inode when it should not because it was not deleted
    before the power failure. In some case that delete attempt fails when
    the target inode is a directory that contains a subvolume inside it, since
    the log replay code is not prepared to deal with directory entries that
    point to root items (only inode items).
    
    1) We have directories "dir1" (inode A) and "dir2" (inode B) under the
       same parent directory;
    
    2) We have a file (inode C) under directory "dir1" (inode A);
    
    3) We have a subvolume inside directory "dir2" (inode B);
    
    4) All these inodes were persisted in a past transaction and we are
       currently at transaction N;
    
    5) We rename the file (inode C), so at btrfs_log_new_name() we update
       inode C's last_unlink_trans to N;
    
    6) We get a rename exchange for "dir1" (inode A) and "dir2" (inode B),
       so after the exchange "dir1" is inode B and "dir2" is inode A.
       During the rename exchange we call btrfs_log_new_name() for inodes
       A and B, but because they are directories, we don't update their
       last_unlink_trans to N;
    
    7) An fsync against the file (inode C) is done, and because its inode
       has a last_unlink_trans with a value of N we log its parent directory
       (inode A) (through btrfs_log_all_parents(), called from
       btrfs_log_inode_parent()).
    
    8) So we end up with inode B not logged, which now has the old name
       of inode A. At copy_inode_items_to_log(), when logging inode A, we
       did not check if we had any conflicting inode to log because inode
       A has a generation lower than the current transaction (created in
       a past transaction);
    
    9) After a power failure, when replaying the log tree, since we find that
       inode A has a new name that conflicts with the name of inode B in the
       fs tree, we attempt to delete inode B... this is wrong since that
       directory was never deleted before the power failure, and because there
       is a subvolume inside that directory, attempting to delete it will fail
       since replay_dir_deletes() and btrfs_unlink_inode() are not prepared
       to deal with dir items that point to roots instead of inodes.
    
       When that happens the mount fails and we get a stack trace like the
       following:
    
       [87.2314] BTRFS info (device dm-0): start tree-log replay
       [87.2318] BTRFS critical (device dm-0): failed to delete reference to subvol, root 5 inode 256 parent 259
       [87.2332] ------------[ cut here ]------------
       [87.2338] BTRFS: Transaction aborted (error -2)
       [87.2346] WARNING: CPU: 1 PID: 638968 at fs/btrfs/inode.c:4345 __btrfs_unlink_inode+0x416/0x440 [btrfs]
       [87.2368] Modules linked in: btrfs loop dm_thin_pool (...)
       [87.2470] CPU: 1 UID: 0 PID: 638968 Comm: mount Tainted: G        W           6.18.0-rc7-btrfs-next-218+ #2 PREEMPT(full)
       [87.2489] Tainted: [W]=WARN
       [87.2494] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.2-0-gea1b7a073390-prebuilt.qemu.org 04/01/2014
       [87.2514] RIP: 0010:__btrfs_unlink_inode+0x416/0x440 [btrfs]
       [87.2538] Code: c0 89 04 24 (...)
       [87.2568] RSP: 0018:ffffc0e741f4b9b8 EFLAGS: 00010286
       [87.2574] RAX: 0000000000000000 RBX: ffff9d3ec8a6cf60 RCX: 0000000000000000
       [87.2582] RDX: 0000000000000002 RSI: ffffffff84ab45a1 RDI: 00000000ffffffff
       [87.2591] RBP: ffff9d3ec8a6ef20 R08: 0000000000000000 R09: ffffc0e741f4b840
       [87.2599] R10: ffff9d45dc1fffa8 R11: 0000000000000003 R12: ffff9d3ee26d77e0
       [87.2608] R13: ffffc0e741f4ba98 R14: ffff9d4458040800 R15: ffff9d44b6b7ca10
       [87.2618] FS:  00007f7b9603a840(0000) GS:ffff9d4658982000(0000) knlGS:0000000000000000
       [87.2629] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
       [87.2637] CR2: 00007ffc9ec33b98 CR3: 000000011273e003 CR4: 0000000000370ef0
       [87.2648] Call Trace:
       [87.2651]  <TASK>
       [87.2654]  btrfs_unlink_inode+0x15/0x40 [btrfs]
       [87.2661]  unlink_inode_for_log_replay+0x27/0xf0 [btrfs]
       [87.2669]  check_item_in_log+0x1ea/0x2c0 [btrfs]
       [87.2676]  replay_dir_deletes+0x16b/0x380 [btrfs]
       [87.2684]  fixup_inode_link_count+0x34b/0x370 [btrfs]
       [87.2696]  fixup_inode_link_counts+0x41/0x160 [btrfs]
       [87.2703]  btrfs_recover_log_trees+0x1ff/0x7c0 [btrfs]
       [87.2711]  ? __pfx_replay_one_buffer+0x10/0x10 [btrfs]
       [87.2719]  open_ctree+0x10bb/0x15f0 [btrfs]
       [87.2726]  btrfs_get_tree.cold+0xb/0x16c [btrfs]
       [87.2734]  ? fscontext_read+0x15c/0x180
       [87.2740]  ? rw_verify_area+0x50/0x180
       [87.2746]  vfs_get_tree+0x25/0xd0
       [87.2750]  vfs_cmd_create+0x59/0xe0
       [87.2755]  __do_sys_fsconfig+0x4f6/0x6b0
       [87.2760]  do_syscall_64+0x50/0x1220
       [87.2764]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
       [87.2770] RIP: 0033:0x7f7b9625f4aa
       [87.2775] Code: 73 01 c3 48 (...)
       [87.2803] RSP: 002b:00007ffc9ec35b08 EFLAGS: 00000246 ORIG_RAX: 00000000000001af
       [87.2817] RAX: ffffffffffffffda RBX: 0000558bfa91ac20 RCX: 00007f7b9625f4aa
       [87.2829] RDX: 0000000000000000 RSI: 0000000000000006 RDI: 0000000000000003
       [87.2842] RBP: 0000558bfa91b120 R08: 0000000000000000 R09: 0000000000000000
       [87.2854] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
       [87.2864] R13: 00007f7b963f1580 R14: 00007f7b963f326c R15: 00007f7b963d8a23
       [87.2877]  </TASK>
       [87.2882] ---[ end trace 0000000000000000 ]---
       [87.2891] BTRFS: error (device dm-0 state A) in __btrfs_unlink_inode:4345: errno=-2 No such entry
       [87.2904] BTRFS: error (device dm-0 state EAO) in do_abort_log_replay:191: errno=-2 No such entry
       [87.2915] BTRFS critical (device dm-0 state EAO): log tree (for root 5) leaf currently being processed (slot 7 key (258 12 257)):
       [87.2929] BTRFS info (device dm-0 state EAO): leaf 30736384 gen 10 total ptrs 7 free space 15712 owner 18446744073709551610
       [87.2929] BTRFS info (device dm-0 state EAO): refs 3 lock_owner 0 current 638968
       [87.2929]      item 0 key (257 INODE_ITEM 0) itemoff 16123 itemsize 160
       [87.2929]              inode generation 9 transid 10 size 0 nbytes 0
       [87.2929]              block group 0 mode 40755 links 1 uid 0 gid 0
       [87.2929]              rdev 0 sequence 7 flags 0x0
       [87.2929]              atime 1765464494.678070921
       [87.2929]              ctime 1765464494.686606513
       [87.2929]              mtime 1765464494.686606513
       [87.2929]              otime 1765464494.678070921
       [87.2929]      item 1 key (257 INODE_REF 256) itemoff 16109 itemsize 14
       [87.2929]              index 4 name_len 4
       [87.2929]      item 2 key (257 DIR_LOG_INDEX 2) itemoff 16101 itemsize 8
       [87.2929]              dir log end 2
       [87.2929]      item 3 key (257 DIR_LOG_INDEX 3) itemoff 16093 itemsize 8
       [87.2929]              dir log end 18446744073709551615
       [87.2930]      item 4 key (257 DIR_INDEX 3) itemoff 16060 itemsize 33
       [87.2930]              location key (258 1 0) type 1
       [87.2930]              transid 10 data_len 0 name_len 3
       [87.2930]      item 5 key (258 INODE_ITEM 0) itemoff 15900 itemsize 160
       [87.2930]              inode generation 9 transid 10 size 0 nbytes 0
       [87.2930]              block group 0 mode 100644 links 1 uid 0 gid 0
       [87.2930]              rdev 0 sequence 2 flags 0x0
       [87.2930]              atime 1765464494.678456467
       [87.2930]              ctime 1765464494.686606513
       [87.2930]              mtime 1765464494.678456467
       [87.2930]              otime 1765464494.678456467
       [87.2930]      item 6 key (258 INODE_REF 257) itemoff 15887 itemsize 13
       [87.2930]              index 3 name_len 3
       [87.2930] BTRFS critical (device dm-0 state EAO): log replay failed in unlink_inode_for_log_replay:1045 for root 5, stage 3, with error -2: failed to unlink inode 256 parent dir 259 name subvol root 5
       [87.2963] BTRFS: error (device dm-0 state EAO) in btrfs_recover_log_trees:7743: errno=-2 No such entry
       [87.2981] BTRFS: error (device dm-0 state EAO) in btrfs_replay_log:2083: errno=-2 No such entry (Failed to recover log tr
    
    So fix this by changing copy_inode_items_to_log() to always detect if
    there are conflicting inodes for the ref/extref of the inode being logged
    even if the inode was created in a past transaction.
    
    A test case for fstests will follow soon.
    
    CC: [email protected] # 6.1+
    Signed-off-by: Filipe Manana <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
can: j1939: make j1939_session_activate() fail if device is no longer registered [+ + +]
Author: Tetsuo Handa <[email protected]>
Date:   Tue Nov 25 22:39:59 2025 +0900

    can: j1939: make j1939_session_activate() fail if device is no longer registered
    
    [ Upstream commit 5d5602236f5db19e8b337a2cd87a90ace5ea776d ]
    
    syzbot is still reporting
    
      unregister_netdevice: waiting for vcan0 to become free. Usage count = 2
    
    even after commit 93a27b5891b8 ("can: j1939: add missing calls in
    NETDEV_UNREGISTER notification handler") was added. A debug printk() patch
    found that j1939_session_activate() can succeed even after
    j1939_cancel_active_session() from j1939_netdev_notify(NETDEV_UNREGISTER)
    has completed.
    
    Since j1939_cancel_active_session() is processed with the session list lock
    held, checking ndev->reg_state in j1939_session_activate() with the session
    list lock held can reliably close the race window.
    
    Reported-by: syzbot <[email protected]>
    Closes: https://syzkaller.appspot.com/bug?extid=881d65229ca4f9ae8c84
    Signed-off-by: Tetsuo Handa <[email protected]>
    Acked-by: Oleksij Rempel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
counter: 104-quad-8: Fix incorrect return value in IRQ handler [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Mon Dec 15 10:01:14 2025 +0800

    counter: 104-quad-8: Fix incorrect return value in IRQ handler
    
    commit 9517d76dd160208b7a432301ce7bec8fc1ddc305 upstream.
    
    quad8_irq_handler() should return irqreturn_t enum values, but it
    directly returns negative errno codes from regmap operations on error.
    
    Return IRQ_NONE if the interrupt status cannot be read. If clearing the
    interrupt fails, return IRQ_HANDLED to prevent the kernel from disabling
    the IRQ line due to a spurious interrupt storm. Also, log these regmap
    failures with dev_WARN_ONCE.
    
    Fixes: 98ffe0252911 ("counter: 104-quad-8: Migrate to the regmap API")
    Suggested-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Haotian Zhang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Cc: [email protected]
    Signed-off-by: William Breathitt Gray <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

counter: interrupt-cnt: Drop IRQF_NO_THREAD flag [+ + +]
Author: Alexander Sverdlin <[email protected]>
Date:   Tue Nov 18 09:35:48 2025 +0100

    counter: interrupt-cnt: Drop IRQF_NO_THREAD flag
    
    commit 23f9485510c338476b9735d516c1d4aacb810d46 upstream.
    
    An IRQ handler can either be IRQF_NO_THREAD or acquire spinlock_t, as
    CONFIG_PROVE_RAW_LOCK_NESTING warns:
    =============================
    [ BUG: Invalid wait context ]
    6.18.0-rc1+git... #1
    -----------------------------
    some-user-space-process/1251 is trying to lock:
    (&counter->events_list_lock){....}-{3:3}, at: counter_push_event [counter]
    other info that might help us debug this:
    context-{2:2}
    no locks held by some-user-space-process/....
    stack backtrace:
    CPU: 0 UID: 0 PID: 1251 Comm: some-user-space-process 6.18.0-rc1+git... #1 PREEMPT
    Call trace:
     show_stack (C)
     dump_stack_lvl
     dump_stack
     __lock_acquire
     lock_acquire
     _raw_spin_lock_irqsave
     counter_push_event [counter]
     interrupt_cnt_isr [interrupt_cnt]
     __handle_irq_event_percpu
     handle_irq_event
     handle_simple_irq
     handle_irq_desc
     generic_handle_domain_irq
     gpio_irq_handler
     handle_irq_desc
     generic_handle_domain_irq
     gic_handle_irq
     call_on_irq_stack
     do_interrupt_handler
     el0_interrupt
     __el0_irq_handler_common
     el0t_64_irq_handler
     el0t_64_irq
    
    ... and Sebastian correctly points out. Remove IRQF_NO_THREAD as an
    alternative to switching to raw_spinlock_t, because the latter would limit
    all potential nested locks to raw_spinlock_t only.
    
    Cc: Sebastian Andrzej Siewior <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/all/[email protected]/
    Fixes: a55ebd47f21f ("counter: add IRQ or GPIO based counter")
    Signed-off-by: Alexander Sverdlin <[email protected]>
    Reviewed-by: Sebastian Andrzej Siewior <[email protected]>
    Reviewed-by: Oleksij Rempel <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: William Breathitt Gray <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
csky: fix csky_cmpxchg_fixup not working [+ + +]
Author: Yang Li <[email protected]>
Date:   Wed Oct 16 17:56:26 2024 +0800

    csky: fix csky_cmpxchg_fixup not working
    
    [ Upstream commit 809ef03d6d21d5fea016bbf6babeec462e37e68c ]
    
    In the csky_cmpxchg_fixup function, it is incorrect to use the global
    variable csky_cmpxchg_stw to determine the address where the exception
    occurred.The global variable csky_cmpxchg_stw stores the opcode at the
    time of the exception, while &csky_cmpxchg_stw shows the address where
    the exception occurred.
    
    Signed-off-by: Yang Li <[email protected]>
    Signed-off-by: Guo Ren <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dm-snapshot: fix 'scheduling while atomic' on real-time kernels [+ + +]
Author: Mikulas Patocka <[email protected]>
Date:   Mon Dec 1 22:13:10 2025 +0100

    dm-snapshot: fix 'scheduling while atomic' on real-time kernels
    
    [ Upstream commit 8581b19eb2c5ccf06c195d3b5468c3c9d17a5020 ]
    
    There is reported 'scheduling while atomic' bug when using dm-snapshot on
    real-time kernels. The reason for the bug is that the hlist_bl code does
    preempt_disable() when taking the lock and the kernel attempts to take
    other spinlocks while holding the hlist_bl lock.
    
    Fix this by converting a hlist_bl spinlock into a regular spinlock.
    
    Signed-off-by: Mikulas Patocka <[email protected]>
    Reported-by: Jiping Ma <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amd/display: Fix DP no audio issue [+ + +]
Author: Charlene Liu <[email protected]>
Date:   Fri Nov 28 19:38:31 2025 -0500

    drm/amd/display: Fix DP no audio issue
    
    [ Upstream commit 3886b198bd6e49c801fe9552fcfbfc387a49fbbc ]
    
    [why]
    need to enable APG_CLOCK_ENABLE enable first
    also need to wake up az from D3 before access az block
    
    Reviewed-by: Swapnil Patel <[email protected]>
    Signed-off-by: Charlene Liu <[email protected]>
    Signed-off-by: Chenyu Chen <[email protected]>
    Tested-by: Daniel Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit bf5e396957acafd46003318965500914d5f4edfa)
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/pl111: Fix error handling in pl111_amba_probe [+ + +]
Author: Miaoqian Lin <[email protected]>
Date:   Thu Dec 11 16:33:44 2025 +0400

    drm/pl111: Fix error handling in pl111_amba_probe
    
    commit 0ddd3bb4b14c9102c0267b3fd916c81fe5ab89c1 upstream.
    
    Jump to the existing dev_put label when devm_request_irq() fails
    so drm_dev_put() and of_reserved_mem_device_release() run
    instead of returning early and leaking resources.
    
    Found via static analysis and code review.
    
    Fixes: bed41005e617 ("drm/pl111: Initial drm/kms driver for pl111")
    Cc: [email protected]
    Signed-off-by: Miaoqian Lin <[email protected]>
    Reviewed-by: Javier Martinez Canillas <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/radeon: Remove __counted_by from ClockInfoArray.clockInfo[] [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Mon Jun 30 10:47:09 2025 -0400

    drm/radeon: Remove __counted_by from ClockInfoArray.clockInfo[]
    
    commit 19158c7332468bc28572bdca428e89c7954ee1b1 upstream.
    
    clockInfo[] is a generic uchar pointer to variable sized structures
    which vary from ASIC to ASIC.
    
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4374
    Reviewed-by: Lijo Lazar <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit dc135aa73561b5acc74eadf776e48530996529a3)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
gpio: pca953x: Add support for level-triggered interrupts [+ + +]
Author: Potin Lai <[email protected]>
Date:   Wed Apr 9 23:37:30 2025 +0800

    gpio: pca953x: Add support for level-triggered interrupts
    
    [ Upstream commit 417b0f8d08f878615de9481c6e8827fbc8b57ed2 ]
    
    Adds support for level-triggered interrupts in the PCA953x GPIO
    expander driver. Previously, the driver only supported edge-triggered
    interrupts, which could lead to missed events in scenarios where an
    interrupt condition persists until it is explicitly cleared.
    
    By enabling level-triggered interrupts, the driver can now detect and
    respond to sustained interrupt conditions more reliably.
    
    Signed-off-by: Potin Lai <[email protected]>
    Link: https://lore.kernel.org/r/20250409-gpio-pca953x-level-triggered-irq-v3-1-7f184d814934@gmail.com
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Stable-dep-of: 014a17deb412 ("gpio: pca953x: handle short interrupt pulses on PCAL devices")
    Signed-off-by: Sasha Levin <[email protected]>

gpio: pca953x: fix wrong error probe return value [+ + +]
Author: Sascha Hauer <[email protected]>
Date:   Mon Jun 16 15:45:03 2025 +0200

    gpio: pca953x: fix wrong error probe return value
    
    commit 0a1db19f66c0960eb00e1f2ccd40708b6747f5b1 upstream.
    
    The second argument to dev_err_probe() is the error value. Pass the
    return value of devm_request_threaded_irq() there instead of the irq
    number.
    
    Signed-off-by: Sascha Hauer <[email protected]>
    Fixes: c47f7ff0fe61 ("gpio: pca953x: Utilise dev_err_probe() where it makes sense")
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

gpio: pca953x: handle short interrupt pulses on PCAL devices [+ + +]
Author: Ernest Van Hoecke <[email protected]>
Date:   Wed Dec 17 16:30:25 2025 +0100

    gpio: pca953x: handle short interrupt pulses on PCAL devices
    
    [ Upstream commit 014a17deb41201449f76df2b20c857a9c3294a7c ]
    
    GPIO drivers with latch input support may miss short pulses on input
    pins even when input latching is enabled. The generic interrupt logic in
    the pca953x driver reports interrupts by comparing the current input
    value against the previously sampled one and only signals an event when
    a level change is observed between two reads.
    
    For short pulses, the first edge is captured when the input register is
    read, but if the signal returns to its previous level before the read,
    the second edge is not observed. As a result, successive pulses can
    produce identical input values at read time and no level change is
    detected, causing interrupts to be missed. Below timing diagram shows
    this situation where the top signal is the input pin level and the
    bottom signal indicates the latched value.
    
    ─────┐     ┌──*───────────────┐     ┌──*─────────────────┐     ┌──*───
         │     │  .               │     │  .                 │     │  .
         │     │  │               │     │  │                 │     │  │
         └──*──┘  │               └──*──┘  │                 └──*──┘  │
    Input   │     │                  │     │                    │     │
            ▼     │                  ▼     │                    ▼     │
           IRQ    │                 IRQ    │                   IRQ    │
                  .                        .                          .
    ─────┐        .┌──────────────┐        .┌────────────────┐        .┌──
         │         │              │         │                │         │
         │         │              │         │                │         │
         └────────*┘              └────────*┘                └────────*┘
    Latched       │                        │                          │
                  ▼                        ▼                          ▼
                READ 0                   READ 0                     READ 0
                                       NO CHANGE                  NO CHANGE
    
    PCAL variants provide an interrupt status register that records which
    pins triggered an interrupt, but the status and input registers cannot
    be read atomically. The interrupt status is only cleared when the input
    port is read, and the input value must also be read to determine the
    triggering edge. If another interrupt occurs on a different line after
    the status register has been read but before the input register is
    sampled, that event will not be reflected in the earlier status
    snapshot, so relying solely on the interrupt status register is also
    insufficient.
    
    Support for input latching and interrupt status handling was previously
    added by [1], but the interrupt status-based logic was reverted by [2]
    due to these issues. This patch addresses the original problem by
    combining both sources of information. Events indicated by the interrupt
    status register are merged with events detected through the existing
    level-change logic. As a result:
    
    * short pulses, whose second edges are invisible, are detected via the
      interrupt status register, and
    * interrupts that occur between the status and input reads are still
      caught by the generic level-change logic.
    
    This significantly improves robustness on devices that signal interrupts
    as short pulses, while avoiding the issues that led to the earlier
    reversion. In practice, even if only the first edge of a pulse is
    observable, the interrupt is reliably detected.
    
    This fixes missed interrupts from an Ilitek touch controller with its
    interrupt line connected to a PCAL6416A, where active-low pulses are
    approximately 200 us long.
    
    [1] commit 44896beae605 ("gpio: pca953x: add PCAL9535 interrupt support for Galileo Gen2")
    [2] commit d6179f6c6204 ("gpio: pca953x: Improve interrupt support")
    
    Fixes: d6179f6c6204 ("gpio: pca953x: Improve interrupt support")
    Signed-off-by: Ernest Van Hoecke <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

gpio: pca953x: Utilise dev_err_probe() where it makes sense [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Fri Sep 1 16:40:34 2023 +0300

    gpio: pca953x: Utilise dev_err_probe() where it makes sense
    
    [ Upstream commit c47f7ff0fe61738a40b1b4fef3cd8317ec314079 ]
    
    At least in pca953x_irq_setup() we may use dev_err_probe().
    
    Signed-off-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Stable-dep-of: 014a17deb412 ("gpio: pca953x: handle short interrupt pulses on PCAL devices")
    Signed-off-by: Sasha Levin <[email protected]>

gpio: pca953x: Utilise temporary variable for struct device [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Fri Sep 1 16:40:37 2023 +0300

    gpio: pca953x: Utilise temporary variable for struct device
    
    [ Upstream commit 6811886ac91eb414b1b74920e05e6590c3f2a688 ]
    
    We have a temporary variable to keep pointer to struct device.
    Utilise it where it makes sense.
    
    Signed-off-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Stable-dep-of: 014a17deb412 ("gpio: pca953x: handle short interrupt pulses on PCAL devices")
    Signed-off-by: Sasha Levin <[email protected]>

gpio: rockchip: mark the GPIO controller as sleeping [+ + +]
Author: Bartosz Golaszewski <[email protected]>
Date:   Tue Jan 6 10:00:11 2026 +0100

    gpio: rockchip: mark the GPIO controller as sleeping
    
    commit 20cf2aed89ac6d78a0122e31c875228e15247194 upstream.
    
    The GPIO controller is configured as non-sleeping but it uses generic
    pinctrl helpers which use a mutex for synchronization.
    
    This can cause the following lockdep splat with shared GPIOs enabled on
    boards which have multiple devices using the same GPIO:
    
    BUG: sleeping function called from invalid context at
    kernel/locking/mutex.c:591
    in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 12, name:
    kworker/u16:0
    preempt_count: 1, expected: 0
    RCU nest depth: 0, expected: 0
    6 locks held by kworker/u16:0/12:
      #0: ffff0001f0018d48 ((wq_completion)events_unbound#2){+.+.}-{0:0},
    at: process_one_work+0x18c/0x604
      #1: ffff8000842dbdf0 (deferred_probe_work){+.+.}-{0:0}, at:
    process_one_work+0x1b4/0x604
      #2: ffff0001f18498f8 (&dev->mutex){....}-{4:4}, at:
    __device_attach+0x38/0x1b0
      #3: ffff0001f75f1e90 (&gdev->srcu){.+.?}-{0:0}, at:
    gpiod_direction_output_raw_commit+0x0/0x360
      #4: ffff0001f46e3db8 (&shared_desc->spinlock){....}-{3:3}, at:
    gpio_shared_proxy_direction_output+0xd0/0x144 [gpio_shared_proxy]
      #5: ffff0001f180ee90 (&gdev->srcu){.+.?}-{0:0}, at:
    gpiod_direction_output_raw_commit+0x0/0x360
    irq event stamp: 81450
    hardirqs last  enabled at (81449): [<ffff8000813acba4>]
    _raw_spin_unlock_irqrestore+0x74/0x78
    hardirqs last disabled at (81450): [<ffff8000813abfb8>]
    _raw_spin_lock_irqsave+0x84/0x88
    softirqs last  enabled at (79616): [<ffff8000811455fc>]
    __alloc_skb+0x17c/0x1e8
    softirqs last disabled at (79614): [<ffff8000811455fc>]
    __alloc_skb+0x17c/0x1e8
    CPU: 2 UID: 0 PID: 12 Comm: kworker/u16:0 Not tainted
    6.19.0-rc4-next-20260105+ #11975 PREEMPT
    Hardware name: Hardkernel ODROID-M1 (DT)
    Workqueue: events_unbound deferred_probe_work_func
    Call trace:
      show_stack+0x18/0x24 (C)
      dump_stack_lvl+0x90/0xd0
      dump_stack+0x18/0x24
      __might_resched+0x144/0x248
      __might_sleep+0x48/0x98
      __mutex_lock+0x5c/0x894
      mutex_lock_nested+0x24/0x30
      pinctrl_get_device_gpio_range+0x44/0x128
      pinctrl_gpio_direction+0x3c/0xe0
      pinctrl_gpio_direction_output+0x14/0x20
      rockchip_gpio_direction_output+0xb8/0x19c
      gpiochip_direction_output+0x38/0x94
      gpiod_direction_output_raw_commit+0x1d8/0x360
      gpiod_direction_output_nonotify+0x7c/0x230
      gpiod_direction_output+0x34/0xf8
      gpio_shared_proxy_direction_output+0xec/0x144 [gpio_shared_proxy]
      gpiochip_direction_output+0x38/0x94
      gpiod_direction_output_raw_commit+0x1d8/0x360
      gpiod_direction_output_nonotify+0x7c/0x230
      gpiod_configure_flags+0xbc/0x480
      gpiod_find_and_request+0x1a0/0x574
      gpiod_get_index+0x58/0x84
      devm_gpiod_get_index+0x20/0xb4
      devm_gpiod_get_optional+0x18/0x30
      rockchip_pcie_probe+0x98/0x380
      platform_probe+0x5c/0xac
      really_probe+0xbc/0x298
    
    Fixes: 936ee2675eee ("gpio/rockchip: add driver for rockchip gpio")
    Cc: [email protected]
    Reported-by: Marek Szyprowski <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Acked-by: Heiko Stuebner <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
HID: quirks: work around VID/PID conflict for appledisplay [+ + +]
Author: René Rebe <[email protected]>
Date:   Fri Nov 28 13:46:41 2025 +0100

    HID: quirks: work around VID/PID conflict for appledisplay
    
    [ Upstream commit c7fabe4ad9219866c203164a214c474c95b36bf2 ]
    
    For years I wondered why the Apple Cinema Display driver would not
    just work for me. Turns out the hidraw driver instantly takes it
    over. Fix by adding appledisplay VID/PIDs to hid_have_special_driver.
    
    Fixes: 069e8a65cd79 ("Driver for Apple Cinema Display")
    Signed-off-by: René Rebe <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
inet: ping: Fix icmp out counting [+ + +]
Author: yuan.gao <[email protected]>
Date:   Wed Dec 24 14:31:45 2025 +0800

    inet: ping: Fix icmp out counting
    
    [ Upstream commit 4c0856c225b39b1def6c9a6bc56faca79550da13 ]
    
    When the ping program uses an IPPROTO_ICMP socket to send ICMP_ECHO
    messages, ICMP_MIB_OUTMSGS is counted twice.
    
        ping_v4_sendmsg
          ping_v4_push_pending_frames
            ip_push_pending_frames
              ip_finish_skb
                __ip_make_skb
                  icmp_out_count(net, icmp_type); // first count
          icmp_out_count(sock_net(sk), user_icmph.type); // second count
    
    However, when the ping program uses an IPPROTO_RAW socket,
    ICMP_MIB_OUTMSGS is counted correctly only once.
    
    Therefore, the first count should be removed.
    
    Fixes: c319b4d76b9e ("net: ipv4: add IPPROTO_ICMP socket kind")
    Signed-off-by: yuan.gao <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Tested-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ksm: use range-walk function to jump over holes in scan_get_next_rmap_item [+ + +]
Author: Pedro Demarchi Gomes <[email protected]>
Date:   Wed Oct 22 12:30:59 2025 -0300

    ksm: use range-walk function to jump over holes in scan_get_next_rmap_item
    
    commit f5548c318d6520d4fa3c5ed6003eeb710763cbc5 upstream.
    
    Currently, scan_get_next_rmap_item() walks every page address in a VMA to
    locate mergeable pages.  This becomes highly inefficient when scanning
    large virtual memory areas that contain mostly unmapped regions, causing
    ksmd to use large amount of cpu without deduplicating much pages.
    
    This patch replaces the per-address lookup with a range walk using
    walk_page_range().  The range walker allows KSM to skip over entire
    unmapped holes in a VMA, avoiding unnecessary lookups.  This problem was
    previously discussed in [1].
    
    Consider the following test program which creates a 32 TiB mapping in the
    virtual address space but only populates a single page:
    
    #include <unistd.h>
    #include <stdio.h>
    #include <sys/mman.h>
    
    /* 32 TiB */
    const size_t size = 32ul * 1024 * 1024 * 1024 * 1024;
    
    int main() {
            char *area = mmap(NULL, size, PROT_READ | PROT_WRITE,
                              MAP_NORESERVE | MAP_PRIVATE | MAP_ANON, -1, 0);
    
            if (area == MAP_FAILED) {
                    perror("mmap() failed\n");
                    return -1;
            }
    
            /* Populate a single page such that we get an anon_vma. */
            *area = 0;
    
            /* Enable KSM. */
            madvise(area, size, MADV_MERGEABLE);
            pause();
            return 0;
    }
    
    $ ./ksm-sparse  &
    $ echo 1 > /sys/kernel/mm/ksm/run
    
    Without this patch ksmd uses 100% of the cpu for a long time (more then 1
    hour in my test machine) scanning all the 32 TiB virtual address space
    that contain only one mapped page.  This makes ksmd essentially deadlocked
    not able to deduplicate anything of value.  With this patch ksmd walks
    only the one mapped page and skips the rest of the 32 TiB virtual address
    space, making the scan fast using little cpu.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lore.kernel.org/linux-mm/[email protected]/ [1]
    Fixes: 31dbd01f3143 ("ksm: Kernel SamePage Merging")
    Signed-off-by: Pedro Demarchi Gomes <[email protected]>
    Co-developed-by: David Hildenbrand <[email protected]>
    Signed-off-by: David Hildenbrand <[email protected]>
    Reported-by: craftfever <[email protected]>
    Closes: https://lkml.kernel.org/r/[email protected]
    Suggested-by: David Hildenbrand <[email protected]>
    Acked-by: David Hildenbrand <[email protected]>
    Cc: Chengming Zhou <[email protected]>
    Cc: xu xin <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    [ change page to folios ]
    Signed-off-by: Pedro Demarchi Gomes <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
lib/crypto: aes: Fix missing MMU protection for AES S-box [+ + +]
Author: Eric Biggers <[email protected]>
Date:   Tue Jan 6 21:20:23 2026 -0800

    lib/crypto: aes: Fix missing MMU protection for AES S-box
    
    commit 74d74bb78aeccc9edc10db216d6be121cf7ec176 upstream.
    
    __cacheline_aligned puts the data in the ".data..cacheline_aligned"
    section, which isn't marked read-only i.e. it doesn't receive MMU
    protection.  Replace it with ____cacheline_aligned which does the right
    thing and just aligns the data while keeping it in ".rodata".
    
    Fixes: b5e0b032b6c3 ("crypto: aes - add generic time invariant AES cipher")
    Cc: [email protected]
    Reported-by: Qingfang Deng <[email protected]>
    Closes: https://lore.kernel.org/r/[email protected]/
    Acked-by: Ard Biesheuvel <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Eric Biggers <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
libceph: make calc_target() set t->paused, not just clear it [+ + +]
Author: Ilya Dryomov <[email protected]>
Date:   Mon Jan 5 19:23:19 2026 +0100

    libceph: make calc_target() set t->paused, not just clear it
    
    commit c0fe2994f9a9d0a2ec9e42441ea5ba74b6a16176 upstream.
    
    Currently calc_target() clears t->paused if the request shouldn't be
    paused anymore, but doesn't ever set t->paused even though it's able to
    determine when the request should be paused.  Setting t->paused is left
    to __submit_request() which is fine for regular requests but doesn't
    work for linger requests -- since __submit_request() doesn't operate
    on linger requests, there is nowhere for lreq->t.paused to be set.
    One consequence of this is that watches don't get reestablished on
    paused -> unpaused transitions in cases where requests have been paused
    long enough for the (paused) unwatch request to time out and for the
    subsequent (re)watch request to enter the paused state.  On top of the
    watch not getting reestablished, rbd_reregister_watch() gets stuck with
    rbd_dev->watch_mutex held:
    
      rbd_register_watch
        __rbd_register_watch
          ceph_osdc_watch
            linger_reg_commit_wait
    
    It's waiting for lreq->reg_commit_wait to be completed, but for that to
    happen the respective request needs to end up on need_resend_linger list
    and be kicked when requests are unpaused.  There is no chance for that
    if the request in question is never marked paused in the first place.
    
    The fact that rbd_dev->watch_mutex remains taken out forever then
    prevents the image from getting unmapped -- "rbd unmap" would inevitably
    hang in D state on an attempt to grab the mutex.
    
    Cc: [email protected]
    Reported-by: Raphael Zimmer <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Reviewed-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

libceph: make free_choose_arg_map() resilient to partial allocation [+ + +]
Author: Tuo Li <[email protected]>
Date:   Sun Dec 21 02:11:49 2025 +0800

    libceph: make free_choose_arg_map() resilient to partial allocation
    
    commit e3fe30e57649c551757a02e1cad073c47e1e075e upstream.
    
    free_choose_arg_map() may dereference a NULL pointer if its caller fails
    after a partial allocation.
    
    For example, in decode_choose_args(), if allocation of arg_map->args
    fails, execution jumps to the fail label and free_choose_arg_map() is
    called. Since arg_map->size is updated to a non-zero value before memory
    allocation, free_choose_arg_map() will iterate over arg_map->args and
    dereference a NULL pointer.
    
    To prevent this potential NULL pointer dereference and make
    free_choose_arg_map() more resilient, add checks for pointers before
    iterating.
    
    Cc: [email protected]
    Co-authored-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Tuo Li <[email protected]>
    Reviewed-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

libceph: prevent potential out-of-bounds reads in handle_auth_done() [+ + +]
Author: ziming zhang <[email protected]>
Date:   Thu Dec 11 16:52:58 2025 +0800

    libceph: prevent potential out-of-bounds reads in handle_auth_done()
    
    commit 818156caffbf55cb4d368f9c3cac64e458fb49c9 upstream.
    
    Perform an explicit bounds check on payload_len to avoid a possible
    out-of-bounds access in the callout.
    
    [ idryomov: changelog ]
    
    Cc: [email protected]
    Signed-off-by: ziming zhang <[email protected]>
    Reviewed-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

libceph: replace overzealous BUG_ON in osdmap_apply_incremental() [+ + +]
Author: Ilya Dryomov <[email protected]>
Date:   Mon Dec 15 11:53:31 2025 +0100

    libceph: replace overzealous BUG_ON in osdmap_apply_incremental()
    
    commit e00c3f71b5cf75681dbd74ee3f982a99cb690c2b upstream.
    
    If the osdmap is (maliciously) corrupted such that the incremental
    osdmap epoch is different from what is expected, there is no need to
    BUG.  Instead, just declare the incremental osdmap to be invalid.
    
    Cc: [email protected]
    Reported-by: ziming zhang <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

libceph: reset sparse-read state in osd_fault() [+ + +]
Author: Sam Edwards <[email protected]>
Date:   Tue Dec 30 20:05:06 2025 -0800

    libceph: reset sparse-read state in osd_fault()
    
    commit 11194b416ef95012c2cfe5f546d71af07b639e93 upstream.
    
    When a fault occurs, the connection is abandoned, reestablished, and any
    pending operations are retried. The OSD client tracks the progress of a
    sparse-read reply using a separate state machine, largely independent of
    the messenger's state.
    
    If a connection is lost mid-payload or the sparse-read state machine
    returns an error, the sparse-read state is not reset. The OSD client
    will then interpret the beginning of a new reply as the continuation of
    the old one. If this makes the sparse-read machinery enter a failure
    state, it may never recover, producing loops like:
    
      libceph:  [0] got 0 extents
      libceph: data len 142248331 != extent len 0
      libceph: osd0 (1)...:6801 socket error on read
      libceph: data len 142248331 != extent len 0
      libceph: osd0 (1)...:6801 socket error on read
    
    Therefore, reset the sparse-read state in osd_fault(), ensuring retries
    start from a clean state.
    
    Cc: [email protected]
    Fixes: f628d7999727 ("libceph: add sparse read support to OSD client")
    Signed-off-by: Sam Edwards <[email protected]>
    Reviewed-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

libceph: return the handler error from mon_handle_auth_done() [+ + +]
Author: Ilya Dryomov <[email protected]>
Date:   Mon Dec 29 15:14:48 2025 +0100

    libceph: return the handler error from mon_handle_auth_done()
    
    commit e84b48d31b5008932c0a0902982809fbaa1d3b70 upstream.
    
    Currently any error from ceph_auth_handle_reply_done() is propagated
    via finish_auth() but isn't returned from mon_handle_auth_done().  This
    results in higher layers learning that (despite the monitor considering
    us to be successfully authenticated) something went wrong in the
    authentication phase and reacting accordingly, but msgr2 still trying
    to proceed with establishing the session in the background.  In the
    case of secure mode this can trigger a WARN in setup_crypto() and later
    lead to a NULL pointer dereference inside of prepare_auth_signature().
    
    Cc: [email protected]
    Fixes: cd1a677cad99 ("libceph, ceph: implement msgr2.1 protocol (crc and secure modes)")
    Signed-off-by: Ilya Dryomov <[email protected]>
    Reviewed-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: Linux 6.6.121 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Sat Jan 17 16:30:02 2026 +0100

    Linux 6.6.121
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Brett A C Sheffield <[email protected]>
    Tested-by: Slade Watkins <[email protected]>
    Tested-by: Francesco Dolcini <[email protected]>
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Shuah Khan <[email protected]>
    Tested-by: Ron Economos <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Tested-by: Peter Schneider <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Tested-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
LoongArch: Add more instruction opcodes and emit_* helpers [+ + +]
Author: Hengqi Chen <[email protected]>
Date:   Wed Nov 8 14:12:15 2023 +0800

    LoongArch: Add more instruction opcodes and emit_* helpers
    
    commit add28024405ed600afaa02749989d4fd119f9057 upstream.
    
    This patch adds more instruction opcodes and their corresponding emit_*
    helpers which will be used in later patches.
    
    Signed-off-by: Hengqi Chen <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mei: me: add nova lake point S DID [+ + +]
Author: Alexander Usyskin <[email protected]>
Date:   Mon Dec 15 12:59:15 2025 +0200

    mei: me: add nova lake point S DID
    
    commit 420f423defcf6d0af2263d38da870ca4a20c0990 upstream.
    
    Add Nova Lake S device id.
    
    Cc: stable <[email protected]>
    Co-developed-by: Tomas Winkler <[email protected]>
    Signed-off-by: Tomas Winkler <[email protected]>
    Signed-off-by: Alexander Usyskin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/mlx5e: Don't print error message due to invalid module [+ + +]
Author: Gal Pressman <[email protected]>
Date:   Thu Dec 25 15:27:16 2025 +0200

    net/mlx5e: Don't print error message due to invalid module
    
    [ Upstream commit 144297e2a24e3e54aee1180ec21120ea38822b97 ]
    
    Dumping module EEPROM on newer modules is supported through the netlink
    interface only.
    
    Querying with old userspace ethtool (or other tools, such as 'lshw')
    which still uses the ioctl interface results in an error message that
    could flood dmesg (in addition to the expected error return value).
    The original message was added under the assumption that the driver
    should be able to handle all module types, but now that such flows are
    easily triggered from userspace, it doesn't serve its purpose.
    
    Change the log level of the print in mlx5_query_module_eeprom() to
    debug.
    
    Fixes: bb64143eee8c ("net/mlx5e: Add ethtool support for dump module EEPROM")
    Signed-off-by: Gal Pressman <[email protected]>
    Reviewed-by: Tariq Toukan <[email protected]>
    Signed-off-by: Mark Bloch <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/sched: sch_qfq: Fix NULL deref when deactivating inactive aggregate in qfq_reset [+ + +]
Author: Xiang Mei <[email protected]>
Date:   Mon Jan 5 20:41:00 2026 -0700

    net/sched: sch_qfq: Fix NULL deref when deactivating inactive aggregate in qfq_reset
    
    [ Upstream commit c1d73b1480235731e35c81df70b08f4714a7d095 ]
    
    `qfq_class->leaf_qdisc->q.qlen > 0` does not imply that the class
    itself is active.
    
    Two qfq_class objects may point to the same leaf_qdisc. This happens
    when:
    
    1. one QFQ qdisc is attached to the dev as the root qdisc, and
    
    2. another QFQ qdisc is temporarily referenced (e.g., via qdisc_get()
    / qdisc_put()) and is pending to be destroyed, as in function
    tc_new_tfilter.
    
    When packets are enqueued through the root QFQ qdisc, the shared
    leaf_qdisc->q.qlen increases. At the same time, the second QFQ
    qdisc triggers qdisc_put and qdisc_destroy: the qdisc enters
    qfq_reset() with its own q->q.qlen == 0, but its class's leaf
    qdisc->q.qlen > 0. Therefore, the qfq_reset would wrongly deactivate
    an inactive aggregate and trigger a null-deref in qfq_deactivate_agg:
    
    [    0.903172] BUG: kernel NULL pointer dereference, address: 0000000000000000
    [    0.903571] #PF: supervisor write access in kernel mode
    [    0.903860] #PF: error_code(0x0002) - not-present page
    [    0.904177] PGD 10299b067 P4D 10299b067 PUD 10299c067 PMD 0
    [    0.904502] Oops: Oops: 0002 [#1] SMP NOPTI
    [    0.904737] CPU: 0 UID: 0 PID: 135 Comm: exploit Not tainted 6.19.0-rc3+ #2 NONE
    [    0.905157] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.17.0-0-gb52ca86e094d-prebuilt.qemu.org 04/01/2014
    [    0.905754] RIP: 0010:qfq_deactivate_agg (include/linux/list.h:992 (discriminator 2) include/linux/list.h:1006 (discriminator 2) net/sched/sch_qfq.c:1367 (discriminator 2) net/sched/sch_qfq.c:1393 (discriminator 2))
    [    0.906046] Code: 0f 84 4d 01 00 00 48 89 70 18 8b 4b 10 48 c7 c2 ff ff ff ff 48 8b 78 08 48 d3 e2 48 21 f2 48 2b 13 48 8b 30 48 d3 ea 8b 4b 18 0
    
    Code starting with the faulting instruction
    ===========================================
       0:   0f 84 4d 01 00 00       je     0x153
       6:   48 89 70 18             mov    %rsi,0x18(%rax)
       a:   8b 4b 10                mov    0x10(%rbx),%ecx
       d:   48 c7 c2 ff ff ff ff    mov    $0xffffffffffffffff,%rdx
      14:   48 8b 78 08             mov    0x8(%rax),%rdi
      18:   48 d3 e2                shl    %cl,%rdx
      1b:   48 21 f2                and    %rsi,%rdx
      1e:   48 2b 13                sub    (%rbx),%rdx
      21:   48 8b 30                mov    (%rax),%rsi
      24:   48 d3 ea                shr    %cl,%rdx
      27:   8b 4b 18                mov    0x18(%rbx),%ecx
            ...
    [    0.907095] RSP: 0018:ffffc900004a39a0 EFLAGS: 00010246
    [    0.907368] RAX: ffff8881043a0880 RBX: ffff888102953340 RCX: 0000000000000000
    [    0.907723] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
    [    0.908100] RBP: ffff888102952180 R08: 0000000000000000 R09: 0000000000000000
    [    0.908451] R10: ffff8881043a0000 R11: 0000000000000000 R12: ffff888102952000
    [    0.908804] R13: ffff888102952180 R14: ffff8881043a0ad8 R15: ffff8881043a0880
    [    0.909179] FS:  000000002a1a0380(0000) GS:ffff888196d8d000(0000) knlGS:0000000000000000
    [    0.909572] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [    0.909857] CR2: 0000000000000000 CR3: 0000000102993002 CR4: 0000000000772ef0
    [    0.910247] PKRU: 55555554
    [    0.910391] Call Trace:
    [    0.910527]  <TASK>
    [    0.910638]  qfq_reset_qdisc (net/sched/sch_qfq.c:357 net/sched/sch_qfq.c:1485)
    [    0.910826]  qdisc_reset (include/linux/skbuff.h:2195 include/linux/skbuff.h:2501 include/linux/skbuff.h:3424 include/linux/skbuff.h:3430 net/sched/sch_generic.c:1036)
    [    0.911040]  __qdisc_destroy (net/sched/sch_generic.c:1076)
    [    0.911236]  tc_new_tfilter (net/sched/cls_api.c:2447)
    [    0.911447]  rtnetlink_rcv_msg (net/core/rtnetlink.c:6958)
    [    0.911663]  ? __pfx_rtnetlink_rcv_msg (net/core/rtnetlink.c:6861)
    [    0.911894]  netlink_rcv_skb (net/netlink/af_netlink.c:2550)
    [    0.912100]  netlink_unicast (net/netlink/af_netlink.c:1319 net/netlink/af_netlink.c:1344)
    [    0.912296]  ? __alloc_skb (net/core/skbuff.c:706)
    [    0.912484]  netlink_sendmsg (net/netlink/af_netlink.c:1894)
    [    0.912682]  sock_write_iter (net/socket.c:727 (discriminator 1) net/socket.c:742 (discriminator 1) net/socket.c:1195 (discriminator 1))
    [    0.912880]  vfs_write (fs/read_write.c:593 fs/read_write.c:686)
    [    0.913077]  ksys_write (fs/read_write.c:738)
    [    0.913252]  do_syscall_64 (arch/x86/entry/syscall_64.c:63 (discriminator 1) arch/x86/entry/syscall_64.c:94 (discriminator 1))
    [    0.913438]  entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:131)
    [    0.913687] RIP: 0033:0x424c34
    [    0.913844] Code: 89 02 48 c7 c0 ff ff ff ff eb bd 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 80 3d 2d 44 09 00 00 74 13 b8 01 00 00 00 0f 05 9
    
    Code starting with the faulting instruction
    ===========================================
       0:   89 02                   mov    %eax,(%rdx)
       2:   48 c7 c0 ff ff ff ff    mov    $0xffffffffffffffff,%rax
       9:   eb bd                   jmp    0xffffffffffffffc8
       b:   66 2e 0f 1f 84 00 00    cs nopw 0x0(%rax,%rax,1)
      12:   00 00 00
      15:   90                      nop
      16:   f3 0f 1e fa             endbr64
      1a:   80 3d 2d 44 09 00 00    cmpb   $0x0,0x9442d(%rip)        # 0x9444e
      21:   74 13                   je     0x36
      23:   b8 01 00 00 00          mov    $0x1,%eax
      28:   0f 05                   syscall
      2a:   09                      .byte 0x9
    [    0.914807] RSP: 002b:00007ffea1938b78 EFLAGS: 00000202 ORIG_RAX: 0000000000000001
    [    0.915197] RAX: ffffffffffffffda RBX: 0000000000000001 RCX: 0000000000424c34
    [    0.915556] RDX: 000000000000003c RSI: 000000002af378c0 RDI: 0000000000000003
    [    0.915912] RBP: 00007ffea1938bc0 R08: 00000000004b8820 R09: 0000000000000000
    [    0.916297] R10: 0000000000000001 R11: 0000000000000202 R12: 00007ffea1938d28
    [    0.916652] R13: 00007ffea1938d38 R14: 00000000004b3828 R15: 0000000000000001
    [    0.917039]  </TASK>
    [    0.917158] Modules linked in:
    [    0.917316] CR2: 0000000000000000
    [    0.917484] ---[ end trace 0000000000000000 ]---
    [    0.917717] RIP: 0010:qfq_deactivate_agg (include/linux/list.h:992 (discriminator 2) include/linux/list.h:1006 (discriminator 2) net/sched/sch_qfq.c:1367 (discriminator 2) net/sched/sch_qfq.c:1393 (discriminator 2))
    [    0.917978] Code: 0f 84 4d 01 00 00 48 89 70 18 8b 4b 10 48 c7 c2 ff ff ff ff 48 8b 78 08 48 d3 e2 48 21 f2 48 2b 13 48 8b 30 48 d3 ea 8b 4b 18 0
    
    Code starting with the faulting instruction
    ===========================================
       0:   0f 84 4d 01 00 00       je     0x153
       6:   48 89 70 18             mov    %rsi,0x18(%rax)
       a:   8b 4b 10                mov    0x10(%rbx),%ecx
       d:   48 c7 c2 ff ff ff ff    mov    $0xffffffffffffffff,%rdx
      14:   48 8b 78 08             mov    0x8(%rax),%rdi
      18:   48 d3 e2                shl    %cl,%rdx
      1b:   48 21 f2                and    %rsi,%rdx
      1e:   48 2b 13                sub    (%rbx),%rdx
      21:   48 8b 30                mov    (%rax),%rsi
      24:   48 d3 ea                shr    %cl,%rdx
      27:   8b 4b 18                mov    0x18(%rbx),%ecx
            ...
    [    0.918902] RSP: 0018:ffffc900004a39a0 EFLAGS: 00010246
    [    0.919198] RAX: ffff8881043a0880 RBX: ffff888102953340 RCX: 0000000000000000
    [    0.919559] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
    [    0.919908] RBP: ffff888102952180 R08: 0000000000000000 R09: 0000000000000000
    [    0.920289] R10: ffff8881043a0000 R11: 0000000000000000 R12: ffff888102952000
    [    0.920648] R13: ffff888102952180 R14: ffff8881043a0ad8 R15: ffff8881043a0880
    [    0.921014] FS:  000000002a1a0380(0000) GS:ffff888196d8d000(0000) knlGS:0000000000000000
    [    0.921424] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [    0.921710] CR2: 0000000000000000 CR3: 0000000102993002 CR4: 0000000000772ef0
    [    0.922097] PKRU: 55555554
    [    0.922240] Kernel panic - not syncing: Fatal exception
    [    0.922590] Kernel Offset: disabled
    
    Fixes: 0545a3037773 ("pkt_sched: QFQ - quick fair queue scheduler")
    Signed-off-by: Xiang Mei <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net: 3com: 3c59x: fix possible null dereference in vortex_probe1() [+ + +]
Author: Thomas Fourier <[email protected]>
Date:   Tue Jan 6 10:47:21 2026 +0100

    net: 3com: 3c59x: fix possible null dereference in vortex_probe1()
    
    commit a4e305ed60f7c41bbf9aabc16dd75267194e0de3 upstream.
    
    pdev can be null and free_ring: can be called in 1297 with a null
    pdev.
    
    Fixes: 55c82617c3e8 ("3c59x: convert to generic DMA API")
    Cc: <[email protected]>
    Signed-off-by: Thomas Fourier <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: Add locking to protect skb->dev access in ip_output [+ + +]
Author: Sharath Chandra Vurukala <[email protected]>
Date:   Wed Jul 30 16:21:18 2025 +0530

    net: Add locking to protect skb->dev access in ip_output
    
    commit 1dbf1d590d10a6d1978e8184f8dfe20af22d680a upstream.
    
    In ip_output() skb->dev is updated from the skb_dst(skb)->dev
    this can become invalid when the interface is unregistered and freed,
    
    Introduced new skb_dst_dev_rcu() function to be used instead of
    skb_dst_dev() within rcu_locks in ip_output.This will ensure that
    all the skb's associated with the dev being deregistered will
    be transnmitted out first, before freeing the dev.
    
    Given that ip_output() is called within an rcu_read_lock()
    critical section or from a bottom-half context, it is safe to introduce
    an RCU read-side critical section within it.
    
    Multiple panic call stacks were observed when UL traffic was run
    in concurrency with device deregistration from different functions,
    pasting one sample for reference.
    
    [496733.627565][T13385] Call trace:
    [496733.627570][T13385] bpf_prog_ce7c9180c3b128ea_cgroupskb_egres+0x24c/0x7f0
    [496733.627581][T13385] __cgroup_bpf_run_filter_skb+0x128/0x498
    [496733.627595][T13385] ip_finish_output+0xa4/0xf4
    [496733.627605][T13385] ip_output+0x100/0x1a0
    [496733.627613][T13385] ip_send_skb+0x68/0x100
    [496733.627618][T13385] udp_send_skb+0x1c4/0x384
    [496733.627625][T13385] udp_sendmsg+0x7b0/0x898
    [496733.627631][T13385] inet_sendmsg+0x5c/0x7c
    [496733.627639][T13385] __sys_sendto+0x174/0x1e4
    [496733.627647][T13385] __arm64_sys_sendto+0x28/0x3c
    [496733.627653][T13385] invoke_syscall+0x58/0x11c
    [496733.627662][T13385] el0_svc_common+0x88/0xf4
    [496733.627669][T13385] do_el0_svc+0x2c/0xb0
    [496733.627676][T13385] el0_svc+0x2c/0xa4
    [496733.627683][T13385] el0t_64_sync_handler+0x68/0xb4
    [496733.627689][T13385] el0t_64_sync+0x1a4/0x1a8
    
    Changes in v3:
    - Replaced WARN_ON() with  WARN_ON_ONCE(), as suggested by Willem de Bruijn.
    - Dropped legacy lines mistakenly pulled in from an outdated branch.
    
    Changes in v2:
    - Addressed review comments from Eric Dumazet
    - Used READ_ONCE() to prevent potential load/store tearing
    - Added skb_dst_dev_rcu() and used along with rcu_read_lock() in ip_output
    
    Signed-off-by: Sharath Chandra Vurukala <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ Keerthana: Backported the patch to v6.6.y ]
    Signed-off-by: Keerthana K <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: enetc: fix build warning when PAGE_SIZE is greater than 128K [+ + +]
Author: Wei Fang <[email protected]>
Date:   Wed Jan 7 17:12:04 2026 +0800

    net: enetc: fix build warning when PAGE_SIZE is greater than 128K
    
    [ Upstream commit 4b5bdabb5449b652122e43f507f73789041d4abe ]
    
    The max buffer size of ENETC RX BD is 0xFFFF bytes, so if the PAGE_SIZE
    is greater than 128K, ENETC_RXB_DMA_SIZE and ENETC_RXB_DMA_SIZE_XDP will
    be greater than 0xFFFF, thus causing a build warning.
    
    This will not cause any practical issues because ENETC is currently only
    used on the ARM64 platform, and the max PAGE_SIZE is 64K. So this patch
    is only for fixing the build warning that occurs when compiling ENETC
    drivers for other platforms.
    
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Fixes: e59bc32df2e9 ("net: enetc: correct the value of ENETC_RXB_TRUESIZE")
    Signed-off-by: Wei Fang <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: fix memory leak in skb_segment_list for GRO packets [+ + +]
Author: Mohammad Heib <[email protected]>
Date:   Sun Jan 4 23:31:01 2026 +0200

    net: fix memory leak in skb_segment_list for GRO packets
    
    [ Upstream commit 238e03d0466239410b72294b79494e43d4fabe77 ]
    
    When skb_segment_list() is called during packet forwarding, it handles
    packets that were aggregated by the GRO engine.
    
    Historically, the segmentation logic in skb_segment_list assumes that
    individual segments are split from a parent SKB and may need to carry
    their own socket memory accounting. Accordingly, the code transfers
    truesize from the parent to the newly created segments.
    
    Prior to commit ed4cccef64c1 ("gro: fix ownership transfer"), this
    truesize subtraction in skb_segment_list() was valid because fragments
    still carry a reference to the original socket.
    
    However, commit ed4cccef64c1 ("gro: fix ownership transfer") changed
    this behavior by ensuring that fraglist entries are explicitly
    orphaned (skb->sk = NULL) to prevent illegal orphaning later in the
    stack. This change meant that the entire socket memory charge remained
    with the head SKB, but the corresponding accounting logic in
    skb_segment_list() was never updated.
    
    As a result, the current code unconditionally adds each fragment's
    truesize to delta_truesize and subtracts it from the parent SKB. Since
    the fragments are no longer charged to the socket, this subtraction
    results in an effective under-count of memory when the head is freed.
    This causes sk_wmem_alloc to remain non-zero, preventing socket
    destruction and leading to a persistent memory leak.
    
    The leak can be observed via KMEMLEAK when tearing down the networking
    environment:
    
    unreferenced object 0xffff8881e6eb9100 (size 2048):
      comm "ping", pid 6720, jiffies 4295492526
      backtrace:
        kmem_cache_alloc_noprof+0x5c6/0x800
        sk_prot_alloc+0x5b/0x220
        sk_alloc+0x35/0xa00
        inet6_create.part.0+0x303/0x10d0
        __sock_create+0x248/0x640
        __sys_socket+0x11b/0x1d0
    
    Since skb_segment_list() is exclusively used for SKB_GSO_FRAGLIST
    packets constructed by GRO, the truesize adjustment is removed.
    
    The call to skb_release_head_state() must be preserved. As documented in
    commit cf673ed0e057 ("net: fix fraglist segmentation reference count
    leak"), it is still required to correctly drop references to SKB
    extensions that may be overwritten during __copy_skb_header().
    
    Fixes: ed4cccef64c1 ("gro: fix ownership transfer")
    Signed-off-by: Mohammad Heib <[email protected]>
    Reviewed-by: Willem de Bruijn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: marvell: prestera: fix NULL dereference on devlink_alloc() failure [+ + +]
Author: Alok Tiwari <[email protected]>
Date:   Mon Dec 29 21:21:18 2025 -0800

    net: marvell: prestera: fix NULL dereference on devlink_alloc() failure
    
    [ Upstream commit a428e0da1248c353557970848994f35fd3f005e2 ]
    
    devlink_alloc() may return NULL on allocation failure, but
    prestera_devlink_alloc() unconditionally calls devlink_priv() on
    the returned pointer.
    
    This leads to a NULL pointer dereference if devlink allocation fails.
    Add a check for a NULL devlink pointer and return NULL early to avoid
    the crash.
    
    Fixes: 34dd1710f5a3 ("net: marvell: prestera: Add basic devlink support")
    Signed-off-by: Alok Tiwari <[email protected]>
    Acked-by: Elad Nachman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: mscc: ocelot: Fix crash when adding interface under a lag [+ + +]
Author: Jerry Wu <[email protected]>
Date:   Thu Dec 25 20:36:17 2025 +0000

    net: mscc: ocelot: Fix crash when adding interface under a lag
    
    [ Upstream commit 34f3ff52cb9fa7dbf04f5c734fcc4cb6ed5d1a95 ]
    
    Commit 15faa1f67ab4 ("lan966x: Fix crash when adding interface under a lag")
    fixed a similar issue in the lan966x driver caused by a NULL pointer dereference.
    The ocelot_set_aggr_pgids() function in the ocelot driver has similar logic
    and is susceptible to the same crash.
    
    This issue specifically affects the ocelot_vsc7514.c frontend, which leaves
    unused ports as NULL pointers. The felix_vsc9959.c frontend is unaffected as
    it uses the DSA framework which registers all ports.
    
    Fix this by checking if the port pointer is valid before accessing it.
    
    Fixes: 528d3f190c98 ("net: mscc: ocelot: drop the use of the "lags" array")
    Signed-off-by: Jerry Wu <[email protected]>
    Reviewed-by: Vladimir Oltean <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: sock: fix hardened usercopy panic in sock_recv_errqueue [+ + +]
Author: Weiming Shi <[email protected]>
Date:   Wed Dec 24 04:35:35 2025 +0800

    net: sock: fix hardened usercopy panic in sock_recv_errqueue
    
    [ Upstream commit 2a71a1a8d0ed718b1c7a9ac61f07e5755c47ae20 ]
    
    skbuff_fclone_cache was created without defining a usercopy region,
    [1] unlike skbuff_head_cache which properly whitelists the cb[] field.
    [2] This causes a usercopy BUG() when CONFIG_HARDENED_USERCOPY is
    enabled and the kernel attempts to copy sk_buff.cb data to userspace
    via sock_recv_errqueue() -> put_cmsg().
    
    The crash occurs when: 1. TCP allocates an skb using alloc_skb_fclone()
       (from skbuff_fclone_cache) [1]
    2. The skb is cloned via skb_clone() using the pre-allocated fclone
    [3] 3. The cloned skb is queued to sk_error_queue for timestamp
    reporting 4. Userspace reads the error queue via recvmsg(MSG_ERRQUEUE)
    5. sock_recv_errqueue() calls put_cmsg() to copy serr->ee from skb->cb
    [4] 6. __check_heap_object() fails because skbuff_fclone_cache has no
       usercopy whitelist [5]
    
    When cloned skbs allocated from skbuff_fclone_cache are used in the
    socket error queue, accessing the sock_exterr_skb structure in skb->cb
    via put_cmsg() triggers a usercopy hardening violation:
    
    [    5.379589] usercopy: Kernel memory exposure attempt detected from SLUB object 'skbuff_fclone_cache' (offset 296, size 16)!
    [    5.382796] kernel BUG at mm/usercopy.c:102!
    [    5.383923] Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI
    [    5.384903] CPU: 1 UID: 0 PID: 138 Comm: poc_put_cmsg Not tainted 6.12.57 #7
    [    5.384903] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014
    [    5.384903] RIP: 0010:usercopy_abort+0x6c/0x80
    [    5.384903] Code: 1a 86 51 48 c7 c2 40 15 1a 86 41 52 48 c7 c7 c0 15 1a 86 48 0f 45 d6 48 c7 c6 80 15 1a 86 48 89 c1 49 0f 45 f3 e8 84 27 88 ff <0f> 0b 490
    [    5.384903] RSP: 0018:ffffc900006f77a8 EFLAGS: 00010246
    [    5.384903] RAX: 000000000000006f RBX: ffff88800f0ad2a8 RCX: 1ffffffff0f72e74
    [    5.384903] RDX: 0000000000000000 RSI: 0000000000000004 RDI: ffffffff87b973a0
    [    5.384903] RBP: 0000000000000010 R08: 0000000000000000 R09: fffffbfff0f72e74
    [    5.384903] R10: 0000000000000003 R11: 79706f6372657375 R12: 0000000000000001
    [    5.384903] R13: ffff88800f0ad2b8 R14: ffffea00003c2b40 R15: ffffea00003c2b00
    [    5.384903] FS:  0000000011bc4380(0000) GS:ffff8880bf100000(0000) knlGS:0000000000000000
    [    5.384903] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [    5.384903] CR2: 000056aa3b8e5fe4 CR3: 000000000ea26004 CR4: 0000000000770ef0
    [    5.384903] PKRU: 55555554
    [    5.384903] Call Trace:
    [    5.384903]  <TASK>
    [    5.384903]  __check_heap_object+0x9a/0xd0
    [    5.384903]  __check_object_size+0x46c/0x690
    [    5.384903]  put_cmsg+0x129/0x5e0
    [    5.384903]  sock_recv_errqueue+0x22f/0x380
    [    5.384903]  tls_sw_recvmsg+0x7ed/0x1960
    [    5.384903]  ? srso_alias_return_thunk+0x5/0xfbef5
    [    5.384903]  ? schedule+0x6d/0x270
    [    5.384903]  ? srso_alias_return_thunk+0x5/0xfbef5
    [    5.384903]  ? mutex_unlock+0x81/0xd0
    [    5.384903]  ? __pfx_mutex_unlock+0x10/0x10
    [    5.384903]  ? __pfx_tls_sw_recvmsg+0x10/0x10
    [    5.384903]  ? _raw_spin_lock_irqsave+0x8f/0xf0
    [    5.384903]  ? _raw_read_unlock_irqrestore+0x20/0x40
    [    5.384903]  ? srso_alias_return_thunk+0x5/0xfbef5
    
    The crash offset 296 corresponds to skb2->cb within skbuff_fclones:
      - sizeof(struct sk_buff) = 232 - offsetof(struct sk_buff, cb) = 40 -
      offset of skb2.cb in fclones = 232 + 40 = 272 - crash offset 296 =
      272 + 24 (inside sock_exterr_skb.ee)
    
    This patch uses a local stack variable as a bounce buffer to avoid the hardened usercopy check failure.
    
    [1] https://elixir.bootlin.com/linux/v6.12.62/source/net/ipv4/tcp.c#L885
    [2] https://elixir.bootlin.com/linux/v6.12.62/source/net/core/skbuff.c#L5104
    [3] https://elixir.bootlin.com/linux/v6.12.62/source/net/core/skbuff.c#L5566
    [4] https://elixir.bootlin.com/linux/v6.12.62/source/net/core/skbuff.c#L5491
    [5] https://elixir.bootlin.com/linux/v6.12.62/source/mm/slub.c#L5719
    
    Fixes: 6d07d1cd300f ("usercopy: Restrict non-usercopy caches to size 0")
    Reported-by: Xiang Mei <[email protected]>
    Signed-off-by: Weiming Shi <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: usb: pegasus: fix memory leak in update_eth_regs_async() [+ + +]
Author: Petko Manolov <[email protected]>
Date:   Tue Jan 6 10:48:21 2026 +0200

    net: usb: pegasus: fix memory leak in update_eth_regs_async()
    
    [ Upstream commit afa27621a28af317523e0836dad430bec551eb54 ]
    
    When asynchronously writing to the device registers and if usb_submit_urb()
    fail, the code fail to release allocated to this point resources.
    
    Fixes: 323b34963d11 ("drivers: net: usb: pegasus: fix control urb submission")
    Signed-off-by: Petko Manolov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: wwan: iosm: Fix memory leak in ipc_mux_deinit() [+ + +]
Author: Zilin Guan <[email protected]>
Date:   Tue Dec 30 07:18:53 2025 +0000

    net: wwan: iosm: Fix memory leak in ipc_mux_deinit()
    
    [ Upstream commit 92e6e0a87f6860a4710f9494f8c704d498ae60f8 ]
    
    Commit 1f52d7b62285 ("net: wwan: iosm: Enable M.2 7360 WWAN card support")
    allocated memory for pp_qlt in ipc_mux_init() but did not free it in
    ipc_mux_deinit(). This results in a memory leak when the driver is
    unloaded.
    
    Free the allocated memory in ipc_mux_deinit() to fix the leak.
    
    Fixes: 1f52d7b62285 ("net: wwan: iosm: Enable M.2 7360 WWAN card support")
    Co-developed-by: Jianhao Xu <[email protected]>
    Signed-off-by: Jianhao Xu <[email protected]>
    Signed-off-by: Zilin Guan <[email protected]>
    Reviewed-by: Loic Poulain <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
netdev: preserve NETIF_F_ALL_FOR_ALL across TSO updates [+ + +]
Author: Di Zhu <[email protected]>
Date:   Wed Dec 24 09:22:24 2025 +0800

    netdev: preserve NETIF_F_ALL_FOR_ALL across TSO updates
    
    [ Upstream commit 02d1e1a3f9239cdb3ecf2c6d365fb959d1bf39df ]
    
    Directly increment the TSO features incurs a side effect: it will also
    directly clear the flags in NETIF_F_ALL_FOR_ALL on the master device,
    which can cause issues such as the inability to enable the nocache copy
    feature on the bonding driver.
    
    The fix is to include NETIF_F_ALL_FOR_ALL in the update mask, thereby
    preventing it from being cleared.
    
    Fixes: b0ce3508b25e ("bonding: allow TSO being set on bonding master")
    Signed-off-by: Di Zhu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
netfilter: nf_conncount: update last_gc only when GC has been performed [+ + +]
Author: Fernando Fernandez Mancera <[email protected]>
Date:   Wed Dec 17 15:46:40 2025 +0100

    netfilter: nf_conncount: update last_gc only when GC has been performed
    
    [ Upstream commit 7811ba452402d58628e68faedf38745b3d485e3c ]
    
    Currently last_gc is being updated everytime a new connection is
    tracked, that means that it is updated even if a GC wasn't performed.
    With a sufficiently high packet rate, it is possible to always bypass
    the GC, causing the list to grow infinitely.
    
    Update the last_gc value only when a GC has been actually performed.
    
    Fixes: d265929930e2 ("netfilter: nf_conncount: reduce unnecessary GC")
    Signed-off-by: Fernando Fernandez Mancera <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_tables: avoid chain re-validation if possible [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Sun Jul 7 01:18:25 2024 +0200

    netfilter: nf_tables: avoid chain re-validation if possible
    
    [ Upstream commit 8e1a1bc4f5a42747c08130b8242ebebd1210b32f ]
    
    Hamza Mahfooz reports cpu soft lock-ups in
    nft_chain_validate():
    
     watchdog: BUG: soft lockup - CPU#1 stuck for 27s! [iptables-nft-re:37547]
    [..]
     RIP: 0010:nft_chain_validate+0xcb/0x110 [nf_tables]
    [..]
      nft_immediate_validate+0x36/0x50 [nf_tables]
      nft_chain_validate+0xc9/0x110 [nf_tables]
      nft_immediate_validate+0x36/0x50 [nf_tables]
      nft_chain_validate+0xc9/0x110 [nf_tables]
      nft_immediate_validate+0x36/0x50 [nf_tables]
      nft_chain_validate+0xc9/0x110 [nf_tables]
      nft_immediate_validate+0x36/0x50 [nf_tables]
      nft_chain_validate+0xc9/0x110 [nf_tables]
      nft_immediate_validate+0x36/0x50 [nf_tables]
      nft_chain_validate+0xc9/0x110 [nf_tables]
      nft_immediate_validate+0x36/0x50 [nf_tables]
      nft_chain_validate+0xc9/0x110 [nf_tables]
      nft_table_validate+0x6b/0xb0 [nf_tables]
      nf_tables_validate+0x8b/0xa0 [nf_tables]
      nf_tables_commit+0x1df/0x1eb0 [nf_tables]
    [..]
    
    Currently nf_tables will traverse the entire table (chain graph), starting
    from the entry points (base chains), exploring all possible paths
    (chain jumps).  But there are cases where we could avoid revalidation.
    
    Consider:
    1  input -> j2 -> j3
    2  input -> j2 -> j3
    3  input -> j1 -> j2 -> j3
    
    Then the second rule does not need to revalidate j2, and, by extension j3,
    because this was already checked during validation of the first rule.
    We need to validate it only for rule 3.
    
    This is needed because chain loop detection also ensures we do not exceed
    the jump stack: Just because we know that j2 is cycle free, its last jump
    might now exceed the allowed stack size.  We also need to update all
    reachable chains with the new largest observed call depth.
    
    Care has to be taken to revalidate even if the chain depth won't be an
    issue: chain validation also ensures that expressions are not called from
    invalid base chains.  For example, the masquerade expression can only be
    called from NAT postrouting base chains.
    
    Therefore we also need to keep record of the base chain context (type,
    hooknum) and revalidate if the chain becomes reachable from a different
    hook location.
    
    Reported-by: Hamza Mahfooz <[email protected]>
    Closes: https://lore.kernel.org/netfilter-devel/20251118221735.GA5477@linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net/
    Tested-by: Hamza Mahfooz <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_tables: fix memory leak in nf_tables_newrule() [+ + +]
Author: Zilin Guan <[email protected]>
Date:   Wed Dec 24 12:48:26 2025 +0000

    netfilter: nf_tables: fix memory leak in nf_tables_newrule()
    
    [ Upstream commit d077e8119ddbb4fca67540f1a52453631a47f221 ]
    
    In nf_tables_newrule(), if nft_use_inc() fails, the function jumps to
    the err_release_rule label without freeing the allocated flow, leading
    to a memory leak.
    
    Fix this by adding a new label err_destroy_flow and jumping to it when
    nft_use_inc() fails. This ensures that the flow is properly released
    in this error case.
    
    Fixes: 1689f25924ada ("netfilter: nf_tables: report use refcount overflow")
    Signed-off-by: Zilin Guan <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nft_synproxy: avoid possible data-race on update operation [+ + +]
Author: Fernando Fernandez Mancera <[email protected]>
Date:   Wed Dec 17 21:21:59 2025 +0100

    netfilter: nft_synproxy: avoid possible data-race on update operation
    
    [ Upstream commit 36a3200575642846a96436d503d46544533bb943 ]
    
    During nft_synproxy eval we are reading nf_synproxy_info struct which
    can be modified on update operation concurrently. As nf_synproxy_info
    struct fits in 32 bits, use READ_ONCE/WRITE_ONCE annotations.
    
    Fixes: ee394f96ad75 ("netfilter: nft_synproxy: add synproxy stateful object support")
    Signed-off-by: Fernando Fernandez Mancera <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
NFS: Fix up the automount fs_context to use the correct cred [+ + +]
Author: Trond Myklebust <[email protected]>
Date:   Fri Nov 28 18:56:46 2025 -0500

    NFS: Fix up the automount fs_context to use the correct cred
    
    [ Upstream commit a2a8fc27dd668e7562b5326b5ed2f1604cb1e2e9 ]
    
    When automounting, the fs_context should be fixed up to use the cred
    from the parent filesystem, since the operation is just extending the
    namespace. Authorisation to enter that namespace will already have been
    provided by the preceding lookup.
    
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

NFS: trace: show TIMEDOUT instead of 0x6e [+ + +]
Author: Chen Hanxiao <[email protected]>
Date:   Mon Jan 12 09:26:59 2026 -0500

    NFS: trace: show TIMEDOUT instead of 0x6e
    
    [ Upstream commit cef48236dfe55fa266d505e8a497963a7bc5ef2a ]
    
    __nfs_revalidate_inode may return ETIMEDOUT.
    
    print symbol of ETIMEDOUT in nfs trace:
    
    before:
    cat-5191 [005] 119.331127: nfs_revalidate_inode_exit: error=-110 (0x6e)
    
    after:
    cat-1738 [004] 44.365509: nfs_revalidate_inode_exit: error=-110 (TIMEDOUT)
    
    Signed-off-by: Chen Hanxiao <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Stable-dep-of: c6c209ceb87f ("NFSD: Remove NFSERR_EAGAIN")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nfs_common: factor out nfs_errtbl and nfs_stat_to_errno [+ + +]
Author: Mike Snitzer <[email protected]>
Date:   Mon Jan 12 09:27:00 2026 -0500

    nfs_common: factor out nfs_errtbl and nfs_stat_to_errno
    
    [ Upstream commit 4806ded4c14c5e8fdc6ce885d83221a78c06a428 ]
    
    Common nfs_stat_to_errno() is used by both fs/nfs/nfs2xdr.c and
    fs/nfs/nfs3xdr.c
    
    Will also be used by fs/nfsd/localio.c
    
    Signed-off-by: Mike Snitzer <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Reviewed-by: NeilBrown <[email protected]>
    Signed-off-by: Anna Schumaker <[email protected]>
    Stable-dep-of: c6c209ceb87f ("NFSD: Remove NFSERR_EAGAIN")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nfsd: convert to new timestamp accessors [+ + +]
Author: Jeff Layton <[email protected]>
Date:   Wed Oct 4 14:52:37 2023 -0400

    nfsd: convert to new timestamp accessors
    
    commit 11fec9b9fb04fd1b3330a3b91ab9dcfa81ad5ad3 upstream.
    
    Convert to using the new inode timestamp accessor functions.
    
    Signed-off-by: Jeff Layton <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: 24d92de9186e ("nfsd: Fix NFSv3 atomicity bugs in nfsd_setattr()")
    Signed-off-by: Christian Brauner <[email protected]>
    [ cel: d68886bae76a has already been applied ]
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

nfsd: Fix NFSv3 atomicity bugs in nfsd_setattr() [+ + +]
Author: Trond Myklebust <[email protected]>
Date:   Thu Feb 15 20:24:51 2024 -0500

    nfsd: Fix NFSv3 atomicity bugs in nfsd_setattr()
    
    commit 24d92de9186ebc340687caf7356e1070773e67bc upstream.
    
    The main point of the guarded SETATTR is to prevent races with other
    WRITE and SETATTR calls. That requires that the check of the guard time
    against the inode ctime be done after taking the inode lock.
    
    Furthermore, we need to take into account the 32-bit nature of
    timestamps in NFSv3, and the possibility that files may change at a
    faster rate than once a second.
    
    Signed-off-by: Trond Myklebust <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Reviewed-by: NeilBrown <[email protected]>
    Stable-dep-of: 442d27ff09a2 ("nfsd: set security label during create operations")
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
NFSD: Fix permission check for read access to executable-only files [+ + +]
Author: Scott Mayhew <[email protected]>
Date:   Thu Dec 11 07:34:34 2025 -0500

    NFSD: Fix permission check for read access to executable-only files
    
    commit e901c7fce59e72d9f3c92733c379849c4034ac50 upstream.
    
    Commit abc02e5602f7 ("NFSD: Support write delegations in LAYOUTGET")
    added NFSD_MAY_OWNER_OVERRIDE to the access flags passed from
    nfsd4_layoutget() to fh_verify().  This causes LAYOUTGET to fail for
    executable-only files, and causes xfstests generic/126 to fail on
    pNFS SCSI.
    
    To allow read access to executable-only files, what we really want is:
    1. The "permissions" portion of the access flags (the lower 6 bits)
       must be exactly NFSD_MAY_READ
    2. The "hints" portion of the access flags (the upper 26 bits) can
       contain any combination of NFSD_MAY_OWNER_OVERRIDE and
       NFSD_MAY_READ_IF_EXEC
    
    Fixes: abc02e5602f7 ("NFSD: Support write delegations in LAYOUTGET")
    Cc: [email protected] # v6.6+
    Signed-off-by: Scott Mayhew <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Reviewed-by: NeilBrown <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
NFSD: NFSv4 file creation neglects setting ACL [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Tue Nov 18 19:51:19 2025 -0500

    NFSD: NFSv4 file creation neglects setting ACL
    
    commit 913f7cf77bf14c13cfea70e89bcb6d0b22239562 upstream.
    
    An NFSv4 client that sets an ACL with a named principal during file
    creation retrieves the ACL afterwards, and finds that it is only a
    default ACL (based on the mode bits) and not the ACL that was
    requested during file creation. This violates RFC 8881 section
    6.4.1.3: "the ACL attribute is set as given".
    
    The issue occurs in nfsd_create_setattr(), which calls
    nfsd_attrs_valid() to determine whether to call nfsd_setattr().
    However, nfsd_attrs_valid() checks only for iattr changes and
    security labels, but not POSIX ACLs. When only an ACL is present,
    the function returns false, nfsd_setattr() is skipped, and the
    POSIX ACL is never applied to the inode.
    
    Subsequently, when the client retrieves the ACL, the server finds
    no POSIX ACL on the inode and returns one generated from the file's
    mode bits rather than returning the originally-specified ACL.
    
    Reported-by: Aurélien Couderc <[email protected]>
    Fixes: c0cbe70742f4 ("NFSD: add posix ACLs to struct nfsd_attrs")
    Cc: Roland Mainz <[email protected]>
    Cc: [email protected]
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nfsd: provide locking for v4_end_grace [+ + +]
Author: NeilBrown <[email protected]>
Date:   Sat Dec 13 13:41:59 2025 -0500

    nfsd: provide locking for v4_end_grace
    
    commit 2857bd59feb63fcf40fe4baf55401baea6b4feb4 upstream.
    
    Writing to v4_end_grace can race with server shutdown and result in
    memory being accessed after it was freed - reclaim_str_hashtbl in
    particularly.
    
    We cannot hold nfsd_mutex across the nfsd4_end_grace() call as that is
    held while client_tracking_op->init() is called and that can wait for
    an upcall to nfsdcltrack which can write to v4_end_grace, resulting in a
    deadlock.
    
    nfsd4_end_grace() is also called by the landromat work queue and this
    doesn't require locking as server shutdown will stop the work and wait
    for it before freeing anything that nfsd4_end_grace() might access.
    
    However, we must be sure that writing to v4_end_grace doesn't restart
    the work item after shutdown has already waited for it.  For this we
    add a new flag protected with nn->client_lock.  It is set only while it
    is safe to make client tracking calls, and v4_end_grace only schedules
    work while the flag is set with the spinlock held.
    
    So this patch adds a nfsd_net field "client_tracking_active" which is
    set as described.  Another field "grace_end_forced", is set when
    v4_end_grace is written.  After this is set, and providing
    client_tracking_active is set, the laundromat is scheduled.
    This "grace_end_forced" field bypasses other checks for whether the
    grace period has finished.
    
    This resolves a race which can result in use-after-free.
    
    Reported-by: Li Lingfeng <[email protected]>
    Closes: https://lore.kernel.org/linux-nfs/[email protected]/T/#t
    Fixes: 7f5ef2e900d9 ("nfsd: add a v4_end_grace file to /proc/fs/nfsd")
    Cc: [email protected]
    Signed-off-by: NeilBrown <[email protected]>
    Tested-by: Li Lingfeng <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
NFSD: Remove NFSERR_EAGAIN [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Mon Jan 12 09:27:01 2026 -0500

    NFSD: Remove NFSERR_EAGAIN
    
    [ Upstream commit c6c209ceb87f64a6ceebe61761951dcbbf4a0baa ]
    
    I haven't found an NFSERR_EAGAIN in RFCs 1094, 1813, 7530, or 8881.
    None of these RFCs have an NFS status code that match the numeric
    value "11".
    
    Based on the meaning of the EAGAIN errno, I presume the use of this
    status in NFSD means NFS4ERR_DELAY. So replace the one usage of
    nfserr_eagain, and remove it from NFSD's NFS status conversion
    tables.
    
    As far as I can tell, NFSERR_EAGAIN has existed since the pre-git
    era, but was not actually used by any code until commit f4e44b393389
    ("NFSD: delay unmount source's export after inter-server copy
    completed."), at which time it become possible for NFSD to return
    a status code of 11 (which is not valid NFS protocol).
    
    Fixes: f4e44b393389 ("NFSD: delay unmount source's export after inter-server copy completed.")
    Cc: [email protected]
    Reviewed-by: NeilBrown <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nfsd: set security label during create operations [+ + +]
Author: Stephen Smalley <[email protected]>
Date:   Fri May 3 09:09:06 2024 -0400

    nfsd: set security label during create operations
    
    commit 442d27ff09a218b61020ab56387dbc508ad6bfa6 upstream.
    
    When security labeling is enabled, the client can pass a file security
    label as part of a create operation for the new file, similar to mode
    and other attributes. At present, the security label is received by nfsd
    and passed down to nfsd_create_setattr(), but nfsd_setattr() is never
    called and therefore the label is never set on the new file. This bug
    may have been introduced on or around commit d6a97d3f589a ("NFSD:
    add security label to struct nfsd_attrs"). Looking at nfsd_setattr()
    I am uncertain as to whether the same issue presents for
    file ACLs and therefore requires a similar fix for those.
    
    An alternative approach would be to introduce a new LSM hook to set the
    "create SID" of the current task prior to the actual file creation, which
    would atomically label the new inode at creation time. This would be better
    for SELinux and a similar approach has been used previously
    (see security_dentry_create_files_as) but perhaps not usable by other LSMs.
    
    Reproducer:
    1. Install a Linux distro with SELinux - Fedora is easiest
    2. git clone https://github.com/SELinuxProject/selinux-testsuite
    3. Install the requisite dependencies per selinux-testsuite/README.md
    4. Run something like the following script:
    MOUNT=$HOME/selinux-testsuite
    sudo systemctl start nfs-server
    sudo exportfs -o rw,no_root_squash,security_label localhost:$MOUNT
    sudo mkdir -p /mnt/selinux-testsuite
    sudo mount -t nfs -o vers=4.2 localhost:$MOUNT /mnt/selinux-testsuite
    pushd /mnt/selinux-testsuite/
    sudo make -C policy load
    pushd tests/filesystem
    sudo runcon -t test_filesystem_t ./create_file -f trans_test_file \
            -e test_filesystem_filetranscon_t -v
    sudo rm -f trans_test_file
    popd
    sudo make -C policy unload
    popd
    sudo umount /mnt/selinux-testsuite
    sudo exportfs -u localhost:$MOUNT
    sudo rmdir /mnt/selinux-testsuite
    sudo systemctl stop nfs-server
    
    Expected output:
    <eliding noise from commands run prior to or after the test itself>
    Process context:
            unconfined_u:unconfined_r:test_filesystem_t:s0-s0:c0.c1023
    Created file: trans_test_file
    File context: unconfined_u:object_r:test_filesystem_filetranscon_t:s0
    File context is correct
    
    Actual output:
    <eliding noise from commands run prior to or after the test itself>
    Process context:
            unconfined_u:unconfined_r:test_filesystem_t:s0-s0:c0.c1023
    Created file: trans_test_file
    File context: system_u:object_r:test_file_t:s0
    File context error, expected:
            test_filesystem_filetranscon_t
    got:
            test_file_t
    
    Signed-off-by: Stephen Smalley <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Reviewed-by: NeilBrown <[email protected]>
    Stable-dep-of: 913f7cf77bf1 ("NFSD: NFSv4 file creation neglects setting ACL")
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
NFSv4: ensure the open stateid seqid doesn't go backwards [+ + +]
Author: Scott Mayhew <[email protected]>
Date:   Mon Nov 3 10:44:15 2025 -0500

    NFSv4: ensure the open stateid seqid doesn't go backwards
    
    [ Upstream commit 2e47c3cc64b44b0b06cd68c2801db92ff143f2b2 ]
    
    We have observed an NFSv4 client receiving a LOCK reply with a status of
    NFS4ERR_OLD_STATEID and subsequently retrying the LOCK request with an
    earlier seqid value in the stateid.  As this was for a new lockowner,
    that would imply that nfs_set_open_stateid_locked() had updated the open
    stateid seqid with an earlier value.
    
    Looking at nfs_set_open_stateid_locked(), if the incoming seqid is out
    of sequence, the task will sleep on the state->waitq for up to 5
    seconds.  If the task waits for the full 5 seconds, then after finishing
    the wait it'll update the open stateid seqid with whatever value the
    incoming seqid has.  If there are multiple waiters in this scenario,
    then the last one to perform said update may not be the one with the
    highest seqid.
    
    Add a check to ensure that the seqid can only be incremented, and add a
    tracepoint to indicate when old seqids are skipped.
    
    Signed-off-by: Scott Mayhew <[email protected]>
    Reviewed-by: Benjamin Coddington <[email protected]>
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
pinctrl: qcom: lpass-lpi: mark the GPIO controller as sleeping [+ + +]
Author: Bartosz Golaszewski <[email protected]>
Date:   Wed Nov 26 13:22:19 2025 +0100

    pinctrl: qcom: lpass-lpi: mark the GPIO controller as sleeping
    
    commit ebc18e9854e5a2b62a041fb57b216a903af45b85 upstream.
    
    The gpio_chip settings in this driver say the controller can't sleep
    but it actually uses a mutex for synchronization. This triggers the
    following BUG():
    
    [    9.233659] BUG: sleeping function called from invalid context at kernel/locking/mutex.c:281
    [    9.233665] in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 554, name: (udev-worker)
    [    9.233669] preempt_count: 1, expected: 0
    [    9.233673] RCU nest depth: 0, expected: 0
    [    9.233688] Tainted: [W]=WARN
    [    9.233690] Hardware name: Dell Inc. Latitude 7455/0FK7MX, BIOS 2.10.1 05/20/2025
    [    9.233694] Call trace:
    [    9.233696]  show_stack+0x24/0x38 (C)
    [    9.233709]  dump_stack_lvl+0x40/0x88
    [    9.233716]  dump_stack+0x18/0x24
    [    9.233722]  __might_resched+0x148/0x160
    [    9.233731]  __might_sleep+0x38/0x98
    [    9.233736]  mutex_lock+0x30/0xd8
    [    9.233749]  lpi_config_set+0x2e8/0x3c8 [pinctrl_lpass_lpi]
    [    9.233757]  lpi_gpio_direction_output+0x58/0x90 [pinctrl_lpass_lpi]
    [    9.233761]  gpiod_direction_output_raw_commit+0x110/0x428
    [    9.233772]  gpiod_direction_output_nonotify+0x234/0x358
    [    9.233779]  gpiod_direction_output+0x38/0xd0
    [    9.233786]  gpio_shared_proxy_direction_output+0xb8/0x2a8 [gpio_shared_proxy]
    [    9.233792]  gpiod_direction_output_raw_commit+0x110/0x428
    [    9.233799]  gpiod_direction_output_nonotify+0x234/0x358
    [    9.233806]  gpiod_configure_flags+0x2c0/0x580
    [    9.233812]  gpiod_find_and_request+0x358/0x4f8
    [    9.233819]  gpiod_get_index+0x7c/0x98
    [    9.233826]  devm_gpiod_get+0x34/0xb0
    [    9.233829]  reset_gpio_probe+0x58/0x128 [reset_gpio]
    [    9.233836]  auxiliary_bus_probe+0xb0/0xf0
    [    9.233845]  really_probe+0x14c/0x450
    [    9.233853]  __driver_probe_device+0xb0/0x188
    [    9.233858]  driver_probe_device+0x4c/0x250
    [    9.233863]  __driver_attach+0xf8/0x2a0
    [    9.233868]  bus_for_each_dev+0xf8/0x158
    [    9.233872]  driver_attach+0x30/0x48
    [    9.233876]  bus_add_driver+0x158/0x2b8
    [    9.233880]  driver_register+0x74/0x118
    [    9.233886]  __auxiliary_driver_register+0x94/0xe8
    [    9.233893]  init_module+0x34/0xfd0 [reset_gpio]
    [    9.233898]  do_one_initcall+0xec/0x300
    [    9.233903]  do_init_module+0x64/0x260
    [    9.233910]  load_module+0x16c4/0x1900
    [    9.233915]  __arm64_sys_finit_module+0x24c/0x378
    [    9.233919]  invoke_syscall+0x4c/0xe8
    [    9.233925]  el0_svc_common+0x8c/0xf0
    [    9.233929]  do_el0_svc+0x28/0x40
    [    9.233934]  el0_svc+0x38/0x100
    [    9.233938]  el0t_64_sync_handler+0x84/0x130
    [    9.233943]  el0t_64_sync+0x17c/0x180
    
    Mark the controller as sleeping.
    
    Fixes: 6e261d1090d6 ("pinctrl: qcom: Add sm8250 lpass lpi pinctrl driver")
    Cc: [email protected]
    Reported-by: Val Packett <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
powercap: fix race condition in register_control_type() [+ + +]
Author: Sumeet Pawnikar <[email protected]>
Date:   Sat Dec 6 00:32:16 2025 +0530

    powercap: fix race condition in register_control_type()
    
    [ Upstream commit 7bda1910c4bccd4b8d4726620bb3d6bbfb62286e ]
    
    The device becomes visible to userspace via device_register()
    even before it fully initialized by idr_init(). If userspace
    or another thread tries to register a zone immediately after
    device_register(), the control_type_valid() will fail because
    the control_type is not yet in the list. The IDR is not yet
    initialized, so this race condition causes zone registration
    failure.
    
    Move idr_init() and list addition before device_register()
    fix the race condition.
    
    Signed-off-by: Sumeet Pawnikar <[email protected]>
    [ rjw: Subject adjustment, empty line added ]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

powercap: fix sscanf() error return value handling [+ + +]
Author: Sumeet Pawnikar <[email protected]>
Date:   Sun Dec 7 20:45:48 2025 +0530

    powercap: fix sscanf() error return value handling
    
    [ Upstream commit efc4c35b741af973de90f6826bf35d3b3ac36bf1 ]
    
    Fix inconsistent error handling for sscanf() return value check.
    
    Implicit boolean conversion is used instead of explicit return
    value checks. The code checks if (!sscanf(...)) which is incorrect
    because:
     1. sscanf returns the number of successfully parsed items
     2. On success, it returns 1 (one item passed)
     3. On failure, it returns 0 or EOF
     4. The check 'if (!sscanf(...))' is wrong because it treats
        success (1) as failure
    
    All occurrences of sscanf() now uses explicit return value check.
    With this behavior it returns '-EINVAL' when parsing fails (returns
    0 or EOF), and continues when parsing succeeds (returns 1).
    
    Signed-off-by: Sumeet Pawnikar <[email protected]>
    [ rjw: Subject and changelog edits ]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
riscv: Replace function-like macro by static inline function [+ + +]
Author: Björn Töpel <[email protected]>
Date:   Sat Apr 19 13:13:59 2025 +0200

    riscv: Replace function-like macro by static inline function
    
    commit 121f34341d396b666d8a90b24768b40e08ca0d61 upstream.
    
    The flush_icache_range() function is implemented as a "function-like
    macro with unused parameters", which can result in "unused variables"
    warnings.
    
    Replace the macro with a static inline function, as advised by
    Documentation/process/coding-style.rst.
    
    Fixes: 08f051eda33b ("RISC-V: Flush I$ when making a dirty page executable")
    Signed-off-by: Björn Töpel <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Palmer Dabbelt <[email protected]>
    Signed-off-by: Ron Economos <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

riscv: uprobes: Add missing fence.i after building the XOL buffer [+ + +]
Author: Björn Töpel <[email protected]>
Date:   Wed Jan 14 09:18:30 2026 +0800

    riscv: uprobes: Add missing fence.i after building the XOL buffer
    
    [ Upstream commit 7d1d19a11cfbfd8bae1d89cc010b2cc397cd0c48 ]
    
    The XOL (execute out-of-line) buffer is used to single-step the
    replaced instruction(s) for uprobes. The RISC-V port was missing a
    proper fence.i (i$ flushing) after constructing the XOL buffer, which
    can result in incorrect execution of stale/broken instructions.
    
    This was found running the BPF selftests "test_progs:
    uprobe_autoattach, attach_probe" on the Spacemit K1/X60, where the
    uprobes tests randomly blew up.
    
    Reviewed-by: Guo Ren <[email protected]>
    Fixes: 74784081aac8 ("riscv: Add uprobes supported")
    Signed-off-by: Björn Töpel <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Palmer Dabbelt <[email protected]>
    Signed-off-by: Rahul Sharma <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
scsi: ipr: Enable/disable IRQD_NO_BALANCING during reset [+ + +]
Author: Wen Xiong <[email protected]>
Date:   Tue Oct 28 09:24:26 2025 -0500

    scsi: ipr: Enable/disable IRQD_NO_BALANCING during reset
    
    [ Upstream commit 6ac3484fb13b2fc7f31cfc7f56093e7d0ce646a5 ]
    
    A dynamic remove/add storage adapter test hits EEH on PowerPC:
    
      EEH: [c00000000004f75c] __eeh_send_failure_event+0x7c/0x160
      EEH: [c000000000048444] eeh_dev_check_failure.part.0+0x254/0x650
      EEH: [c008000001650678] eeh_readl+0x60/0x90 [ipr]
      EEH: [c00800000166746c] ipr_cancel_op+0x2b8/0x524 [ipr]
      EEH: [c008000001656524] ipr_eh_abort+0x6c/0x130 [ipr]
      EEH: [c000000000ab0d20] scmd_eh_abort_handler+0x140/0x440
      EEH: [c00000000017e558] process_one_work+0x298/0x590
      EEH: [c00000000017eef8] worker_thread+0xa8/0x620
      EEH: [c00000000018be34] kthread+0x124/0x130
      EEH: [c00000000000cd64] ret_from_kernel_thread+0x5c/0x64
    
    A PCIe bus trace reveals that a vector of MSI-X is cleared to 0 by
    irqbalance daemon. If we disable irqbalance daemon, we won't see the
    issue.
    
    With debug enabled in ipr driver:
    
      [   44.103071] ipr: Entering __ipr_remove
      [   44.103083] ipr: Entering ipr_initiate_ioa_bringdown
      [   44.103091] ipr: Entering ipr_reset_shutdown_ioa
      [   44.103099] ipr: Leaving ipr_reset_shutdown_ioa
      [   44.103105] ipr: Leaving ipr_initiate_ioa_bringdown
      [   44.149918] ipr: Entering ipr_reset_ucode_download
      [   44.149935] ipr: Entering ipr_reset_alert
      [   44.150032] ipr: Entering ipr_reset_start_timer
      [   44.150038] ipr: Leaving ipr_reset_alert
      [   44.244343] scsi 1:2:3:0: alua: Detached
      [   44.254300] ipr: Entering ipr_reset_start_bist
      [   44.254320] ipr: Entering ipr_reset_start_timer
      [   44.254325] ipr: Leaving ipr_reset_start_bist
      [   44.364329] scsi 1:2:4:0: alua: Detached
      [   45.134341] scsi 1:2:5:0: alua: Detached
      [   45.860949] ipr: Entering ipr_reset_shutdown_ioa
      [   45.860962] ipr: Leaving ipr_reset_shutdown_ioa
      [   45.860966] ipr: Entering ipr_reset_alert
      [   45.861028] ipr: Entering ipr_reset_start_timer
      [   45.861035] ipr: Leaving ipr_reset_alert
      [   45.964302] ipr: Entering ipr_reset_start_bist
      [   45.964309] ipr: Entering ipr_reset_start_timer
      [   45.964313] ipr: Leaving ipr_reset_start_bist
      [   46.264301] ipr: Entering ipr_reset_bist_done
      [   46.264309] ipr: Leaving ipr_reset_bist_done
    
    During adapter reset, ipr device driver blocks config space access but
    can't block MMIO access for MSI-X entries.  There is very small window:
    irqbalance daemon kicks in during adapter reset before ipr driver calls
    pci_restore_state(pdev) to restore MSI-X table.
    
    irqbalance daemon reads back all 0 for that MSI-X vector in
    __pci_read_msi_msg().
    
    irqbalance daemon:
    
      msi_domain_set_affinity()
      ->irq_chip_set_affinity_patent()
      ->xive_irq_set_affinity()
      ->irq_chip_compose_msi_msg()
        ->pseries_msi_compose_msg()
        ->__pci_read_msi_msg(): read all 0 since didn't call pci_restore_state
      ->irq_chip_write_msi_msg()
        -> pci_write_msg_msi(): write 0 to the msix vector entry
    
    When ipr driver calls pci_restore_state(pdev) in
    ipr_reset_restore_cfg_space(), the MSI-X vector entry has been cleared
    by irqbalance daemon in pci_write_msg_msix().
    
      pci_restore_state()
      ->__pci_restore_msix_state()
    
    Below is the MSI-X table for ipr adapter after irqbalance daemon kicked
    in during adapter reset:
    
      Dump MSIx table: index=0 address_lo=c800 address_hi=10000000 msg_data=0
      Dump MSIx table: index=1 address_lo=c810 address_hi=10000000 msg_data=0
      Dump MSIx table: index=2 address_lo=c820 address_hi=10000000 msg_data=0
      Dump MSIx table: index=3 address_lo=c830 address_hi=10000000 msg_data=0
      Dump MSIx table: index=4 address_lo=c840 address_hi=10000000 msg_data=0
      Dump MSIx table: index=5 address_lo=c850 address_hi=10000000 msg_data=0
      Dump MSIx table: index=6 address_lo=c860 address_hi=10000000 msg_data=0
      Dump MSIx table: index=7 address_lo=c870 address_hi=10000000 msg_data=0
      Dump MSIx table: index=8 address_lo=0 address_hi=0 msg_data=0
      ---------> Hit EEH since msix vector of index=8 are 0
      Dump MSIx table: index=9 address_lo=c890 address_hi=10000000 msg_data=0
      Dump MSIx table: index=10 address_lo=c8a0 address_hi=10000000 msg_data=0
      Dump MSIx table: index=11 address_lo=c8b0 address_hi=10000000 msg_data=0
      Dump MSIx table: index=12 address_lo=c8c0 address_hi=10000000 msg_data=0
      Dump MSIx table: index=13 address_lo=c8d0 address_hi=10000000 msg_data=0
      Dump MSIx table: index=14 address_lo=c8e0 address_hi=10000000 msg_data=0
      Dump MSIx table: index=15 address_lo=c8f0 address_hi=10000000 msg_data=0
    
      [   46.264312] ipr: Entering ipr_reset_restore_cfg_space
      [   46.267439] ipr: Entering ipr_fail_all_ops
      [   46.267447] ipr: Leaving ipr_fail_all_ops
      [   46.267451] ipr: Leaving ipr_reset_restore_cfg_space
      [   46.267454] ipr: Entering ipr_ioa_bringdown_done
      [   46.267458] ipr: Leaving ipr_ioa_bringdown_done
      [   46.267467] ipr: Entering ipr_worker_thread
      [   46.267470] ipr: Leaving ipr_worker_thread
    
    IRQ balancing is not required during adapter reset.
    
    Enable "IRQ_NO_BALANCING" flag before starting adapter reset and disable
    it after calling pci_restore_state(). The irqbalance daemon is disabled
    for this short period of time (~2s).
    
    Co-developed-by: Kyle Mahlkuch <[email protected]>
    Signed-off-by: Kyle Mahlkuch <[email protected]>
    Signed-off-by: Wen Xiong <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: Revert "scsi: libsas: Fix exp-attached device scan after probe failure scanned in again after probe failed" [+ + +]
Author: Xingui Yang <[email protected]>
Date:   Tue Dec 2 14:56:27 2025 +0800

    scsi: Revert "scsi: libsas: Fix exp-attached device scan after probe failure scanned in again after probe failed"
    
    [ Upstream commit 278712d20bc8ec29d1ad6ef9bdae9000ef2c220c ]
    
    This reverts commit ab2068a6fb84751836a84c26ca72b3beb349619d.
    
    When probing the exp-attached sata device, libsas/libata will issue a
    hard reset in sas_probe_sata() -> ata_sas_async_probe(), then a
    broadcast event will be received after the disk probe fails, and this
    commit causes the probe will be re-executed on the disk, and a faulty
    disk may get into an indefinite loop of probe.
    
    Therefore, revert this commit, although it can fix some temporary issues
    with disk probe failure.
    
    Signed-off-by: Xingui Yang <[email protected]>
    Reviewed-by: Jason Yan <[email protected]>
    Reviewed-by: John Garry <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: sg: Fix occasional bogus elapsed time that exceeds timeout [+ + +]
Author: Michal Rábek <[email protected]>
Date:   Fri Dec 12 17:08:23 2025 +0100

    scsi: sg: Fix occasional bogus elapsed time that exceeds timeout
    
    [ Upstream commit 0e1677654259a2f3ccf728de1edde922a3c4ba57 ]
    
    A race condition was found in sg_proc_debug_helper(). It was observed on
    a system using an IBM LTO-9 SAS Tape Drive (ULTRIUM-TD9) and monitoring
    /proc/scsi/sg/debug every second. A very large elapsed time would
    sometimes appear. This is caused by two race conditions.
    
    We reproduced the issue with an IBM ULTRIUM-HH9 tape drive on an x86_64
    architecture. A patched kernel was built, and the race condition could
    not be observed anymore after the application of this patch. A
    reproducer C program utilising the scsi_debug module was also built by
    Changhui Zhong and can be viewed here:
    
    https://github.com/MichaelRabek/linux-tests/blob/master/drivers/scsi/sg/sg_race_trigger.c
    
    The first race happens between the reading of hp->duration in
    sg_proc_debug_helper() and request completion in sg_rq_end_io().  The
    hp->duration member variable may hold either of two types of
    information:
    
     #1 - The start time of the request. This value is present while
          the request is not yet finished.
    
     #2 - The total execution time of the request (end_time - start_time).
    
    If sg_proc_debug_helper() executes *after* the value of hp->duration was
    changed from #1 to #2, but *before* srp->done is set to 1 in
    sg_rq_end_io(), a fresh timestamp is taken in the else branch, and the
    elapsed time (value type #2) is subtracted from a timestamp, which
    cannot yield a valid elapsed time (which is a type #2 value as well).
    
    To fix this issue, the value of hp->duration must change under the
    protection of the sfp->rq_list_lock in sg_rq_end_io().  Since
    sg_proc_debug_helper() takes this read lock, the change to srp->done and
    srp->header.duration will happen atomically from the perspective of
    sg_proc_debug_helper() and the race condition is thus eliminated.
    
    The second race condition happens between sg_proc_debug_helper() and
    sg_new_write(). Even though hp->duration is set to the current time
    stamp in sg_add_request() under the write lock's protection, it gets
    overwritten by a call to get_sg_io_hdr(), which calls copy_from_user()
    to copy struct sg_io_hdr from userspace into kernel space. hp->duration
    is set to the start time again in sg_common_write(). If
    sg_proc_debug_helper() is called between these two calls, an arbitrary
    value set by userspace (usually zero) is used to compute the elapsed
    time.
    
    To fix this issue, hp->duration must be set to the current timestamp
    again after get_sg_io_hdr() returns successfully. A small race window
    still exists between get_sg_io_hdr() and setting hp->duration, but this
    window is only a few instructions wide and does not result in observable
    issues in practice, as confirmed by testing.
    
    Additionally, we fix the format specifier from %d to %u for printing
    unsigned int values in sg_proc_debug_helper().
    
    Signed-off-by: Michal Rábek <[email protected]>
    Suggested-by: Tomas Henzl <[email protected]>
    Tested-by: Changhui Zhong <[email protected]>
    Reviewed-by: Ewan D. Milne <[email protected]>
    Reviewed-by: John Meneghini <[email protected]>
    Reviewed-by: Tomas Henzl <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: ufs: core: Fix EH failure after W-LUN resume error [+ + +]
Author: Brian Kao <[email protected]>
Date:   Wed Nov 12 06:32:02 2025 +0000

    scsi: ufs: core: Fix EH failure after W-LUN resume error
    
    [ Upstream commit b4bb6daf4ac4d4560044ecdd81e93aa2f6acbb06 ]
    
    When a W-LUN resume fails, its parent devices in the SCSI hierarchy,
    including the scsi_target, may be runtime suspended. Subsequently, the
    error handler in ufshcd_recover_pm_error() fails to set the W-LUN device
    back to active because the parent target is not active.  This results in
    the following errors:
    
      google-ufshcd 3c2d0000.ufs: ufshcd_err_handler started; HBA state eh_fatal; ...
      ufs_device_wlun 0:0:0:49488: START_STOP failed for power mode: 1, result 40000
      ufs_device_wlun 0:0:0:49488: ufshcd_wl_runtime_resume failed: -5
      ...
      ufs_device_wlun 0:0:0:49488: runtime PM trying to activate child device 0:0:0:49488 but parent (target0:0:0) is not active
    
    Address this by:
    
     1. Ensuring the W-LUN's parent scsi_target is runtime resumed before
        attempting to set the W-LUN to active within
        ufshcd_recover_pm_error().
    
     2. Explicitly checking for power.runtime_error on the HBA and W-LUN
        devices before calling pm_runtime_set_active() to clear the error
        state.
    
     3. Adding pm_runtime_get_sync(hba->dev) in
        ufshcd_err_handling_prepare() to ensure the HBA itself is active
        during error recovery, even if a child device resume failed.
    
    These changes ensure the device power states are managed correctly
    during error recovery.
    
    Signed-off-by: Brian Kao <[email protected]>
    Tested-by: Brian Kao <[email protected]>
    Reviewed-by: Bart Van Assche <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
smb/client: fix NT_STATUS_DEVICE_DOOR_OPEN value [+ + +]
Author: ChenXiaoSong <[email protected]>
Date:   Sun Dec 7 09:17:57 2025 +0800

    smb/client: fix NT_STATUS_DEVICE_DOOR_OPEN value
    
    [ Upstream commit b2b50fca34da5ec231008edba798ddf92986bd7f ]
    
    This was reported by the KUnit tests in the later patches.
    
    See MS-ERREF 2.3.1 STATUS_DEVICE_DOOR_OPEN. Keep it consistent with the
    value in the documentation.
    
    Signed-off-by: ChenXiaoSong <[email protected]>
    Acked-by: Paulo Alcantara (Red Hat) <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

smb/client: fix NT_STATUS_NO_DATA_DETECTED value [+ + +]
Author: ChenXiaoSong <[email protected]>
Date:   Sun Dec 7 09:13:06 2025 +0800

    smb/client: fix NT_STATUS_NO_DATA_DETECTED value
    
    [ Upstream commit a1237c203f1757480dc2f3b930608ee00072d3cc ]
    
    This was reported by the KUnit tests in the later patches.
    
    See MS-ERREF 2.3.1 STATUS_NO_DATA_DETECTED. Keep it consistent with the
    value in the documentation.
    
    Signed-off-by: ChenXiaoSong <[email protected]>
    Acked-by: Paulo Alcantara (Red Hat) <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

smb/client: fix NT_STATUS_UNABLE_TO_FREE_VM value [+ + +]
Author: ChenXiaoSong <[email protected]>
Date:   Sun Dec 7 09:22:53 2025 +0800

    smb/client: fix NT_STATUS_UNABLE_TO_FREE_VM value
    
    [ Upstream commit 9f99caa8950a76f560a90074e3a4b93cfa8b3d84 ]
    
    This was reported by the KUnit tests in the later patches.
    
    See MS-ERREF 2.3.1 STATUS_UNABLE_TO_FREE_VM. Keep it consistent with the
    value in the documentation.
    
    Signed-off-by: ChenXiaoSong <[email protected]>
    Acked-by: Paulo Alcantara (Red Hat) <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tls: Use __sk_dst_get() and dst_dev_rcu() in get_netdev_for_sock(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Tue Sep 16 21:47:23 2025 +0000

    tls: Use __sk_dst_get() and dst_dev_rcu() in get_netdev_for_sock().
    
    commit c65f27b9c3be2269918e1cbad6d8884741f835c5 upstream.
    
    get_netdev_for_sock() is called during setsockopt(),
    so not under RCU.
    
    Using sk_dst_get(sk)->dev could trigger UAF.
    
    Let's use __sk_dst_get() and dst_dev_rcu().
    
    Note that the only ->ndo_sk_get_lower_dev() user is
    bond_sk_get_lower_dev(), which uses RCU.
    
    Fixes: e8f69799810c ("net/tls: Add generic NIC offload infrastructure")
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Reviewed-by: Sabrina Dubroca <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ Keerthana: Backport to v6.6.y ]
    Signed-off-by: Keerthana K <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
wifi: avoid kernel-infoleak from struct iw_point [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Jan 8 10:19:27 2026 +0000

    wifi: avoid kernel-infoleak from struct iw_point
    
    commit 21cbf883d073abbfe09e3924466aa5e0449e7261 upstream.
    
    struct iw_point has a 32bit hole on 64bit arches.
    
    struct iw_point {
      void __user   *pointer;       /* Pointer to the data  (in user space) */
      __u16         length;         /* number of fields or size in bytes */
      __u16         flags;          /* Optional params */
    };
    
    Make sure to zero the structure to avoid disclosing 32bits of kernel data
    to user space.
    
    Fixes: 87de87d5e47f ("wext: Dispatch and handle compat ioctls entirely in net/wireless/wext.c")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86/microcode/AMD: Select which microcode patch to load [+ + +]
Author: Borislav Petkov (AMD) <[email protected]>
Date:   Mon Jan 12 12:27:48 2026 +0100

    x86/microcode/AMD: Select which microcode patch to load
    
    Commit 8d171045069c804e5ffaa18be590c42c6af0cf3f upstream.
    
    All microcode patches up to the proper BIOS Entrysign fix are loaded
    only after the sha256 signature carried in the driver has been verified.
    
    Microcode patches after the Entrysign fix has been applied, do not need
    that signature verification anymore.
    
    In order to not abandon machines which haven't received the BIOS update
    yet, add the capability to select which microcode patch to load.
    
    The corresponding microcode container supplied through firmware-linux
    has been modified to carry two patches per CPU type
    (family/model/stepping) so that the proper one gets selected.
    
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Tested-by: Waiman Long <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>