Changelog in Linux kernel 6.6.123

 
ALSA: usb-audio: Fix missing unlock at error path of maxpacksize check [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Wed Nov 26 11:08:31 2025 +0100

    ALSA: usb-audio: Fix missing unlock at error path of maxpacksize check
    
    commit fdf0dc82eb60091772ecea73cbc5a8fb7562fc45 upstream.
    
    The recent backport of the upstream commit 05a1fc5efdd8 ("ALSA:
    usb-audio: Fix potential overflow of PCM transfer buffer") on the
    older stable kernels like 6.12.y was broken since it doesn't consider
    the mutex unlock, where the upstream code manages with guard().
    In the older code, we still need an explicit unlock.
    
    This is a fix that corrects the error path, applied only on old stable
    trees.
    
    Reported-by: Pavel Machek <[email protected]>
    Closes: https://lore.kernel.org/[email protected]
    Fixes: 98e9d5e33bda ("ALSA: usb-audio: Fix potential overflow of PCM transfer buffer")
    Reviewed-by: Pavel Machek <[email protected]>
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Wentao Guan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
arm64/fpsimd: signal: Consistently read FPSIMD context [+ + +]
Author: Mark Rutland <[email protected]>
Date:   Wed Jan 28 15:33:49 2026 -0500

    arm64/fpsimd: signal: Consistently read FPSIMD context
    
    [ Upstream commit be625d803c3bbfa9652697eb57589fe6f2f24b89 ]
    
    For historical reasons, restore_sve_fpsimd_context() has an open-coded
    copy of the logic from read_fpsimd_context(), which is used to either
    restore an FPSIMD-only context, or to merge FPSIMD state into an
    SVE state when restoring an SVE+FPSIMD context. The logic is *almost*
    identical.
    
    Refactor the logic to avoid duplication and make this clearer.
    
    This comes with two functional changes that I do not believe will be
    problematic in practice:
    
    * The user_fpsimd_state::size field will be checked in all restore paths
      that consume it user_fpsimd_state. The kernel always populates this
      field when delivering a signal, and so this should contain the
      expected value unless it has been corrupted.
    
    * If a read of user_fpsimd_state fails, we will return early without
      modifying TIF_SVE, the saved SVCR, or the save fp_type. This will
      leave the task in a consistent state, without potentially resurrecting
      stale FPSIMD state. A read of user_fpsimd_state should never fail
      unless the structure has been corrupted or the stack has been
      unmapped.
    
    Suggested-by: Will Deacon <[email protected]>
    Signed-off-by: Mark Rutland <[email protected]>
    Cc: Catalin Marinas <[email protected]>
    Cc: Marc Zyngier <[email protected]>
    Cc: Mark Brown <[email protected]>
    Cc: Will Deacon <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    [will: Ensure read_fpsimd_context() returns negative error code or zero]
    Signed-off-by: Will Deacon <[email protected]>
    Stable-dep-of: d2907cbe9ea0 ("arm64/fpsimd: signal: Fix restoration of SVE context")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

arm64/fpsimd: signal: Fix restoration of SVE context [+ + +]
Author: Mark Rutland <[email protected]>
Date:   Wed Jan 28 15:33:50 2026 -0500

    arm64/fpsimd: signal: Fix restoration of SVE context
    
    [ Upstream commit d2907cbe9ea0a54cbe078076f9d089240ee1e2d9 ]
    
    When SME is supported, Restoring SVE signal context can go wrong in a
    few ways, including placing the task into an invalid state where the
    kernel may read from out-of-bounds memory (and may potentially take a
    fatal fault) and/or may kill the task with a SIGKILL.
    
    (1) Restoring a context with SVE_SIG_FLAG_SM set can place the task into
        an invalid state where SVCR.SM is set (and sve_state is non-NULL)
        but TIF_SME is clear, consequently resuting in out-of-bounds memory
        reads and/or killing the task with SIGKILL.
    
        This can only occur in unusual (but legitimate) cases where the SVE
        signal context has either been modified by userspace or was saved in
        the context of another task (e.g. as with CRIU), as otherwise the
        presence of an SVE signal context with SVE_SIG_FLAG_SM implies that
        TIF_SME is already set.
    
        While in this state, task_fpsimd_load() will NOT configure SMCR_ELx
        (leaving some arbitrary value configured in hardware) before
        restoring SVCR and attempting to restore the streaming mode SVE
        registers from memory via sve_load_state(). As the value of
        SMCR_ELx.LEN may be larger than the task's streaming SVE vector
        length, this may read memory outside of the task's allocated
        sve_state, reading unrelated data and/or triggering a fault.
    
        While this can result in secrets being loaded into streaming SVE
        registers, these values are never exposed. As TIF_SME is clear,
        fpsimd_bind_task_to_cpu() will configure CPACR_ELx.SMEN to trap EL0
        accesses to streaming mode SVE registers, so these cannot be
        accessed directly at EL0. As fpsimd_save_user_state() verifies the
        live vector length before saving (S)SVE state to memory, no secret
        values can be saved back to memory (and hence cannot be observed via
        ptrace, signals, etc).
    
        When the live vector length doesn't match the expected vector length
        for the task, fpsimd_save_user_state() will send a fatal SIGKILL
        signal to the task. Hence the task may be killed after executing
        userspace for some period of time.
    
    (2) Restoring a context with SVE_SIG_FLAG_SM clear does not clear the
        task's SVCR.SM. If SVCR.SM was set prior to restoring the context,
        then the task will be left in streaming mode unexpectedly, and some
        register state will be combined inconsistently, though the task will
        be left in legitimate state from the kernel's PoV.
    
        This can only occur in unusual (but legitimate) cases where ptrace
        has been used to set SVCR.SM after entry to the sigreturn syscall,
        as syscall entry clears SVCR.SM.
    
        In these cases, the the provided SVE register data will be loaded
        into the task's sve_state using the non-streaming SVE vector length
        and the FPSIMD registers will be merged into this using the
        streaming SVE vector length.
    
    Fix (1) by setting TIF_SME when setting SVCR.SM. This also requires
    ensuring that the task's sme_state has been allocated, but as this could
    contain live ZA state, it should not be zeroed. Fix (2) by clearing
    SVCR.SM when restoring a SVE signal context with SVE_SIG_FLAG_SM clear.
    
    For consistency, I've pulled the manipulation of SVCR, TIF_SVE, TIF_SME,
    and fp_type earlier, immediately after the allocation of
    sve_state/sme_state, before the restore of the actual register state.
    This makes it easier to ensure that these are always modified
    consistently, even if a fault is taken while reading the register data
    from the signal context. I do not expect any software to depend on the
    exact state restored when a fault is taken while reading the context.
    
    Fixes: 85ed24dad290 ("arm64/sme: Implement streaming SVE signal handling")
    Signed-off-by: Mark Rutland <[email protected]>
    Cc: <[email protected]>
    Cc: Mark Brown <[email protected]>
    Cc: Will Deacon <[email protected]>
    Reviewed-by: Mark Brown <[email protected]>
    Signed-off-by: Catalin Marinas <[email protected]>
    [ preserved fpsimd_flush_task_state() call before new SME allocation logic ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

arm64/fpsimd: signal: Mandate SVE payload for streaming-mode state [+ + +]
Author: Mark Rutland <[email protected]>
Date:   Wed Jan 28 15:33:48 2026 -0500

    arm64/fpsimd: signal: Mandate SVE payload for streaming-mode state
    
    [ Upstream commit b465ace42620970e840c7aeb2c44a6e3b1002fec ]
    
    Non-streaming SVE state may be preserved without an SVE payload, in
    which case the SVE context only has a header with VL==0, and all state
    can be restored from the FPSIMD context. Streaming SVE state is always
    preserved with an SVE payload, where the SVE context header has VL!=0,
    and the SVE_SIG_FLAG_SM flag is set.
    
    The kernel never preserves an SVE context where SVE_SIG_FLAG_SM is set
    without an SVE payload. However, restore_sve_fpsimd_context() doesn't
    forbid restoring such a context, and will handle this case by clearing
    PSTATE.SM and restoring the FPSIMD context into non-streaming mode,
    which isn't consistent with the SVE_SIG_FLAG_SM flag.
    
    Forbid this case, and mandate an SVE payload when the SVE_SIG_FLAG_SM
    flag is set. This avoids an awkward ABI quirk and reduces the risk that
    later rework to this code permits configuring a task with PSTATE.SM==1
    and fp_type==FP_STATE_FPSIMD.
    
    I've marked this as a fix given that we never intended to support this
    case, and we don't want anyone to start relying upon the old behaviour
    once we re-enable SME.
    
    Fixes: 85ed24dad290 ("arm64/sme: Implement streaming SVE signal handling")
    Signed-off-by: Mark Rutland <[email protected]>
    Cc: Catalin Marinas <[email protected]>
    Cc: Marc Zyngier <[email protected]>
    Cc: Mark Brown <[email protected]>
    Cc: Will Deacon <[email protected]>
    Reviewed-by: Mark Brown <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Will Deacon <[email protected]>
    Stable-dep-of: d2907cbe9ea0 ("arm64/fpsimd: signal: Fix restoration of SVE context")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ASoC: amd: yc: Add DMI quirk for Acer TravelMate P216-41-TCO [+ + +]
Author: Zhang Heng <[email protected]>
Date:   Mon Jan 26 09:49:52 2026 +0800

    ASoC: amd: yc: Add DMI quirk for Acer TravelMate P216-41-TCO
    
    commit 9502b7df5a3c7e174f74f20324ac1fe781fc5c2d upstream.
    
    Add a DMI quirk for the Acer TravelMate P216-41-TCO fixing the
    issue where the internal microphone was not detected.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=220983
    Cc: [email protected]
    Signed-off-by: Zhang Heng <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: fsl: imx-card: Do not force slot width to sample width [+ + +]
Author: Fabio Estevam <[email protected]>
Date:   Sun Jan 18 17:50:30 2026 -0300

    ASoC: fsl: imx-card: Do not force slot width to sample width
    
    commit 9210f5ff6318163835d9e42ee68006be4da0f531 upstream.
    
    imx-card currently sets the slot width to the physical sample width
    for I2S links. This breaks controllers that use fixed-width slots
    (e.g. 32-bit FIFO words), causing the unused bits in the slot to
    contain undefined data when playing 16-bit streams.
    
    Do not override the slot width in the machine driver and let the CPU
    DAI select an appropriate default instead. This matches the behavior
    of simple-audio-card and avoids embedding controller-specific policy
    in the machine driver.
    
    On an i.MX8MP-based board using SAI as the I2S master with 32-bit slots,
    playing 16-bit audio resulted in spurious frequencies and an incorrect
    SAI data waveform, as the slot width was forced to 16 bits. After this
    change, audio artifacts are eliminated and the 16-bit samples correctly
    occupy the first half of the 32-bit slot, with the remaining bits padded
    with zeroes.
    
    Cc: [email protected]
    Fixes: aa736700f42f ("ASoC: imx-card: Add imx-card machine driver")
    Signed-off-by: Fabio Estevam <[email protected]>
    Acked-by: Shengjiu Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: Intel: sof_es8336: fix headphone GPIO logic inversion [+ + +]
Author: Tagir Garaev <[email protected]>
Date:   Wed Jan 21 18:24:35 2026 +0300

    ASoC: Intel: sof_es8336: fix headphone GPIO logic inversion
    
    [ Upstream commit 213c4e51267fd825cd21a08a055450cac7e0b7fb ]
    
    The headphone GPIO should be set to the inverse of speaker_en.
    When speakers are enabled, headphones should be disabled and vice versa.
    
    Currently both GPIOs are set to the same value (speaker_en), causing
    audio to play through both speakers and headphones simultaneously
    when headphones are plugged in.
    
    Tested on Huawei Matebook (BOD-WXX9) with ES8336 codec.
    
    Fixes: 6e1ff1459e00 ("ASoC: Intel: sof_es8336: support a separate gpio to control headphone")
    Signed-off-by: Tagir Garaev <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Bluetooth: hci_uart: fix null-ptr-deref in hci_uart_write_work [+ + +]
Author: Jia-Hong Su <[email protected]>
Date:   Sun Jan 18 20:08:59 2026 +0800

    Bluetooth: hci_uart: fix null-ptr-deref in hci_uart_write_work
    
    [ Upstream commit 0c3cd7a0b862c37acbee6d9502107146cc944398 ]
    
    hci_uart_set_proto() sets HCI_UART_PROTO_INIT before calling
    hci_uart_register_dev(), which calls proto->open() to initialize
    hu->priv. However, if a TTY write wakeup occurs during this window,
    hci_uart_tx_wakeup() may schedule write_work before hu->priv is
    initialized, leading to a NULL pointer dereference in
    hci_uart_write_work() when proto->dequeue() accesses hu->priv.
    
    The race condition is:
    
      CPU0                              CPU1
      ----                              ----
      hci_uart_set_proto()
        set_bit(HCI_UART_PROTO_INIT)
        hci_uart_register_dev()
                                        tty write wakeup
                                          hci_uart_tty_wakeup()
                                            hci_uart_tx_wakeup()
                                              schedule_work(&hu->write_work)
          proto->open(hu)
            // initializes hu->priv
                                        hci_uart_write_work()
                                          hci_uart_dequeue()
                                            proto->dequeue(hu)
                                              // accesses hu->priv (NULL!)
    
    Fix this by moving set_bit(HCI_UART_PROTO_INIT) after proto->open()
    succeeds, ensuring hu->priv is initialized before any work can be
    scheduled.
    
    Fixes: 5df5dafc171b ("Bluetooth: hci_uart: Fix another race during initialization")
    Link: https://lore.kernel.org/linux-bluetooth/[email protected]/
    
    Signed-off-by: Jia-Hong Su <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
 
bonding: annotate data-races around slave->last_rx [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Jan 22 16:29:14 2026 +0000

    bonding: annotate data-races around slave->last_rx
    
    [ Upstream commit f6c3665b6dc53c3ab7d31b585446a953a74340ef ]
    
    slave->last_rx and slave->target_last_arp_rx[...] can be read and written
    locklessly. Add READ_ONCE() and WRITE_ONCE() annotations.
    
    syzbot reported:
    
    BUG: KCSAN: data-race in bond_rcv_validate / bond_rcv_validate
    
    write to 0xffff888149f0d428 of 8 bytes by interrupt on cpu 1:
      bond_rcv_validate+0x202/0x7a0 drivers/net/bonding/bond_main.c:3335
      bond_handle_frame+0xde/0x5e0 drivers/net/bonding/bond_main.c:1533
      __netif_receive_skb_core+0x5b1/0x1950 net/core/dev.c:6039
      __netif_receive_skb_one_core net/core/dev.c:6150 [inline]
      __netif_receive_skb+0x59/0x270 net/core/dev.c:6265
      netif_receive_skb_internal net/core/dev.c:6351 [inline]
      netif_receive_skb+0x4b/0x2d0 net/core/dev.c:6410
    ...
    
    write to 0xffff888149f0d428 of 8 bytes by interrupt on cpu 0:
      bond_rcv_validate+0x202/0x7a0 drivers/net/bonding/bond_main.c:3335
      bond_handle_frame+0xde/0x5e0 drivers/net/bonding/bond_main.c:1533
      __netif_receive_skb_core+0x5b1/0x1950 net/core/dev.c:6039
      __netif_receive_skb_one_core net/core/dev.c:6150 [inline]
      __netif_receive_skb+0x59/0x270 net/core/dev.c:6265
      netif_receive_skb_internal net/core/dev.c:6351 [inline]
      netif_receive_skb+0x4b/0x2d0 net/core/dev.c:6410
      br_netif_receive_skb net/bridge/br_input.c:30 [inline]
      NF_HOOK include/linux/netfilter.h:318 [inline]
    ...
    
    value changed: 0x0000000100005365 -> 0x0000000100005366
    
    Fixes: f5b2b966f032 ("[PATCH] bonding: Validate probe replies in ARP monitor")
    Signed-off-by: Eric Dumazet <[email protected]>
    Reported-by: syzbot <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf/selftests: test_select_reuseport_kern: Remove unused header [+ + +]
Author: Alexis Lothoré (eBPF Foundation) <[email protected]>
Date:   Thu Feb 27 15:08:23 2025 +0100

    bpf/selftests: test_select_reuseport_kern: Remove unused header
    
    commit 93cf4e537ed0c5bd9ba6cbdb2c33864547c1442f upstream.
    
    test_select_reuseport_kern.c is currently including <stdlib.h>, but it
    does not use any definition from there.
    
    Remove stdlib.h inclusion from test_select_reuseport_kern.c
    
    Signed-off-by: Alexis Lothoré (eBPF Foundation) <[email protected]>
    Signed-off-by: Martin KaFai Lau <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    [shung-hsi.yu: Fix compilation error mentioned in footer of Alexis'
    patch with newer glibc header:
    
      [...]
        CLNG-BPF [test_progs-cpuv4] test_select_reuseport_kern.bpf.o
      In file included from progs/test_select_reuseport_kern.c:4:
      /usr/include/bits/floatn.h:83:52: error: unsupported machine mode
      '__TC__'
         83 | typedef _Complex float __cfloat128 __attribute__ ((__mode__
      (__TC__)));
            |                                                    ^
      /usr/include/bits/floatn.h:97:9: error: __float128 is not supported on
      this target
         97 | typedef __float128 _Float128;
    
    I'm not certain when the problem starts to occur, but I'm quite sure
    test_select_reuseport_kern.c were not meant to be using the C standard
    library in the first place.]
    Signed-off-by: Shung-Hsi Yu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
btrfs: prevent use-after-free on page private data in btrfs_subpage_clear_uptodate() [+ + +]
Author: JP Kobryn <[email protected]>
Date:   Sat Jan 31 23:09:53 2026 -0800

    btrfs: prevent use-after-free on page private data in btrfs_subpage_clear_uptodate()
    
    This is a stable-only patch. The issue was inadvertently fixed in 6.17 [0]
    as part of a refactoring, but this patch serves as a minimal targeted fix
    for prior kernels.
    
    Users of find_lock_page() need to guard against the situation where
    releasepage() has been invoked during reclaim but the page was ultimately
    not removed from the page cache. This patch covers one location that was
    overlooked.
    
    After acquiring the page, use set_page_extent_mapped() to ensure the page
    private state is valid. This is especially important in the subpage case,
    where the private field is an allocated struct containing bitmap and lock
    data.
    
    Without this protection, the race below is possible:
    
    [mm] page cache reclaim path        [fs] relocation in subpage mode
    shrink_page_list()
      trylock_page() /* lock acquired */
      try_to_release_page()
        mapping->a_ops->releasepage()
          btrfs_releasepage()
            __btrfs_releasepage()
              clear_page_extent_mapped()
                btrfs_detach_subpage()
                  subpage = detach_page_private(page)
                  btrfs_free_subpage(subpage)
                    kfree(subpage) /* point A */
                                            prealloc_file_extent_cluster()
                                              find_lock_page()
                                                page_cache_get_speculative()
                                                lock_page() /* wait for lock */
      if (...)
        ...
      else if (!mapping || !__remove_mapping(..))
        /*
         * __remove_mapping() returns zero when
         * page_ref_freeze(page, refcount) fails /* point B */
         */
        goto keep_locked /* page remains in cache */
    keep_locked:
      unlock_page(page) /* lock released */
                                            /* lock acquired */
                                            btrfs_subpage_clear_uptodate()
                                              /* use-after-free */
                                              subpage = page->private
    [0] 4e346baee95f ("btrfs: reloc: unconditionally invalidate the page cache for each cluster")
    
    Fixes: 9d9ea1e68a05 ("btrfs: subpage: fix relocation potentially overwriting last page data")
    Cc: [email protected] # 5.15 - 6.9
    Signed-off-by: JP Kobryn <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
can: gs_usb: gs_usb_receive_bulk_callback(): fix error message [+ + +]
Author: Marc Kleine-Budde <[email protected]>
Date:   Tue Jan 20 10:40:22 2026 +0100

    can: gs_usb: gs_usb_receive_bulk_callback(): fix error message
    
    [ Upstream commit 494fc029f662c331e06b7c2031deff3c64200eed ]
    
    Sinc commit 79a6d1bfe114 ("can: gs_usb: gs_usb_receive_bulk_callback():
    unanchor URL on usb_submit_urb() error") a failing resubmit URB will print
    an info message.
    
    In the case of a short read where netdev has not yet been assigned,
    initialize as NULL to avoid dereferencing an undefined value. Also report
    the error value of the failed resubmit.
    
    Fixes: 79a6d1bfe114 ("can: gs_usb: gs_usb_receive_bulk_callback(): unanchor URL on usb_submit_urb() error")
    Reported-by: Jakub Kicinski <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Link: https://patch.msgid.link/20260120-gs_usb-fix-error-message-v1-1-6be04de572bc@pengutronix.de
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dma/pool: distinguish between missing and exhausted atomic pools [+ + +]
Author: Sai Sree Kartheek Adivi <[email protected]>
Date:   Wed Jan 28 19:05:54 2026 +0530

    dma/pool: distinguish between missing and exhausted atomic pools
    
    [ Upstream commit 56c430c7f06d838fe3b2077dbbc4cc0bf992312b ]
    
    Currently, dma_alloc_from_pool() unconditionally warns and dumps a stack
    trace when an allocation fails, with the message "Failed to get suitable
    pool".
    
    This conflates two distinct failure modes:
    1. Configuration error: No atomic pool is available for the requested
       DMA mask (a fundamental system setup issue)
    2. Resource Exhaustion: A suitable pool exists but is currently full (a
       recoverable runtime state)
    
    This lack of distinction prevents drivers from using __GFP_NOWARN to
    suppress error messages during temporary pressure spikes, such as when
    awaiting synchronous reclaim of descriptors.
    
    Refactor the error handling to distinguish these cases:
    - If no suitable pool is found, keep the unconditional WARN regarding
      the missing pool.
    - If a pool was found but is exhausted, respect __GFP_NOWARN and update
      the warning message to explicitly state "DMA pool exhausted".
    
    Fixes: 9420139f516d ("dma-pool: fix coherent pool allocations for IOMMU mappings")
    Signed-off-by: Sai Sree Kartheek Adivi <[email protected]>
    Reviewed-by: Robin Murphy <[email protected]>
    Signed-off-by: Marek Szyprowski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amd/display: use udelay rather than fsleep [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Wed Feb 4 20:43:45 2026 +0800

    drm/amd/display: use udelay rather than fsleep
    
    commit 27e4dc2c0543fd1808cc52bd888ee1e0533c4a2e upstream.
    
    This function can be called from an atomic context so we can't use
    fsleep().
    
    Fixes: 01f60348d8fb ("drm/amd/display: Fix 'failed to blank crtc!'")
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4549
    Cc: Wen Chen <[email protected]>
    Cc: Fangzhi Zuo <[email protected]>
    Cc: Nicholas Kazlauskas <[email protected]>
    Cc: Harry Wentland <[email protected]>
    Reviewed-by: Harry Wentland <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    [ Backport for file path changed ]
    Signed-off-by: Wentao Guan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdgpu/gfx10: fix wptr reset in KGQ init [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Wed Jan 28 20:51:08 2026 -0500

    drm/amdgpu/gfx10: fix wptr reset in KGQ init
    
    commit cc4f433b14e05eaa4a98fd677b836e9229422387 upstream.
    
    wptr is a 64 bit value and we need to update the
    full value, not just 32 bits. Align with what we
    already do for KCQs.
    
    Reviewed-by: Timur Kristóf <[email protected]>
    Reviewed-by: Jesse Zhang <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit e80b1d1aa1073230b6c25a1a72e88f37e425ccda)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdgpu/gfx11: fix wptr reset in KGQ init [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Wed Jan 28 18:09:03 2026 -0500

    drm/amdgpu/gfx11: fix wptr reset in KGQ init
    
    commit b1f810471c6a6bd349f7f9f2f2fed96082056d46 upstream.
    
    wptr is a 64 bit value and we need to update the
    full value, not just 32 bits. Align with what we
    already do for KCQs.
    
    Reviewed-by: Timur Kristóf <[email protected]>
    Reviewed-by: Jesse Zhang <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 1f16866bdb1daed7a80ca79ae2837a9832a74fbc)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdgpu/soc21: fix xclk for APUs [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Fri Jan 16 17:33:05 2026 -0500

    drm/amdgpu/soc21: fix xclk for APUs
    
    commit e7fbff9e7622a00c2b53cb14df481916f0019742 upstream.
    
    The reference clock is supposed to be 100Mhz, but it
    appears to actually be slightly lower (99.81Mhz).
    
    Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/14451
    Reviewed-by: Jesse Zhang <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 637fee3954d4bd509ea9d95ad1780fc174489860)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdgpu: fix NULL pointer dereference in amdgpu_gmc_filter_faults_remove [+ + +]
Author: Jon Doron <[email protected]>
Date:   Tue Feb 3 19:26:45 2026 -0500

    drm/amdgpu: fix NULL pointer dereference in amdgpu_gmc_filter_faults_remove
    
    [ Upstream commit 8b1ecc9377bc641533cd9e76dfa3aee3cd04a007 ]
    
    On APUs such as Raven and Renoir (GC 9.1.0, 9.2.2, 9.3.0), the ih1 and
    ih2 interrupt ring buffers are not initialized. This is by design, as
    these secondary IH rings are only available on discrete GPUs. See
    vega10_ih_sw_init() which explicitly skips ih1/ih2 initialization when
    AMD_IS_APU is set.
    
    However, amdgpu_gmc_filter_faults_remove() unconditionally uses ih1 to
    get the timestamp of the last interrupt entry. When retry faults are
    enabled on APUs (noretry=0), this function is called from the SVM page
    fault recovery path, resulting in a NULL pointer dereference when
    amdgpu_ih_decode_iv_ts_helper() attempts to access ih->ring[].
    
    The crash manifests as:
    
      BUG: kernel NULL pointer dereference, address: 0000000000000004
      RIP: 0010:amdgpu_ih_decode_iv_ts_helper+0x22/0x40 [amdgpu]
      Call Trace:
       amdgpu_gmc_filter_faults_remove+0x60/0x130 [amdgpu]
       svm_range_restore_pages+0xae5/0x11c0 [amdgpu]
       amdgpu_vm_handle_fault+0xc8/0x340 [amdgpu]
       gmc_v9_0_process_interrupt+0x191/0x220 [amdgpu]
       amdgpu_irq_dispatch+0xed/0x2c0 [amdgpu]
       amdgpu_ih_process+0x84/0x100 [amdgpu]
    
    This issue was exposed by commit 1446226d32a4 ("drm/amdgpu: Remove GC HW
    IP 9.3.0 from noretry=1") which changed the default for Renoir APU from
    noretry=1 to noretry=0, enabling retry fault handling and thus
    exercising the buggy code path.
    
    Fix this by adding a check for ih1.ring_size before attempting to use
    it. Also restore the soft_ih support from commit dd299441654f ("drm/amdgpu:
    Rework retry fault removal").  This is needed if the hardware doesn't
    support secondary HW IH rings.
    
    v2: additional updates (Alex)
    
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3814
    Fixes: dd299441654f ("drm/amdgpu: Rework retry fault removal")
    Reviewed-by: Timur Kristóf <[email protected]>
    Reviewed-by: Philip Yang <[email protected]>
    Signed-off-by: Jon Doron <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 6ce8d536c80aa1f059e82184f0d1994436b1d526)
    Cc: [email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amdgpu: Replace Mutex with Spinlock for RLCG register access to avoid Priority Inversion in SRIOV [+ + +]
Author: Srinivasan Shanmugam <[email protected]>
Date:   Thu Jan 29 17:13:25 2026 +0800

    drm/amdgpu: Replace Mutex with Spinlock for RLCG register access to avoid Priority Inversion in SRIOV
    
    [ Upstream commit dc0297f3198bd60108ccbd167ee5d9fa4af31ed0 ]
    
    RLCG Register Access is a way for virtual functions to safely access GPU
    registers in a virtualized environment., including TLB flushes and
    register reads. When multiple threads or VFs try to access the same
    registers simultaneously, it can lead to race conditions. By using the
    RLCG interface, the driver can serialize access to the registers. This
    means that only one thread can access the registers at a time,
    preventing conflicts and ensuring that operations are performed
    correctly. Additionally, when a low-priority task holds a mutex that a
    high-priority task needs, ie., If a thread holding a spinlock tries to
    acquire a mutex, it can lead to priority inversion. register access in
    amdgpu_virt_rlcg_reg_rw especially in a fast code path is critical.
    
    The call stack shows that the function amdgpu_virt_rlcg_reg_rw is being
    called, which attempts to acquire the mutex. This function is invoked
    from amdgpu_sriov_wreg, which in turn is called from
    gmc_v11_0_flush_gpu_tlb.
    
    The [ BUG: Invalid wait context ] indicates that a thread is trying to
    acquire a mutex while it is in a context that does not allow it to sleep
    (like holding a spinlock).
    
    Fixes the below:
    
    [  253.013423] =============================
    [  253.013434] [ BUG: Invalid wait context ]
    [  253.013446] 6.12.0-amdstaging-drm-next-lol-050225 #14 Tainted: G     U     OE
    [  253.013464] -----------------------------
    [  253.013475] kworker/0:1/10 is trying to lock:
    [  253.013487] ffff9f30542e3cf8 (&adev->virt.rlcg_reg_lock){+.+.}-{3:3}, at: amdgpu_virt_rlcg_reg_rw+0xf6/0x330 [amdgpu]
    [  253.013815] other info that might help us debug this:
    [  253.013827] context-{4:4}
    [  253.013835] 3 locks held by kworker/0:1/10:
    [  253.013847]  #0: ffff9f3040050f58 ((wq_completion)events){+.+.}-{0:0}, at: process_one_work+0x3f5/0x680
    [  253.013877]  #1: ffffb789c008be40 ((work_completion)(&wfc.work)){+.+.}-{0:0}, at: process_one_work+0x1d6/0x680
    [  253.013905]  #2: ffff9f3054281838 (&adev->gmc.invalidate_lock){+.+.}-{2:2}, at: gmc_v11_0_flush_gpu_tlb+0x198/0x4f0 [amdgpu]
    [  253.014154] stack backtrace:
    [  253.014164] CPU: 0 UID: 0 PID: 10 Comm: kworker/0:1 Tainted: G     U     OE      6.12.0-amdstaging-drm-next-lol-050225 #14
    [  253.014189] Tainted: [U]=USER, [O]=OOT_MODULE, [E]=UNSIGNED_MODULE
    [  253.014203] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS Hyper-V UEFI Release v4.1 11/18/2024
    [  253.014224] Workqueue: events work_for_cpu_fn
    [  253.014241] Call Trace:
    [  253.014250]  <TASK>
    [  253.014260]  dump_stack_lvl+0x9b/0xf0
    [  253.014275]  dump_stack+0x10/0x20
    [  253.014287]  __lock_acquire+0xa47/0x2810
    [  253.014303]  ? srso_alias_return_thunk+0x5/0xfbef5
    [  253.014321]  lock_acquire+0xd1/0x300
    [  253.014333]  ? amdgpu_virt_rlcg_reg_rw+0xf6/0x330 [amdgpu]
    [  253.014562]  ? __lock_acquire+0xa6b/0x2810
    [  253.014578]  __mutex_lock+0x85/0xe20
    [  253.014591]  ? amdgpu_virt_rlcg_reg_rw+0xf6/0x330 [amdgpu]
    [  253.014782]  ? sched_clock_noinstr+0x9/0x10
    [  253.014795]  ? srso_alias_return_thunk+0x5/0xfbef5
    [  253.014808]  ? local_clock_noinstr+0xe/0xc0
    [  253.014822]  ? amdgpu_virt_rlcg_reg_rw+0xf6/0x330 [amdgpu]
    [  253.015012]  ? srso_alias_return_thunk+0x5/0xfbef5
    [  253.015029]  mutex_lock_nested+0x1b/0x30
    [  253.015044]  ? mutex_lock_nested+0x1b/0x30
    [  253.015057]  amdgpu_virt_rlcg_reg_rw+0xf6/0x330 [amdgpu]
    [  253.015249]  amdgpu_sriov_wreg+0xc5/0xd0 [amdgpu]
    [  253.015435]  gmc_v11_0_flush_gpu_tlb+0x44b/0x4f0 [amdgpu]
    [  253.015667]  gfx_v11_0_hw_init+0x499/0x29c0 [amdgpu]
    [  253.015901]  ? __pfx_smu_v13_0_update_pcie_parameters+0x10/0x10 [amdgpu]
    [  253.016159]  ? srso_alias_return_thunk+0x5/0xfbef5
    [  253.016173]  ? smu_hw_init+0x18d/0x300 [amdgpu]
    [  253.016403]  amdgpu_device_init+0x29ad/0x36a0 [amdgpu]
    [  253.016614]  amdgpu_driver_load_kms+0x1a/0xc0 [amdgpu]
    [  253.017057]  amdgpu_pci_probe+0x1c2/0x660 [amdgpu]
    [  253.017493]  local_pci_probe+0x4b/0xb0
    [  253.017746]  work_for_cpu_fn+0x1a/0x30
    [  253.017995]  process_one_work+0x21e/0x680
    [  253.018248]  worker_thread+0x190/0x330
    [  253.018500]  ? __pfx_worker_thread+0x10/0x10
    [  253.018746]  kthread+0xe7/0x120
    [  253.018988]  ? __pfx_kthread+0x10/0x10
    [  253.019231]  ret_from_fork+0x3c/0x60
    [  253.019468]  ? __pfx_kthread+0x10/0x10
    [  253.019701]  ret_from_fork_asm+0x1a/0x30
    [  253.019939]  </TASK>
    
    v2: s/spin_trylock/spin_lock_irqsave to be safe (Christian).
    
    Fixes: e864180ee49b ("drm/amdgpu: Add lock around VF RLCG interface")
    Cc: lin cao <[email protected]>
    Cc: Jingwen Chen <[email protected]>
    Cc: Victor Skvortsov <[email protected]>
    Cc: Zhigang Luo <[email protected]>
    Cc: Christian König <[email protected]>
    Cc: Alex Deucher <[email protected]>
    Signed-off-by: Srinivasan Shanmugam <[email protected]>
    Suggested-by: Alex Deucher <[email protected]>
    Reviewed-by: Christian König <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    [ Minor conflict resolved. ]
    Signed-off-by: Li hongliang <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdkfd: Don't use sw fault filter if retry cam enabled [+ + +]
Author: Philip Yang <[email protected]>
Date:   Tue Feb 3 19:26:44 2026 -0500

    drm/amdkfd: Don't use sw fault filter if retry cam enabled
    
    [ Upstream commit e61801f162ddcf8874c820639483ec4849b0fb0b ]
    
    If retry cam enabled, we don't use sw retry fault filter and add fault
    into sw filter ring, so we shouldn't remove fault from sw filter.
    
    Signed-off-by: Philip Yang <[email protected]>
    Reviewed-by: Christian König <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Stable-dep-of: 8b1ecc9377bc ("drm/amdgpu: fix NULL pointer dereference in amdgpu_gmc_filter_faults_remove")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/imx/tve: fix probe device leak [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Thu Oct 30 17:34:56 2025 +0100

    drm/imx/tve: fix probe device leak
    
    commit e535c23513c63f02f67e3e09e0787907029efeaf upstream.
    
    Make sure to drop the reference taken to the DDC device during probe on
    probe failure (e.g. probe deferral) and on driver unbind.
    
    Fixes: fcbc51e54d2a ("staging: drm/imx: Add support for Television Encoder (TVEv2)")
    Cc: [email protected]      # 3.10
    Cc: Philipp Zabel <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Maxime Ripard <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/msm/a6xx: fix bogus hwcg register updates [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Tue Feb 3 16:17:52 2026 -0500

    drm/msm/a6xx: fix bogus hwcg register updates
    
    [ Upstream commit dedb897f11c5d7e32c0e0a0eff7cec23a8047167 ]
    
    The hw clock gating register sequence consists of register value pairs
    that are written to the GPU during initialisation.
    
    The a690 hwcg sequence has two GMU registers in it that used to amount
    to random writes in the GPU mapping, but since commit 188db3d7fe66
    ("drm/msm/a6xx: Rebase GMU register offsets") they trigger a fault as
    the updated offsets now lie outside the mapping. This in turn breaks
    boot of machines like the Lenovo ThinkPad X13s.
    
    Note that the updates of these GMU registers is already taken care of
    properly since commit 40c297eb245b ("drm/msm/a6xx: Set GMU CGC
    properties on a6xx too"), but for some reason these two entries were
    left in the table.
    
    Fixes: 5e7665b5e484 ("drm/msm/adreno: Add Adreno A690 support")
    Cc: [email protected]      # 6.5
    Cc: Bjorn Andersson <[email protected]>
    Cc: Konrad Dybcio <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Reviewed-by: Akhil P Oommen <[email protected]>
    Fixes: 188db3d7fe66 ("drm/msm/a6xx: Rebase GMU register offsets")
    Patchwork: https://patchwork.freedesktop.org/patch/695778/
    Message-ID: <[email protected]>
    Signed-off-by: Rob Clark <[email protected]>
    (cherry picked from commit dcbd2f8280eea2c965453ed8c3c69d6f121e950b)
    [ Applied fix to a6xx_gpu.c instead of a6xx_catalog.c ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/radeon: delete radeon_fence_process in is_signaled, no deadlock [+ + +]
Author: Robert McClinton <[email protected]>
Date:   Mon Feb 2 15:58:31 2026 +0800

    drm/radeon: delete radeon_fence_process in is_signaled, no deadlock
    
    [ Upstream commit 9eb00b5f5697bd56baa3222c7a1426fa15bacfb5 ]
    
    Delete the attempt to progress the queue when checking if fence is
    signaled. This avoids deadlock.
    
    dma-fence_ops::signaled can be called with the fence lock in unknown
    state. For radeon, the fence lock is also the wait queue lock. This can
    cause a self deadlock when signaled() tries to make forward progress on
    the wait queue. But advancing the queue is unneeded because incorrectly
    returning false from signaled() is perfectly acceptable.
    
    Link: https://github.com/brave/brave-browser/issues/49182
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4641
    Cc: Alex Deucher <[email protected]>
    Signed-off-by: Robert McClinton <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 527ba26e50ec2ca2be9c7c82f3ad42998a75d0db)
    Cc: [email protected]
    [ Minor conflict resolved. ]
    Signed-off-by: Li hongliang <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
efivarfs: fix error propagation in efivar_entry_get() [+ + +]
Author: Kohei Enju <[email protected]>
Date:   Sat Jan 17 16:00:45 2026 +0000

    efivarfs: fix error propagation in efivar_entry_get()
    
    commit 4b22ec1685ce1fc0d862dcda3225d852fb107995 upstream.
    
    efivar_entry_get() always returns success even if the underlying
    __efivar_entry_get() fails, masking errors.
    
    This may result in uninitialized heap memory being copied to userspace
    in the efivarfs_file_read() path.
    
    Fix it by returning the error from __efivar_entry_get().
    
    Fixes: 2d82e6227ea1 ("efi: vars: Move efivar caching layer into efivarfs")
    Cc: <[email protected]> # v6.1+
    Signed-off-by: Kohei Enju <[email protected]>
    Signed-off-by: Ard Biesheuvel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
flex_proportions: make fprop_new_period() hardirq safe [+ + +]
Author: Jan Kara <[email protected]>
Date:   Wed Jan 21 12:27:30 2026 +0100

    flex_proportions: make fprop_new_period() hardirq safe
    
    commit dd9e2f5b38f1fdd49b1ab6d3a85f81c14369eacc upstream.
    
    Bernd has reported a lockdep splat from flexible proportions code that is
    essentially complaining about the following race:
    
    <timer fires>
    run_timer_softirq - we are in softirq context
      call_timer_fn
        writeout_period
          fprop_new_period
            write_seqcount_begin(&p->sequence);
    
            <hardirq is raised>
            ...
            blk_mq_end_request()
              blk_update_request()
                ext4_end_bio()
                  folio_end_writeback()
                    __wb_writeout_add()
                      __fprop_add_percpu_max()
                        if (unlikely(max_frac < FPROP_FRAC_BASE)) {
                          fprop_fraction_percpu()
                            seq = read_seqcount_begin(&p->sequence);
                              - sees odd sequence so loops indefinitely
    
    Note that a deadlock like this is only possible if the bdi has configured
    maximum fraction of writeout throughput which is very rare in general but
    frequent for example for FUSE bdis.  To fix this problem we have to make
    sure write section of the sequence counter is irqsafe.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: a91befde3503 ("lib/flex_proportions.c: remove local_irq_ops in fprop_new_period()")
    Signed-off-by: Jan Kara <[email protected]>
    Reported-by: Bernd Schubert <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]/
    Reviewed-by: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Joanne Koong <[email protected]>
    Cc: Miklos Szeredi <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
gpio: pca953x: mask interrupts in irq shutdown [+ + +]
Author: Martin Larsson <[email protected]>
Date:   Wed Jan 21 12:57:22 2026 +0000

    gpio: pca953x: mask interrupts in irq shutdown
    
    commit d02f20a4de0c498fbba2b0e3c1496e72c630a91e upstream.
    
    In the existing implementation irq_shutdown does not mask the interrupts
    in hardware. This can cause spurious interrupts from the IO expander.
    Add masking to irq_shutdown to prevent spurious interrupts.
    
    Cc: [email protected]
    Signed-off-by: Martin Larsson <[email protected]>
    Reviewed-by: Linus Walleij <[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]>

gpio: rockchip: Stop calling pinctrl for set_direction [+ + +]
Author: Robin Murphy <[email protected]>
Date:   Mon Jan 26 12:12:26 2026 +0000

    gpio: rockchip: Stop calling pinctrl for set_direction
    
    commit 7ca497be00163610afb663867db24ac408752f13 upstream.
    
    Marking the whole controller as sleeping due to the pinctrl calls in the
    .direction_{input,output} callbacks has the unfortunate side effect that
    legitimate invocations of .get and .set, which cannot themselves sleep,
    in atomic context now spew WARN()s from gpiolib.
    
    However, as Heiko points out, the driver doing this is a bit silly to
    begin with, as the pinctrl .gpio_set_direction hook doesn't even care
    about the direction, the hook is only used to claim the mux. And sure
    enough, the .gpio_request_enable hook exists to serve this very purpose,
    so switch to that and remove the problematic business entirely.
    
    Cc: [email protected]
    Fixes: 20cf2aed89ac ("gpio: rockchip: mark the GPIO controller as sleeping")
    Suggested-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Robin Murphy <[email protected]>
    Reviewed-by: Heiko Stuebner <[email protected]>
    Link: https://lore.kernel.org/r/bddc0469f25843ca5ae0cf578ab3671435ae98a7.1769429546.git.robin.murphy@arm.com
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    [ Backport past pinctrl API change for the deleted calls ]
    Signed-off-by: Robin Murphy <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
gpiolib: acpi: use BIT_ULL() for u64 mask in address space handler [+ + +]
Author: Denis Sergeev <[email protected]>
Date:   Mon Jan 26 06:59:14 2026 +0300

    gpiolib: acpi: use BIT_ULL() for u64 mask in address space handler
    
    [ Upstream commit c0ae43d303e45764918fa8c1dc13d6a5db59c479 ]
    
    The BIT() macro uses unsigned long, which is 32 bits on 32-bit
    architectures. When iterating over GPIO pins with index >= 32,
    the expression (*value & BIT(i)) causes undefined behavior due
    to shifting by a value >= type width.
    
    Since 'value' is a pointer to u64, use BIT_ULL() to ensure correct
    64-bit mask on all architectures.
    
    Found by Linux Verification Center (linuxtesting.org) with Svace.
    
    Fixes: 2c4d00cb8fc5 ("gpiolib: acpi: Use BIT() macro to increase readability")
    Signed-off-by: Denis Sergeev <[email protected]>
    Reviewed-by: Mika Westerberg <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ice: stop counting UDP csum mismatch as rx_errors [+ + +]
Author: Jesse Brandeburg <[email protected]>
Date:   Mon Dec 1 15:38:52 2025 -0800

    ice: stop counting UDP csum mismatch as rx_errors
    
    [ Upstream commit 05faf2c0a76581d0a7fdbb8ec46477ba183df95b ]
    
    Since the beginning, the Intel ice driver has counted receive checksum
    offload mismatches into the rx_errors member of the rtnl_link_stats64
    struct. In ethtool -S these show up as rx_csum_bad.nic.
    
    I believe counting these in rx_errors is fundamentally wrong, as it's
    pretty clear from the comments in if_link.h and from every other statistic
    the driver is summing into rx_errors, that all of them would cause a
    "hardware drop" except for the UDP checksum mismatch, as well as the fact
    that all the other causes for rx_errors are L2 reasons, and this L4 UDP
    "mismatch" is an outlier.
    
    A last nail in the coffin is that rx_errors is monitored in production and
    can indicate a bad NIC/cable/Switch port, but instead some random series of
    UDP packets with bad checksums will now trigger this alert. This false
    positive makes the alert useless and affects us as well as other companies.
    
    This packet with presumably a bad UDP checksum is *already* passed to the
    stack, just not marked as offloaded by the hardware/driver. If it is
    dropped by the stack it will show up as UDP_MIB_CSUMERRORS.
    
    And one more thing, none of the other Intel drivers, and at least bnxt_en
    and mlx5 both don't appear to count UDP offload mismatches as rx_errors.
    
    Here is a related customer complaint:
    https://community.intel.com/t5/Ethernet-Products/ice-rx-errros-is-too-sensitive-to-IP-TCP-attack-packets-Intel/td-p/1662125
    
    Fixes: 4f1fe43c920b ("ice: Add more Rx errors to netdev's rx_error counter")
    Cc: Tony Nguyen <[email protected]>
    Cc: Jake Keller <[email protected]>
    Cc: IWL <[email protected]>
    Signed-off-by: Jesse Brandeburg <[email protected]>
    Acked-by: Jacob Keller <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ipv6: use the right ifindex when replying to icmpv6 from localhost [+ + +]
Author: Fernando Fernandez Mancera <[email protected]>
Date:   Wed Jan 21 20:44:08 2026 +0100

    ipv6: use the right ifindex when replying to icmpv6 from localhost
    
    [ Upstream commit 03cbcdf93866e61beb0063392e6dbb701f03aea2 ]
    
    When replying to a ICMPv6 echo request that comes from localhost address
    the right output ifindex is 1 (lo) and not rt6i_idev dev index. Use the
    skb device ifindex instead. This fixes pinging to a local address from
    localhost source address.
    
    $ ping6 -I ::1 2001:1:1::2 -c 3
    PING 2001:1:1::2 (2001:1:1::2) from ::1 : 56 data bytes
    64 bytes from 2001:1:1::2: icmp_seq=1 ttl=64 time=0.037 ms
    64 bytes from 2001:1:1::2: icmp_seq=2 ttl=64 time=0.069 ms
    64 bytes from 2001:1:1::2: icmp_seq=3 ttl=64 time=0.122 ms
    
    2001:1:1::2 ping statistics
    3 packets transmitted, 3 received, 0% packet loss, time 2032ms
    rtt min/avg/max/mdev = 0.037/0.076/0.122/0.035 ms
    
    Fixes: 1b70d792cf67 ("ipv6: Use rt6i_idev index for echo replies to a local address")
    Signed-off-by: Fernando Fernandez Mancera <[email protected]>
    Reviewed-by: David Ahern <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ksmbd: Fix race condition in RPC handle list access [+ + +]
Author: Yunseong Kim <[email protected]>
Date:   Mon Feb 2 11:17:39 2026 +0800

    ksmbd: Fix race condition in RPC handle list access
    
    [ Upstream commit 305853cce379407090a73b38c5de5ba748893aee ]
    
    The 'sess->rpc_handle_list' XArray manages RPC handles within a ksmbd
    session. Access to this list is intended to be protected by
    'sess->rpc_lock' (an rw_semaphore). However, the locking implementation was
    flawed, leading to potential race conditions.
    
    In ksmbd_session_rpc_open(), the code incorrectly acquired only a read lock
    before calling xa_store() and xa_erase(). Since these operations modify
    the XArray structure, a write lock is required to ensure exclusive access
    and prevent data corruption from concurrent modifications.
    
    Furthermore, ksmbd_session_rpc_method() accessed the list using xa_load()
    without holding any lock at all. This could lead to reading inconsistent
    data or a potential use-after-free if an entry is concurrently removed and
    the pointer is dereferenced.
    
    Fix these issues by:
    1. Using down_write() and up_write() in ksmbd_session_rpc_open()
       to ensure exclusive access during XArray modification, and ensuring
       the lock is correctly released on error paths.
    2. Adding down_read() and up_read() in ksmbd_session_rpc_method()
       to safely protect the lookup.
    
    Fixes: a1f46c99d9ea ("ksmbd: fix use-after-free in ksmbd_session_rpc_open")
    Fixes: b685757c7b08 ("ksmbd: Implements sess->rpc_handle_list as xarray")
    Cc: [email protected]
    Signed-off-by: Yunseong Kim <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    [ Minor conflict resolved. ]
    Signed-off-by: Li hongliang <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ksmbd: fix recursive locking in RPC handle list access [+ + +]
Author: Marios Makassikis <[email protected]>
Date:   Wed Feb 4 10:22:05 2026 +0800

    ksmbd: fix recursive locking in RPC handle list access
    
    [ Upstream commit 88f170814fea74911ceab798a43cbd7c5599bed4 ]
    
    Since commit 305853cce3794 ("ksmbd: Fix race condition in RPC handle list
    access"), ksmbd_session_rpc_method() attempts to lock sess->rpc_lock.
    
    This causes hung connections / tasks when a client attempts to open
    a named pipe. Using Samba's rpcclient tool:
    
     $ rpcclient //192.168.1.254 -U user%password
     $ rpcclient $> srvinfo
     <connection hung here>
    
    Kernel side:
      "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
      task:kworker/0:0 state:D stack:0 pid:5021 tgid:5021 ppid:2 flags:0x00200000
      Workqueue: ksmbd-io handle_ksmbd_work
      Call trace:
      __schedule from schedule+0x3c/0x58
      schedule from schedule_preempt_disabled+0xc/0x10
      schedule_preempt_disabled from rwsem_down_read_slowpath+0x1b0/0x1d8
      rwsem_down_read_slowpath from down_read+0x28/0x30
      down_read from ksmbd_session_rpc_method+0x18/0x3c
      ksmbd_session_rpc_method from ksmbd_rpc_open+0x34/0x68
      ksmbd_rpc_open from ksmbd_session_rpc_open+0x194/0x228
      ksmbd_session_rpc_open from create_smb2_pipe+0x8c/0x2c8
      create_smb2_pipe from smb2_open+0x10c/0x27ac
      smb2_open from handle_ksmbd_work+0x238/0x3dc
      handle_ksmbd_work from process_scheduled_works+0x160/0x25c
      process_scheduled_works from worker_thread+0x16c/0x1e8
      worker_thread from kthread+0xa8/0xb8
      kthread from ret_from_fork+0x14/0x38
      Exception stack(0x8529ffb0 to 0x8529fff8)
    
    The task deadlocks because the lock is already held:
      ksmbd_session_rpc_open
        down_write(&sess->rpc_lock)
        ksmbd_rpc_open
          ksmbd_session_rpc_method
            down_read(&sess->rpc_lock)   <-- deadlock
    
    Adjust ksmbd_session_rpc_method() callers to take the lock when necessary.
    
    Fixes: 305853cce3794 ("ksmbd: Fix race condition in RPC handle list access")
    Signed-off-by: Marios Makassikis <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Li hongliang <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ksmbd: smbd: fix dma_unmap_sg() nents [+ + +]
Author: Thomas Fourier <[email protected]>
Date:   Wed Jan 28 16:36:14 2026 -0500

    ksmbd: smbd: fix dma_unmap_sg() nents
    
    [ Upstream commit 98e3e2b561bc88f4dd218d1c05890672874692f6 ]
    
    The dma_unmap_sg() functions should be called with the same nents as the
    dma_map_sg(), not the value the map function returned.
    
    Fixes: 0626e6641f6b ("cifsd: add server handler for central processing and tranport layers")
    Cc: <[email protected]>
    Signed-off-by: Thomas Fourier <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    [ Context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: Linux 6.6.123 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Fri Feb 6 16:48:30 2026 +0100

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

 
mei: trace: treat reg parameter as string [+ + +]
Author: Alexander Usyskin <[email protected]>
Date:   Wed Jan 28 16:36:08 2026 -0500

    mei: trace: treat reg parameter as string
    
    [ Upstream commit 06d5a7afe1d0b47102936d8fba568572c2b4b941 ]
    
    The commit
    afd2627f727b ("tracing: Check "%s" dereference via the field and not the TP_printk format")
    forbids to emit event with a plain char* without a wrapper.
    
    The reg parameter always passed as static string and wrapper
    is not strictly required, contrary to dev parameter.
    Use the string wrapper anyway to check sanity of the reg parameters,
    store it value independently and prevent internal kernel data leaks.
    
    Since some code refactoring has taken place, explicit backporting may
    be needed for kernels older than 6.10.
    
    Cc: [email protected]  # v6.11+
    Fixes: a0a927d06d79 ("mei: me: add io register tracing")
    Signed-off-by: Alexander Usyskin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    [ adapted __assign_str() calls to use two arguments ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/kfence: randomize the freelist on initialization [+ + +]
Author: Pimyn Girgis <[email protected]>
Date:   Tue Jan 20 17:15:10 2026 +0100

    mm/kfence: randomize the freelist on initialization
    
    commit 870ff19251bf3910dda7a7245da826924045fedd upstream.
    
    Randomize the KFENCE freelist during pool initialization to make
    allocation patterns less predictable.  This is achieved by shuffling the
    order in which metadata objects are added to the freelist using
    get_random_u32_below().
    
    Additionally, ensure the error path correctly calculates the address range
    to be reset if initialization fails, as the address increment logic has
    been moved to a separate loop.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 0ce20dd84089 ("mm: add Kernel Electric-Fence infrastructure")
    Signed-off-by: Pimyn Girgis <[email protected]>
    Reviewed-by: Alexander Potapenko <[email protected]>
    Cc: Dmitry Vyukov <[email protected]>
    Cc: Marco Elver <[email protected]>
    Cc: Ernesto Martnez Garca <[email protected]>
    Cc: Greg KH <[email protected]>
    Cc: Kees Cook <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Pimyn Girgis <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mptcp: avoid dup SUB_CLOSED events after disconnect [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Tue Feb 3 13:04:30 2026 -0500

    mptcp: avoid dup SUB_CLOSED events after disconnect
    
    [ Upstream commit 280d654324e33f8e6e3641f76764694c7b64c5db ]
    
    In case of subflow disconnect(), which can also happen with the first
    subflow in case of errors like timeout or reset, mptcp_subflow_ctx_reset
    will reset most fields from the mptcp_subflow_context structure,
    including close_event_done. Then, when another subflow is closed, yet
    another SUB_CLOSED event for the disconnected initial subflow is sent.
    Because of the previous reset, there are no source address and
    destination port.
    
    A solution is then to also check the subflow's local id: it shouldn't be
    negative anyway.
    
    Another solution would be not to reset subflow->close_event_done at
    disconnect time, but when reused. But then, probably the whole reset
    could be done when being reused. Let's not change this logic, similar
    to TCP with tcp_disconnect().
    
    Fixes: d82809b6c5f2 ("mptcp: avoid duplicated SUB_CLOSED events")
    Cc: [email protected]
    Reported-by: Marco Angaroni <[email protected]>
    Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/603
    Reviewed-by: Geliang Tang <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: only reset subflow errors when propagated [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Tue Jan 27 20:27:25 2026 +0100

    mptcp: only reset subflow errors when propagated
    
    commit dccf46179ddd6c04c14be8ed584dc54665f53f0e upstream.
    
    Some subflow socket errors need to be reported to the MPTCP socket: the
    initial subflow connect (MP_CAPABLE), and the ones from the fallback
    sockets. The others are not propagated.
    
    The issue is that sock_error() was used to retrieve the error, which was
    also resetting the sk_err field. Because of that, when notifying the
    userspace about subflow close events later on from the MPTCP worker, the
    ssk->sk_err field was always 0.
    
    Now, the error (sk_err) is only reset when propagating it to the msk.
    
    Fixes: 15cc10453398 ("mptcp: deliver ssk errors to msk")
    Cc: [email protected]
    Reviewed-by: Geliang Tang <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[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/mlx5: Fix memory leak in esw_acl_ingress_lgcy_setup() [+ + +]
Author: Zilin Guan <[email protected]>
Date:   Tue Jan 20 13:46:40 2026 +0000

    net/mlx5: Fix memory leak in esw_acl_ingress_lgcy_setup()
    
    [ Upstream commit 108948f723b13874b7ebf6b3f1cc598a7de38622 ]
    
    In esw_acl_ingress_lgcy_setup(), if esw_acl_table_create() fails,
    the function returns directly without releasing the previously
    created counter, leading to a memory leak.
    
    Fix this by jumping to the out label instead of returning directly,
    which aligns with the error handling logic of other paths in this
    function.
    
    Compile tested only. Issue found using a prototype static analysis tool
    and code review.
    
    Fixes: 07bab9502641 ("net/mlx5: E-Switch, Refactor eswitch ingress acl codes")
    Signed-off-by: Zilin Guan <[email protected]>
    Reviewed-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/mlx5e: Account for netdev stats in ndo_get_stats64 [+ + +]
Author: Gal Pressman <[email protected]>
Date:   Mon Jan 26 09:14:55 2026 +0200

    net/mlx5e: Account for netdev stats in ndo_get_stats64
    
    [ Upstream commit 476681f10cc1e0e56e26856684e75d4678b072b2 ]
    
    The driver's ndo_get_stats64 callback is only reporting mlx5 counters,
    without accounting for the netdev stats, causing errors from the network
    stack to be invisible in statistics.
    
    Add netdev_stats_to_stats64() call to first populate the counters, then
    add mlx5 counters on top, ensuring both are accounted for (where
    appropriate).
    
    Fixes: f62b8bb8f2d3 ("net/mlx5: Extend mlx5_core to support ConnectX-4 Ethernet functionality")
    Signed-off-by: Gal Pressman <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/mlx5e: Report rx_discards_phy via rx_dropped [+ + +]
Author: Yafang Shao <[email protected]>
Date:   Tue Dec 10 10:27:06 2024 +0800

    net/mlx5e: Report rx_discards_phy via rx_dropped
    
    [ Upstream commit c9cfced17365b1df8c6ae6cd5db56aebd7ed9b57 ]
    
    We noticed a high number of rx_discards_phy events on certain servers while
    running `ethtool -S`. However, this critical counter is not currently
    included in the standard /proc/net/dev statistics file, making it difficult
    to monitor effectively—especially given the diversity of vendors across a
    large fleet of servers.
    
    Let's report it via the standard rx_dropped metric.
    
    Suggested-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Yafang Shao <[email protected]>
    Cc: Saeed Mahameed <[email protected]>
    Cc: Leon Romanovsky <[email protected]>
    Cc: Gal Pressman <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Reviewed-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 476681f10cc1 ("net/mlx5e: Account for netdev stats in ndo_get_stats64")
    Signed-off-by: Sasha Levin <[email protected]>

net/mlx5e: Skip ESN replay window setup for IPsec crypto offload [+ + +]
Author: Jianbo Liu <[email protected]>
Date:   Tue Jan 27 10:52:41 2026 +0200

    net/mlx5e: Skip ESN replay window setup for IPsec crypto offload
    
    [ Upstream commit 011be342dd24b5168a5dcf408b14c3babe503341 ]
    
    Commit a5e400a985df ("net/mlx5e: Honor user choice of IPsec replay
    window size") introduced logic to setup the ESN replay window size.
    This logic is only valid for packet offload.
    
    However, the check to skip this block only covered outbound offloads.
    It was not skipped for crypto offload, causing it to fall through to
    the new switch statement and trigger its WARN_ON default case (for
    instance, if a window larger than 256 bits was configured).
    
    Fix this by amending the condition to also skip the replay window
    setup if the offload type is not XFRM_DEV_OFFLOAD_PACKET.
    
    Fixes: a5e400a985df ("net/mlx5e: Honor user choice of IPsec replay window size")
    Signed-off-by: Jianbo Liu <[email protected]>
    Reviewed-by: Leon Romanovsky <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/mlx5e: TC, delete flows only for existing peers [+ + +]
Author: Mark Bloch <[email protected]>
Date:   Mon Jan 26 09:14:54 2026 +0200

    net/mlx5e: TC, delete flows only for existing peers
    
    [ Upstream commit f67666938ae626cbda63fbf5176b3583c07e7124 ]
    
    When deleting TC steering flows, iterate only over actual devcom
    peers instead of assuming all possible ports exist. This avoids
    touching non-existent peers and ensures cleanup is limited to
    devices the driver is currently connected to.
    
     BUG: kernel NULL pointer dereference, address: 0000000000000008
     #PF: supervisor write access in kernel mode
     #PF: error_code(0x0002) - not-present page
     PGD 133c8a067 P4D 0
     Oops: Oops: 0002 [#1] SMP
     CPU: 19 UID: 0 PID: 2169 Comm: tc Not tainted 6.18.0+ #156 NONE
     Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014
     RIP: 0010:mlx5e_tc_del_fdb_peers_flow+0xbe/0x200 [mlx5_core]
     Code: 00 00 a8 08 74 a8 49 8b 46 18 f6 c4 02 74 9f 4c 8d bf a0 12 00 00 4c 89 ff e8 0e e7 96 e1 49 8b 44 24 08 49 8b 0c 24 4c 89 ff <48> 89 41 08 48 89 08 49 89 2c 24 49 89 5c 24 08 e8 7d ce 96 e1 49
     RSP: 0018:ff11000143867528 EFLAGS: 00010246
     RAX: 0000000000000000 RBX: dead000000000122 RCX: 0000000000000000
     RDX: ff11000143691580 RSI: ff110001026e5000 RDI: ff11000106f3d2a0
     RBP: dead000000000100 R08: 00000000000003fd R09: 0000000000000002
     R10: ff11000101c75690 R11: ff1100085faea178 R12: ff11000115f0ae78
     R13: 0000000000000000 R14: ff11000115f0a800 R15: ff11000106f3d2a0
     FS:  00007f35236bf740(0000) GS:ff110008dc809000(0000) knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 0000000000000008 CR3: 0000000157a01001 CR4: 0000000000373eb0
     Call Trace:
      <TASK>
      mlx5e_tc_del_flow+0x46/0x270 [mlx5_core]
      mlx5e_flow_put+0x25/0x50 [mlx5_core]
      mlx5e_delete_flower+0x2a6/0x3e0 [mlx5_core]
      tc_setup_cb_reoffload+0x20/0x80
      fl_reoffload+0x26f/0x2f0 [cls_flower]
      ? mlx5e_tc_reoffload_flows_work+0xc0/0xc0 [mlx5_core]
      ? mlx5e_tc_reoffload_flows_work+0xc0/0xc0 [mlx5_core]
      tcf_block_playback_offloads+0x9e/0x1c0
      tcf_block_unbind+0x7b/0xd0
      tcf_block_setup+0x186/0x1d0
      tcf_block_offload_cmd.isra.0+0xef/0x130
      tcf_block_offload_unbind+0x43/0x70
      __tcf_block_put+0x85/0x160
      ingress_destroy+0x32/0x110 [sch_ingress]
      __qdisc_destroy+0x44/0x100
      qdisc_graft+0x22b/0x610
      tc_get_qdisc+0x183/0x4d0
      rtnetlink_rcv_msg+0x2d7/0x3d0
      ? rtnl_calcit.isra.0+0x100/0x100
      netlink_rcv_skb+0x53/0x100
      netlink_unicast+0x249/0x320
      ? __alloc_skb+0x102/0x1f0
      netlink_sendmsg+0x1e3/0x420
      __sock_sendmsg+0x38/0x60
      ____sys_sendmsg+0x1ef/0x230
      ? copy_msghdr_from_user+0x6c/0xa0
      ___sys_sendmsg+0x7f/0xc0
      ? ___sys_recvmsg+0x8a/0xc0
      ? __sys_sendto+0x119/0x180
      __sys_sendmsg+0x61/0xb0
      do_syscall_64+0x55/0x640
      entry_SYSCALL_64_after_hwframe+0x4b/0x53
     RIP: 0033:0x7f35238bb764
     Code: 15 b9 86 0c 00 f7 d8 64 89 02 b8 ff ff ff ff eb bf 0f 1f 44 00 00 f3 0f 1e fa 80 3d e5 08 0d 00 00 74 13 b8 2e 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 4c c3 0f 1f 00 55 48 89 e5 48 83 ec 20 89 55
     RSP: 002b:00007ffed4c35638 EFLAGS: 00000202 ORIG_RAX: 000000000000002e
     RAX: ffffffffffffffda RBX: 000055a2efcc75e0 RCX: 00007f35238bb764
     RDX: 0000000000000000 RSI: 00007ffed4c356a0 RDI: 0000000000000003
     RBP: 00007ffed4c35710 R08: 0000000000000010 R09: 00007f3523984b20
     R10: 0000000000000004 R11: 0000000000000202 R12: 00007ffed4c35790
     R13: 000000006947df8f R14: 000055a2efcc75e0 R15: 00007ffed4c35780
    
    Fixes: 9be6c21fdcf8 ("net/mlx5e: Handle offloads flows per peer")
    Signed-off-by: Mark Bloch <[email protected]>
    Reviewed-by: Shay Drori <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Reviewed-by: Simon Horman <[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: act_ife: convert comma to semicolon [+ + +]
Author: Chen Ni <[email protected]>
Date:   Wed Nov 12 15:27:09 2025 +0800

    net/sched: act_ife: convert comma to semicolon
    
    commit 205305c028ad986d0649b8b100bab6032dcd1bb5 upstream.
    
    Replace comma between expressions with semicolons.
    
    Using a ',' in place of a ';' can have unintended side effects.
    Although that is not the case here, it is seems best to use ';'
    unless ',' is intended.
    
    Found by inspection.
    No functional change intended.
    Compile tested only.
    
    Signed-off-by: Chen Ni <[email protected]>
    Reviewed-by: Jamal Hadi Salim <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Cc: Ben Hutchings <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net: bcmasp: fix early exit leak with fixed phy [+ + +]
Author: Justin Chen <[email protected]>
Date:   Thu Jan 22 11:40:01 2026 -0800

    net: bcmasp: fix early exit leak with fixed phy
    
    [ Upstream commit 6de4436bf369e1444606445e4cd5df5bcfc74b48 ]
    
    We are not deregistering the fixed phy link when hitting the early
    exit condition. Add the correct early exit sequence.
    
    Fixes: 490cb412007d ("net: bcmasp: Add support for ASP2.0 Ethernet controller")
    Signed-off-by: Justin Chen <[email protected]>
    Reviewed-by: Florian Fainelli <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: bridge: fix static key check [+ + +]
Author: Martin Kaiser <[email protected]>
Date:   Tue Jan 27 11:19:23 2026 +0100

    net: bridge: fix static key check
    
    [ Upstream commit cc0cf10fdaeadf5542d64a55b5b4120d3df90b7d ]
    
    Fix the check if netfilter's static keys are available. netfilter defines
    and exports static keys if CONFIG_JUMP_LABEL is enabled. (HAVE_JUMP_LABEL
    is never defined.)
    
    Fixes: 971502d77faa ("bridge: netfilter: unroll NF_HOOK helper in bridge input path")
    Signed-off-by: Martin Kaiser <[email protected]>
    Reviewed-by: Florian Westphal <[email protected]>
    Reviewed-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]>

net: mvpp2: cls: Fix memory leak in mvpp2_ethtool_cls_rule_ins() [+ + +]
Author: Zilin Guan <[email protected]>
Date:   Fri Jan 23 06:57:16 2026 +0000

    net: mvpp2: cls: Fix memory leak in mvpp2_ethtool_cls_rule_ins()
    
    [ Upstream commit 09f979d1f312627b31d2ee1e46f9692e442610cd ]
    
    In mvpp2_ethtool_cls_rule_ins(), the ethtool_rule is allocated by
    ethtool_rx_flow_rule_create(). If the subsequent conversion to flow
    type fails, the function jumps to the clean_rule label.
    
    However, the clean_rule label only frees efs, skipping the cleanup
    of ethtool_rule, which leads to a memory leak.
    
    Fix this by jumping to the clean_eth_rule label, which properly calls
    ethtool_rx_flow_rule_destroy() before freeing efs.
    
    Compile tested only. Issue found using a prototype static analysis tool
    and code review.
    
    Fixes: f4f1ba18195d ("net: mvpp2: cls: Report an error for unsupported flow types")
    Signed-off-by: Zilin Guan <[email protected]>
    Reviewed-by: Maxime Chevallier <[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: t7xx: fix potential skb->frags overflow in RX path [+ + +]
Author: Kery Qi <[email protected]>
Date:   Fri Jan 23 01:04:01 2026 +0800

    net: wwan: t7xx: fix potential skb->frags overflow in RX path
    
    [ Upstream commit f0813bcd2d9d97fdbdf2efb9532ab03ae92e99e6 ]
    
    When receiving data in the DPMAIF RX path,
    the t7xx_dpmaif_set_frag_to_skb() function adds
    page fragments to an skb without checking if the number of
    fragments has exceeded MAX_SKB_FRAGS. This could lead to a buffer overflow
    in skb_shinfo(skb)->frags[] array, corrupting adjacent memory and
    potentially causing kernel crashes or other undefined behavior.
    
    This issue was identified through static code analysis by comparing with a
    similar vulnerability fixed in the mt76 driver commit b102f0c522cf ("mt76:
    fix array overflow on receiving too many fragments for a packet").
    
    The vulnerability could be triggered if the modem firmware sends packets
    with excessive fragments. While under normal protocol conditions (MTU 3080
    bytes, BAT buffer 3584 bytes),
    a single packet should not require additional
    fragments, the kernel should not blindly trust firmware behavior.
    Malicious, buggy, or compromised firmware could potentially craft packets
    with more fragments than the kernel expects.
    
    Fix this by adding a bounds check before calling skb_add_rx_frag() to
    ensure nr_frags does not exceed MAX_SKB_FRAGS.
    
    The check must be performed before unmapping to avoid a page leak
    and double DMA unmap during device teardown.
    
    Fixes: d642b012df70a ("net: wwan: t7xx: Add data path interface")
    Signed-off-by: Kery Qi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nfc: llcp: Fix memleak in nfc_llcp_send_ui_frame(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Sun Jan 25 00:59:28 2026 +0000

    nfc: llcp: Fix memleak in nfc_llcp_send_ui_frame().
    
    [ Upstream commit 165c34fb6068ff153e3fc99a932a80a9d5755709 ]
    
    syzbot reported various memory leaks related to NFC, struct
    nfc_llcp_sock, sk_buff, nfc_dev, etc. [0]
    
    The leading log hinted that nfc_llcp_send_ui_frame() failed
    to allocate skb due to sock_error(sk) being -ENXIO.
    
    ENXIO is set by nfc_llcp_socket_release() when struct
    nfc_llcp_local is destroyed by local_cleanup().
    
    The problem is that there is no synchronisation between
    nfc_llcp_send_ui_frame() and local_cleanup(), and skb
    could be put into local->tx_queue after it was purged in
    local_cleanup():
    
      CPU1                          CPU2
      ----                          ----
      nfc_llcp_send_ui_frame()      local_cleanup()
      |- do {                       '
         |- pdu = nfc_alloc_send_skb(..., &err)
         |                          .
         |                          |- nfc_llcp_socket_release(local, false, ENXIO);
         |                          |- skb_queue_purge(&local->tx_queue);      |
         |                          '                                          |
         |- skb_queue_tail(&local->tx_queue, pdu);                             |
        ...                                                                    |
         |- pdu = nfc_alloc_send_skb(..., &err)                                |
                                           ^._________________________________.'
    
    local_cleanup() is called for struct nfc_llcp_local only
    after nfc_llcp_remove_local() unlinks it from llcp_devices.
    
    If we hold local->tx_queue.lock then, we can synchronise
    the thread and nfc_llcp_send_ui_frame().
    
    Let's do that and check list_empty(&local->list) before
    queuing skb to local->tx_queue in nfc_llcp_send_ui_frame().
    
    [0]:
    [   56.074943][ T6096] llcp: nfc_llcp_send_ui_frame: Could not allocate PDU (error=-6)
    [   64.318868][ T5813] kmemleak: 6 new suspected memory leaks (see /sys/kernel/debug/kmemleak)
    BUG: memory leak
    unreferenced object 0xffff8881272f6800 (size 1024):
      comm "syz.0.17", pid 6096, jiffies 4294942766
      hex dump (first 32 bytes):
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        27 00 03 40 00 00 00 00 00 00 00 00 00 00 00 00  '..@............
      backtrace (crc da58d84d):
        kmemleak_alloc_recursive include/linux/kmemleak.h:44 [inline]
        slab_post_alloc_hook mm/slub.c:4979 [inline]
        slab_alloc_node mm/slub.c:5284 [inline]
        __do_kmalloc_node mm/slub.c:5645 [inline]
        __kmalloc_noprof+0x3e3/0x6b0 mm/slub.c:5658
        kmalloc_noprof include/linux/slab.h:961 [inline]
        sk_prot_alloc+0x11a/0x1b0 net/core/sock.c:2239
        sk_alloc+0x36/0x360 net/core/sock.c:2295
        nfc_llcp_sock_alloc+0x37/0x130 net/nfc/llcp_sock.c:979
        llcp_sock_create+0x71/0xd0 net/nfc/llcp_sock.c:1044
        nfc_sock_create+0xc9/0xf0 net/nfc/af_nfc.c:31
        __sock_create+0x1a9/0x340 net/socket.c:1605
        sock_create net/socket.c:1663 [inline]
        __sys_socket_create net/socket.c:1700 [inline]
        __sys_socket+0xb9/0x1a0 net/socket.c:1747
        __do_sys_socket net/socket.c:1761 [inline]
        __se_sys_socket net/socket.c:1759 [inline]
        __x64_sys_socket+0x1b/0x30 net/socket.c:1759
        do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
        do_syscall_64+0xa4/0xfa0 arch/x86/entry/syscall_64.c:94
        entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    BUG: memory leak
    unreferenced object 0xffff88810fbd9800 (size 240):
      comm "syz.0.17", pid 6096, jiffies 4294942850
      hex dump (first 32 bytes):
        68 f0 ff 08 81 88 ff ff 68 f0 ff 08 81 88 ff ff  h.......h.......
        00 00 00 00 00 00 00 00 00 68 2f 27 81 88 ff ff  .........h/'....
      backtrace (crc 6cc652b1):
        kmemleak_alloc_recursive include/linux/kmemleak.h:44 [inline]
        slab_post_alloc_hook mm/slub.c:4979 [inline]
        slab_alloc_node mm/slub.c:5284 [inline]
        kmem_cache_alloc_node_noprof+0x36f/0x5e0 mm/slub.c:5336
        __alloc_skb+0x203/0x240 net/core/skbuff.c:660
        alloc_skb include/linux/skbuff.h:1383 [inline]
        alloc_skb_with_frags+0x69/0x3f0 net/core/skbuff.c:6671
        sock_alloc_send_pskb+0x379/0x3e0 net/core/sock.c:2965
        sock_alloc_send_skb include/net/sock.h:1859 [inline]
        nfc_alloc_send_skb+0x45/0x80 net/nfc/core.c:724
        nfc_llcp_send_ui_frame+0x162/0x360 net/nfc/llcp_commands.c:766
        llcp_sock_sendmsg+0x14c/0x1d0 net/nfc/llcp_sock.c:814
        sock_sendmsg_nosec net/socket.c:727 [inline]
        __sock_sendmsg net/socket.c:742 [inline]
        __sys_sendto+0x2d8/0x2f0 net/socket.c:2244
        __do_sys_sendto net/socket.c:2251 [inline]
        __se_sys_sendto net/socket.c:2247 [inline]
        __x64_sys_sendto+0x28/0x30 net/socket.c:2247
        do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
        do_syscall_64+0xa4/0xfa0 arch/x86/entry/syscall_64.c:94
        entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Fixes: 94f418a20664 ("NFC: UI frame sending routine implementation")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

nfc: nci: Fix race between rfkill and nci_unregister_device(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Tue Jan 27 04:03:59 2026 +0000

    nfc: nci: Fix race between rfkill and nci_unregister_device().
    
    [ Upstream commit d2492688bb9fed6ab6e313682c387ae71a66ebae ]
    
    syzbot reported the splat below [0] without a repro.
    
    It indicates that struct nci_dev.cmd_wq had been destroyed before
    nci_close_device() was called via rfkill.
    
    nci_dev.cmd_wq is only destroyed in nci_unregister_device(), which
    (I think) was called from virtual_ncidev_close() when syzbot close()d
    an fd of virtual_ncidev.
    
    The problem is that nci_unregister_device() destroys nci_dev.cmd_wq
    first and then calls nfc_unregister_device(), which removes the
    device from rfkill by rfkill_unregister().
    
    So, the device is still visible via rfkill even after nci_dev.cmd_wq
    is destroyed.
    
    Let's unregister the device from rfkill first in nci_unregister_device().
    
    Note that we cannot call nfc_unregister_device() before
    nci_close_device() because
    
      1) nfc_unregister_device() calls device_del() which frees
         all memory allocated by devm_kzalloc() and linked to
         ndev->conn_info_list
    
      2) nci_rx_work() could try to queue nci_conn_info to
         ndev->conn_info_list which could be leaked
    
    Thus, nfc_unregister_device() is split into two functions so we
    can remove rfkill interfaces only before nci_close_device().
    
    [0]:
    DEBUG_LOCKS_WARN_ON(1)
    WARNING: kernel/locking/lockdep.c:238 at hlock_class kernel/locking/lockdep.c:238 [inline], CPU#0: syz.0.8675/6349
    WARNING: kernel/locking/lockdep.c:238 at check_wait_context kernel/locking/lockdep.c:4854 [inline], CPU#0: syz.0.8675/6349
    WARNING: kernel/locking/lockdep.c:238 at __lock_acquire+0x39d/0x2cf0 kernel/locking/lockdep.c:5187, CPU#0: syz.0.8675/6349
    Modules linked in:
    CPU: 0 UID: 0 PID: 6349 Comm: syz.0.8675 Not tainted syzkaller #0 PREEMPT(full)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/13/2026
    RIP: 0010:hlock_class kernel/locking/lockdep.c:238 [inline]
    RIP: 0010:check_wait_context kernel/locking/lockdep.c:4854 [inline]
    RIP: 0010:__lock_acquire+0x3a4/0x2cf0 kernel/locking/lockdep.c:5187
    Code: 18 00 4c 8b 74 24 08 75 27 90 e8 17 f2 fc 02 85 c0 74 1c 83 3d 50 e0 4e 0e 00 75 13 48 8d 3d 43 f7 51 0e 48 c7 c6 8b 3a de 8d <67> 48 0f b9 3a 90 31 c0 0f b6 98 c4 00 00 00 41 8b 45 20 25 ff 1f
    RSP: 0018:ffffc9000c767680 EFLAGS: 00010046
    RAX: 0000000000000001 RBX: 0000000000040000 RCX: 0000000000080000
    RDX: ffffc90013080000 RSI: ffffffff8dde3a8b RDI: ffffffff8ff24ca0
    RBP: 0000000000000003 R08: ffffffff8fef35a3 R09: 1ffffffff1fde6b4
    R10: dffffc0000000000 R11: fffffbfff1fde6b5 R12: 00000000000012a2
    R13: ffff888030338ba8 R14: ffff888030338000 R15: ffff888030338b30
    FS:  00007fa5995f66c0(0000) GS:ffff8881256f8000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007f7e72f842d0 CR3: 00000000485a0000 CR4: 00000000003526f0
    Call Trace:
     <TASK>
     lock_acquire+0x106/0x330 kernel/locking/lockdep.c:5868
     touch_wq_lockdep_map+0xcb/0x180 kernel/workqueue.c:3940
     __flush_workqueue+0x14b/0x14f0 kernel/workqueue.c:3982
     nci_close_device+0x302/0x630 net/nfc/nci/core.c:567
     nci_dev_down+0x3b/0x50 net/nfc/nci/core.c:639
     nfc_dev_down+0x152/0x290 net/nfc/core.c:161
     nfc_rfkill_set_block+0x2d/0x100 net/nfc/core.c:179
     rfkill_set_block+0x1d2/0x440 net/rfkill/core.c:346
     rfkill_fop_write+0x461/0x5a0 net/rfkill/core.c:1301
     vfs_write+0x29a/0xb90 fs/read_write.c:684
     ksys_write+0x150/0x270 fs/read_write.c:738
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xe2/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7fa59b39acb9
    Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 e8 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007fa5995f6028 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
    RAX: ffffffffffffffda RBX: 00007fa59b615fa0 RCX: 00007fa59b39acb9
    RDX: 0000000000000008 RSI: 0000200000000080 RDI: 0000000000000007
    RBP: 00007fa59b408bf7 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: 00007fa59b616038 R14: 00007fa59b615fa0 R15: 00007ffc82218788
     </TASK>
    
    Fixes: 6a2968aaf50c ("NFC: basic NCI protocol implementation")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
octeon_ep: Fix memory leak in octep_device_setup() [+ + +]
Author: Zilin Guan <[email protected]>
Date:   Wed Jan 21 13:05:51 2026 +0000

    octeon_ep: Fix memory leak in octep_device_setup()
    
    [ Upstream commit 8016dc5ee19a77678c264f8ba368b1e873fa705b ]
    
    In octep_device_setup(), if octep_ctrl_net_init() fails, the function
    returns directly without unmapping the mapped resources and freeing the
    allocated configuration memory.
    
    Fix this by jumping to the unsupported_dev label, which performs the
    necessary cleanup. This aligns with the error handling logic of other
    paths in this function.
    
    Compile tested only. Issue found using a prototype static analysis tool
    and code review.
    
    Fixes: 577f0d1b1c5f ("octeon_ep: add separate mailbox command and response queues")
    Signed-off-by: Zilin Guan <[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]>

 
perf: sched: Fix perf crash with new is_user_task() helper [+ + +]
Author: Steven Rostedt <[email protected]>
Date:   Tue Feb 3 15:27:45 2026 -0500

    perf: sched: Fix perf crash with new is_user_task() helper
    
    [ Upstream commit 76ed27608f7dd235b727ebbb12163438c2fbb617 ]
    
    In order to do a user space stacktrace the current task needs to be a user
    task that has executed in user space. It use to be possible to test if a
    task is a user task or not by simply checking the task_struct mm field. If
    it was non NULL, it was a user task and if not it was a kernel task.
    
    But things have changed over time, and some kernel tasks now have their
    own mm field.
    
    An idea was made to instead test PF_KTHREAD and two functions were used to
    wrap this check in case it became more complex to test if a task was a
    user task or not[1]. But this was rejected and the C code simply checked
    the PF_KTHREAD directly.
    
    It was later found that not all kernel threads set PF_KTHREAD. The io-uring
    helpers instead set PF_USER_WORKER and this needed to be added as well.
    
    But checking the flags is still not enough. There's a very small window
    when a task exits that it frees its mm field and it is set back to NULL.
    If perf were to trigger at this moment, the flags test would say its a
    user space task but when perf would read the mm field it would crash with
    at NULL pointer dereference.
    
    Now there are flags that can be used to test if a task is exiting, but
    they are set in areas that perf may still want to profile the user space
    task (to see where it exited). The only real test is to check both the
    flags and the mm field.
    
    Instead of making this modification in every location, create a new
    is_user_task() helper function that does all the tests needed to know if
    it is safe to read the user space memory or not.
    
    [1] https://lore.kernel.org/all/[email protected]/
    
    Fixes: 90942f9fac05 ("perf: Use current->flags & PF_KTHREAD|PF_USER_WORKER instead of current->mm == NULL")
    Closes: https://lore.kernel.org/all/[email protected]/
    Reported-by: Guenter Roeck <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Tested-by: Guenter Roeck <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
pinctrl: lpass-lpi: implement .get_direction() for the GPIO driver [+ + +]
Author: Bartosz Golaszewski <[email protected]>
Date:   Tue Feb 3 18:29:44 2026 -0500

    pinctrl: lpass-lpi: implement .get_direction() for the GPIO driver
    
    [ Upstream commit 4f0d22ec60cee420125f4055af76caa0f373a3fe ]
    
    GPIO controller driver should typically implement the .get_direction()
    callback as GPIOLIB internals may try to use it to determine the state
    of a pin. Add it for the LPASS LPI driver.
    
    Reported-by: Abel Vesa <[email protected]>
    Cc: [email protected]
    Fixes: 6e261d1090d6 ("pinctrl: qcom: Add sm8250 lpass lpi pinctrl driver")
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Tested-by: Konrad Dybcio <[email protected]> # X1E CRD
    Tested-by: Abel Vesa <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    [ PIN_CONFIG_LEVEL => PIN_CONFIG_OUTPUT ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

pinctrl: meson: mark the GPIO controller as sleeping [+ + +]
Author: Bartosz Golaszewski <[email protected]>
Date:   Mon Jan 5 16:05:08 2026 +0100

    pinctrl: meson: mark the GPIO controller as sleeping
    
    commit 28f24068387169722b508bba6b5257cb68b86e74 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: 142, name:
    kworker/u25:3
    preempt_count: 1, expected: 0
    RCU nest depth: 0, expected: 0
    INFO: lockdep is turned off.
    irq event stamp: 46379
    hardirqs last  enabled at (46379): [<ffff8000813acb24>]
    _raw_spin_unlock_irqrestore+0x74/0x78
    hardirqs last disabled at (46378): [<ffff8000813abf38>]
    _raw_spin_lock_irqsave+0x84/0x88
    softirqs last  enabled at (46330): [<ffff8000800c71b4>]
    handle_softirqs+0x4c4/0x4dc
    softirqs last disabled at (46295): [<ffff800080010674>]
    __do_softirq+0x14/0x20
    CPU: 1 UID: 0 PID: 142 Comm: kworker/u25:3 Tainted: G C
    6.19.0-rc4-next-20260105+ #11963 PREEMPT
    Tainted: [C]=CRAP
    Hardware name: Khadas VIM3 (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_set_config+0x40/0xdc
      gpiochip_generic_config+0x28/0x3c
      gpio_do_set_config+0xa8/0x194
      gpiod_set_config+0x34/0xfc
      gpio_shared_proxy_set_config+0x6c/0xfc [gpio_shared_proxy]
      gpio_do_set_config+0xa8/0x194
      gpiod_set_transitory+0x4c/0xf0
      gpiod_configure_flags+0xa4/0x480
      gpiod_find_and_request+0x1a0/0x574
      gpiod_get_index+0x58/0x84
      devm_gpiod_get_index+0x20/0xb4
      devm_gpiod_get+0x18/0x24
      mmc_pwrseq_emmc_probe+0x40/0xb8
      platform_probe+0x5c/0xac
      really_probe+0xbc/0x298
      __driver_probe_device+0x78/0x12c
      driver_probe_device+0xdc/0x164
      __device_attach_driver+0xb8/0x138
      bus_for_each_drv+0x80/0xdc
      __device_attach+0xa8/0x1b0
    
    Fixes: 6ac730951104 ("pinctrl: add driver for Amlogic Meson SoCs")
    Cc: [email protected]
    Reported-by: Marek Szyprowski <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Reviewed-by: Martin Blumenstingl <[email protected]>
    Reviewed-by: Neil Armstrong <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

pinctrl: qcom: sm8350-lpass-lpi: Merge with SC7280 to fix I2S2 and SWR TX pins [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Tue Feb 3 12:04:00 2026 -0500

    pinctrl: qcom: sm8350-lpass-lpi: Merge with SC7280 to fix I2S2 and SWR TX pins
    
    [ Upstream commit 1fbe3abb449c5ef2178e1c3e3e8b9a43a7a410ac ]
    
    Qualcomm SC7280 and SM8350 SoCs have slightly different LPASS audio
    blocks (v9.4.5 and v9.2), however the LPASS LPI pin controllers are
    exactly the same.  The driver for SM8350 has two issues, which can be
    fixed by simply moving over to SC7280 driver which has them correct:
    
    1. "i2s2_data_groups" listed twice GPIO12, but should have both GPIO12
       and GPIO13,
    
    2. "swr_tx_data_groups" contained GPIO5 for "swr_tx_data2" function, but
       that function is also available on GPIO14, thus listing it twice is
       not necessary.  OTOH, GPIO5 has also "swr_rx_data1", so selecting
       swr_rx_data function should not block  the TX one.
    
    Fixes: be9f6d56381d ("pinctrl: qcom: sm8350-lpass-lpi: add SM8350 LPASS TLMM")
    Cc: [email protected]
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Reviewed-by: Bartosz Golaszewski <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    [ Context, no dedicated config option ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ptr_ring: do not block hard interrupts in ptr_ring_resize_multiple() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Wed Feb 4 11:55:59 2026 +0000

    ptr_ring: do not block hard interrupts in ptr_ring_resize_multiple()
    
    [ Upstream commit a126061c80d5efb4baef4bcf346094139cd81df6 ]
    
    Jakub added a lockdep_assert_no_hardirq() check in __page_pool_put_page()
    to increase test coverage.
    
    syzbot found a splat caused by hard irq blocking in
    ptr_ring_resize_multiple() [1]
    
    As current users of ptr_ring_resize_multiple() do not require
    hard irqs being masked, replace it to only block BH.
    
    Rename helpers to better reflect they are safe against BH only.
    
    - ptr_ring_resize_multiple() to ptr_ring_resize_multiple_bh()
    - skb_array_resize_multiple() to skb_array_resize_multiple_bh()
    
    [1]
    
    WARNING: CPU: 1 PID: 9150 at net/core/page_pool.c:709 __page_pool_put_page net/core/page_pool.c:709 [inline]
    WARNING: CPU: 1 PID: 9150 at net/core/page_pool.c:709 page_pool_put_unrefed_netmem+0x157/0xa40 net/core/page_pool.c:780
    Modules linked in:
    CPU: 1 UID: 0 PID: 9150 Comm: syz.1.1052 Not tainted 6.11.0-rc3-syzkaller-00202-gf8669d7b5f5d #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 08/06/2024
    RIP: 0010:__page_pool_put_page net/core/page_pool.c:709 [inline]
    RIP: 0010:page_pool_put_unrefed_netmem+0x157/0xa40 net/core/page_pool.c:780
    Code: 74 0e e8 7c aa fb f7 eb 43 e8 75 aa fb f7 eb 3c 65 8b 1d 38 a8 6a 76 31 ff 89 de e8 a3 ae fb f7 85 db 74 0b e8 5a aa fb f7 90 <0f> 0b 90 eb 1d 65 8b 1d 15 a8 6a 76 31 ff 89 de e8 84 ae fb f7 85
    RSP: 0018:ffffc9000bda6b58 EFLAGS: 00010083
    RAX: ffffffff8997e523 RBX: 0000000000000000 RCX: 0000000000040000
    RDX: ffffc9000fbd0000 RSI: 0000000000001842 RDI: 0000000000001843
    RBP: 0000000000000000 R08: ffffffff8997df2c R09: 1ffffd40003a000d
    R10: dffffc0000000000 R11: fffff940003a000e R12: ffffea0001d00040
    R13: ffff88802e8a4000 R14: dffffc0000000000 R15: 00000000ffffffff
    FS:  00007fb7aaf716c0(0000) GS:ffff8880b9300000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007fa15a0d4b72 CR3: 00000000561b0000 CR4: 00000000003506f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     tun_ptr_free drivers/net/tun.c:617 [inline]
     __ptr_ring_swap_queue include/linux/ptr_ring.h:571 [inline]
     ptr_ring_resize_multiple_noprof include/linux/ptr_ring.h:643 [inline]
     tun_queue_resize drivers/net/tun.c:3694 [inline]
     tun_device_event+0xaaf/0x1080 drivers/net/tun.c:3714
     notifier_call_chain+0x19f/0x3e0 kernel/notifier.c:93
     call_netdevice_notifiers_extack net/core/dev.c:2032 [inline]
     call_netdevice_notifiers net/core/dev.c:2046 [inline]
     dev_change_tx_queue_len+0x158/0x2a0 net/core/dev.c:9024
     do_setlink+0xff6/0x41f0 net/core/rtnetlink.c:2923
     rtnl_setlink+0x40d/0x5a0 net/core/rtnetlink.c:3201
     rtnetlink_rcv_msg+0x73f/0xcf0 net/core/rtnetlink.c:6647
     netlink_rcv_skb+0x1e3/0x430 net/netlink/af_netlink.c:2550
    
    Fixes: ff4e538c8c3e ("page_pool: add a lockdep check for recycling in hardirq")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/
    Signed-off-by: Eric Dumazet <[email protected]>
    Acked-by: Michael S. Tsirkin <[email protected]>
    Acked-by: Jason Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ 2c321f3f70bc ("mm: change inlined allocation helpers to account at the call site")
      is not ported to Linux-6.6.y. So remove the suffix "_noprof". ]
    Signed-off-by: Alva Lan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "net: Allow to use SMP threads for backlog NAPI." [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Wed Feb 4 14:49:18 2026 +0100

    Revert "net: Allow to use SMP threads for backlog NAPI."
    
    This reverts commit f3652768a89cfdaedbe2c9384299eea7ec435fef which is
    commit dad6b97702639fba27a2bd3e986982ad6f0db3a7 upstream.
    
    It is only for issues around PREEMPT_RT, which is not in the 6.6.y tree,
    so revert this for now.
    
    Link: https://lore.kernel.org/r/[email protected]
    Reported-by: Jakub Kicinski <[email protected]>
    Reported-by: Sebastian Andrzej Siewior <[email protected]>
    Cc: Paolo Abeni <[email protected]>
    Cc: Wen Yang <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Revert "net: Remove conditional threaded-NAPI wakeup based on task state." [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Wed Feb 4 14:51:26 2026 +0100

    Revert "net: Remove conditional threaded-NAPI wakeup based on task state."
    
    This reverts commit 03765d5c18084eab40351fda09bc6fc1a343cd07 which is
    commit 56364c910691f6d10ba88c964c9041b9ab777bd6 upstream.
    
    It is only for issues around PREEMPT_RT, which is not in the 6.6.y tree,
    so revert this for now.
    
    Link: https://lore.kernel.org/r/[email protected]
    Reported-by: Jakub Kicinski <[email protected]>
    Reported-by: Sebastian Andrzej Siewior <[email protected]>
    Cc: Paolo Abeni <[email protected]>
    Cc: Wen Yang <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
riscv: compat: fix COMPAT_UTS_MACHINE definition [+ + +]
Author: Han Gao <[email protected]>
Date:   Wed Jan 28 03:07:11 2026 +0800

    riscv: compat: fix COMPAT_UTS_MACHINE definition
    
    commit 0ea05c4f7527a98f5946f96c829733788934311d upstream.
    
    The COMPAT_UTS_MACHINE for riscv was incorrectly defined as "riscv".
    Change it to "riscv32" to reflect the correct 32-bit compat name.
    
    Fixes: 06d0e3723647 ("riscv: compat: Add basic compat data type implementation")
    Cc: [email protected]
    Signed-off-by: Han Gao <[email protected]>
    Reviewed-by: Guo Ren (Alibaba Damo Academy) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paul Walmsley <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
rocker: fix memory leak in rocker_world_port_post_fini() [+ + +]
Author: Kery Qi <[email protected]>
Date:   Sat Jan 24 05:10:31 2026 +0800

    rocker: fix memory leak in rocker_world_port_post_fini()
    
    [ Upstream commit 8d7ba71e46216b8657a82ca2ec118bc93812a4d0 ]
    
    In rocker_world_port_pre_init(), rocker_port->wpriv is allocated with
    kzalloc(wops->port_priv_size, GFP_KERNEL). However, in
    rocker_world_port_post_fini(), the memory is only freed when
    wops->port_post_fini callback is set:
    
        if (!wops->port_post_fini)
            return;
        wops->port_post_fini(rocker_port);
        kfree(rocker_port->wpriv);
    
    Since rocker_ofdpa_ops does not implement port_post_fini callback
    (it is NULL), the wpriv memory allocated for each port is never freed
    when ports are removed. This leads to a memory leak of
    sizeof(struct ofdpa_port) bytes per port on every device removal.
    
    Fix this by always calling kfree(rocker_port->wpriv) regardless of
    whether the port_post_fini callback exists.
    
    Fixes: e420114eef4a ("rocker: introduce worlds infrastructure")
    Signed-off-by: Kery Qi <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
rust: kbuild: give `--config-path` to `rustfmt` in `.rsi` target [+ + +]
Author: Miguel Ojeda <[email protected]>
Date:   Thu Jan 15 19:38:32 2026 +0100

    rust: kbuild: give `--config-path` to `rustfmt` in `.rsi` target
    
    commit af20ae33e7dd949f2e770198e74ac8f058cb299d upstream.
    
    `rustfmt` is configured via the `.rustfmt.toml` file in the source tree,
    and we apply `rustfmt` to the macro expanded sources generated by the
    `.rsi` target.
    
    However, under an `O=` pointing to an external folder (i.e. not just
    a subdir), `rustfmt` will not find the file when checking the parent
    folders. Since the edition is configured in this file, this can lead to
    errors when it encounters newer syntax, e.g.
    
        error: expected one of `!`, `.`, `::`, `;`, `?`, `where`, `{`, or an operator, found `"rust_minimal"`
          --> samples/rust/rust_minimal.rsi:29:49
           |
        28 | impl ::kernel::ModuleMetadata for RustMinimal {
           |                                               - while parsing this item list starting here
        29 |     const NAME: &'static ::kernel::str::CStr = c"rust_minimal";
           |                                                 ^^^^^^^^^^^^^^ expected one of 8 possible tokens
        30 | }
           | - the item list ends here
           |
           = note: you may be trying to write a c-string literal
           = note: c-string literals require Rust 2021 or later
           = help: pass `--edition 2024` to `rustc`
           = note: for more on editions, read https://doc.rust-lang.org/edition-guide
    
    A workaround is to use `RUSTFMT=n`, which is documented in the `Makefile`
    help for cases where macro expanded source may happen to break `rustfmt`
    for other reasons, but this is not one of those cases.
    
    One solution would be to pass `--edition`, but we want `rustfmt` to
    use the entire configuration, even if currently we essentially use the
    default configuration.
    
    Thus explicitly give the path to the config file to `rustfmt` instead.
    
    Reported-by: Alice Ryhl <[email protected]>
    Fixes: 2f7ab1267dc9 ("Kbuild: add Rust support")
    Cc: [email protected]
    Reviewed-by: Nathan Chancellor <[email protected]>
    Reviewed-by: Gary Guo <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
scripts: generate_rust_analyzer: Add compiler_builtins -> core dep [+ + +]
Author: Tamir Duberstein <[email protected]>
Date:   Wed Jul 23 11:39:40 2025 -0400

    scripts: generate_rust_analyzer: Add compiler_builtins -> core dep
    
    commit 5157c328edb35bac05ce77da473c3209d20e0bbb upstream.
    
    Add a dependency edge from `compiler_builtins` to `core` to
    `scripts/generate_rust_analyzer.py` to match `rust/Makefile`. This has
    been incorrect since commit 8c4555ccc55c ("scripts: add
    `generate_rust_analyzer.py`")
    
    Signed-off-by: Tamir Duberstein <[email protected]>
    Reviewed-by: Jesung Yang <[email protected]>
    Acked-by: Benno Lossin <[email protected]>
    Fixes: 8c4555ccc55c ("scripts: add `generate_rust_analyzer.py`")
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
scsi: be2iscsi: Fix a memory leak in beiscsi_boot_get_sinfo() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Sat Dec 13 16:36:43 2025 +0800

    scsi: be2iscsi: Fix a memory leak in beiscsi_boot_get_sinfo()
    
    commit 4747bafaa50115d9667ece446b1d2d4aba83dc7f upstream.
    
    If nonemb_cmd->va fails to be allocated, free the allocation previously
    made by alloc_mcc_wrb().
    
    Fixes: 50a4b824be9e ("scsi: be2iscsi: Fix to make boot discovery non-blocking")
    Cc: [email protected]
    Signed-off-by: Haoxiang Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: firewire: sbp-target: Fix overflow in sbp_make_tpg() [+ + +]
Author: Kery Qi <[email protected]>
Date:   Wed Jan 21 19:45:15 2026 +0800

    scsi: firewire: sbp-target: Fix overflow in sbp_make_tpg()
    
    [ Upstream commit b2d6b1d443009ed4da2d69f5423ab38e5780505a ]
    
    The code in sbp_make_tpg() limits "tpgt" to UINT_MAX but the data type of
    "tpg->tport_tpgt" is u16. This causes a type truncation issue.
    
    When a user creates a TPG via configfs mkdir, for example:
    
        mkdir /sys/kernel/config/target/sbp/<wwn>/tpgt_70000
    
    The value 70000 passes the "tpgt > UINT_MAX" check since 70000 is far less
    than 4294967295. However, when assigned to the u16 field tpg->tport_tpgt,
    the value is silently truncated to 4464 (70000 & 0xFFFF). This causes the
    value the user specified to differ from what is actually stored, leading to
    confusion and potential unexpected behavior.
    
    Fix this by changing the type of "tpgt" to u16 and using kstrtou16() which
    will properly reject values outside the u16 range.
    
    Fixes: a511ce339780 ("sbp-target: Initial merge of firewire/ieee-1394 target mode support")
    Signed-off-by: Kery Qi <[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: qla2xxx: edif: Fix dma_free_coherent() size [+ + +]
Author: Thomas Fourier <[email protected]>
Date:   Mon Jan 12 14:43:24 2026 +0100

    scsi: qla2xxx: edif: Fix dma_free_coherent() size
    
    commit 56bd3c0f749f45793d1eae1d0ddde4255c749bf6 upstream.
    
    Earlier in the function, the ha->flt buffer is allocated with size
    sizeof(struct qla_flt_header) + FLT_REGIONS_SIZE but freed in the error
    path with size SFP_DEV_SIZE.
    
    Fixes: 84318a9f01ce ("scsi: qla2xxx: edif: Add send, receive, and accept for auth_els")
    Cc: [email protected]
    Signed-off-by: Thomas Fourier <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
selftests: mptcp: check no dup close events after error [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Tue Jan 27 20:27:24 2026 +0100

    selftests: mptcp: check no dup close events after error
    
    commit 8467458dfa61b37e259e3485a5d3e415d08193c1 upstream.
    
    This validates the previous commit: subflow closed events are re-sent
    with less info when the initial subflow is disconnected after an error
    and each time a subflow is closed after that.
    
    In this new test, the userspace PM is involved because that's how it was
    discovered, but it is not specific to it. The initial subflow is
    terminated with a RESET, and that will cause the subflow disconnect.
    Then, a new subflow is initiated, but also got rejected, which cause a
    second subflow closed event, but not a third one.
    
    While at it, in case of failure to get the expected amount of events,
    the events are printed.
    
    The 'Fixes' tag here below is the same as the one from the previous
    commit: this patch here is not fixing anything wrong in the selftests,
    but it validates the previous fix for an issue introduced by this commit
    ID.
    
    Fixes: d82809b6c5f2 ("mptcp: avoid duplicated SUB_CLOSED events")
    Cc: [email protected]
    Reviewed-by: Geliang Tang <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

selftests: mptcp: check subflow errors in close events [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Tue Jan 27 20:27:26 2026 +0100

    selftests: mptcp: check subflow errors in close events
    
    commit 2ef9e3a3845d0a20b62b01f5b731debd0364688d upstream.
    
    This validates the previous commit: subflow closed events should contain
    an error field when a subflow got closed with an error, e.g. reset or
    timeout.
    
    For this test, the chk_evt_nr helper has been extended to check
    attributes in the matched events.
    
    In this test, the 2 subflow closed events should have an error.
    
    The 'Fixes' tag here below is the same as the one from the previous
    commit: this patch here is not fixing anything wrong in the selftests,
    but it validates the previous fix for an issue introduced by this commit
    ID.
    
    Fixes: 15cc10453398 ("mptcp: deliver ssk errors to msk")
    Cc: [email protected]
    Reviewed-by: Geliang Tang <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

selftests: mptcp: join: fix local endp not being tracked [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Tue Jan 27 20:27:27 2026 +0100

    selftests: mptcp: join: fix local endp not being tracked
    
    commit c5d5ecf21fdd9ce91e6116feb3aa83cee73352cc upstream.
    
    When running this mptcp_join.sh selftest on older kernel versions not
    supporting local endpoints tracking, this test fails because 3 MP_JOIN
    ACKs have been received, while only 2 were expected.
    
    It is not clear why only 2 MP_JOIN ACKs were expected on old kernel
    versions, while 3 MP_JOIN SYN and SYN+ACK were expected. When testing on
    the v5.15.197 kernel, 3 MP_JOIN ACKs are seen, which is also what is
    expected in the selftests included in this kernel version, see commit
    f4480eaad489 ("selftests: mptcp: add missing join check").
    
    Switch the expected MP_JOIN ACKs to 3. While at it, move this
    chk_join_nr helper out of the special condition for older kernel
    versions as it is now the same as with more recent ones. Also, invert
    the condition to be more logical: what's expected on newer kernel
    versions having such helper first.
    
    Fixes: d4c81bbb8600 ("selftests: mptcp: join: support local endpoint being tracked or not")
    Cc: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
team: Move team device type change at the end of team_port_add [+ + +]
Author: Nikola Z. Ivanov <[email protected]>
Date:   Tue Feb 3 12:45:57 2026 +0800

    team: Move team device type change at the end of team_port_add
    
    [ Upstream commit 0ae9cfc454ea5ead5f3ddbdfe2e70270d8e2c8ef ]
    
    Attempting to add a port device that is already up will expectedly fail,
    but not before modifying the team device header_ops.
    
    In the case of the syzbot reproducer the gre0 device is
    already in state UP when it attempts to add it as a
    port device of team0, this fails but before that
    header_ops->create of team0 is changed from eth_header to ipgre_header
    in the call to team_dev_type_check_change.
    
    Later when we end up in ipgre_header() struct ip_tunnel* points to nonsense
    as the private data of the device still holds a struct team.
    
    Example sequence of iproute2 commands to reproduce the hang/BUG():
    ip link add dev team0 type team
    ip link add dev gre0 type gre
    ip link set dev gre0 up
    ip link set dev gre0 master team0
    ip link set dev team0 up
    ping -I team0 1.1.1.1
    
    Move team_dev_type_check_change down where all other checks have passed
    as it changes the dev type with no way to restore it in case
    one of the checks that follow it fail.
    
    Also make sure to preserve the origial mtu assignment:
      - If port_dev is not the same type as dev, dev takes mtu from port_dev
      - If port_dev is the same type as dev, port_dev takes mtu from dev
    
    This is done by adding a conditional before the call to dev_set_mtu
    to prevent it from assigning port_dev->mtu = dev->mtu and instead
    letting team_dev_type_check_change assign dev->mtu = port_dev->mtu.
    The conditional is needed because the patch moves the call to
    team_dev_type_check_change past dev_set_mtu.
    
    Testing:
      - team device driver in-tree selftests
      - Add/remove various devices as slaves of team device
      - syzbot
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=a2a3b519de727b0f7903
    Fixes: 1d76efe1577b ("team: add support for non-ethernet devices")
    Signed-off-by: Nikola Z. Ivanov <[email protected]>
    Reviewed-by: Jiri Pirko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Rahul Sharma <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
wifi: ath11k: add srng->lock for ath11k_hal_srng_* in monitor mode [+ + +]
Author: Kang Yang <[email protected]>
Date:   Tue Feb 3 11:13:45 2026 +0800

    wifi: ath11k: add srng->lock for ath11k_hal_srng_* in monitor mode
    
    [ Upstream commit 63b7af49496d0e32f7a748b6af3361ec138b1bd3 ]
    
    ath11k_hal_srng_* should be used with srng->lock to protect srng data.
    
    For ath11k_dp_rx_mon_dest_process() and ath11k_dp_full_mon_process_rx(),
    they use ath11k_hal_srng_* for many times but never call srng->lock.
    
    So when running (full) monitor mode, warning will occur:
    RIP: 0010:ath11k_hal_srng_dst_peek+0x18/0x30 [ath11k]
    Call Trace:
     ? ath11k_hal_srng_dst_peek+0x18/0x30 [ath11k]
     ath11k_dp_rx_process_mon_status+0xc45/0x1190 [ath11k]
     ? idr_alloc_u32+0x97/0xd0
     ath11k_dp_rx_process_mon_rings+0x32a/0x550 [ath11k]
     ath11k_dp_service_srng+0x289/0x5a0 [ath11k]
     ath11k_pcic_ext_grp_napi_poll+0x30/0xd0 [ath11k]
     __napi_poll+0x30/0x1f0
     net_rx_action+0x198/0x320
     __do_softirq+0xdd/0x319
    
    So add srng->lock for them to avoid such warnings.
    
    Inorder to fetch the srng->lock, should change srng's definition from
    'void' to 'struct hal_srng'. And initialize them elsewhere to prevent
    one line of code from being too long. This is consistent with other ring
    process functions, such as ath11k_dp_process_rx().
    
    Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.30
    Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
    
    Fixes: d5c65159f289 ("ath11k: driver for Qualcomm IEEE 802.11ax devices")
    Signed-off-by: Kang Yang <[email protected]>
    Acked-by: Jeff Johnson <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Li hongliang <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: mac80211: move TDLS work to wiphy work [+ + +]
Author: Johannes Berg <[email protected]>
Date:   Mon Feb 2 18:47:45 2026 +0200

    wifi: mac80211: move TDLS work to wiphy work
    
    [ Upstream commit 777b26002b73127e81643d9286fadf3d41e0e477 ]
    
    Again, to have the wiphy locked for it.
    
    Reviewed-by: Emmanuel Grumbach <[email protected]>
    Signed-off-by: Johannes Berg <[email protected]>
    (cherry picked from commit 777b26002b73127e81643d9286fadf3d41e0e477)
    Signed-off-by: Hanne-Lotta Mäenpää <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
writeback: fix 100% CPU usage when dirtytime_expire_interval is 0 [+ + +]
Author: Laveesh Bansal <[email protected]>
Date:   Tue Feb 3 15:12:22 2026 -0500

    writeback: fix 100% CPU usage when dirtytime_expire_interval is 0
    
    [ Upstream commit 543467d6fe97e27e22a26e367fda972dbefebbff ]
    
    When vm.dirtytime_expire_seconds is set to 0, wakeup_dirtytime_writeback()
    schedules delayed work with a delay of 0, causing immediate execution.
    The function then reschedules itself with 0 delay again, creating an
    infinite busy loop that causes 100% kworker CPU usage.
    
    Fix by:
    - Only scheduling delayed work in wakeup_dirtytime_writeback() when
      dirtytime_expire_interval is non-zero
    - Cancelling the delayed work in dirtytime_interval_handler() when
      the interval is set to 0
    - Adding a guard in start_dirtytime_writeback() for defensive coding
    
    Tested by booting kernel in QEMU with virtme-ng:
    - Before fix: kworker CPU spikes to ~73%
    - After fix: CPU remains at normal levels
    - Setting interval back to non-zero correctly resumes writeback
    
    Fixes: a2f4870697a5 ("fs: make sure the timestamps for lazytime inodes eventually get written")
    Cc: [email protected]
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220227
    Signed-off-by: Laveesh Bansal <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Jan Kara <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    [ adapted system_percpu_wq to system_wq for the workqueue used in dirtytime_interval_handler() ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
xsk: Fix race condition in AF_XDP generic RX path [+ + +]
Author: e.kubanski <[email protected]>
Date:   Wed Feb 4 16:29:20 2026 +0800

    xsk: Fix race condition in AF_XDP generic RX path
    
    [ Upstream commit a1356ac7749cafc4e27aa62c0c4604b5dca4983e ]
    
    Move rx_lock from xsk_socket to xsk_buff_pool.
    Fix synchronization for shared umem mode in
    generic RX path where multiple sockets share
    single xsk_buff_pool.
    
    RX queue is exclusive to xsk_socket, while FILL
    queue can be shared between multiple sockets.
    This could result in race condition where two
    CPU cores access RX path of two different sockets
    sharing the same umem.
    
    Protect both queues by acquiring spinlock in shared
    xsk_buff_pool.
    
    Lock contention may be minimized in the future by some
    per-thread FQ buffering.
    
    It's safe and necessary to move spin_lock_bh(rx_lock)
    after xsk_rcv_check():
    * xs->pool and spinlock_init is synchronized by
      xsk_bind() -> xsk_is_bound() memory barriers.
    * xsk_rcv_check() may return true at the moment
      of xsk_release() or xsk_unbind_dev(),
      however this will not cause any data races or
      race conditions. xsk_unbind_dev() removes xdp
      socket from all maps and waits for completion
      of all outstanding rx operations. Packets in
      RX path will either complete safely or drop.
    
    Signed-off-by: Eryk Kubanski <[email protected]>
    Fixes: bf0bdd1343efb ("xdp: fix race on generic receive path")
    Acked-by: Magnus Karlsson <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ Conflict is resolved when backporting this fix. ]
    Signed-off-by: Jianqiang kang <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>