Changelog in Linux kernel 6.18.9

 
ALSA: hda/realtek: fix right sounds and mute/micmute LEDs for HP machine [+ + +]
Author: Zhang Heng <[email protected]>
Date:   Mon Jan 26 15:35:07 2026 +0800

    ALSA: hda/realtek: fix right sounds and mute/micmute LEDs for HP machine
    
    commit 891b77d459d0ce993c68365d899134bc9fd47ac0 upstream.
    
    The HP EliteBook 630 G11 (103c:8c8f) is using ALC236 codec which used 0x02
    to control mute LED and 0x01 to control micmute LED. Therefore, add a quirk
    to make it works.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=220828
    Cc: <[email protected]>
    Signed-off-by: Zhang Heng <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[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]>

ASoC: soc-acpi-intel-ptl-match: fix name_prefix of rt1320-2 [+ + +]
Author: Bard Liao <[email protected]>
Date:   Fri Jan 23 19:38:09 2026 +0800

    ASoC: soc-acpi-intel-ptl-match: fix name_prefix of rt1320-2
    
    [ Upstream commit 403a0591be681eebc0c4825f8b42afe7fd13ee7f ]
    
    rt1320_2_group2_adr works with rt1320_1_group2_adr and the name_prefix
    should be rt1320-2.
    
    Fixes: ffe450cb6bce ("ASoC: Intel: soc-acpi-intel-ptl-match: add rt713_vb_l3_rt1320_l12 support")
    Signed-off-by: Bard Liao <[email protected]>
    Reviewed-by: Péter Ujfalusi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bcache: fix I/O accounting leak in detached_dev_do_request [+ + +]
Author: Shida Zhang <[email protected]>
Date:   Tue Jan 27 16:21:12 2026 +0800

    bcache: fix I/O accounting leak in detached_dev_do_request
    
    [ Upstream commit 4da7c5c3ec34d839bba6e035c3d05c447a2f9d4f ]
    
    When a bcache device is detached, discard requests are completed
    immediately. However, the I/O accounting started in
    cached_dev_make_request() is not ended, leading to 100% disk
    utilization reports in iostat. Add the missing bio_end_io_acct() call.
    
    Fixes: cafe56359144 ("bcache: A block layer cache")
    Signed-off-by: Shida Zhang <[email protected]>
    Acked-by: Coly Li <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bcache: fix improper use of bi_end_io [+ + +]
Author: Shida Zhang <[email protected]>
Date:   Tue Dec 9 17:01:56 2025 +0800

    bcache: fix improper use of bi_end_io
    
    [ Upstream commit 53280e398471f0bddbb17b798a63d41264651325 ]
    
    Don't call bio->bi_end_io() directly. Use the bio_endio() helper
    function instead, which handles completion more safely and uniformly.
    
    Suggested-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Shida Zhang <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Stable-dep-of: 4da7c5c3ec34 ("bcache: fix I/O accounting leak in detached_dev_do_request")
    Signed-off-by: Sasha Levin <[email protected]>

bcache: use bio cloning for detached device requests [+ + +]
Author: Shida Zhang <[email protected]>
Date:   Thu Jan 22 14:13:21 2026 +0800

    bcache: use bio cloning for detached device requests
    
    [ Upstream commit 3ef825dfd4e487d6f92b23ee2df2455814583ef4 ]
    
    Previously, bcache hijacked the bi_end_io and bi_private fields of
    the incoming bio when the backing device was in a detached state.
    This is fragile and breaks if the bio is needed to be processed by
    other layers.
    
    This patch transitions to using a cloned bio embedded within a private
    structure. This ensures the original bio's metadata remains untouched.
    
    Fixes: 53280e398471 ("bcache: fix improper use of bi_end_io")
    Co-developed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Shida Zhang <[email protected]>
    Acked-by: Coly Li <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Stable-dep-of: 4da7c5c3ec34 ("bcache: fix I/O accounting leak in detached_dev_do_request")
    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]>

Bluetooth: MGMT: Fix memory leak in set_ssp_complete [+ + +]
Author: Jianpeng Chang <[email protected]>
Date:   Wed Jan 21 13:29:26 2026 +0800

    Bluetooth: MGMT: Fix memory leak in set_ssp_complete
    
    [ Upstream commit 1b9c17fd0a7fdcbe69ec5d6fe8e50bc5ed7f01f2 ]
    
    Fix memory leak in set_ssp_complete() where mgmt_pending_cmd structures
    are not freed after being removed from the pending list.
    
    Commit 302a1f674c00 ("Bluetooth: MGMT: Fix possible UAFs") replaced
    mgmt_pending_foreach() calls with individual command handling but missed
    adding mgmt_pending_free() calls in both error and success paths of
    set_ssp_complete(). Other completion functions like set_le_complete()
    were fixed correctly in the same commit.
    
    This causes a memory leak of the mgmt_pending_cmd structure and its
    associated parameter data for each SSP command that completes.
    
    Add the missing mgmt_pending_free(cmd) calls in both code paths to fix
    the memory leak. Also fix the same issue in set_advertising_complete().
    
    Fixes: 302a1f674c00 ("Bluetooth: MGMT: Fix possible UAFs")
    Signed-off-by: Jianpeng Chang <[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]>

bonding: fix use-after-free due to enslave fail after slave array update [+ + +]
Author: Nikolay Aleksandrov <[email protected]>
Date:   Fri Jan 23 14:06:59 2026 +0200

    bonding: fix use-after-free due to enslave fail after slave array update
    
    [ Upstream commit e9acda52fd2ee0cdca332f996da7a95c5fd25294 ]
    
    Fix a use-after-free which happens due to enslave failure after the new
    slave has been added to the array. Since the new slave can be used for Tx
    immediately, we can use it after it has been freed by the enslave error
    cleanup path which frees the allocated slave memory. Slave update array is
    supposed to be called last when further enslave failures are not expected.
    Move it after xdp setup to avoid any problems.
    
    It is very easy to reproduce the problem with a simple xdp_pass prog:
     ip l add bond1 type bond mode balance-xor
     ip l set bond1 up
     ip l set dev bond1 xdp object xdp_pass.o sec xdp_pass
     ip l add dumdum type dummy
    
    Then run in parallel:
     while :; do ip l set dumdum master bond1 1>/dev/null 2>&1; done;
     mausezahn bond1 -a own -b rand -A rand -B 1.1.1.1 -c 0 -t tcp "dp=1-1023, flags=syn"
    
    The crash happens almost immediately:
     [  605.602850] Oops: general protection fault, probably for non-canonical address 0xe0e6fc2460000137: 0000 [#1] SMP KASAN NOPTI
     [  605.602916] KASAN: maybe wild-memory-access in range [0x07380123000009b8-0x07380123000009bf]
     [  605.602946] CPU: 0 UID: 0 PID: 2445 Comm: mausezahn Kdump: loaded Tainted: G    B               6.19.0-rc6+ #21 PREEMPT(voluntary)
     [  605.602979] Tainted: [B]=BAD_PAGE
     [  605.602998] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
     [  605.603032] RIP: 0010:netdev_core_pick_tx+0xcd/0x210
     [  605.603063] Code: 48 89 fa 48 c1 ea 03 80 3c 02 00 0f 85 3e 01 00 00 48 b8 00 00 00 00 00 fc ff df 4c 8b 6b 08 49 8d 7d 30 48 89 fa 48 c1 ea 03 <80> 3c 02 00 0f 85 25 01 00 00 49 8b 45 30 4c 89 e2 48 89 ee 48 89
     [  605.603111] RSP: 0018:ffff88817b9af348 EFLAGS: 00010213
     [  605.603145] RAX: dffffc0000000000 RBX: ffff88817d28b420 RCX: 0000000000000000
     [  605.603172] RDX: 00e7002460000137 RSI: 0000000000000008 RDI: 07380123000009be
     [  605.603199] RBP: ffff88817b541a00 R08: 0000000000000001 R09: fffffbfff3ed8c0c
     [  605.603226] R10: ffffffff9f6c6067 R11: 0000000000000001 R12: 0000000000000000
     [  605.603253] R13: 073801230000098e R14: ffff88817d28b448 R15: ffff88817b541a84
     [  605.603286] FS:  00007f6570ef67c0(0000) GS:ffff888221dfa000(0000) knlGS:0000000000000000
     [  605.603319] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     [  605.603343] CR2: 00007f65712fae40 CR3: 000000011371b000 CR4: 0000000000350ef0
     [  605.603373] Call Trace:
     [  605.603392]  <TASK>
     [  605.603410]  __dev_queue_xmit+0x448/0x32a0
     [  605.603434]  ? __pfx_vprintk_emit+0x10/0x10
     [  605.603461]  ? __pfx_vprintk_emit+0x10/0x10
     [  605.603484]  ? __pfx___dev_queue_xmit+0x10/0x10
     [  605.603507]  ? bond_start_xmit+0xbfb/0xc20 [bonding]
     [  605.603546]  ? _printk+0xcb/0x100
     [  605.603566]  ? __pfx__printk+0x10/0x10
     [  605.603589]  ? bond_start_xmit+0xbfb/0xc20 [bonding]
     [  605.603627]  ? add_taint+0x5e/0x70
     [  605.603648]  ? add_taint+0x2a/0x70
     [  605.603670]  ? end_report.cold+0x51/0x75
     [  605.603693]  ? bond_start_xmit+0xbfb/0xc20 [bonding]
     [  605.603731]  bond_start_xmit+0x623/0xc20 [bonding]
    
    Fixes: 9e2ee5c7e7c3 ("net, bonding: Add XDP support to the bonding driver")
    Signed-off-by: Nikolay Aleksandrov <[email protected]>
    Reported-by: Chen Zhen <[email protected]>
    Closes: https://lore.kernel.org/netdev/[email protected]/
    CC: Jussi Maki <[email protected]>
    CC: Daniel Borkmann <[email protected]>
    Acked-by: Daniel Borkmann <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
btrfs: do not strictly require dirty metadata threshold for metadata writepages [+ + +]
Author: Qu Wenruo <[email protected]>
Date:   Mon Jan 19 17:31:19 2026 +1030

    btrfs: do not strictly require dirty metadata threshold for metadata writepages
    
    commit 4e159150a9a56d66d247f4b5510bed46fe58aa1c upstream.
    
    [BUG]
    There is an internal report that over 1000 processes are
    waiting at the io_schedule_timeout() of balance_dirty_pages(), causing
    a system hang and trigger a kernel coredump.
    
    The kernel is v6.4 kernel based, but the root problem still applies to
    any upstream kernel before v6.18.
    
    [CAUSE]
    From Jan Kara for his wisdom on the dirty page balance behavior first.
    
      This cgroup dirty limit was what was actually playing the role here
      because the cgroup had only a small amount of memory and so the dirty
      limit for it was something like 16MB.
    
      Dirty throttling is responsible for enforcing that nobody can dirty
      (significantly) more dirty memory than there's dirty limit. Thus when
      a task is dirtying pages it periodically enters into balance_dirty_pages()
      and we let it sleep there to slow down the dirtying.
    
      When the system is over dirty limit already (either globally or within
      a cgroup of the running task), we will not let the task exit from
      balance_dirty_pages() until the number of dirty pages drops below the
      limit.
    
      So in this particular case, as I already mentioned, there was a cgroup
      with relatively small amount of memory and as a result with dirty limit
      set at 16MB. A task from that cgroup has dirtied about 28MB worth of
      pages in btrfs btree inode and these were practically the only dirty
      pages in that cgroup.
    
    So that means the only way to reduce the dirty pages of that cgroup is
    to writeback the dirty pages of btrfs btree inode, and only after that
    those processes can exit balance_dirty_pages().
    
    Now back to the btrfs part, btree_writepages() is responsible for
    writing back dirty btree inode pages.
    
    The problem here is, there is a btrfs internal threshold that if the
    btree inode's dirty bytes are below the 32M threshold, it will not
    do any writeback.
    
    This behavior is to batch as much metadata as possible so we won't write
    back those tree blocks and then later re-COW them again for another
    modification.
    
    This internal 32MiB is higher than the existing dirty page size (28MiB),
    meaning no writeback will happen, causing a deadlock between btrfs and
    cgroup:
    
    - Btrfs doesn't want to write back btree inode until more dirty pages
    
    - Cgroup/MM doesn't want more dirty pages for btrfs btree inode
      Thus any process touching that btree inode is put into sleep until
      the number of dirty pages is reduced.
    
    Thanks Jan Kara a lot for the analysis of the root cause.
    
    [ENHANCEMENT]
    Since kernel commit b55102826d7d ("btrfs: set AS_KERNEL_FILE on the
    btree_inode"), btrfs btree inode pages will only be charged to the root
    cgroup which should have a much larger limit than btrfs' 32MiB
    threshold.
    So it should not affect newer kernels.
    
    But for all current LTS kernels, they are all affected by this problem,
    and backporting the whole AS_KERNEL_FILE may not be a good idea.
    
    Even for newer kernels I still think it's a good idea to get
    rid of the internal threshold at btree_writepages(), since for most cases
    cgroup/MM has a better view of full system memory usage than btrfs' fixed
    threshold.
    
    For internal callers using btrfs_btree_balance_dirty() since that
    function is already doing internal threshold check, we don't need to
    bother them.
    
    But for external callers of btree_writepages(), just respect their
    requests and write back whatever they want, ignoring the internal
    btrfs threshold to avoid such deadlock on btree inode dirty page
    balancing.
    
    CC: [email protected]
    CC: Jan Kara <[email protected]>
    Reviewed-by: Boris Burkov <[email protected]>
    Signed-off-by: Qu Wenruo <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: zlib: fix the folio leak on S390 hardware acceleration [+ + +]
Author: Qu Wenruo <[email protected]>
Date:   Mon Jan 19 16:24:04 2026 +1030

    btrfs: zlib: fix the folio leak on S390 hardware acceleration
    
    [ Upstream commit 0d0f1314e8f86f5205f71f9e31e272a1d008e40b ]
    
    [BUG]
    After commit aa60fe12b4f4 ("btrfs: zlib: refactor S390x HW acceleration
    buffer preparation"), we no longer release the folio of the page cache
    of folio returned by btrfs_compress_filemap_get_folio() for S390
    hardware acceleration path.
    
    [CAUSE]
    Before that commit, we call kumap_local() and folio_put() after handling
    each folio.
    
    Although the timing is not ideal (it release previous folio at the
    beginning of the loop, and rely on some extra cleanup out of the loop),
    it at least handles the folio release correctly.
    
    Meanwhile the refactored code is easier to read, it lacks the call to
    release the filemap folio.
    
    [FIX]
    Add the missing folio_put() for copy_data_into_buffer().
    
    CC: [email protected] # 6.18+
    Fixes: aa60fe12b4f4 ("btrfs: zlib: refactor S390x HW acceleration buffer preparation")
    Reviewed-by: Boris Burkov <[email protected]>
    Signed-off-by: Qu Wenruo <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
can: at91_can: Fix memory leak in at91_can_probe() [+ + +]
Author: Zilin Guan <[email protected]>
Date:   Thu Jan 22 11:41:28 2026 +0000

    can: at91_can: Fix memory leak in at91_can_probe()
    
    [ Upstream commit 0baa4d3170d72a2a8dc93bf729d6d04ad113dc72 ]
    
    In at91_can_probe(), the dev structure is allocated via alloc_candev().
    However, if the subsequent call to devm_phy_optional_get() fails, the
    code jumps directly to exit_iounmap, missing the call to free_candev().
    This results in a memory leak of the allocated net_device structure.
    
    Fix this by jumping to the exit_free label instead, which ensures that
    free_candev() is called to properly release the memory.
    
    Compile tested only. Issue found using a prototype static analysis tool
    and code review.
    
    Fixes: 3ecc09856afb ("can: at91_can: add CAN transceiver support")
    Signed-off-by: Zilin Guan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Sasha Levin <[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/pm: fix race in power state check before mutex lock [+ + +]
Author: Yang Wang <[email protected]>
Date:   Tue Jan 27 11:07:07 2026 +0800

    drm/amd/pm: fix race in power state check before mutex lock
    
    [ Upstream commit ee8d07cd5730038e33bf5e551448190bbd480eb8 ]
    
    The power state check in amdgpu_dpm_set_powergating_by_smu() is done
    before acquiring the pm mutex, leading to a race condition where:
    1. Thread A checks state and thinks no change is needed
    2. Thread B acquires mutex and modifies the state
    3. Thread A returns without updating state, causing inconsistency
    
    Fix this by moving the mutex lock before the power state check,
    ensuring atomicity of the state check and modification.
    
    Fixes: 6ee27ee27ba8 ("drm/amd/pm: avoid duplicate powergate/ungate setting")
    Signed-off-by: Yang Wang <[email protected]>
    Reviewed-by: Kenneth Feng <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 7a3fbdfd19ec5992c0fc2d0bd83888644f5f2f38)
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/pm: fix smu v13 soft clock frequency setting issue [+ + +]
Author: Yang Wang <[email protected]>
Date:   Wed Jan 21 11:04:06 2026 +0800

    drm/amd/pm: fix smu v13 soft clock frequency setting issue
    
    commit c764b7af15289051718b4859a67f9a3bc69d3fb2 upstream.
    
    v1:
    resolve the issue where some freq frequencies cannot be set correctly
    due to insufficient floating-point precision.
    
    v2:
    patch this convert on 'max' value only.
    
    Signed-off-by: Yang Wang <[email protected]>
    Reviewed-by: Alex Deucher <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 6194f60c707e3878e120adeb36997075664d8429)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amd/pm: fix smu v14 soft clock frequency setting issue [+ + +]
Author: Yang Wang <[email protected]>
Date:   Wed Jan 21 11:06:29 2026 +0800

    drm/amd/pm: fix smu v14 soft clock frequency setting issue
    
    commit 239d0ccf567c3b09aed58eb88cd3376af37aaf14 upstream.
    
    v1:
    resolve the issue where some freq frequencies cannot be set correctly
    due to insufficient floating-point precision.
    
    v2:
    patch this convert on 'max' value only.
    
    Signed-off-by: Yang Wang <[email protected]>
    Reviewed-by: Alex Deucher <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 53868dd8774344051999c880115740da92f97feb)
    Cc: [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: adjust KGQ reset sequence [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Wed Jan 28 22:55:46 2026 -0500

    drm/amdgpu/gfx11: adjust KGQ reset sequence
    
    commit 3eb46fbb601f9a0b4df8eba79252a0a85e983044 upstream.
    
    Kernel gfx queues do not need to be reinitialized or
    remapped after a reset.  This fixes queue reset failures
    on APUs.
    
    v2: preserve init and remap for MMIO case.
    
    Fixes: b3e9bfd86658 ("drm/amdgpu/gfx11: add ring reset callbacks")
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4789
    Reviewed-by: Timur Kristóf <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit b340ff216fdabfe71ba0cdd47e9835a141d08e10)
    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/gfx12: adjust KGQ reset sequence [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Wed Jan 28 23:05:50 2026 -0500

    drm/amdgpu/gfx12: adjust KGQ reset sequence
    
    commit dfd64f6e8cd7b59238cdaf8af7a55711f13a89db upstream.
    
    Kernel gfx queues do not need to be reinitialized or
    remapped after a reset.  Align with gfx11.
    
    v2: preserve init and remap for MMIO case.
    
    Reviewed-by: Timur Kristóf <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 0a6d6ed694d72b66b0ed7a483d5effa01acd3951)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

    drm/amdgpu/gfx12: fix wptr reset in KGQ init
    
    commit 9077d32a4b570fa20500aa26e149981c366c965d 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 a2918f958d3f677ea93c0ac257cb6ba69b7abb7c)
    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 cond_exec handling in amdgpu_ib_schedule() [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Mon Jan 26 23:44:45 2026 -0500

    drm/amdgpu: Fix cond_exec handling in amdgpu_ib_schedule()
    
    commit b1defcdc4457649db236415ee618a7151e28788c upstream.
    
    The EXEC_COUNT field must be > 0.  In the gfx shadow
    handling we always emit a cond_exec packet after the gfx_shadow
    packet, but the EXEC_COUNT never gets patched.  This leads
    to a hang when we try and reset queues on gfx11 APUs.
    
    Fixes: c68cbbfd54c6 ("drm/amdgpu: cleanup conditional execution")
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4789
    Reviewed-by: Jesse Zhang <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit ba205ac3d6e83f56c4f824f23f1b4522cb844ff3)
    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:   Sat Dec 20 15:04:40 2025 +0200

    drm/amdgpu: fix NULL pointer dereference in amdgpu_gmc_filter_faults_remove
    
    commit 8b1ecc9377bc641533cd9e76dfa3aee3cd04a007 upstream.
    
    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: 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:   Sun Dec 21 17:45:52 2025 +0100

    drm/msm/a6xx: fix bogus hwcg register updates
    
    commit dedb897f11c5d7e32c0e0a0eff7cec23a8047167 upstream.
    
    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)
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/tyr: depend on `COMMON_CLK` to fix build error [+ + +]
Author: Miguel Ojeda <[email protected]>
Date:   Sat Jan 24 17:09:48 2026 +0100

    drm/tyr: depend on `COMMON_CLK` to fix build error
    
    commit b0581f6ab952ffd135ca4402d2ee3da641538d6b upstream.
    
    Tyr needs `CONFIG_COMMON_CLK` to build:
    
        error[E0432]: unresolved import `kernel::clk::Clk`
         --> drivers/gpu/drm/tyr/driver.rs:3:5
          |
        3 | use kernel::clk::Clk;
          |     ^^^^^^^^^^^^^^^^ no `Clk` in `clk`
    
        error[E0432]: unresolved import `kernel::clk::OptionalClk`
         --> drivers/gpu/drm/tyr/driver.rs:4:5
          |
        4 | use kernel::clk::OptionalClk;
          |     ^^^^^^^^^^^^^^^^^^^^^^^^ no `OptionalClk` in `clk`
    
    Thus add the dependency to fix it.
    
    Fixes: cf4fd52e3236 ("rust: drm: Introduce the Tyr driver for Arm Mali GPUs")
    Cc: [email protected]
    Acked-by: Alice Ryhl <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/xe/configfs: Fix is_bound() pci_dev lifetime [+ + +]
Author: Shuicheng Lin <[email protected]>
Date:   Wed Jan 21 17:37:51 2026 +0000

    drm/xe/configfs: Fix is_bound() pci_dev lifetime
    
    [ Upstream commit c1ed856c09d0d730c2f63bbb757cb6011db148f9 ]
    
    Move pci_dev_put() after pci_dbg() to avoid using pdev after dropping its
    reference.
    
    Fixes: 2674f1ef29f46 ("drm/xe/configfs: Block runtime attribute changes")
    Signed-off-by: Shuicheng Lin <[email protected]>
    Reviewed-by: Ashutosh Dixit <[email protected]>
    Signed-off-by: Ashutosh Dixit <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    (cherry picked from commit 63b33604365bdca43dee41bab809da2230491036)
    Signed-off-by: Thomas Hellström <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/xe/nvm: Fix double-free on aux add failure [+ + +]
Author: Shuicheng Lin <[email protected]>
Date:   Tue Jan 20 18:32:42 2026 +0000

    drm/xe/nvm: Fix double-free on aux add failure
    
    [ Upstream commit 8a44241b0b83a6047c5448da1fff03fcc29496b5 ]
    
    After a successful auxiliary_device_init(), aux_dev->dev.release
    (xe_nvm_release_dev()) is responsible for the kfree(nvm). When
    there is failure with auxiliary_device_add(), driver will call
    auxiliary_device_uninit(), which call put_device(). So that the
    .release callback will be triggered to free the memory associated
    with the auxiliary_device.
    
    Move the kfree(nvm) into the auxiliary_device_init() failure path
    and remove the err goto path to fix below error.
    
    "
    [   13.232905] ==================================================================
    [   13.232911] BUG: KASAN: double-free in xe_nvm_init+0x751/0xf10 [xe]
    [   13.233112] Free of addr ffff888120635000 by task systemd-udevd/273
    
    [   13.233120] CPU: 8 UID: 0 PID: 273 Comm: systemd-udevd Not tainted 6.19.0-rc2-lgci-xe-kernel+ #225 PREEMPT(voluntary)
    ...
    [   13.233125] Call Trace:
    [   13.233126]  <TASK>
    [   13.233127]  dump_stack_lvl+0x7f/0xc0
    [   13.233132]  print_report+0xce/0x610
    [   13.233136]  ? kasan_complete_mode_report_info+0x5d/0x1e0
    [   13.233139]  ? xe_nvm_init+0x751/0xf10 [xe]
    ...
    "
    
    v2: drop err goto path. (Alexander)
    
    Fixes: 7926ba2143d8 ("drm/xe: defer free of NVM auxiliary container to device release callback")
    Reviewed-by: Nitin Gote <[email protected]>
    Reviewed-by: Brian Nguyen <[email protected]>
    Cc: Alexander Usyskin <[email protected]>
    Cc: Rodrigo Vivi <[email protected]>
    Suggested-by: Brian Nguyen <[email protected]>
    Signed-off-by: Shuicheng Lin <[email protected]>
    Signed-off-by: Ashutosh Dixit <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    (cherry picked from commit a3187c0c2bbd947ffff97f90d077ac88f9c2a215)
    Signed-off-by: Thomas Hellström <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/xe/nvm: Manage nvm aux cleanup with devres [+ + +]
Author: Shuicheng Lin <[email protected]>
Date:   Tue Jan 20 18:32:41 2026 +0000

    drm/xe/nvm: Manage nvm aux cleanup with devres
    
    [ Upstream commit 2da8fbb8f1c17129a08c1e0e42c71eabdca76062 ]
    
    Move nvm teardown to a devm-managed action registered from xe_nvm_init().
    This ensures the auxiliary NVM device is deleted on probe failure and
    device detach without requiring explicit calls from remove paths.
    
    As part of this, drop xe_nvm_fini() from xe_device_remove() and from the
    survivability sysfs teardown, and remove the public xe_nvm_fini() API from
    the header.
    
    This is to fix below warn message when there is probe failure after
    xe_nvm_init(), then xe_device_probe() is called again:
    "
    [  207.318152] sysfs: cannot create duplicate filename '/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:03:00.0/xe.nvm.768'
    [  207.318157] CPU: 5 UID: 0 PID: 10261 Comm: modprobe Tainted: G    B   W           6.19.0-rc2-lgci-xe-kernel+ #223 PREEMPT(voluntary)
    [  207.318160] Tainted: [B]=BAD_PAGE, [W]=WARN
    [  207.318161] Hardware name: ASUS System Product Name/PRIME Z790-P WIFI, BIOS 0812 02/24/2023
    [  207.318163] Call Trace:
    [  207.318163]  <TASK>
    [  207.318165]  dump_stack_lvl+0xa0/0xc0
    [  207.318170]  dump_stack+0x10/0x20
    [  207.318171]  sysfs_warn_dup+0xd5/0x110
    [  207.318175]  sysfs_create_dir_ns+0x1f6/0x280
    [  207.318177]  ? __pfx_sysfs_create_dir_ns+0x10/0x10
    [  207.318179]  ? lock_acquire+0x1a4/0x2e0
    [  207.318182]  ? __kasan_check_read+0x11/0x20
    [  207.318185]  ? do_raw_spin_unlock+0x5c/0x240
    [  207.318187]  kobject_add_internal+0x28d/0x8e0
    [  207.318189]  kobject_add+0x11f/0x1f0
    [  207.318191]  ? __pfx_kobject_add+0x10/0x10
    [  207.318193]  ? lockdep_init_map_type+0x4b/0x230
    [  207.318195]  ? get_device_parent.isra.0+0x43/0x4c0
    [  207.318197]  ? kobject_get+0x55/0xf0
    [  207.318199]  device_add+0x2d7/0x1500
    [  207.318201]  ? __pfx_device_add+0x10/0x10
    [  207.318203]  ? lockdep_init_map_type+0x4b/0x230
    [  207.318205]  __auxiliary_device_add+0x99/0x140
    [  207.318208]  xe_nvm_init+0x7a2/0xef0 [xe]
    [  207.318333]  ? xe_devcoredump_init+0x80/0x110 [xe]
    [  207.318452]  ? __devm_add_action+0x82/0xc0
    [  207.318454]  ? fs_reclaim_release+0xc0/0x110
    [  207.318457]  xe_device_probe+0x17dd/0x2c40 [xe]
    [  207.318574]  ? __pfx___drm_dev_dbg+0x10/0x10
    [  207.318576]  ? add_dr+0x180/0x220
    [  207.318579]  ? __pfx___drmm_mutex_release+0x10/0x10
    [  207.318582]  ? __pfx_xe_device_probe+0x10/0x10 [xe]
    [  207.318697]  ? xe_pm_init_early+0x33a/0x410 [xe]
    [  207.318850]  xe_pci_probe+0x936/0x1250 [xe]
    [  207.318999]  ? lock_acquire+0x1a4/0x2e0
    [  207.319003]  ? __pfx_xe_pci_probe+0x10/0x10 [xe]
    [  207.319151]  local_pci_probe+0xe6/0x1a0
    [  207.319154]  pci_device_probe+0x523/0x840
    [  207.319157]  ? __pfx_pci_device_probe+0x10/0x10
    [  207.319159]  ? sysfs_do_create_link_sd.isra.0+0x8c/0x110
    [  207.319162]  ? sysfs_create_link+0x48/0xc0
    ...
    "
    
    Fixes: c28bfb107dac ("drm/xe/nvm: add on-die non-volatile memory device")
    Reviewed-by: Alexander Usyskin <[email protected]>
    Reviewed-by: Brian Nguyen <[email protected]>
    Cc: Rodrigo Vivi <[email protected]>
    Cc: Riana Tauro <[email protected]>
    Signed-off-by: Shuicheng Lin <[email protected]>
    Signed-off-by: Ashutosh Dixit <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    (cherry picked from commit 11035eab1b7d88daa7904440046e64d3810b1ca1)
    Signed-off-by: Thomas Hellström <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/xe/xelp: Fix Wa_18022495364 [+ + +]
Author: Tvrtko Ursulin <[email protected]>
Date:   Fri Jan 16 09:50:40 2026 +0000

    drm/xe/xelp: Fix Wa_18022495364
    
    commit 051be49133971076717846e2a04c746ab3476282 upstream.
    
    It looks I mistyped CS_DEBUG_MODE2 as CS_DEBUG_MODE1 when adding the
    workaround. Fix it.
    
    Signed-off-by: Tvrtko Ursulin <[email protected]>
    Fixes: ca33cd271ef9 ("drm/xe/xelp: Add Wa_18022495364")
    Cc: Matt Roper <[email protected]>
    Cc: "Thomas Hellström" <[email protected]>
    Cc: Rodrigo Vivi <[email protected]>
    Cc: <[email protected]> # v6.18+
    Reviewed-by: Matt Roper <[email protected]>
    Signed-off-by: Thomas Hellström <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    (cherry picked from commit 7fe6cae2f7fad2b5166b0fc096618629f9e2ebcb)
    Signed-off-by: Thomas Hellström <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/xe: Skip address copy for sync-only execs [+ + +]
Author: Shuicheng Lin <[email protected]>
Date:   Thu Jan 22 21:40:54 2026 +0000

    drm/xe: Skip address copy for sync-only execs
    
    [ Upstream commit c73a8917b31e8ddbd53cc248e17410cec27f8f58 ]
    
    For parallel exec queues, xe_exec_ioctl() copied the batch buffer address
    array from userspace without checking num_batch_buffer.
    If user creates a sync-only exec that doesn't use the address field, the
    exec will fail with -EFAULT.
    Add num_batch_buffer check to skip the copy, and the exec could be executed
    successfully.
    
    Here is the sync-only exec:
    struct drm_xe_exec exec = {
        .extensions = 0,
        .exec_queue_id = qid,
        .num_syncs = 1,
        .syncs = (uintptr_t)&sync,
        .address = 0,            /* ignored for sync-only */
        .num_batch_buffer = 0,   /* sync-only */
    };
    
    Fixes: dd08ebf6c352 ("drm/xe: Introduce a new DRM driver for Intel GPUs")
    Cc: Matthew Brost <[email protected]>
    Signed-off-by: Shuicheng Lin <[email protected]>
    Reviewed-by: Matthew Brost <[email protected]>
    Signed-off-by: Matthew Brost <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    (cherry picked from commit 4761791c1e736273d612ff564f318bfbbb04fa4e)
    Signed-off-by: Thomas Hellström <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm: Do not allow userspace to trigger kernel warnings in drm_gem_change_handle_ioctl() [+ + +]
Author: Tvrtko Ursulin <[email protected]>
Date:   Fri Jan 23 14:15:40 2026 +0000

    drm: Do not allow userspace to trigger kernel warnings in drm_gem_change_handle_ioctl()
    
    commit 12f15d52d38ac53f7c70ea3d4b3d76afed04e064 upstream.
    
    Since GEM bo handles are u32 in the uapi and the internal implementation
    uses idr_alloc() which uses int ranges, passing a new handle larger than
    INT_MAX trivially triggers a kernel warning:
    
    idr_alloc():
    ...
            if (WARN_ON_ONCE(start < 0))
                    return -EINVAL;
    ...
    
    Fix it by rejecting new handles above INT_MAX and at the same time make
    the end limit calculation more obvious by moving into int domain.
    
    Signed-off-by: Tvrtko Ursulin <[email protected]>
    Reported-by: Zhi Wang <[email protected]>
    Fixes: 53096728b891 ("drm: Add DRM prime interface to reassign GEM handle")
    Cc: David Francis <[email protected]>
    Cc: Felix Kuehling <[email protected]>
    Cc: Christian König <[email protected]>
    Cc: <[email protected]> # v6.18+
    Tested-by: Harshit Mogalapalli <[email protected]>
    Reviewed-by: Christian König <[email protected]>
    Signed-off-by: Tvrtko Ursulin <[email protected]>
    Link: https://lore.kernel.org/r/[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]>

 
firewire: core: fix race condition against transaction list [+ + +]
Author: Takashi Sakamoto <[email protected]>
Date:   Wed Jan 28 07:34:13 2026 +0900

    firewire: core: fix race condition against transaction list
    
    commit 20e01bba2ae4898ce65cdcacd1bd6bec5111abd9 upstream.
    
    The list of transaction is enumerated without acquiring card lock when
    processing AR response event. This causes a race condition bug when
    processing AT request completion event concurrently.
    
    This commit fixes the bug by put timer start for split transaction
    expiration into the scope of lock. The value of jiffies in card structure
    is referred before acquiring the lock.
    
    Cc: [email protected] # v6.18
    Fixes: b5725cfa4120 ("firewire: core: use spin lock specific to timer for split transaction")
    Reported-by: Andreas Persson <[email protected]>
    Closes: https://github.com/alsa-project/snd-firewire-ctl-services/issues/209
    Tested-by: Andreas Persson <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Takashi Sakamoto <[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: brcmstb: correct hwirq to bank map [+ + +]
Author: Doug Berger <[email protected]>
Date:   Tue Jan 27 13:46:54 2026 -0800

    gpio: brcmstb: correct hwirq to bank map
    
    [ Upstream commit b2cf569ed81e7574d4287eaf3b2c38690a934d34 ]
    
    The brcmstb_gpio_hwirq_to_bank() function was designed to
    accommodate the downward numbering of dynamic GPIOs by
    traversing the bank list in the reverse order. However, the
    dynamic numbering has changed to increment upward which can
    produce an incorrect mapping.
    
    The function is modified to no longer assume an ordering of
    the list to accommodate either option.
    
    Fixes: 7b61212f2a07 ("gpiolib: Get rid of ARCH_NR_GPIOS")
    Signed-off-by: Doug Berger <[email protected]>
    Signed-off-by: Florian Fainelli <[email protected]>
    Reviewed-by: Linus Walleij <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

gpio: virtuser: fix UAF in configfs release path [+ + +]
Author: Yuhao Huang <[email protected]>
Date:   Mon Jan 26 12:03:48 2026 +0800

    gpio: virtuser: fix UAF in configfs release path
    
    [ Upstream commit 53ad4a948a4586359b841d607c08fb16c5503230 ]
    
    The gpio-virtuser configfs release path uses guard(mutex) to protect
    the device structure. However, the device is freed before the guard
    cleanup runs, causing mutex_unlock() to operate on freed memory.
    
    Specifically, gpio_virtuser_device_config_group_release() destroys
    the mutex and frees the device while still inside the guard(mutex)
    scope. When the function returns, the guard cleanup invokes
    mutex_unlock(&dev->lock), resulting in a slab use-after-free.
    
    Limit the mutex lifetime by using a scoped_guard() only around the
    activation check, so that the lock is released before mutex_destroy()
    and kfree() are called.
    
    Fixes: 91581c4b3f29 ("gpio: virtuser: new virtual testing driver for the GPIO API")
    Signed-off-by: Yuhao Huang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
gpiolib: acpi: Fix potential out-of-boundary left shift [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Wed Jan 28 10:58:54 2026 +0100

    gpiolib: acpi: Fix potential out-of-boundary left shift
    
    commit e64d1cb21a1c6ecd51bc1c94c83f6fc656f7c94d upstream.
    
    GPIO Address Space handler gets a pointer to the in or out value.
    This value is supposed to be at least 64-bit, but it's not limited
    to be exactly 64-bit. When ACPI tables are being parsed, for
    the bigger Connection():s ACPICA creates a Buffer instead of regular
    Integer object. The Buffer exists as long as Namespace holds
    the certain Connection(). Hence we can access the necessary bits
    without worrying. On the other hand, the left shift, used in
    the code, is limited by 31 (on 32-bit platforms) and otherwise
    considered to be Undefined Behaviour. Also the code uses only
    the first 64-bit word for the value, and anything bigger than 63
    will be also subject to UB. Fix all this by modifying the code
    to correctly set or clear the respective bit in the bitmap constructed
    of 64-bit words.
    
    Fixes: 59084c564c41 ("gpiolib: acpi: use BIT_ULL() for u64 mask in address space handler")
    Fixes: 2c4d00cb8fc5 ("gpiolib: acpi: Use BIT() macro to increase readability")
    Cc: [email protected]
    Reviewed-by: Mika Westerberg <[email protected]>
    Signed-off-by: Andy Shevchenko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Bartosz Golaszewski <[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: Fix NULL pointer dereference in ice_vsi_set_napi_queues [+ + +]
Author: Aaron Ma <[email protected]>
Date:   Thu Dec 25 14:21:21 2025 +0800

    ice: Fix NULL pointer dereference in ice_vsi_set_napi_queues
    
    [ Upstream commit 9bb30be4d89ff9a8d7ab1aa0eb2edaca83431f85 ]
    
    Add NULL pointer checks in ice_vsi_set_napi_queues() to prevent crashes
    during resume from suspend when rings[q_idx]->q_vector is NULL.
    
    Tested adaptor:
    60:00.0 Ethernet controller [0200]: Intel Corporation Ethernet Controller E810-XXV for SFP [8086:159b] (rev 02)
            Subsystem: Intel Corporation Ethernet Network Adapter E810-XXV-2 [8086:4003]
    
    SR-IOV state: both disabled and enabled can reproduce this issue.
    
    kernel version: v6.18
    
    Reproduce steps:
    Boot up and execute suspend like systemctl suspend or rtcwake.
    
    Log:
    <1>[  231.443607] BUG: kernel NULL pointer dereference, address: 0000000000000040
    <1>[  231.444052] #PF: supervisor read access in kernel mode
    <1>[  231.444484] #PF: error_code(0x0000) - not-present page
    <6>[  231.444913] PGD 0 P4D 0
    <4>[  231.445342] Oops: Oops: 0000 [#1] SMP NOPTI
    <4>[  231.446635] RIP: 0010:netif_queue_set_napi+0xa/0x170
    <4>[  231.447067] Code: 31 f6 31 ff c3 cc cc cc cc 0f 1f 80 00 00 00 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 0f 1f 44 00 00 48 85 c9 74 0b <48> 83 79 30 00 0f 84 39 01 00 00 55 41 89 d1 49 89 f8 89 f2 48 89
    <4>[  231.447513] RSP: 0018:ffffcc780fc078c0 EFLAGS: 00010202
    <4>[  231.447961] RAX: ffff8b848ca30400 RBX: ffff8b848caf2028 RCX: 0000000000000010
    <4>[  231.448443] RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff8b848dbd4000
    <4>[  231.448896] RBP: ffffcc780fc078e8 R08: 0000000000000000 R09: 0000000000000000
    <4>[  231.449345] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000001
    <4>[  231.449817] R13: ffff8b848dbd4000 R14: ffff8b84833390c8 R15: 0000000000000000
    <4>[  231.450265] FS:  00007c7b29e9d740(0000) GS:ffff8b8c068e2000(0000) knlGS:0000000000000000
    <4>[  231.450715] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    <4>[  231.451179] CR2: 0000000000000040 CR3: 000000030626f004 CR4: 0000000000f72ef0
    <4>[  231.451629] PKRU: 55555554
    <4>[  231.452076] Call Trace:
    <4>[  231.452549]  <TASK>
    <4>[  231.452996]  ? ice_vsi_set_napi_queues+0x4d/0x110 [ice]
    <4>[  231.453482]  ice_resume+0xfd/0x220 [ice]
    <4>[  231.453977]  ? __pfx_pci_pm_resume+0x10/0x10
    <4>[  231.454425]  pci_pm_resume+0x8c/0x140
    <4>[  231.454872]  ? __pfx_pci_pm_resume+0x10/0x10
    <4>[  231.455347]  dpm_run_callback+0x5f/0x160
    <4>[  231.455796]  ? dpm_wait_for_superior+0x107/0x170
    <4>[  231.456244]  device_resume+0x177/0x270
    <4>[  231.456708]  dpm_resume+0x209/0x2f0
    <4>[  231.457151]  dpm_resume_end+0x15/0x30
    <4>[  231.457596]  suspend_devices_and_enter+0x1da/0x2b0
    <4>[  231.458054]  enter_state+0x10e/0x570
    
    Add defensive checks for both the ring pointer and its q_vector
    before dereferencing, allowing the system to resume successfully even when
    q_vectors are unmapped.
    
    Fixes: 2a5dc090b92cf ("ice: move netif_queue_set_napi to rtnl-protected sections")
    Reviewed-by: Aleksandr Loktionov <[email protected]>
    Signed-off-by: Aaron Ma <[email protected]>
    Reviewed-by: Paul Menzel <[email protected]>
    Signed-off-by: Tony Nguyen <[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]>

 
iommu/tegra241-cmdqv: Reset VCMDQ in tegra241_vcmdq_hw_init_user() [+ + +]
Author: Nicolin Chen <[email protected]>
Date:   Thu Jan 29 14:43:41 2026 -0800

    iommu/tegra241-cmdqv: Reset VCMDQ in tegra241_vcmdq_hw_init_user()
    
    commit 80f1a2c2332fee0edccd006fe87fc8a6db94bab3 upstream.
    
    The Enable bits in CMDQV/VINTF/VCMDQ_CONFIG registers do not actually reset
    the HW registers. So, the driver explicitly clears all the registers when a
    VINTF or VCMDQ is being initialized calling its hw_deinit() function.
    
    However, a userspace VCMDQ is not properly reset, unlike an in-kernel VCMDQ
    getting reset in tegra241_vcmdq_hw_init().
    
    Meanwhile, tegra241_vintf_hw_init() calling tegra241_vintf_hw_deinit() will
    not deinit any VCMDQ, since there is no userspace VCMDQ mapped to the VINTF
    at that stage.
    
    Then, this may result in dirty VCMDQ registers, which can fail the VM.
    
    Like tegra241_vcmdq_hw_init(), reset a VCMDQ in tegra241_vcmdq_hw_init() to
    fix this bug. This is required by a host kernel.
    
    Fixes: 6717f26ab1e7 ("iommu/tegra241-cmdqv: Add user-space use support")
    Cc: [email protected]
    Reported-by: Bao Nguyen <[email protected]>
    Signed-off-by: Nicolin Chen <[email protected]>
    Signed-off-by: Joerg Roedel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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]>

 
ixgbe: don't initialize aci lock in ixgbe_recovery_probe() [+ + +]
Author: Kohei Enju <[email protected]>
Date:   Thu Dec 11 18:15:32 2025 +0900

    ixgbe: don't initialize aci lock in ixgbe_recovery_probe()
    
    [ Upstream commit 100cf7b4ca6ed770ec4287f3789b1da2e340a05a ]
    
    hw->aci.lock is already initialized in ixgbe_sw_init(), so
    ixgbe_recovery_probe() doesn't need to initialize the lock. This
    function is also not responsible for destroying the lock on failures.
    
    Additionally, change the name of label in accordance with this change.
    
    Fixes: 29cb3b8d95c7 ("ixgbe: add E610 implementation of FW recovery mode")
    Reported-by: Simon Horman <[email protected]>
    Closes: https://lore.kernel.org/intel-wired-lan/[email protected]/
    Signed-off-by: Kohei Enju <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ixgbe: fix memory leaks in the ixgbe_recovery_probe() path [+ + +]
Author: Kohei Enju <[email protected]>
Date:   Thu Dec 11 18:15:31 2025 +0900

    ixgbe: fix memory leaks in the ixgbe_recovery_probe() path
    
    [ Upstream commit 638344712aefeba97b6e0d90f560815fd88abd0f ]
    
    When ixgbe_recovery_probe() is invoked and this function fails,
    allocated resources in advance are not completely freed, because
    ixgbe_probe() returns ixgbe_recovery_probe() directly and
    ixgbe_recovery_probe() only frees partial resources, resulting in memory
    leaks including:
    - adapter->io_addr
    - adapter->jump_tables[0]
    - adapter->mac_table
    - adapter->rss_key
    - adapter->af_xdp_zc_qps
    
    The leaked MMIO region can be observed in /proc/vmallocinfo, and the
    remaining leaks are reported by kmemleak.
    
    Don't return ixgbe_recovery_probe() directly, and instead let
    ixgbe_probe() to clean up resources on failures.
    
    Fixes: 29cb3b8d95c7 ("ixgbe: add E610 implementation of FW recovery mode")
    Signed-off-by: Kohei Enju <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
kbuild: Fix permissions of modules.builtin.modinfo [+ + +]
Author: Ethan Zuo <[email protected]>
Date:   Wed Jan 28 14:37:51 2026 +0800

    kbuild: Fix permissions of modules.builtin.modinfo
    
    [ Upstream commit 6d60354ea2f90352b22039ed8371c4f4321df90e ]
    
    Currently, modules.builtin.modinfo is created with executable permissions
    (0755). This is because after commit 39cfd5b12160 ("kbuild: extract
    modules.builtin.modinfo from vmlinux.unstripped"), modules.builtin.modinfo
    is extracted from vmlinux.unstripped using objcopy. When extracting
    sections, objcopy inherits attributes from the source ELF file.
    
    Since modules.builtin.modinfo is a data file and not an executable,
    it should have regular file permissions (0644). The executable bit
    can trigger warnings in Debian's Lintian tool.
    
    Explicitly remove the executable bit after generation.
    
    Fixes: 39cfd5b12160 ("kbuild: extract modules.builtin.modinfo from vmlinux.unstripped")
    Signed-off-by: Ethan Zuo <[email protected]>
    Link: https://patch.msgid.link/SY0P300MB0609F6916B24ADF65502940B9C91A@SY0P300MB0609.AUSP300.PROD.OUTLOOK.COM
    Signed-off-by: Nicolas Schier <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

kbuild: rpm-pkg: Generate debuginfo package manually [+ + +]
Author: Nathan Chancellor <[email protected]>
Date:   Wed Jan 21 15:29:15 2026 -0700

    kbuild: rpm-pkg: Generate debuginfo package manually
    
    [ Upstream commit 62089b804895e845f82e132ea9d46a1fc53ed5a7 ]
    
    Commit a7c699d090a1 ("kbuild: rpm-pkg: build a debuginfo RPM") adjusted
    the __spec_install_post macro to include __os_install_post, which runs
    brp-strip. This ends up stripping module signatures, breaking loading
    modules with lockdown enabled.
    
    Undo most of the changes of the aforementioned debuginfo patch and
    mirror commit 16c36f8864e3 ("kbuild: deb-pkg: use build ID instead of
    debug link for dbg package") in kernel.spec to generate a functionally
    equivalent debuginfo package while avoiding touching the modules after
    they have already been signed during modules_install.
    
    Fixes: a7c699d090a1 ("kbuild: rpm-pkg: build a debuginfo RPM")
    Reported-by: Holger Kiehl <[email protected]>
    Closes: https://lore.kernel.org/[email protected]/
    Tested-by: Holger Kiehl <[email protected]>
    Signed-off-by: Nathan Chancellor <[email protected]>
    Link: https://patch.msgid.link/20260121-fix-module-signing-binrpm-pkg-v1-1-8fc5832b6cbc@kernel.org
    Signed-off-by: Nicolas Schier <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

kbuild: rust: clean libpin_init_internal in mrproper [+ + +]
Author: Chen Miao <[email protected]>
Date:   Fri Oct 31 02:32:39 2025 +0000

    kbuild: rust: clean libpin_init_internal in mrproper
    
    commit a44bfed9df8a514962e2cb076d9c0b594caeff36 upstream.
    
    When I enabled Rust compilation, I wanted to clean up its output, so I
    used make mrproper. However, I was still able to find that
    libpin_init_internal.so in the rust directory was not deleted, while
    all other corresponding outputs were cleared.
    
    Thus add it to the `MRPROPER_FILES` list.
    
    Reviewed-by: Dongliang Mu <[email protected]>
    Signed-off-by: Chen Miao <[email protected]>
    Fixes: d7659acca7a3 ("rust: add pin-init crate build infrastructure")
    Cc: [email protected]
    Acked-by: Nicolas Schier <[email protected]>
    Acked-by: Benno Lossin <[email protected]>
    Link: https://patch.msgid.link/71ff222b8731e63e06059c5d8566434e508baf2b.1761876365.git.chenmiao@openatom.club
    [ Fixed tags and Git author as discussed. Reworded slightly. - Miguel ]
    Signed-off-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
libbpf: Fix -Wdiscarded-qualifiers under C23 [+ + +]
Author: Mikhail Gavrilov <[email protected]>
Date:   Sat Dec 6 14:28:25 2025 +0500

    libbpf: Fix -Wdiscarded-qualifiers under C23
    
    commit d70f79fef65810faf64dbae1f3a1b5623cdb2345 upstream.
    
    glibc ≥ 2.42 (GCC 15) defaults to -std=gnu23, which promotes
    -Wdiscarded-qualifiers to an error.
    
    In C23, strstr() and strchr() return "const char *".
    
    Change variable types to const char * where the pointers are never
    modified (res, sym_sfx, next_path).
    
    Suggested-by: Florian Weimer <[email protected]>
    Suggested-by: Andrii Nakryiko <[email protected]>
    Signed-off-by: Mikhail Gavrilov <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    [ shung-hsi.yu: needed to fix kernel build failure due to libbpf since glibc
      2.43+ (which adds 'const' qualifier to strstr) ]
    Signed-off-by: Shung-Hsi Yu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: Linux 6.18.9 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Fri Feb 6 16:57:45 2026 +0100

    Linux 6.18.9
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Achill Gilgenast <[email protected]>=
    Tested-by: Brett A C Sheffield <[email protected]>
    Tested-by: Salvatore Bonaccorso <[email protected]>
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Tested-by: Justin M. Forbes <[email protected]>
    Tested-by: Takeshi Ogasawara <[email protected]>
    Tested-by: Peter Schneider <[email protected]>
    Tested-by: Luna Jernberg <[email protected]>
    Tested-by: Ron Economos <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Tested-by: Brett Mastbergen <[email protected]>
    Tested-by: Hardik Garg <[email protected]>
    Tested-by: Barry K. Nathan <[email protected]>
    Tested-by: Shung-Hsi Yu <[email protected]>
    Tested-by: Dileep Malepu <[email protected]>
    Tested-by: Miguel Ojeda <[email protected]>
    Tested-by: Jeffrin Jose T <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm, swap: restore swap_space attr aviod kernel panic [+ + +]
Author: robin.kuo <[email protected]>
Date:   Fri Jan 16 14:25:00 2026 +0800

    mm, swap: restore swap_space attr aviod kernel panic
    
    commit a0f3c0845a4ff68d403c568266d17e9cc553e561 upstream.
    
    commit 8b47299a411a ("mm, swap: mark swap address space ro and add context
    debug check") made the swap address space read-only.  It may lead to
    kernel panic if arch_prepare_to_swap returns a failure under heavy memory
    pressure as follows,
    
    el1_abort+0x40/0x64
    el1h_64_sync_handler+0x48/0xcc
    el1h_64_sync+0x84/0x88
    errseq_set+0x4c/0xb8 (P)
    __filemap_set_wb_err+0x20/0xd0
    shrink_folio_list+0xc20/0x11cc
    evict_folios+0x1520/0x1be4
    try_to_shrink_lruvec+0x27c/0x3dc
    shrink_one+0x9c/0x228
    shrink_node+0xb3c/0xeac
    do_try_to_free_pages+0x170/0x4f0
    try_to_free_pages+0x334/0x534
    __alloc_pages_direct_reclaim+0x90/0x158
    __alloc_pages_slowpath+0x334/0x588
    __alloc_frozen_pages_noprof+0x224/0x2fc
    __folio_alloc_noprof+0x14/0x64
    vma_alloc_zeroed_movable_folio+0x34/0x44
    do_pte_missing+0xad4/0x1040
    handle_mm_fault+0x4a4/0x790
    do_page_fault+0x288/0x5f8
    do_translation_fault+0x38/0x54
    do_mem_abort+0x54/0xa8
    
    Restore swap address space as not ro to avoid the panic.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 8b47299a411a ("mm, swap: mark swap address space ro and add context debug check")
    Signed-off-by: robin.kuo <[email protected]>
    Reviewed-by: Andrew Morton <[email protected]>
    Cc: andrew.yang <[email protected]>
    Cc: AngeloGiaocchino Del Regno <[email protected]>
    Cc: Baoquan He <[email protected]>
    Cc: Barry Song <[email protected]>
    Cc: Chinwen Chang <[email protected]>
    Cc: Chris Li <[email protected]>
    Cc: Kairui Song <[email protected]>
    Cc: Kairui Song <[email protected]>
    Cc: Kemeng Shi <[email protected]>
    Cc: Mathias Brugger <[email protected]>
    Cc: Nhat Pham <[email protected]>
    Cc: Qun-wei Lin <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/kasan: fix KASAN poisoning in vrealloc() [+ + +]
Author: Andrey Ryabinin <[email protected]>
Date:   Tue Jan 13 20:15:15 2026 +0100

    mm/kasan: fix KASAN poisoning in vrealloc()
    
    commit 9b47d4eea3f7c1f620e95bda1d6221660bde7d7b upstream.
    
    A KASAN warning can be triggered when vrealloc() changes the requested
    size to a value that is not aligned to KASAN_GRANULE_SIZE.
    
        ------------[ cut here ]------------
        WARNING: CPU: 2 PID: 1 at mm/kasan/shadow.c:174 kasan_unpoison+0x40/0x48
        ...
        pc : kasan_unpoison+0x40/0x48
        lr : __kasan_unpoison_vmalloc+0x40/0x68
        Call trace:
         kasan_unpoison+0x40/0x48 (P)
         vrealloc_node_align_noprof+0x200/0x320
         bpf_patch_insn_data+0x90/0x2f0
         convert_ctx_accesses+0x8c0/0x1158
         bpf_check+0x1488/0x1900
         bpf_prog_load+0xd20/0x1258
         __sys_bpf+0x96c/0xdf0
         __arm64_sys_bpf+0x50/0xa0
         invoke_syscall+0x90/0x160
    
    Introduce a dedicated kasan_vrealloc() helper that centralizes KASAN
    handling for vmalloc reallocations.  The helper accounts for KASAN granule
    alignment when growing or shrinking an allocation and ensures that partial
    granules are handled correctly.
    
    Use this helper from vrealloc_node_align_noprof() to fix poisoning logic.
    
    [[email protected]: move kasan_enabled() check, fix build]
      Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: d699440f58ce ("mm: fix vrealloc()'s KASAN poisoning logic")
    Signed-off-by: Andrey Ryabinin <[email protected]>
    Reported-by: Maciej Żenczykowski <[email protected]>
    Reported-by: <[email protected]>
    Closes: https://lkml.kernel.org/r/CANP3RGeuRW53vukDy7WDO3FiVgu34-xVJYkfpm08oLO3odYFrA@mail.gmail.com
    Reviewed-by: Andrey Konovalov <[email protected]>
    Tested-by: Maciej Wieczor-Retman <[email protected]>
    Cc: Alexander Potapenko <[email protected]>
    Cc: Dmitriy Vyukov <[email protected]>
    Cc: Dmitry Vyukov <[email protected]>
    Cc: Uladzislau Rezki <[email protected]>
    Cc: Vincenzo Frascino <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[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: Greg Kroah-Hartman <[email protected]>

 
mm/memory-failure: fix missing ->mf_stats count in hugetlb poison [+ + +]
Author: Jane Chu <[email protected]>
Date:   Tue Jan 20 16:22:33 2026 -0700

    mm/memory-failure: fix missing ->mf_stats count in hugetlb poison
    
    commit a148a2040191b12b45b82cb29c281cb3036baf90 upstream.
    
    When a newly poisoned subpage ends up in an already poisoned hugetlb
    folio, 'num_poisoned_pages' is incremented, but the per node ->mf_stats is
    not.  Fix the inconsistency by designating action_result() to update them
    both.
    
    While at it, define __get_huge_page_for_hwpoison() return values in terms
    of symbol names for better readibility.  Also rename
    folio_set_hugetlb_hwpoison() to hugetlb_update_hwpoison() since the
    function does more than the conventional bit setting and the fact three
    possible return values are expected.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 18f41fa616ee ("mm: memory-failure: bump memory failure stats to pglist_data")
    Signed-off-by: Jane Chu <[email protected]>
    Acked-by: Miaohe Lin <[email protected]>
    Cc: Chris Mason <[email protected]>
    Cc: David Hildenbrand <[email protected]>
    Cc: David Rientjes <[email protected]>
    Cc: Jiaqi Yan <[email protected]>
    Cc: Liam R. Howlett <[email protected]>
    Cc: Lorenzo Stoakes <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Mike Rapoport <[email protected]>
    Cc: Muchun Song <[email protected]>
    Cc: Naoya Horiguchi <[email protected]>
    Cc: Oscar Salvador <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: William Roche <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm/memory-failure: teach kill_accessing_process to accept hugetlb tail page pfn [+ + +]
Author: Jane Chu <[email protected]>
Date:   Tue Jan 20 16:22:34 2026 -0700

    mm/memory-failure: teach kill_accessing_process to accept hugetlb tail page pfn
    
    commit 057a6f2632c956483e2b2628477f0fcd1cd8a844 upstream.
    
    When a hugetlb folio is being poisoned again, try_memory_failure_hugetlb()
    passed head pfn to kill_accessing_process(), that is not right.  The
    precise pfn of the poisoned page should be used in order to determine the
    precise vaddr as the SIGBUS payload.
    
    This issue has already been taken care of in the normal path, that is,
    hwpoison_user_mappings(), see [1][2].  Further more, for [3] to work
    correctly in the hugetlb repoisoning case, it's essential to inform VM the
    precise poisoned page, not the head page.
    
    [1] https://lkml.kernel.org/r/[email protected]
    [2] https://lkml.kernel.org/r/[email protected]
    [3] https://lore.kernel.org/lkml/[email protected]/
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Jane Chu <[email protected]>
    Reviewed-by: Liam R. Howlett <[email protected]>
    Acked-by: Miaohe Lin <[email protected]>
    Cc: Chris Mason <[email protected]>
    Cc: David Hildenbrand <[email protected]>
    Cc: David Rientjes <[email protected]>
    Cc: Jiaqi Yan <[email protected]>
    Cc: Lorenzo Stoakes <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Mike Rapoport <[email protected]>
    Cc: Muchun Song <[email protected]>
    Cc: Naoya Horiguchi <[email protected]>
    Cc: Oscar Salvador <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: William Roche <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/shmem, swap: fix race of truncate and swap entry split [+ + +]
Author: Kairui Song <[email protected]>
Date:   Tue Jan 20 00:11:21 2026 +0800

    mm/shmem, swap: fix race of truncate and swap entry split
    
    commit 8a1968bd997f45a9b11aefeabdd1232e1b6c7184 upstream.
    
    The helper for shmem swap freeing is not handling the order of swap
    entries correctly.  It uses xa_cmpxchg_irq to erase the swap entry, but it
    gets the entry order before that using xa_get_order without lock
    protection, and it may get an outdated order value if the entry is split
    or changed in other ways after the xa_get_order and before the
    xa_cmpxchg_irq.
    
    And besides, the order could grow and be larger than expected, and cause
    truncation to erase data beyond the end border.  For example, if the
    target entry and following entries are swapped in or freed, then a large
    folio was added in place and swapped out, using the same entry, the
    xa_cmpxchg_irq will still succeed, it's very unlikely to happen though.
    
    To fix that, open code the Xarray cmpxchg and put the order retrieval and
    value checking in the same critical section.  Also, ensure the order won't
    exceed the end border, skip it if the entry goes across the border.
    
    Skipping large swap entries crosses the end border is safe here.  Shmem
    truncate iterates the range twice, in the first iteration,
    find_lock_entries already filtered such entries, and shmem will swapin the
    entries that cross the end border and partially truncate the folio (split
    the folio or at least zero part of it).  So in the second loop here, if we
    see a swap entry that crosses the end order, it must at least have its
    content erased already.
    
    I observed random swapoff hangs and kernel panics when stress testing
    ZSWAP with shmem.  After applying this patch, all problems are gone.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 809bc86517cc ("mm: shmem: support large folio swap out")
    Signed-off-by: Kairui Song <[email protected]>
    Reviewed-by: Nhat Pham <[email protected]>
    Acked-by: Chris Li <[email protected]>
    Cc: Baolin Wang <[email protected]>
    Cc: Baoquan He <[email protected]>
    Cc: Barry Song <[email protected]>
    Cc: Hugh Dickins <[email protected]>
    Cc: Kemeng Shi <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[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 12:37:17 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: fix race in mptcp_pm_nl_flush_addrs_doit() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Sat Jan 24 11:59:18 2026 +0100

    mptcp: fix race in mptcp_pm_nl_flush_addrs_doit()
    
    [ Upstream commit e2a9eeb69f7d4ca4cf4c70463af77664fdb6ab1d ]
    
    syzbot and Eulgyu Kim reported crashes in mptcp_pm_nl_get_local_id()
    and/or mptcp_pm_nl_is_backup()
    
    Root cause is list_splice_init() in mptcp_pm_nl_flush_addrs_doit()
    which is not RCU ready.
    
    list_splice_init_rcu() can not be called here while holding pernet->lock
    spinlock.
    
    Many thanks to Eulgyu Kim for providing a repro and testing our patches.
    
    Fixes: 141694df6573 ("mptcp: remove address when netlink flushes addrs")
    Signed-off-by: Eric Dumazet <[email protected]>
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/all/[email protected]/T/
    Reported-by: Eulgyu Kim <[email protected]>
    Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/611
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/20260124-net-mptcp-race_nl_flush_addrs-v3-1-b2dc1b613e9d@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[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/mlx5: Fix return type mismatch in mlx5_esw_vport_vhca_id() [+ + +]
Author: Zeng Chi <[email protected]>
Date:   Fri Jan 23 16:57:49 2026 +0800

    net/mlx5: Fix return type mismatch in mlx5_esw_vport_vhca_id()
    
    [ Upstream commit ca12c4a155ebf84e9ef29b05ce979bc89364290f ]
    
    The function mlx5_esw_vport_vhca_id() is declared to return bool,
    but returns -EOPNOTSUPP (-45), which is an int error code. This
    causes a signedness bug as reported by smatch.
    
    This patch fixes this smatch report:
    drivers/net/ethernet/mellanox/mlx5/core/eswitch.h:981 mlx5_esw_vport_vhca_id()
    warn: signedness bug returning '(-45)'
    
    Fixes: 1baf30426553 ("net/mlx5: E-Switch, Set/Query hca cap via vhca id")
    Reviewed-by: Parav Pandit <[email protected]>
    Signed-off-by: Zeng Chi <[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/mlx5: Fix vhca_id access call trace use before alloc [+ + +]
Author: Parav Pandit <[email protected]>
Date:   Tue Jan 27 10:52:40 2026 +0200

    net/mlx5: Fix vhca_id access call trace use before alloc
    
    [ Upstream commit a8f930b7be7be3f18f14446df461e17137400407 ]
    
    HCA CAP structure is allocated in mlx5_hca_caps_alloc().
    mlx5_mdev_init()
      mlx5_hca_caps_alloc()
    
    And HCA CAP is read from the device in mlx5_init_one().
    
    The vhca_id's debugfs file is published even before above two
    operations are done.
    Due to this when user reads the vhca id before the initialization,
    following call trace is observed.
    
    Fix this by deferring debugfs publication until the HCA CAP is
    allocated and read from the device.
    
    BUG: kernel NULL pointer dereference, address: 0000000000000004
    PGD 0 P4D 0
    Oops: Oops: 0000 [#1] SMP PTI
    CPU: 23 UID: 0 PID: 6605 Comm: cat Kdump: loaded Not tainted 6.18.0-rc7-sf+ #110 PREEMPT(full)
    Hardware name: Supermicro SYS-6028U-TR4+/X10DRU-i+, BIOS 2.0b 08/09/2016
    RIP: 0010:vhca_id_show+0x17/0x30 [mlx5_core]
    Code: cb 66 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 0f 1f 44 00 00 48 8b 47 70 48 c7 c6 45 f0 12 c1 48 8b 80 70 03 00 00 <8b> 50 04 0f ca 0f b7 d2 e8 8c 82 47 cb 31 c0 c3 cc cc cc cc 0f 1f
    RSP: 0018:ffffd37f4f337d40 EFLAGS: 00010203
    RAX: 0000000000000000 RBX: ffff8f18445c9b40 RCX: 0000000000000001
    RDX: ffff8f1109825180 RSI: ffffffffc112f045 RDI: ffff8f18445c9b40
    RBP: 0000000000000000 R08: 0000645eac0d2928 R09: 0000000000000006
    R10: ffffd37f4f337d48 R11: 0000000000000000 R12: ffffd37f4f337dd8
    R13: ffffd37f4f337db0 R14: ffff8f18445c9b68 R15: 0000000000000001
    FS:  00007f3eea099580(0000) GS:ffff8f2090f1f000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000004 CR3: 00000008b64e4006 CR4: 00000000003726f0
    Call Trace:
     <TASK>
     seq_read_iter+0x11f/0x4f0
     ? _raw_spin_unlock+0x15/0x30
     ? do_anonymous_page+0x104/0x810
     seq_read+0xf6/0x120
     ? srso_alias_untrain_ret+0x1/0x10
     full_proxy_read+0x5c/0x90
     vfs_read+0xad/0x320
     ? handle_mm_fault+0x1ab/0x290
     ksys_read+0x52/0xd0
     do_syscall_64+0x61/0x11e0
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Fixes: dd3dd7263cde ("net/mlx5: Expose vhca_id to debugfs")
    Signed-off-by: Parav Pandit <[email protected]>
    Reviewed-by: Shay Drori <[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/mlx5: fs, Fix inverted cap check in tx flow table root disconnect [+ + +]
Author: Shay Drory <[email protected]>
Date:   Tue Jan 27 10:52:38 2026 +0200

    net/mlx5: fs, Fix inverted cap check in tx flow table root disconnect
    
    [ Upstream commit 2610a3d65691a1301ab10c92ff6ebab0bedf9199 ]
    
    The capability check for reset_root_to_default was inverted, causing
    the function to return -EOPNOTSUPP when the capability IS supported,
    rather than when it is NOT supported.
    
    Fix the capability check condition.
    
    Fixes: 3c9c34c32bc6 ("net/mlx5: fs, Command to control TX flow table root")
    Signed-off-by: Shay Drory <[email protected]>
    Reviewed-by: Mark Bloch <[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/mlx5: Initialize events outside devlink lock [+ + +]
Author: Cosmin Ratiu <[email protected]>
Date:   Sun Nov 16 22:45:35 2025 +0200

    net/mlx5: Initialize events outside devlink lock
    
    [ Upstream commit b6b03097f9826db72aeb3f751774c5e9edd9a5b3 ]
    
    Move event init/cleanup outside of mlx5_init_one() / mlx5_uninit_one()
    and into the mlx5_mdev_init() / mlx5_mdev_uninit() functions.
    
    By doing this, we avoid the events being reinitialized on devlink reload
    and, more importantly, the events->sw_nh notifier chain becomes
    available earlier in the init procedure, which will be used in
    subsequent patches. This makes sense because the events struct is pure
    software, independent of any HW details.
    
    Signed-off-by: Cosmin Ratiu <[email protected]>
    Reviewed-by: Carolina Jubran <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: a8f930b7be7b ("net/mlx5: Fix vhca_id access call trace use before alloc")
    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: don't assume psp tx skbs are ipv6 csum handling [+ + +]
Author: Daniel Zahka <[email protected]>
Date:   Mon Jan 26 11:38:17 2026 -0800

    net/mlx5e: don't assume psp tx skbs are ipv6 csum handling
    
    [ Upstream commit a62f7d62d2b115e67c7224e36ace4ef12a9650b4 ]
    
    mlx5e_psp_handle_tx_skb() assumes skbs are ipv6 when doing a partial
    TCP checksum with tso. Make correctly mlx5e_psp_handle_tx_skb() handle
    ipv4 packets.
    
    Fixes: e5a1861a298e ("net/mlx5e: Implement PSP Tx data path")
    Signed-off-by: Daniel Zahka <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Reviewed-by: Cosmin Ratiu <[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: 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: fix segmentation of forwarding fraglist GRO [+ + +]
Author: Jibin Zhang <[email protected]>
Date:   Mon Jan 26 23:21:11 2026 +0800

    net: fix segmentation of forwarding fraglist GRO
    
    commit 426ca15c7f6cb6562a081341ca88893a50c59fa2 upstream.
    
    This patch enhances GSO segment handling by properly checking
    the SKB_GSO_DODGY flag for frag_list GSO packets, addressing
    low throughput issues observed when a station accesses IPv4
    servers via hotspots with an IPv6-only upstream interface.
    
    Specifically, it fixes a bug in GSO segmentation when forwarding
    GRO packets containing a frag_list. The function skb_segment_list
    cannot correctly process GRO skbs that have been converted by XLAT,
    since XLAT only translates the header of the head skb. Consequently,
    skbs in the frag_list may remain untranslated, resulting in protocol
    inconsistencies and reduced throughput.
    
    To address this, the patch explicitly sets the SKB_GSO_DODGY flag
    for GSO packets in XLAT's IPv4/IPv6 protocol translation helpers
    (bpf_skb_proto_4_to_6 and bpf_skb_proto_6_to_4). This marks GSO
    packets as potentially modified after protocol translation. As a
    result, GSO segmentation will avoid using skb_segment_list and
    instead falls back to skb_segment for packets with the SKB_GSO_DODGY
    flag. This ensures that only safe and fully translated frag_list
    packets are processed by skb_segment_list, resolving protocol
    inconsistencies and improving throughput when forwarding GRO packets
    converted by XLAT.
    
    Signed-off-by: Jibin Zhang <[email protected]>
    Fixes: 9fd1ff5d2ac7 ("udp: Support UDP fraglist GRO/GSO.")
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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: phy: micrel: fix clk warning when removing the driver [+ + +]
Author: Wei Fang <[email protected]>
Date:   Mon Jan 26 16:15:44 2026 +0800

    net: phy: micrel: fix clk warning when removing the driver
    
    [ Upstream commit 2aa1545ba8d4801fba5be83a404e28014b80196a ]
    
    Since the commit 25c6a5ab151f ("net: phy: micrel: Dynamically control
    external clock of KSZ PHY"), the clock of Micrel PHY has been enabled
    by phy_driver::resume() and disabled by phy_driver::suspend(). However,
    devm_clk_get_optional_enabled() is used in kszphy_probe(), so the clock
    will automatically be disabled when the device is unbound from the bus.
    Therefore, this could cause the clock to be disabled twice, resulting
    in clk driver warnings.
    
    For example, this issue can be reproduced on i.MX6ULL platform, and we
    can see the following logs when removing the FEC MAC drivers.
    
    $ echo 2188000.ethernet > /sys/bus/platform/drivers/fec/unbind
    $ echo 20b4000.ethernet > /sys/bus/platform/drivers/fec/unbind
    [  109.758207] ------------[ cut here ]------------
    [  109.758240] WARNING: drivers/clk/clk.c:1188 at clk_core_disable+0xb4/0xd0, CPU#0: sh/639
    [  109.771011] enet2_ref already disabled
    [  109.793359] Call trace:
    [  109.822006]  clk_core_disable from clk_disable+0x28/0x34
    [  109.827340]  clk_disable from clk_disable_unprepare+0xc/0x18
    [  109.833029]  clk_disable_unprepare from devm_clk_release+0x1c/0x28
    [  109.839241]  devm_clk_release from devres_release_all+0x98/0x100
    [  109.845278]  devres_release_all from device_unbind_cleanup+0xc/0x70
    [  109.851571]  device_unbind_cleanup from device_release_driver_internal+0x1a4/0x1f4
    [  109.859170]  device_release_driver_internal from bus_remove_device+0xbc/0xe4
    [  109.866243]  bus_remove_device from device_del+0x140/0x458
    [  109.871757]  device_del from phy_mdio_device_remove+0xc/0x24
    [  109.877452]  phy_mdio_device_remove from mdiobus_unregister+0x40/0xac
    [  109.883918]  mdiobus_unregister from fec_enet_mii_remove+0x40/0x78
    [  109.890125]  fec_enet_mii_remove from fec_drv_remove+0x4c/0x158
    [  109.896076]  fec_drv_remove from device_release_driver_internal+0x17c/0x1f4
    [  109.962748] WARNING: drivers/clk/clk.c:1047 at clk_core_unprepare+0xfc/0x13c, CPU#0: sh/639
    [  109.975805] enet2_ref already unprepared
    [  110.002866] Call trace:
    [  110.031758]  clk_core_unprepare from clk_unprepare+0x24/0x2c
    [  110.037440]  clk_unprepare from devm_clk_release+0x1c/0x28
    [  110.042957]  devm_clk_release from devres_release_all+0x98/0x100
    [  110.048989]  devres_release_all from device_unbind_cleanup+0xc/0x70
    [  110.055280]  device_unbind_cleanup from device_release_driver_internal+0x1a4/0x1f4
    [  110.062877]  device_release_driver_internal from bus_remove_device+0xbc/0xe4
    [  110.069950]  bus_remove_device from device_del+0x140/0x458
    [  110.075469]  device_del from phy_mdio_device_remove+0xc/0x24
    [  110.081165]  phy_mdio_device_remove from mdiobus_unregister+0x40/0xac
    [  110.087632]  mdiobus_unregister from fec_enet_mii_remove+0x40/0x78
    [  110.093836]  fec_enet_mii_remove from fec_drv_remove+0x4c/0x158
    [  110.099782]  fec_drv_remove from device_release_driver_internal+0x17c/0x1f4
    
    After analyzing the process of removing the FEC driver, as shown below,
    it can be seen that the clock was disabled twice by the PHY driver.
    
    fec_drv_remove()
      --> fec_enet_close()
        --> phy_stop()
          --> phy_suspend()
            --> kszphy_suspend() #1 The clock is disabled
      --> fec_enet_mii_remove()
        --> mdiobus_unregister()
          --> phy_mdio_device_remove()
            --> device_del()
              --> devm_clk_release() #2 The clock is disabled again
    
    Therefore, devm_clk_get_optional() is used to fix the above issue. And
    to avoid the issue mentioned by the commit 985329462723 ("net: phy:
    micrel: use devm_clk_get_optional_enabled for the rmii-ref clock"), the
    clock is enabled by clk_prepare_enable() to get the correct clock rate.
    
    Fixes: 25c6a5ab151f ("net: phy: micrel: Dynamically control external clock of KSZ PHY")
    Signed-off-by: Wei Fang <[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: spacemit: Check for netif_carrier_ok() in emac_stats_update() [+ + +]
Author: Vivian Wang <[email protected]>
Date:   Fri Jan 23 11:52:23 2026 +0800

    net: spacemit: Check for netif_carrier_ok() in emac_stats_update()
    
    [ Upstream commit 2c84959167d6493dbdac88965c7389b8ab88bf4e ]
    
    Some PHYs stop the refclk for power saving, usually while link down.
    This causes reading stats to time out.
    
    Therefore, in emac_stats_update(), also don't update and reschedule if
    !netif_carrier_ok(). But that means we could be missing later updates if
    the link comes back up, so also reschedule when link up is detected in
    emac_adjust_link().
    
    While we're at it, improve the comments and error message prints around
    this to reflect the better understanding of how this could happen.
    Hopefully if this happens again on new hardware, these comments will
    direct towards a solution.
    
    Closes: https://lore.kernel.org/r/[email protected]/
    Fixes: bfec6d7f2001 ("net: spacemit: Add K1 Ethernet MAC")
    Co-developed-by: Chukun Pan <[email protected]>
    Signed-off-by: Chukun Pan <[email protected]>
    Signed-off-by: Vivian Wang <[email protected]>
    Link: https://patch.msgid.link/20260123-k1-ethernet-clarify-stat-timeout-v3-1-93b9df627e87@iscas.ac.cn
    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]>

 
nvmet: fix race in nvmet_bio_done() leading to NULL pointer dereference [+ + +]
Author: Ming Lei <[email protected]>
Date:   Wed Jan 21 17:38:54 2026 +0800

    nvmet: fix race in nvmet_bio_done() leading to NULL pointer dereference
    
    commit 0fcee2cfc4b2e16e62ff8e0cc2cd8dd24efad65e upstream.
    
    There is a race condition in nvmet_bio_done() that can cause a NULL
    pointer dereference in blk_cgroup_bio_start():
    
    1. nvmet_bio_done() is called when a bio completes
    2. nvmet_req_complete() is called, which invokes req->ops->queue_response(req)
    3. The queue_response callback can re-queue and re-submit the same request
    4. The re-submission reuses the same inline_bio from nvmet_req
    5. Meanwhile, nvmet_req_bio_put() (called after nvmet_req_complete)
       invokes bio_uninit() for inline_bio, which sets bio->bi_blkg to NULL
    6. The re-submitted bio enters submit_bio_noacct_nocheck()
    7. blk_cgroup_bio_start() dereferences bio->bi_blkg, causing a crash:
    
      BUG: kernel NULL pointer dereference, address: 0000000000000028
      #PF: supervisor read access in kernel mode
      RIP: 0010:blk_cgroup_bio_start+0x10/0xd0
      Call Trace:
       submit_bio_noacct_nocheck+0x44/0x250
       nvmet_bdev_execute_rw+0x254/0x370 [nvmet]
       process_one_work+0x193/0x3c0
       worker_thread+0x281/0x3a0
    
    Fix this by reordering nvmet_bio_done() to call nvmet_req_bio_put()
    BEFORE nvmet_req_complete(). This ensures the bio is cleaned up before
    the request can be re-submitted, preventing the race condition.
    
    Fixes: 190f4c2c863a ("nvmet: fix memory leak of bio integrity")
    Cc: Dmitry Bogdanov <[email protected]>
    Cc: [email protected]
    Cc: Guangwu Zhang <[email protected]>
    Link: http://www.mail-archive.com/[email protected]/msg146238.html
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Ming Lei <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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]>

 
of/reserved_mem: Simplify the logic of fdt_scan_reserved_mem_reg_nodes() [+ + +]
Author: Yuntao Wang <[email protected]>
Date:   Sat Nov 15 21:47:52 2025 +0800

    of/reserved_mem: Simplify the logic of fdt_scan_reserved_mem_reg_nodes()
    
    [ Upstream commit 85a8a30c5b8e0ffaaf9f4dc51550dc71a1100df4 ]
    
    Use the existing helper functions to simplify the logic of
    fdt_scan_reserved_mem_reg_nodes()
    
    Signed-off-by: Yuntao Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rob Herring (Arm) <[email protected]>
    Stable-dep-of: 0fd17e598333 ("of: reserved_mem: Allow reserved_mem framework detect "cma=" kernel param")
    Signed-off-by: Sasha Levin <[email protected]>

 
of: reserved_mem: Allow reserved_mem framework detect "cma=" kernel param [+ + +]
Author: Oreoluwa Babatunde <[email protected]>
Date:   Mon Jan 26 18:13:27 2026 +0100

    of: reserved_mem: Allow reserved_mem framework detect "cma=" kernel param
    
    [ Upstream commit 0fd17e5983337231dc655e9ca0095d2ca3f47405 ]
    
    When initializing the default cma region, the "cma=" kernel parameter
    takes priority over a DT defined linux,cma-default region. Hence, give
    the reserved_mem framework the ability to detect this so that the DT
    defined cma region can skip initialization accordingly.
    
    Signed-off-by: Oreoluwa Babatunde <[email protected]>
    Tested-by: Joy Zou <[email protected]>
    Acked-by: Rob Herring (Arm) <[email protected]>
    Fixes: 8a6e02d0c00e ("of: reserved_mem: Restructure how the reserved memory regions are processed")
    Fixes: 2c223f7239f3 ("of: reserved_mem: Restructure call site for dma_contiguous_early_fixup()")
    Link: https://lore.kernel.org/r/[email protected]
    [mszyprow: rebased onto v6.19-rc1, added fixes tags, added a stub for
     cma_skip_dt_default_reserved_mem() if no CONFIG_DMA_CMA is set]
    Signed-off-by: Marek Szyprowski <[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:   Thu Jan 29 10:28:21 2026 -0500

    perf: sched: Fix perf crash with new is_user_task() helper
    
    commit 76ed27608f7dd235b727ebbb12163438c2fbb617 upstream.
    
    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]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
pinctrl: lpass-lpi: implement .get_direction() for the GPIO driver [+ + +]
Author: Bartosz Golaszewski <[email protected]>
Date:   Mon Jan 26 14:56:27 2026 +0100

    pinctrl: lpass-lpi: implement .get_direction() for the GPIO driver
    
    commit 4f0d22ec60cee420125f4055af76caa0f373a3fe upstream.
    
    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]>
    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:   Thu Jan 8 11:07:22 2026 +0100

    pinctrl: qcom: sm8350-lpass-lpi: Merge with SC7280 to fix I2S2 and SWR TX pins
    
    commit 1fbe3abb449c5ef2178e1c3e3e8b9a43a7a410ac upstream.
    
    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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
readdir: require opt-in for d_type flags [+ + +]
Author: Amir Goldstein <[email protected]>
Date:   Thu Jan 8 08:45:22 2026 +0100

    readdir: require opt-in for d_type flags
    
    [ Upstream commit c644bce62b9c6b441143a03c910f986109c47001 ]
    
    Commit c31f91c6af96 ("fuse: don't allow signals to interrupt getdents
    copying") introduced the use of high bits in d_type as flags. However,
    overlayfs was not adapted to handle this change.
    
    In ovl_cache_entry_new(), the code checks if d_type == DT_CHR to
    determine if an entry might be a whiteout. When fuse is used as the
    lower layer and sets high bits in d_type, this comparison fails,
    causing whiteout files to not be recognized properly and resulting in
    incorrect overlayfs behavior.
    
    Fix this by requiring callers of iterate_dir() to opt-in for getting
    flag bits in d_type outside of S_DT_MASK.
    
    Fixes: c31f91c6af96 ("fuse: don't allow signals to interrupt getdents copying")
    Link: https://lore.kernel.org/all/[email protected]/
    Link: https://github.com/containerd/stargz-snapshotter/issues/2214
    Reported-by: Chunsheng Luo <[email protected]>
    Reviewed-by: Chunsheng Luo <[email protected]>
    Tested-by: Chunsheng Luo <[email protected]>
    Signed-off-by: Amir Goldstein <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
 
Revert "drm/nouveau/disp: Set drm_mode_config_funcs.atomic_(check|commit)" [+ + +]
Author: John Ogness <[email protected]>
Date:   Fri Jan 30 12:38:08 2026 +0106

    Revert "drm/nouveau/disp: Set drm_mode_config_funcs.atomic_(check|commit)"
    
    commit 6c65db809796717f0a96cf22f80405dbc1a31a4b upstream.
    
    This reverts commit 604826acb3f53c6648a7ee99a3914ead680ab7fb.
    
    Apparently there is more to supporting atomic modesetting than
    providing atomic_(check|commit) callbacks. Before this revert:
    
    WARNING: [] drivers/gpu/drm/drm_plane.c:389 at .__drm_universal_plane_init+0x13c/0x794 [drm], CPU#1: modprobe/1790
    BUG: Kernel NULL pointer dereference on read at 0x00000000
    .drm_atomic_get_plane_state+0xd4/0x210 [drm] (unreliable)
    .drm_client_modeset_commit_atomic+0xf8/0x338 [drm]
    .drm_client_modeset_commit_locked+0x80/0x260 [drm]
    .drm_client_modeset_commit+0x40/0x7c [drm]
    .__drm_fb_helper_restore_fbdev_mode_unlocked.part.0+0xfc/0x108 [drm_kms_helper]
    .drm_fb_helper_set_par+0x8c/0xb8 [drm_kms_helper]
    .fbcon_init+0x31c/0x618
    [...]
    .__drm_fb_helper_initial_config_and_unlock+0x474/0x7f4 [drm_kms_helper]
    .drm_fbdev_client_hotplug+0xb0/0x120 [drm_client_lib]
    .drm_client_register+0x88/0xe4 [drm]
    .drm_fbdev_client_setup+0x12c/0x19b4 [drm_client_lib]
    .drm_client_setup+0x15c/0x18c [drm_client_lib]
    .nouveau_drm_probe+0x19c/0x268 [nouveau]
    
    Fixes: 604826acb3f5 ("drm/nouveau/disp: Set drm_mode_config_funcs.atomic_(check|commit)")
    Reported-by: John Ogness <[email protected]>
    Closes: https://lore.kernel.org/lkml/[email protected]
    Signed-off-by: John Ogness <[email protected]>
    Tested-by: Daniel Palmer <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Danilo Krummrich <[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: bits: always inline functions using build_assert with arguments [+ + +]
Author: Alexandre Courbot <[email protected]>
Date:   Mon Dec 8 11:47:02 2025 +0900

    rust: bits: always inline functions using build_assert with arguments
    
    commit 09c3c9112d71c44146419c87c55c710e68335741 upstream.
    
    `build_assert` relies on the compiler to optimize out its error path.
    Functions using it with its arguments must thus always be inlined,
    otherwise the error path of `build_assert` might not be optimized out,
    triggering a build error.
    
    Cc: [email protected]
    Fixes: cc84ef3b88f4 ("rust: bits: add support for bits/genmask macros")
    Reviewed-by: Daniel Almeida <[email protected]>
    Signed-off-by: Alexandre Courbot <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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]>

rust: rbtree: fix documentation typo in CursorMut peek_next method [+ + +]
Author: Hang Shu <[email protected]>
Date:   Fri Nov 7 09:39:17 2025 +0000

    rust: rbtree: fix documentation typo in CursorMut peek_next method
    
    commit 45f6aed8a835ee2bdd0a5d5ee626a91fe285014f upstream.
    
    The peek_next method's doc comment incorrectly stated it accesses the
    "previous" node when it actually accesses the next node.
    
    Fix the documentation to accurately reflect the method's behavior.
    
    Fixes: 98c14e40e07a ("rust: rbtree: add cursor")
    Reviewed-by: Alice Ryhl <[email protected]>
    Signed-off-by: Hang Shu <[email protected]>
    Reported-by: Miguel Ojeda <[email protected]>
    Closes: https://github.com/Rust-for-Linux/linux/issues/1205
    Cc: [email protected]
    Reviewed-by: Gary Guo <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [ Reworded slightly. - Miguel ]
    Signed-off-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

rust: sync: atomic: Provide stub for `rusttest` 32-bit hosts [+ + +]
Author: Miguel Ojeda <[email protected]>
Date:   Sat Jan 24 00:34:32 2026 +0100

    rust: sync: atomic: Provide stub for `rusttest` 32-bit hosts
    
    commit bd36f6e2abf7f85644f7ea8deb1de4040b03bbc1 upstream.
    
    For arm32, on a x86_64 builder, running the `rusttest` target yields:
    
        error[E0080]: evaluation of constant value failed
          --> rust/kernel/static_assert.rs:37:23
           |
        37 |         const _: () = ::core::assert!($condition $(,$arg)?);
           |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the evaluated program panicked at 'assertion failed: size_of::<isize>() == size_of::<isize_atomic_repr>()', rust/kernel/sync/atomic/predefine.rs:68:1
           |
          ::: rust/kernel/sync/atomic/predefine.rs:68:1
           |
        68 | static_assert!(size_of::<isize>() == size_of::<isize_atomic_repr>());
           | -------------------------------------------------------------------- in this macro invocation
           |
           = note: this error originates in the macro `::core::assert` which comes from the expansion of the macro `static_assert` (in Nightly builds, run with -Z macro-backtrace for more info)
    
    The reason is that `rusttest` runs on the host, so for e.g. a x86_64
    builder `isize` is 64 bits but it is not a `CONFIG_64BIT` build.
    
    Fix it by providing a stub for `rusttest` as usual.
    
    Fixes: 84c6d36bcaf9 ("rust: sync: atomic: Add Atomic<{usize,isize}>")
    Cc: [email protected]
    Reviewed-by: Onur Özkan <[email protected]>
    Acked-by: Boqun Feng <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

rust: sync: refcount: always inline functions using build_assert with arguments [+ + +]
Author: Alexandre Courbot <[email protected]>
Date:   Mon Dec 8 11:47:03 2025 +0900

    rust: sync: refcount: always inline functions using build_assert with arguments
    
    commit d6ff6e870077ae0f01a6f860ca1e4a5a825dc032 upstream.
    
    `build_assert` relies on the compiler to optimize out its error path.
    Functions using it with its arguments must thus always be inlined,
    otherwise the error path of `build_assert` might not be optimized out,
    triggering a build error.
    
    Cc: [email protected]
    Fixes: bb38f35b35f9 ("rust: implement `kernel::sync::Refcount`")
    Reviewed-by: Daniel Almeida <[email protected]>
    Signed-off-by: Alexandre Courbot <[email protected]>
    Acked-by: Boqun Feng <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sched/deadline: Document dl_server [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Mon Nov 3 11:25:52 2025 +0100

    sched/deadline: Document dl_server
    
    [ Upstream commit 2614069c5912e9d6f1f57c262face1b368fb8c93 ]
    
    Place the notes that resulted from going through the dl_server code in a
    comment.
    
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Stable-dep-of: 115135422562 ("sched/deadline: Fix 'stuck' dl_server")
    Signed-off-by: Sasha Levin <[email protected]>

sched/deadline: Fix 'stuck' dl_server [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Fri Jan 30 13:41:00 2026 +0100

    sched/deadline: Fix 'stuck' dl_server
    
    [ Upstream commit 115135422562e2f791e98a6f55ec57b2da3b3a95 ]
    
    Andrea reported the dl_server getting stuck for him. He tracked it
    down to a state where dl_server_start() saw dl_defer_running==1, but
    the dl_server's job is no longer valid at the time of
    dl_server_start().
    
    In the state diagram this corresponds to [4] D->A (or dl_server_stop()
    due to no more runnable tasks) followed by [1], which in case of a
    lapsed deadline must then be A->B.
    
    Now our A has dl_defer_running==1, while B demands
    dl_defer_running==0, therefore it must get cleared when the CBS wakeup
    rules demand a replenish.
    
    Fixes: a110a81c52a9 ("sched/deadline: Deferrable dl server")
    Reported-by: Andrea Righi [email protected]
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Acked-by: Juri Lelli <[email protected]>
    Tested-by: Andrea Righi [email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
sched_ext: Don't kick CPUs running higher classes [+ + +]
Author: Tejun Heo <[email protected]>
Date:   Thu Jan 29 09:25:45 2026 +0000

    sched_ext: Don't kick CPUs running higher classes
    
    commit a9c1fbbd6dadbaa38c157a07d5d11005460b86b9 upstream.
    
    When a sched_ext scheduler tries to kick a CPU, the CPU may be running a
    higher class task. sched_ext has no control over such CPUs. A sched_ext
    scheduler couldn't have expected to get access to the CPU after kicking it
    anyway. Skip kicking when the target CPU is running a higher class.
    
    Reviewed-by: Andrea Righi <[email protected]>
    Signed-off-by: Tejun Heo <[email protected]>
    Signed-off-by: Christian Loehle <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

sched_ext: Fix SCX_KICK_WAIT to work reliably [+ + +]
Author: Tejun Heo <[email protected]>
Date:   Thu Jan 29 09:25:46 2026 +0000

    sched_ext: Fix SCX_KICK_WAIT to work reliably
    
    commit a379fa1e2cae15d7422b4eead83a6366f2f445cb upstream.
    
    SCX_KICK_WAIT is used to synchronously wait for the target CPU to complete
    a reschedule and can be used to implement operations like core scheduling.
    
    This used to be implemented by scx_next_task_picked() incrementing pnt_seq,
    which was always called when a CPU picks the next task to run, allowing
    SCX_KICK_WAIT to reliably wait for the target CPU to enter the scheduler and
    pick the next task.
    
    However, commit b999e365c298 ("sched_ext: Replace scx_next_task_picked()
    with switch_class()") replaced scx_next_task_picked() with the
    switch_class() callback, which is only called when switching between sched
    classes. This broke SCX_KICK_WAIT because pnt_seq would no longer be
    reliably incremented unless the previous task was SCX and the next task was
    not.
    
    This fix leverages commit 4c95380701f5 ("sched/ext: Fold balance_scx() into
    pick_task_scx()") which refactored the pick path making put_prev_task_scx()
    the natural place to track task switches for SCX_KICK_WAIT. The fix moves
    pnt_seq increment to put_prev_task_scx() and also increments it in
    pick_task_scx() to handle cases where the same task is re-selected, whether
    by BPF scheduler decision or slice refill. The semantics: If the current
    task on the target CPU is SCX, SCX_KICK_WAIT waits until the CPU enters the
    scheduling path. This provides sufficient guarantee for use cases like core
    scheduling while keeping the operation self-contained within SCX.
    
    v2: - Also increment pnt_seq in pick_task_scx() to handle same-task
          re-selection (Andrea Righi).
        - Use smp_cond_load_acquire() for the busy-wait loop for better
          architecture optimization (Peter Zijlstra).
    
    Reported-by: Wen-Fang Liu <[email protected]>
    Link: http://lkml.kernel.org/r/[email protected]
    Cc: Peter Zijlstra <[email protected]>
    Reviewed-by: Andrea Righi <[email protected]>
    Signed-off-by: Tejun Heo <[email protected]>
    Signed-off-by: Christian Loehle <[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]>

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

    scripts: generate_rust_analyzer: Add pin_init -> compiler_builtins dep
    
    commit 98dcca855343512a99432224447f07c5988753ad upstream.
    
    Add a dependency edge from `pin_init` to `compiler_builtins` to
    `scripts/generate_rust_analyzer.py` to match `rust/Makefile`. This has
    been incorrect since commit d7659acca7a3 ("rust: add pin-init crate
    build infrastructure").
    
    Signed-off-by: Tamir Duberstein <[email protected]>
    Reviewed-by: Jesung Yang <[email protected]>
    Acked-by: Benno Lossin <[email protected]>
    Fixes: d7659acca7a3 ("rust: add pin-init crate build infrastructure")
    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]>

scripts: generate_rust_analyzer: Add pin_init_internal deps [+ + +]
Author: Tamir Duberstein <[email protected]>
Date:   Wed Jul 23 11:39:42 2025 -0400

    scripts: generate_rust_analyzer: Add pin_init_internal deps
    
    commit 74e15ac34b098934895fd27655d098971d2b43d9 upstream.
    
    Commit d7659acca7a3 ("rust: add pin-init crate build infrastructure")
    did not add dependencies to `pin_init_internal`, resulting in broken
    navigation. Thus add them now.
    
    [ Tamir elaborates:
    
      "before this series, go-to-symbol from pin_init_internal to e.g.
       proc_macro::TokenStream doesn't work."
    
         - Miguel ]
    
    Signed-off-by: Tamir Duberstein <[email protected]>
    Reviewed-by: Jesung Yang <[email protected]>
    Acked-by: Benno Lossin <[email protected]>
    Fixes: d7659acca7a3 ("rust: add pin-init crate build infrastructure")
    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]>

scripts: generate_rust_analyzer: compile sysroot with correct edition [+ + +]
Author: Tamir Duberstein <[email protected]>
Date:   Fri Jan 16 15:46:04 2026 -0500

    scripts: generate_rust_analyzer: compile sysroot with correct edition
    
    commit ac3c50b9a24e9ebeb585679078d6c47922034bb6 upstream.
    
    Use `core_edition` for all sysroot crates rather than just core as all
    were updated to edition 2024 in Rust 1.87.
    
    Fixes: f4daa80d6be7 ("rust: compile libcore with edition 2024 for 1.87+")
    Signed-off-by: Tamir Duberstein <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    [ Added `>`s to make the quote a single block. - Miguel ]
    Signed-off-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scripts: generate_rust_analyzer: fix resolution of #[pin_data] macros [+ + +]
Author: SeungJong Ha <[email protected]>
Date:   Fri Jan 23 13:18:44 2026 +0000

    scripts: generate_rust_analyzer: fix resolution of #[pin_data] macros
    
    commit e440bc5c190cd0e5f148b2892aeb1f4bbbf54507 upstream.
    
    Currently, rust-analyzer fails to properly resolve structs annotated with
    `#[pin_data]`. This prevents IDE features like "Go to Definition" from
    working correctly for those structs.
    
    Add the missing configuration to `generate_rust_analyzer.py` to ensure
    the `pin-init` crate macros are handled correctly.
    
    Signed-off-by: SeungJong Ha <[email protected]>
    Fixes: d7659acca7a3 ("rust: add pin-init crate build infrastructure")
    Cc: [email protected]
    Tested-by: Tamir Duberstein <[email protected]>
    Acked-by: Tamir Duberstein <[email protected]>
    Acked-by: Gary Guo <[email protected]>
    Reviewed-by: Jesung Yang <[email protected]>
    Link: https://patch.msgid.link/20260123-fix-pin-init-crate-dependecies-v2-1-bb1c2500e54c@gmail.com
    Signed-off-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scripts: generate_rust_analyzer: remove sysroot assertion [+ + +]
Author: Onur Özkan <[email protected]>
Date:   Wed Dec 24 16:53:43 2025 +0300

    scripts: generate_rust_analyzer: remove sysroot assertion
    
    commit 1b83ef9f7ad4635c913b80ef5e718f95f48e85af upstream.
    
    With nixpkgs's rustc, rust-src component is not bundled
    with the compiler by default and is instead provided from
    a separate store path, so this assumption does not hold.
    
    The assertion assumes these paths are in the same location
    which causes `make LLVM=1 rust-analyzer` to fail on NixOS.
    
    Link: https://rust-for-linux.zulipchat.com/#narrow/stream/x/topic/x/near/565284250
    Signed-off-by: Onur Özkan <[email protected]>
    Reviewed-by: Gary Guo <[email protected]>
    Fixes: fe992163575b ("rust: Support latest version of `rust-analyzer`")
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    [ Reworded title. - Miguel ]
    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]>

 
sfc: fix deadlock in RSS config read [+ + +]
Author: Edward Cree <[email protected]>
Date:   Fri Jan 23 16:16:34 2026 +0000

    sfc: fix deadlock in RSS config read
    
    [ Upstream commit 944c614b0a7afa5b87612c3fb557b95a50ad654c ]
    
    Since cited commit, core locks the net_device's rss_lock when handling
     ethtool -x command, so driver's implementation should not lock it
     again.  Remove the latter.
    
    Fixes: 040cef30b5e6 ("net: ethtool: move get_rxfh callback under the rss_lock")
    Reported-by: Damir Mansurov <[email protected]>
    Closes: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1126015
    Suggested-by: Ben Hutchings <[email protected]>
    Signed-off-by: Edward Cree <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
wifi: mac80211: apply advertised TTLM from association response [+ + +]
Author: Benjamin Berg <[email protected]>
Date:   Sun Jan 18 09:51:14 2026 +0200

    wifi: mac80211: apply advertised TTLM from association response
    
    [ Upstream commit aebc29dec67aa998a9ea6d34aacba7b5c6a74d33 ]
    
    When the AP has a disabled link that the station can include in the
    association, the fact that the link is dormant needs to be advertised
    in the TID to Link Mapping (TTLM). Section 35.3.7.2.3 ("Negotiation of
    TTLM") of Draft P802.11REVmf_D1.0 also states that the mapping needs to
    be included in the association response frame.
    
    As such, we can simply rely on the TTLM from the association response.
    Before this change mac80211 would not properly track that an advertised
    TTLM was effectively active, resulting in it not enabling the link once
    it became available again.
    
    For the link reconfiguration case, the data was not used at all. This
    behaviour is actually correct because Draft P802.11REVmf_D1.0 states in
    section 35.3.6.4 that we "shall operate with all the TIDs mapped to the
    newly added links ..."
    
    Fixes: 6d543b34dbcf ("wifi: mac80211: Support disabled links during association")
    Signed-off-by: Benjamin Berg <[email protected]>
    Signed-off-by: Miri Korenblit <[email protected]>
    Link: https://patch.msgid.link/20260118093904.43c861424543.I067f702ac46b84ac3f8b4ea16fb0db9cbbfae7e2@changeid
    Signed-off-by: Johannes Berg <[email protected]>
    Stable-dep-of: 1eab33aa63c9 ("wifi: mac80211: correctly decode TTLM with default link map")
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mac80211: correctly decode TTLM with default link map [+ + +]
Author: Benjamin Berg <[email protected]>
Date:   Thu Jan 29 11:33:50 2026 +0100

    wifi: mac80211: correctly decode TTLM with default link map
    
    [ Upstream commit 1eab33aa63c993685dd341e03bd5b267dd7403fa ]
    
    TID-To-Link Mapping (TTLM) elements do not contain any link mapping
    presence indicator if a default mapping is used and parsing needs to be
    skipped.
    
    Note that access points should not explicitly report an advertised TTLM
    with a default mapping as that is the implied mapping if the element is
    not included, this is even the case when switching back to the default
    mapping. However, mac80211 would incorrectly parse the frame and would
    also read one byte beyond the end of the element.
    
    Reported-by: Ruikai Peng <[email protected]>
    Closes: https://lore.kernel.org/linux-wireless/CAFD3drMqc9YWvTCSHLyP89AOpBZsHdZ+pak6zVftYoZcUyF7gw@mail.gmail.com
    Fixes: 702e80470a33 ("wifi: mac80211: support handling of advertised TID-to-link mapping")
    Signed-off-by: Benjamin Berg <[email protected]>
    Link: https://patch.msgid.link/20260129113349.d6b96f12c732.I69212a50f0f70db185edd3abefb6f04d3cb3e5ff@changeid
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mac80211: parse all TTLM entries [+ + +]
Author: Benjamin Berg <[email protected]>
Date:   Sun Jan 18 09:51:13 2026 +0200

    wifi: mac80211: parse all TTLM entries
    
    [ Upstream commit 3fa2886d11d4545dc0dcfd0759ffbd03f88b5410 ]
    
    For the follow up patch, we need to properly parse TTLM entries that do
    not have a switch time. Change the logic so that ieee80211_parse_adv_t2l
    returns usable values in all non-error cases. Before the values filled
    in were technically incorrect but enough for ieee80211_process_adv_ttlm.
    
    Signed-off-by: Benjamin Berg <[email protected]>
    Reviewed-by: Johannes Berg <[email protected]>
    Reviewed-by: Ilan Peer <[email protected]>
    Signed-off-by: Miri Korenblit <[email protected]>
    Link: https://patch.msgid.link/20260118093904.ccd324e2dd59.I69f0bee0a22e9b11bb95beef313e305dab17c051@changeid
    Signed-off-by: Johannes Berg <[email protected]>
    Stable-dep-of: 1eab33aa63c9 ("wifi: mac80211: correctly decode TTLM with default link map")
    Signed-off-by: Sasha Levin <[email protected]>

 
writeback: fix 100% CPU usage when dirtytime_expire_interval is 0 [+ + +]
Author: Laveesh Bansal <[email protected]>
Date:   Tue Jan 6 14:50:58 2026 +0000

    writeback: fix 100% CPU usage when dirtytime_expire_interval is 0
    
    commit 543467d6fe97e27e22a26e367fda972dbefebbff upstream.
    
    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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>