Changelog in Linux kernel 6.18.7

 
ALSA: hda/cirrus_scodec_test: Fix incorrect setup of gpiochip [+ + +]
Author: Richard Fitzgerald <[email protected]>
Date:   Tue Jan 13 13:09:54 2026 +0000

    ALSA: hda/cirrus_scodec_test: Fix incorrect setup of gpiochip
    
    [ Upstream commit c5e96e54eca3876d4ce8857e2e22adbe9f44f4a2 ]
    
    Set gpiochip parent to the struct device of the dummy GPIO driver
    so that the software node will be associated with the GPIO chip.
    
    The recent commit e5d527be7e698 ("gpio: swnode: don't use the
    swnode's name as the key for GPIO lookup") broke cirrus_scodec_test,
    because the software node no longer gets associated with the GPIO
    driver by name.
    
    Instead, setting struct gpio_chip.parent to the owning struct device
    will find the node using a normal fwnode lookup.
    
    Signed-off-by: Richard Fitzgerald <[email protected]>
    Fixes: 2144833e7b414 ("ALSA: hda: cirrus_scodec: Add KUnit test")
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda/cirrus_scodec_test: Fix test suite name [+ + +]
Author: Richard Fitzgerald <[email protected]>
Date:   Tue Jan 13 13:40:56 2026 +0000

    ALSA: hda/cirrus_scodec_test: Fix test suite name
    
    [ Upstream commit 6a0243c4020636482797acfd48d7d9b0ea2f2a20 ]
    
    Change the test suite name string to "snd-hda-cirrus-scodec-test".
    
    It was incorrectly named "snd-hda-scodec-cs35l56-test", a leftover
    from when the code under test was actually in the cs35l56 driver.
    
    Signed-off-by: Richard Fitzgerald <[email protected]>
    Fixes: 2144833e7b414 ("ALSA: hda: cirrus_scodec: Add KUnit test")
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda/realtek: Add quirk for HP Pavilion x360 to enable mute LED [+ + +]
Author: Zhang Heng <[email protected]>
Date:   Thu Jan 15 09:58:44 2026 +0800

    ALSA: hda/realtek: Add quirk for HP Pavilion x360 to enable mute LED
    
    commit ab2be3af8c4ea57f779474cd2a2fe8dd4ad537a6 upstream.
    
    This quirk enables mute LED on HP Pavilion x360 2-in-1 Laptop 14-ek0xxx,
    which use ALC245 codec.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=220220
    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]>

ALSA: hda/tas2781: Skip UEFI calibration on ASUS ROG Xbox Ally X [+ + +]
Author: Matthew Schwartz <[email protected]>
Date:   Thu Jan 8 01:36:50 2026 -0800

    ALSA: hda/tas2781: Skip UEFI calibration on ASUS ROG Xbox Ally X
    
    commit b7e26c8bdae70832d7c4b31ec2995b1812a60169 upstream.
    
    There is currently an issue with UEFI calibration data parsing for some
    TAS devices, like the ASUS ROG Xbox Ally X (RC73XA), that causes audio
    quality issues such as gaps in playback. Until the issue is root caused
    and fixed, add a quirk to skip using the UEFI calibration data and fall
    back to using the calibration data provided by the DSP firmware, which
    restores full speaker functionality on affected devices.
    
    Cc: [email protected] # 6.18
    Link: https://lore.kernel.org/all/[email protected]/
    Closes: https://lore.kernel.org/all/[email protected]/
    Suggested-by: Baojun Xu <[email protected]>
    Signed-off-by: Matthew Schwartz <[email protected]>
    Reviewed-by: Antheas Kapenekakis <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: pcm: Improve the fix for race of buffer access at PCM OSS layer [+ + +]
Author: Jaroslav Kysela <[email protected]>
Date:   Wed Jan 7 22:36:42 2026 +0100

    ALSA: pcm: Improve the fix for race of buffer access at PCM OSS layer
    
    commit 47c27c9c9c720bc93fdc69605d0ecd9382e99047 upstream.
    
    Handle the error code from snd_pcm_buffer_access_lock() in
    snd_pcm_runtime_buffer_set_silence() function.
    
    Found by Alexandros Panagiotou <[email protected]>
    
    Fixes: 93a81ca06577 ("ALSA: pcm: Fix race of buffer access at PCM OSS layer")
    Cc: [email protected] # 6.15
    Signed-off-by: Jaroslav Kysela <[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: codecs: wsa881x: fix unnecessary initialisation [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Jan 2 12:14:11 2026 +0100

    ASoC: codecs: wsa881x: fix unnecessary initialisation
    
    commit 29d71b8a5a40708b3eed9ba4953bfc2312c9c776 upstream.
    
    The soundwire update_status() callback may be called multiple times with
    the same ATTACHED status but initialisation should only be done when
    transitioning from UNATTACHED to ATTACHED.
    
    Fixes: a0aab9e1404a ("ASoC: codecs: add wsa881x amplifier support")
    Cc: [email protected]      # 5.6
    Cc: Srinivas Kandagatla <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Krzysztof Kozlowski <[email protected]>
    Reviewed-by: Srinivas Kandagatla <[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: codecs: wsa883x: fix unnecessary initialisation [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Jan 2 12:14:10 2026 +0100

    ASoC: codecs: wsa883x: fix unnecessary initialisation
    
    commit 49aadf830eb048134d33ad7329d92ecff45d8dbb upstream.
    
    The soundwire update_status() callback may be called multiple times with
    the same ATTACHED status but initialisation should only be done when
    transitioning from UNATTACHED to ATTACHED.
    
    This avoids repeated initialisation of the codecs during boot of
    machines like the Lenovo ThinkPad X13s:
    
    [   11.614523] wsa883x-codec sdw:1:0:0217:0202:00:1: WSA883X Version 1_1, Variant: WSA8835_V2
    [   11.618022] wsa883x-codec sdw:1:0:0217:0202:00:1: WSA883X Version 1_1, Variant: WSA8835_V2
    [   11.621377] wsa883x-codec sdw:1:0:0217:0202:00:1: WSA883X Version 1_1, Variant: WSA8835_V2
    [   11.624065] wsa883x-codec sdw:1:0:0217:0202:00:1: WSA883X Version 1_1, Variant: WSA8835_V2
    [   11.631382] wsa883x-codec sdw:1:0:0217:0202:00:2: WSA883X Version 1_1, Variant: WSA8835_V2
    [   11.634424] wsa883x-codec sdw:1:0:0217:0202:00:2: WSA883X Version 1_1, Variant: WSA8835_V2
    
    Fixes: 43b8c7dc85a1 ("ASoC: codecs: add wsa883x amplifier support")
    Cc: [email protected]      # 6.0
    Cc: Srinivas Kandagatla <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Krzysztof Kozlowski <[email protected]>
    Reviewed-by: Srinivas Kandagatla <[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: codecs: wsa884x: fix codec initialisation [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Jan 2 12:14:12 2026 +0100

    ASoC: codecs: wsa884x: fix codec initialisation
    
    commit 120f3e6ff76209ee2f62a64e5e7e9d70274df42b upstream.
    
    The soundwire update_status() callback may be called multiple times with
    the same ATTACHED status but initialisation should only be done when
    transitioning from UNATTACHED to ATTACHED.
    
    Fix the inverted hw_init flag which was set to false instead of true
    after initialisation which defeats its purpose and may result in
    repeated unnecessary initialisation.
    
    Similarly, the initial state of the flag was also inverted so that the
    codec would only be initialised and brought out of regmap cache only
    mode if its status first transitions to UNATTACHED.
    
    Fixes: aa21a7d4f68a ("ASoC: codecs: wsa884x: Add WSA884x family of speakers")
    Cc: [email protected]      # 6.5
    Cc: Krzysztof Kozlowski <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Krzysztof Kozlowski <[email protected]>
    Tested-by: Krzysztof Kozlowski <[email protected]>
    Reviewed-by: Srinivas Kandagatla <[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: sdw_utils: cs42l43: Enable Headphone pin for LINEOUT jack type [+ + +]
Author: Cole Leavitt <[email protected]>
Date:   Tue Jan 13 19:55:18 2026 -0700

    ASoC: sdw_utils: cs42l43: Enable Headphone pin for LINEOUT jack type
    
    [ Upstream commit 390caeed0897fcac75f3c414dbdd85d593183d9c ]
    
    The CS42L43 codec's load detection can return different impedance values
    that map to either HEADPHONE or LINEOUT jack types. However, the
    soc_jack_pins array only maps SND_JACK_HEADPHONE to the "Headphone" DAPM
    pin, not SND_JACK_LINEOUT.
    
    When headphones are detected with an impedance that maps to LINEOUT
    (such as impedance value 0x2), the driver reports SND_JACK_LINEOUT.
    Since this doesn't match the jack pin mask, the "Headphone" DAPM pin
    is not activated, and no audio is routed to the headphone outputs.
    
    Fix by adding SND_JACK_LINEOUT to the Headphone pin mask, so that both
    headphone and line-out detection properly enable the headphone output
    path.
    
    This fixes no audio output on devices like the Lenovo ThinkPad P16 Gen 3
    where headphones are detected with LINEOUT impedance.
    
    Fixes: d74bad3b7452 ("ASoC: intel: sof_sdw_cs42l43: Create separate jacks for hp and mic")
    Reviewed-by: Charles Keepax <[email protected]>
    Signed-off-by: Cole Leavitt <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: tlv320adcx140: fix null pointer [+ + +]
Author: Emil Svendsen <[email protected]>
Date:   Tue Jan 13 11:58:45 2026 +0100

    ASoC: tlv320adcx140: fix null pointer
    
    [ Upstream commit be7664c81d3129fc313ef62ff275fd3d33cfecd4 ]
    
    The "snd_soc_component" in "adcx140_priv" was only used once but never
    set. It was only used for reaching "dev" which is already present in
    "adcx140_priv".
    
    Fixes: 4e82971f7b55 ("ASoC: tlv320adcx140: Add a new kcontrol")
    Signed-off-by: Emil Svendsen <[email protected]>
    Signed-off-by: Sascha Hauer <[email protected]>
    Link: https://patch.msgid.link/20260113-sound-soc-codecs-tvl320adcx140-v4-2-8f7ecec525c8@pengutronix.de
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: tlv320adcx140: fix word length [+ + +]
Author: Emil Svendsen <[email protected]>
Date:   Tue Jan 13 11:58:47 2026 +0100

    ASoC: tlv320adcx140: fix word length
    
    [ Upstream commit 46378ab9fcb796dca46b51e10646f636e2c661f9 ]
    
    The word length is the physical width of the channel slots. So the
    hw_params would misconfigure when format width and physical width
    doesn't match. Like S24_LE which has data width of 24 bits but physical
    width of 32 bits. So if using asymmetric formats you will get a lot of
    noise.
    
    Fixes: 689c7655b50c5 ("ASoC: tlv320adcx140: Add the tlv320adcx140 codec driver family")
    Signed-off-by: Emil Svendsen <[email protected]>
    Signed-off-by: Sascha Hauer <[email protected]>
    Link: https://patch.msgid.link/20260113-sound-soc-codecs-tvl320adcx140-v4-4-8f7ecec525c8@pengutronix.de
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
block: zero non-PI portion of auto integrity buffer [+ + +]
Author: Caleb Sander Mateos <[email protected]>
Date:   Thu Jan 8 10:22:10 2026 -0700

    block: zero non-PI portion of auto integrity buffer
    
    [ Upstream commit ca22c566b89164f6e670af56ecc45f47ef3df819 ]
    
    The auto-generated integrity buffer for writes needs to be fully
    initialized before being passed to the underlying block device,
    otherwise the uninitialized memory can be read back by userspace or
    anyone with physical access to the storage device. If protection
    information is generated, that portion of the integrity buffer is
    already initialized. The integrity data is also zeroed if PI generation
    is disabled via sysfs or the PI tuple size is 0. However, this misses
    the case where PI is generated and the PI tuple size is nonzero, but the
    metadata size is larger than the PI tuple. In this case, the remainder
    ("opaque") of the metadata is left uninitialized.
    Generalize the BLK_INTEGRITY_CSUM_NONE check to cover any case when the
    metadata is larger than just the PI tuple.
    
    Signed-off-by: Caleb Sander Mateos <[email protected]>
    Fixes: c546d6f43833 ("block: only zero non-PI metadata tuples in bio_integrity_prep")
    Reviewed-by: Anuj Gupta <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Bluetooth: hci_sync: enable PA Sync Lost event [+ + +]
Author: Yang Li <[email protected]>
Date:   Fri Dec 19 10:43:09 2025 +0800

    Bluetooth: hci_sync: enable PA Sync Lost event
    
    [ Upstream commit ab749bfe6a1fc233213f2d00facea5233139d509 ]
    
    Enable the PA Sync Lost event mask to ensure PA sync loss is properly
    reported and handled.
    
    Fixes: 485e0626e587 ("Bluetooth: hci_event: Fix not handling PA Sync Lost event")
    Signed-off-by: Yang Li <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
btrfs: fix deadlock in wait_current_trans() due to ignored transaction type [+ + +]
Author: Robbie Ko <[email protected]>
Date:   Thu Dec 11 13:30:33 2025 +0800

    btrfs: fix deadlock in wait_current_trans() due to ignored transaction type
    
    commit 5037b342825df7094a4906d1e2a9674baab50cb2 upstream.
    
    When wait_current_trans() is called during start_transaction(), it
    currently waits for a blocked transaction without considering whether
    the given transaction type actually needs to wait for that particular
    transaction state. The btrfs_blocked_trans_types[] array already defines
    which transaction types should wait for which transaction states, but
    this check was missing in wait_current_trans().
    
    This can lead to a deadlock scenario involving two transactions and
    pending ordered extents:
    
      1. Transaction A is in TRANS_STATE_COMMIT_DOING state
    
      2. A worker processing an ordered extent calls start_transaction()
         with TRANS_JOIN
    
      3. join_transaction() returns -EBUSY because Transaction A is in
         TRANS_STATE_COMMIT_DOING
    
      4. Transaction A moves to TRANS_STATE_UNBLOCKED and completes
    
      5. A new Transaction B is created (TRANS_STATE_RUNNING)
    
      6. The ordered extent from step 2 is added to Transaction B's
         pending ordered extents
    
      7. Transaction B immediately starts commit by another task and
         enters TRANS_STATE_COMMIT_START
    
      8. The worker finally reaches wait_current_trans(), sees Transaction B
         in TRANS_STATE_COMMIT_START (a blocked state), and waits
         unconditionally
    
      9. However, TRANS_JOIN should NOT wait for TRANS_STATE_COMMIT_START
         according to btrfs_blocked_trans_types[]
    
      10. Transaction B is waiting for pending ordered extents to complete
    
      11. Deadlock: Transaction B waits for ordered extent, ordered extent
          waits for Transaction B
    
    This can be illustrated by the following call stacks:
      CPU0                              CPU1
                                        btrfs_finish_ordered_io()
                                          start_transaction(TRANS_JOIN)
                                            join_transaction()
                                              # -EBUSY (Transaction A is
                                              # TRANS_STATE_COMMIT_DOING)
      # Transaction A completes
      # Transaction B created
      # ordered extent added to
      # Transaction B's pending list
      btrfs_commit_transaction()
        # Transaction B enters
        # TRANS_STATE_COMMIT_START
        # waiting for pending ordered
        # extents
                                            wait_current_trans()
                                              # waits for Transaction B
                                              # (should not wait!)
    
    Task bstore_kv_sync in btrfs_commit_transaction waiting for ordered
    extents:
    
      __schedule+0x2e7/0x8a0
      schedule+0x64/0xe0
      btrfs_commit_transaction+0xbf7/0xda0 [btrfs]
      btrfs_sync_file+0x342/0x4d0 [btrfs]
      __x64_sys_fdatasync+0x4b/0x80
      do_syscall_64+0x33/0x40
      entry_SYSCALL_64_after_hwframe+0x44/0xa9
    
    Task kworker in wait_current_trans waiting for transaction commit:
    
      Workqueue: btrfs-syno_nocow btrfs_work_helper [btrfs]
      __schedule+0x2e7/0x8a0
      schedule+0x64/0xe0
      wait_current_trans+0xb0/0x110 [btrfs]
      start_transaction+0x346/0x5b0 [btrfs]
      btrfs_finish_ordered_io.isra.0+0x49b/0x9c0 [btrfs]
      btrfs_work_helper+0xe8/0x350 [btrfs]
      process_one_work+0x1d3/0x3c0
      worker_thread+0x4d/0x3e0
      kthread+0x12d/0x150
      ret_from_fork+0x1f/0x30
    
    Fix this by passing the transaction type to wait_current_trans() and
    checking btrfs_blocked_trans_types[cur_trans->state] against the given
    type before deciding to wait. This ensures that transaction types which
    are allowed to join during certain blocked states will not unnecessarily
    wait and cause deadlocks.
    
    Reviewed-by: Filipe Manana <[email protected]>
    Signed-off-by: Robbie Ko <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Cc: Motiejus Jakštys <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: fix memory leaks in create_space_info() error paths [+ + +]
Author: Jiasheng Jiang <[email protected]>
Date:   Sun Jan 11 19:20:37 2026 +0000

    btrfs: fix memory leaks in create_space_info() error paths
    
    [ Upstream commit a11224a016d6d1d46a4d9b6573244448a80d4d7f ]
    
    In create_space_info(), the 'space_info' object is allocated at the
    beginning of the function. However, there are two error paths where the
    function returns an error code without freeing the allocated memory:
    
    1. When create_space_info_sub_group() fails in zoned mode.
    2. When btrfs_sysfs_add_space_info_type() fails.
    
    In both cases, 'space_info' has not yet been added to the
    fs_info->space_info list, resulting in a memory leak. Fix this by
    adding an error handling label to kfree(space_info) before returning.
    
    Fixes: 2be12ef79fe9 ("btrfs: Separate space_info create/update")
    Reviewed-by: Qu Wenruo <[email protected]>
    Signed-off-by: Jiasheng Jiang <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: release path before iget_failed() in btrfs_read_locked_inode() [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Fri Dec 19 11:26:02 2025 +0000

    btrfs: release path before iget_failed() in btrfs_read_locked_inode()
    
    [ Upstream commit 1e1f2055ad5a7a5d548789b334a4473a7665c418 ]
    
    In btrfs_read_locked_inode() if we fail to lookup the inode, we jump to
    the 'out' label with a path that has a read locked leaf and then we call
    iget_failed(). This can result in a ABBA deadlock, since iget_failed()
    triggers inode eviction and that causes the release of the delayed inode,
    which must lock the delayed inode's mutex, and a task updating a delayed
    inode starts by taking the node's mutex and then modifying the inode's
    subvolume btree.
    
    Syzbot reported the following lockdep splat for this:
    
       ======================================================
       WARNING: possible circular locking dependency detected
       syzkaller #0 Not tainted
       ------------------------------------------------------
       btrfs-cleaner/8725 is trying to acquire lock:
       ffff0000d6826a48 (&delayed_node->mutex){+.+.}-{4:4}, at: __btrfs_release_delayed_node+0xa0/0x9b0 fs/btrfs/delayed-inode.c:290
    
       but task is already holding lock:
       ffff0000dbeba878 (btrfs-tree-00){++++}-{4:4}, at: btrfs_tree_read_lock_nested+0x44/0x2ec fs/btrfs/locking.c:145
    
       which lock already depends on the new lock.
    
       the existing dependency chain (in reverse order) is:
    
       -> #1 (btrfs-tree-00){++++}-{4:4}:
              __lock_release kernel/locking/lockdep.c:5574 [inline]
              lock_release+0x198/0x39c kernel/locking/lockdep.c:5889
              up_read+0x24/0x3c kernel/locking/rwsem.c:1632
              btrfs_tree_read_unlock+0xdc/0x298 fs/btrfs/locking.c:169
              btrfs_tree_unlock_rw fs/btrfs/locking.h:218 [inline]
              btrfs_search_slot+0xa6c/0x223c fs/btrfs/ctree.c:2133
              btrfs_lookup_inode+0xd8/0x38c fs/btrfs/inode-item.c:395
              __btrfs_update_delayed_inode+0x124/0xed0 fs/btrfs/delayed-inode.c:1032
              btrfs_update_delayed_inode fs/btrfs/delayed-inode.c:1118 [inline]
              __btrfs_commit_inode_delayed_items+0x15f8/0x1748 fs/btrfs/delayed-inode.c:1141
              __btrfs_run_delayed_items+0x1ac/0x514 fs/btrfs/delayed-inode.c:1176
              btrfs_run_delayed_items_nr+0x28/0x38 fs/btrfs/delayed-inode.c:1219
              flush_space+0x26c/0xb68 fs/btrfs/space-info.c:828
              do_async_reclaim_metadata_space+0x110/0x364 fs/btrfs/space-info.c:1158
              btrfs_async_reclaim_metadata_space+0x90/0xd8 fs/btrfs/space-info.c:1226
              process_one_work+0x7e8/0x155c kernel/workqueue.c:3263
              process_scheduled_works kernel/workqueue.c:3346 [inline]
              worker_thread+0x958/0xed8 kernel/workqueue.c:3427
              kthread+0x5fc/0x75c kernel/kthread.c:463
              ret_from_fork+0x10/0x20 arch/arm64/kernel/entry.S:844
    
       -> #0 (&delayed_node->mutex){+.+.}-{4:4}:
              check_prev_add kernel/locking/lockdep.c:3165 [inline]
              check_prevs_add kernel/locking/lockdep.c:3284 [inline]
              validate_chain kernel/locking/lockdep.c:3908 [inline]
              __lock_acquire+0x1774/0x30a4 kernel/locking/lockdep.c:5237
              lock_acquire+0x14c/0x2e0 kernel/locking/lockdep.c:5868
              __mutex_lock_common+0x1d0/0x2678 kernel/locking/mutex.c:598
              __mutex_lock kernel/locking/mutex.c:760 [inline]
              mutex_lock_nested+0x2c/0x38 kernel/locking/mutex.c:812
              __btrfs_release_delayed_node+0xa0/0x9b0 fs/btrfs/delayed-inode.c:290
              btrfs_release_delayed_node fs/btrfs/delayed-inode.c:315 [inline]
              btrfs_remove_delayed_node+0x68/0x84 fs/btrfs/delayed-inode.c:1326
              btrfs_evict_inode+0x578/0xe28 fs/btrfs/inode.c:5587
              evict+0x414/0x928 fs/inode.c:810
              iput_final fs/inode.c:1914 [inline]
              iput+0x95c/0xad4 fs/inode.c:1966
              iget_failed+0xec/0x134 fs/bad_inode.c:248
              btrfs_read_locked_inode+0xe1c/0x1234 fs/btrfs/inode.c:4101
              btrfs_iget+0x1b0/0x264 fs/btrfs/inode.c:5837
              btrfs_run_defrag_inode fs/btrfs/defrag.c:237 [inline]
              btrfs_run_defrag_inodes+0x520/0xdc4 fs/btrfs/defrag.c:309
              cleaner_kthread+0x21c/0x418 fs/btrfs/disk-io.c:1516
              kthread+0x5fc/0x75c kernel/kthread.c:463
              ret_from_fork+0x10/0x20 arch/arm64/kernel/entry.S:844
    
       other info that might help us debug this:
    
        Possible unsafe locking scenario:
    
              CPU0                    CPU1
              ----                    ----
         rlock(btrfs-tree-00);
                                      lock(&delayed_node->mutex);
                                      lock(btrfs-tree-00);
         lock(&delayed_node->mutex);
    
        *** DEADLOCK ***
    
       1 lock held by btrfs-cleaner/8725:
        #0: ffff0000dbeba878 (btrfs-tree-00){++++}-{4:4}, at: btrfs_tree_read_lock_nested+0x44/0x2ec fs/btrfs/locking.c:145
    
       stack backtrace:
       CPU: 0 UID: 0 PID: 8725 Comm: btrfs-cleaner Not tainted syzkaller #0 PREEMPT
       Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/03/2025
       Call trace:
        show_stack+0x2c/0x3c arch/arm64/kernel/stacktrace.c:499 (C)
        __dump_stack+0x30/0x40 lib/dump_stack.c:94
        dump_stack_lvl+0xd8/0x12c lib/dump_stack.c:120
        dump_stack+0x1c/0x28 lib/dump_stack.c:129
        print_circular_bug+0x324/0x32c kernel/locking/lockdep.c:2043
        check_noncircular+0x154/0x174 kernel/locking/lockdep.c:2175
        check_prev_add kernel/locking/lockdep.c:3165 [inline]
        check_prevs_add kernel/locking/lockdep.c:3284 [inline]
        validate_chain kernel/locking/lockdep.c:3908 [inline]
        __lock_acquire+0x1774/0x30a4 kernel/locking/lockdep.c:5237
        lock_acquire+0x14c/0x2e0 kernel/locking/lockdep.c:5868
        __mutex_lock_common+0x1d0/0x2678 kernel/locking/mutex.c:598
        __mutex_lock kernel/locking/mutex.c:760 [inline]
        mutex_lock_nested+0x2c/0x38 kernel/locking/mutex.c:812
        __btrfs_release_delayed_node+0xa0/0x9b0 fs/btrfs/delayed-inode.c:290
        btrfs_release_delayed_node fs/btrfs/delayed-inode.c:315 [inline]
        btrfs_remove_delayed_node+0x68/0x84 fs/btrfs/delayed-inode.c:1326
        btrfs_evict_inode+0x578/0xe28 fs/btrfs/inode.c:5587
        evict+0x414/0x928 fs/inode.c:810
        iput_final fs/inode.c:1914 [inline]
        iput+0x95c/0xad4 fs/inode.c:1966
        iget_failed+0xec/0x134 fs/bad_inode.c:248
        btrfs_read_locked_inode+0xe1c/0x1234 fs/btrfs/inode.c:4101
        btrfs_iget+0x1b0/0x264 fs/btrfs/inode.c:5837
        btrfs_run_defrag_inode fs/btrfs/defrag.c:237 [inline]
        btrfs_run_defrag_inodes+0x520/0xdc4 fs/btrfs/defrag.c:309
        cleaner_kthread+0x21c/0x418 fs/btrfs/disk-io.c:1516
        kthread+0x5fc/0x75c kernel/kthread.c:463
        ret_from_fork+0x10/0x20 arch/arm64/kernel/entry.S:844
    
    Fix this by releasing the path before calling iget_failed().
    
    Reported-by: [email protected]
    Link: https://lore.kernel.org/linux-btrfs/[email protected]/
    Fixes: 69673992b1ae ("btrfs: push cleanup into btrfs_read_locked_inode()")
    Reviewed-by: Boris Burkov <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: send: check for inline extents in range_is_hole_in_parent() [+ + +]
Author: Qu Wenruo <[email protected]>
Date:   Tue Jan 6 20:26:40 2026 +1030

    btrfs: send: check for inline extents in range_is_hole_in_parent()
    
    [ Upstream commit 08b096c1372cd69627f4f559fb47c9fb67a52b39 ]
    
    Before accessing the disk_bytenr field of a file extent item we need
    to check if we are dealing with an inline extent.
    This is because for inline extents their data starts at the offset of
    the disk_bytenr field. So accessing the disk_bytenr
    means we are accessing inline data or in case the inline data is less
    than 8 bytes we can actually cause an invalid
    memory access if this inline extent item is the first item in the leaf
    or access metadata from other items.
    
    Fixes: 82bfb2e7b645 ("Btrfs: incremental send, fix unnecessary hole writes for sparse files")
    Reviewed-by: Filipe Manana <[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: ctucanfd: fix SSP_SRC in cases when bit-rate is higher than 1 MBit. [+ + +]
Author: Ondrej Ille <[email protected]>
Date:   Mon Jan 5 12:16:20 2026 +0100

    can: ctucanfd: fix SSP_SRC in cases when bit-rate is higher than 1 MBit.
    
    commit e707c591a139d1bfa4ddc83036fc820ca006a140 upstream.
    
    The Secondary Sample Point Source field has been
    set to an incorrect value by some mistake in the
    past
    
      0b01 - SSP_SRC_NO_SSP - SSP is not used.
    
    for data bitrates above 1 MBit/s. The correct/default
    value already used for lower bitrates is
    
      0b00 - SSP_SRC_MEAS_N_OFFSET - SSP position = TRV_DELAY
             (Measured Transmitter delay) + SSP_OFFSET.
    
    The related configuration register structure is described
    in section 3.1.46 SSP_CFG of the CTU CAN FD
    IP CORE Datasheet.
    
    The analysis leading to the proper configuration
    is described in section 2.8.3 Secondary sampling point
    of the datasheet.
    
    The change has been tested on AMD/Xilinx Zynq
    with the next CTU CN FD IP core versions:
    
     - 2.6 aka master in the "integration with Zynq-7000 system" test
       6.12.43-rt12+ #1 SMP PREEMPT_RT kernel with CTU CAN FD git
       driver (change already included in the driver repo)
     - older 2.5 snapshot with mainline kernels with this patch
       applied locally in the multiple CAN latency tester nightly runs
       6.18.0-rc4-rt3-dut #1 SMP PREEMPT_RT
       6.19.0-rc3-dut
    
    The logs, the datasheet and sources are available at
    
     https://canbus.pages.fel.cvut.cz/
    
    Signed-off-by: Ondrej Ille <[email protected]>
    Signed-off-by: Pavel Pisa <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Fixes: 2dcb8e8782d8 ("can: ctucanfd: add support for CTU CAN FD open-source IP core - bus independent part.")
    Cc: [email protected]
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

can: etas_es58x: allow partial RX URB allocation to succeed [+ + +]
Author: Szymon Wilczek <[email protected]>
Date:   Tue Dec 23 02:17:32 2025 +0100

    can: etas_es58x: allow partial RX URB allocation to succeed
    
    [ Upstream commit b1979778e98569c1e78c2c7f16bb24d76541ab00 ]
    
    When es58x_alloc_rx_urbs() fails to allocate the requested number of
    URBs but succeeds in allocating some, it returns an error code.
    This causes es58x_open() to return early, skipping the cleanup label
    'free_urbs', which leads to the anchored URBs being leaked.
    
    As pointed out by maintainer Vincent Mailhol, the driver is designed
    to handle partial URB allocation gracefully. Therefore, partial
    allocation should not be treated as a fatal error.
    
    Modify es58x_alloc_rx_urbs() to return 0 if at least one URB has been
    allocated, restoring the intended behavior and preventing the leak
    in es58x_open().
    
    Fixes: 8537257874e9 ("can: etas_es58x: add core support for ETAS ES58X CAN USB interfaces")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=e8cb6691a7cf68256cb8
    Signed-off-by: Szymon Wilczek <[email protected]>
    Reviewed-by: Vincent Mailhol <[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 URB memory leak [+ + +]
Author: Marc Kleine-Budde <[email protected]>
Date:   Tue Dec 23 21:21:39 2025 +0100

    can: gs_usb: gs_usb_receive_bulk_callback(): fix URB memory leak
    
    commit 7352e1d5932a0e777e39fa4b619801191f57e603 upstream.
    
    In gs_can_open(), the URBs for USB-in transfers are allocated, added to the
    parent->rx_submitted anchor and submitted. In the complete callback
    gs_usb_receive_bulk_callback(), the URB is processed and resubmitted. In
    gs_can_close() the URBs are freed by calling
    usb_kill_anchored_urbs(parent->rx_submitted).
    
    However, this does not take into account that the USB framework unanchors
    the URB before the complete function is called. This means that once an
    in-URB has been completed, it is no longer anchored and is ultimately not
    released in gs_can_close().
    
    Fix the memory leak by anchoring the URB in the
    gs_usb_receive_bulk_callback() to the parent->rx_submitted anchor.
    
    Fixes: d08e973a77d1 ("can: gs_usb: Added support for the GS_USB CAN devices")
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cxl/hdm: Fix potential infinite loop in __cxl_dpa_reserve() [+ + +]
Author: Li Ming <[email protected]>
Date:   Mon Jan 12 20:05:26 2026 +0800

    cxl/hdm: Fix potential infinite loop in __cxl_dpa_reserve()
    
    [ Upstream commit d4026a44626490dc4eca4dd2c4d0816338fa179b ]
    
    In __cxl_dpa_reserve(), it will check if the new resource range is
    included in one of paritions of the cxl memory device.
    cxlds->nr_paritions is used to represent how many partitions information
    the cxl memory device has. In the loop, if driver cannot find a
    partition including the new resource range, it will be an infinite loop.
    
    [ dj: Removed incorrect fixes tag ]
    
    Fixes: 991d98f17d31 ("cxl: Make cxl_dpa_alloc() DPA partition number agnostic")
    Signed-off-by: Li Ming <[email protected]>
    Reviewed-by: Ira Weiny <[email protected]>
    Reviewed-by: Dave Jiang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dave Jiang <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
cxl/port: Fix target list setup for multiple decoders sharing the same dport [+ + +]
Author: Robert Richter <[email protected]>
Date:   Thu Jan 8 11:13:23 2026 +0100

    cxl/port: Fix target list setup for multiple decoders sharing the same dport
    
    [ Upstream commit 3e8aaacdad4f66641f87ab441fe644b45f8ebdff ]
    
    If a switch port has more than one decoder that is using the same
    downstream port, the enumeration of the target lists may fail with:
    
     # dmesg | grep target.list
     update_decoder_targets: cxl decoder1.0: dport3 found in target list, index 3
     update_decoder_targets: cxl decoder1.0: dport2 found in target list, index 2
     update_decoder_targets: cxl decoder1.0: dport0 found in target list, index 0
     update_decoder_targets: cxl decoder2.0: dport3 found in target list, index 1
     update_decoder_targets: cxl decoder4.0: dport3 found in target list, index 1
     cxl_mem mem6: failed to find endpoint12:0000:00:01.4 in target list of decoder2.1
     cxl_mem mem8: failed to find endpoint13:0000:20:01.4 in target list of decoder4.1
    
    The case, that the same downstream port can be used in multiple target
    lists, is allowed and possible.
    
    Fix the update of the target list. Enumerate all children of the
    switch port and do not stop the iteration after the first matching
    target was found.
    
    With the fix applied:
    
     # dmesg | grep target.list
     update_decoder_targets: cxl decoder1.0: dport2 found in target list, index 2
     update_decoder_targets: cxl decoder1.0: dport0 found in target list, index 0
     update_decoder_targets: cxl decoder1.0: dport3 found in target list, index 3
     update_decoder_targets: cxl decoder2.0: dport3 found in target list, index 1
     update_decoder_targets: cxl decoder2.1: dport3 found in target list, index 1
     update_decoder_targets: cxl decoder4.0: dport3 found in target list, index 1
     update_decoder_targets: cxl decoder4.1: dport3 found in target list, index 1
    
    Analyzing the conditions when this happens:
    
    1) A dport is shared by multiple decoders.
    
    2) The decoders have interleaving configured (ways > 1).
    
    The configuration above has the following hierarchy details (fixed
    version):
    
     root0
     |_
     | |
     | decoder0.1
     | ways: 2
     | target_list: 0,1
     |_______________________________________
     |                                       |
     | dport0                                | dport1
     |                                       |
     port2                                   port4
     |                                       |
     |___________________                    |_____________________
     | |                 |                   | |                   |
     | decoder2.0        decoder2.1          | decoder4.0          decoder4.1
     | ways: 2           ways: 2             | ways: 2             ways: 2
     | target_list: 2,3  target_list: 2,3    | target_list: 2,3    target_list: 2,3
     |___________________                    |___________________
     |                   |                   |                   |
     | dport2            | dport3            | dport2            | dport3
     |                   |                   |                   |
     endpoint7           endpoint12          endpoint9           endpoint13
     |_                  |_                  |_                  |_
     | |                 | |                 | |                 | |
     | decoder7.0        | decoder12.0       | decoder9.0        | decoder13.0
     | decoder7.2        | decoder12.2       | decoder9.2        | decoder13.2
     |                   |                   |                   |
     mem3                mem5                mem6                mem8
    
    Note: Device numbers vary for every boot.
    
    Current kernel fails to enumerate endpoint12 and endpoint13 as the
    target list is not updated for the second decoder.
    
    Fixes: 4f06d81e7c6a ("cxl: Defer dport allocation for switch ports")
    Reviewed-by: Dave Jiang <[email protected]>
    Reviewed-by: Alison Schofield <[email protected]>
    Reviewed-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Robert Richter <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dave Jiang <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dmaengine: apple-admac: Add "apple,t8103-admac" compatible [+ + +]
Author: Janne Grunau <[email protected]>
Date:   Wed Dec 31 13:34:59 2025 +0100

    dmaengine: apple-admac: Add "apple,t8103-admac" compatible
    
    commit 76cba1e60b69c9cd53b9127d017a7dc5945455b1 upstream.
    
    After discussion with the devicetree maintainers we agreed to not extend
    lists with the generic compatible "apple,admac" anymore [1]. Use
    "apple,t8103-admac" as base compatible as it is the SoC the driver and
    bindings were written for.
    
    [1]: https://lore.kernel.org/asahi/[email protected]/
    
    Fixes: b127315d9a78 ("dmaengine: apple-admac: Add Apple ADMAC driver")
    Cc: [email protected]
    Reviewed-by: Neal Gompa <[email protected]>
    Signed-off-by: Janne Grunau <[email protected]>
    Link: https://patch.msgid.link/20251231-apple-admac-t8103-base-compat-v1-1-ec24a3708f76@jannau.net
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: at_hdmac: fix device leak on of_dma_xlate() [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 17 17:12:43 2025 +0100

    dmaengine: at_hdmac: fix device leak on of_dma_xlate()
    
    commit b9074b2d7a230b6e28caa23165e9d8bc0677d333 upstream.
    
    Make sure to drop the reference taken when looking up the DMA platform
    device during of_dma_xlate() when releasing channel resources.
    
    Note that commit 3832b78b3ec2 ("dmaengine: at_hdmac: add missing
    put_device() call in at_dma_xlate()") fixed the leak in a couple of
    error paths but the reference is still leaking on successful allocation.
    
    Fixes: bbe89c8e3d59 ("at_hdmac: move to generic DMA binding")
    Fixes: 3832b78b3ec2 ("dmaengine: at_hdmac: add missing put_device() call in at_dma_xlate()")
    Cc: [email protected]      # 3.10: 3832b78b3ec2
    Cc: Yu Kuai <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: bcm-sba-raid: fix device leak on probe [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 17 17:12:45 2025 +0100

    dmaengine: bcm-sba-raid: fix device leak on probe
    
    commit 7c3a46ebf15a9796b763a54272407fdbf945bed8 upstream.
    
    Make sure to drop the reference taken when looking up the mailbox device
    during probe on probe failures and on driver unbind.
    
    Fixes: 743e1c8ffe4e ("dmaengine: Add Broadcom SBA RAID driver")
    Cc: [email protected]      # 4.13
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: cv1800b-dmamux: fix device leak on route allocation [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 17 17:12:46 2025 +0100

    dmaengine: cv1800b-dmamux: fix device leak on route allocation
    
    commit 7bb7d696e0361bbfc1411462c784998cca0afcbb upstream.
    
    Make sure to drop the reference taken when looking up the DMA mux
    platform device during route allocation.
    
    Note that holding a reference to a device does not prevent its driver
    data from going away so there is no point in keeping the reference.
    
    Fixes: db7d07b5add4 ("dmaengine: add driver for Sophgo CV18XX/SG200X dmamux")
    Cc: [email protected]      # 6.17
    Cc: Inochi Amaoto <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: dw: dmamux: fix OF node leak on route allocation failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 17 17:12:47 2025 +0100

    dmaengine: dw: dmamux: fix OF node leak on route allocation failure
    
    commit ec25e60f9f95464aa11411db31d0906b3fb7b9f2 upstream.
    
    Make sure to drop the reference taken to the DMA master OF node also on
    late route allocation failures.
    
    Fixes: 134d9c52fca2 ("dmaengine: dw: dmamux: Introduce RZN1 DMA router support")
    Cc: [email protected]      # 5.19
    Cc: Miquel Raynal <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Miquel Raynal <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: fsl-edma: Fix clk leak on alloc_chan_resources failure [+ + +]
Author: Zhen Ni <[email protected]>
Date:   Tue Oct 14 17:05:22 2025 +0800

    dmaengine: fsl-edma: Fix clk leak on alloc_chan_resources failure
    
    commit b18cd8b210417f90537d914ffb96e390c85a7379 upstream.
    
    When fsl_edma_alloc_chan_resources() fails after clk_prepare_enable(),
    the error paths only free IRQs and destroy the TCD pool, but forget to
    call clk_disable_unprepare(). This causes the channel clock to remain
    enabled, leaking power and resources.
    
    Fix it by disabling the channel clock in the error unwind path.
    
    Fixes: d8d4355861d8 ("dmaengine: fsl-edma: add i.MX8ULP edma support")
    Cc: [email protected]
    Suggested-by: Frank Li <[email protected]>
    Signed-off-by: Zhen Ni <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: idxd: fix device leaks on compat bind and unbind [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 17 17:12:48 2025 +0100

    dmaengine: idxd: fix device leaks on compat bind and unbind
    
    commit 799900f01792cf8b525a44764f065f83fcafd468 upstream.
    
    Make sure to drop the reference taken when looking up the idxd device as
    part of the compat bind and unbind sysfs interface.
    
    Fixes: 6e7f3ee97bbe ("dmaengine: idxd: move dsa_drv support to compatible mode")
    Cc: [email protected]      # 5.15
    Cc: Dave Jiang <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: lpc18xx-dmamux: fix device leak on route allocation [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 17 17:12:49 2025 +0100

    dmaengine: lpc18xx-dmamux: fix device leak on route allocation
    
    commit d4d63059dee7e7cae0c4d9a532ed558bc90efb55 upstream.
    
    Make sure to drop the reference taken when looking up the DMA mux
    platform device during route allocation.
    
    Note that holding a reference to a device does not prevent its driver
    data from going away so there is no point in keeping the reference.
    
    Fixes: e5f4ae84be74 ("dmaengine: add driver for lpc18xx dmamux")
    Cc: [email protected]      # 4.3
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Vladimir Zapolskiy <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: lpc32xx-dmamux: fix device leak on route allocation [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 17 17:12:50 2025 +0100

    dmaengine: lpc32xx-dmamux: fix device leak on route allocation
    
    commit d9847e6d1d91462890ba297f7888fa598d47e76e upstream.
    
    Make sure to drop the reference taken when looking up the DMA mux
    platform device during route allocation.
    
    Note that holding a reference to a device does not prevent its driver
    data from going away so there is no point in keeping the reference.
    
    Fixes: 5d318b595982 ("dmaengine: Add dma router for pl08x in LPC32XX SoC")
    Cc: [email protected]      # 6.12
    Cc: Piotr Wojtaszczyk <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Vladimir Zapolskiy <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: mmp_pdma: fix DMA mask handling [+ + +]
Author: Guodong Xu <[email protected]>
Date:   Thu Sep 18 22:27:27 2025 +0800

    dmaengine: mmp_pdma: fix DMA mask handling
    
    [ Upstream commit 49400b701eca849c1b53717b1f5d779a8d066ec0 ]
    
    The driver's existing logic for setting the DMA mask for "marvell,pdma-1.0"
    was flawed. It incorrectly relied on pdev->dev->coherent_dma_mask instead
    of declaring the hardware's fixed addressing capability. A cleaner and
    more correct approach is to define the mask directly based on the hardware
    limitations.
    
    The MMP/PXA PDMA controller is a 32-bit DMA engine. This is supported by
    datasheets and various dtsi files for PXA25x, PXA27x, PXA3xx, and MMP2,
    all of which are 32-bit systems.
    
    This patch simplifies the driver's logic by replacing the 'u64 dma_mask'
    field with a simpler 'u32 dma_width' to store the addressing capability
    in bits. The complex if/else block in probe() is then replaced with a
    single, clear call to dma_set_mask_and_coherent(). This sets a fixed
    32-bit DMA mask for "marvell,pdma-1.0" and a 64-bit mask for
    "spacemit,k1-pdma," matching each device's hardware capabilities.
    
    Finally, this change also works around a specific build error encountered
    with clang-20 on x86_64 allyesconfig. The shift-count-overflow error is
    caused by a known clang compiler issue where the DMA_BIT_MASK(n) macro's
    ternary operator is not correctly evaluated in static initializers. By
    moving the macro's evaluation into the probe() function, the driver avoids
    this compiler bug.
    
    Fixes: 5cfe585d8624 ("dmaengine: mmp_pdma: Add SpacemiT K1 PDMA support with 64-bit addressing")
    Reported-by: Naresh Kamboju <[email protected]>
    Closes: https://lore.kernel.org/lkml/CA+G9fYsPcMfW-e_0_TRqu4cnwqOqYF3aJOeKUYk6Z4qRStdFvg@mail.gmail.com
    Suggested-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Guodong Xu <[email protected]>
    Reviewed-by: Arnd Bergmann <[email protected]>
    Tested-by: Nathan Chancellor <[email protected]> # build
    Tested-by: Naresh Kamboju <[email protected]>
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

dmaengine: omap-dma: fix dma_pool resource leak in error paths [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Mon Nov 3 15:30:18 2025 +0800

    dmaengine: omap-dma: fix dma_pool resource leak in error paths
    
    [ Upstream commit 2e1136acf8a8887c29f52e35a77b537309af321f ]
    
    The dma_pool created by dma_pool_create() is not destroyed when
    dma_async_device_register() or of_dma_controller_register() fails,
    causing a resource leak in the probe error paths.
    
    Add dma_pool_destroy() in both error paths to properly release the
    allocated dma_pool resource.
    
    Fixes: 7bedaa553760 ("dmaengine: add OMAP DMA engine driver")
    Signed-off-by: Haotian Zhang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

dmaengine: qcom: gpi: Fix memory leak in gpi_peripheral_config() [+ + +]
Author: Miaoqian Lin <[email protected]>
Date:   Wed Oct 29 20:34:19 2025 +0800

    dmaengine: qcom: gpi: Fix memory leak in gpi_peripheral_config()
    
    commit 3f747004bbd641131d9396d87b5d2d3d1e182728 upstream.
    
    Fix a memory leak in gpi_peripheral_config() where the original memory
    pointed to by gchan->config could be lost if krealloc() fails.
    
    The issue occurs when:
    1. gchan->config points to previously allocated memory
    2. krealloc() fails and returns NULL
    3. The function directly assigns NULL to gchan->config, losing the
       reference to the original memory
    4. The original memory becomes unreachable and cannot be freed
    
    Fix this by using a temporary variable to hold the krealloc() result
    and only updating gchan->config when the allocation succeeds.
    
    Found via static analysis and code review.
    
    Fixes: 5d0c3533a19f ("dmaengine: qcom: Add GPI dma driver")
    Cc: [email protected]
    Signed-off-by: Miaoqian Lin <[email protected]>
    Reviewed-by: Bjorn Andersson <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: sh: rz-dmac: fix device leak on probe failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 17 17:12:51 2025 +0100

    dmaengine: sh: rz-dmac: fix device leak on probe failure
    
    commit 9fb490323997dcb6f749cd2660a17a39854600cd upstream.
    
    Make sure to drop the reference taken when looking up the ICU device
    during probe also on probe failures (e.g. probe deferral).
    
    Fixes: 7de873201c44 ("dmaengine: sh: rz-dmac: Add RZ/V2H(P) support")
    Cc: [email protected]      # 6.16
    Cc: Fabrizio Castro <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Fabrizio Castro <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: sh: rz-dmac: Fix rz_dmac_terminate_all() [+ + +]
Author: Biju Das <[email protected]>
Date:   Thu Nov 13 19:50:48 2025 +0000

    dmaengine: sh: rz-dmac: Fix rz_dmac_terminate_all()
    
    commit 747213b08a1ab6a76e3e3b3e7a209cc1d402b5d0 upstream.
    
    After audio full duplex testing, playing the recorded file contains a few
    playback frames from the previous time. The rz_dmac_terminate_all() does
    not reset all the hardware descriptors queued previously, leading to the
    wrong descriptor being picked up during the next DMA transfer. Fix the
    above issue by resetting all the descriptor headers for a channel in
    rz_dmac_terminate_all() as rz_dmac_lmdesc_recycle() points to the proper
    descriptor header filled by the rz_dmac_prepare_descs_for_slave_sg().
    
    Cc: [email protected]
    Fixes: 5000d37042a6 ("dmaengine: sh: Add DMAC driver for RZ/G2L SoC")
    Reviewed-by: Geert Uytterhoeven <[email protected]>
    Signed-off-by: Biju Das <[email protected]>
    Reviewed-by: Claudiu Beznea <[email protected]>
    Tested-by: Claudiu Beznea <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: stm32: dmamux: fix device leak on route allocation [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 17 17:12:52 2025 +0100

    dmaengine: stm32: dmamux: fix device leak on route allocation
    
    commit dd6e4943889fb354efa3f700e42739da9bddb6ef upstream.
    
    Make sure to drop the reference taken when looking up the DMA mux
    platform device during route allocation.
    
    Note that holding a reference to a device does not prevent its driver
    data from going away so there is no point in keeping the reference.
    
    Fixes: df7e762db5f6 ("dmaengine: Add STM32 DMAMUX driver")
    Cc: [email protected]      # 4.15
    Cc: Pierre-Yves MORDRET <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Amelie Delaunay <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: stm32: dmamux: fix OF node leak on route allocation failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 17 17:12:53 2025 +0100

    dmaengine: stm32: dmamux: fix OF node leak on route allocation failure
    
    commit b1b590a590af13ded598e70f0b72bc1e515787a1 upstream.
    
    Make sure to drop the reference taken to the DMA master OF node also on
    late route allocation failures.
    
    Fixes: df7e762db5f6 ("dmaengine: Add STM32 DMAMUX driver")
    Cc: [email protected]      # 4.15
    Cc: Pierre-Yves MORDRET <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Amelie Delaunay <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: tegra-adma: Fix use-after-free [+ + +]
Author: Sheetal <[email protected]>
Date:   Mon Nov 10 19:54:45 2025 +0530

    dmaengine: tegra-adma: Fix use-after-free
    
    [ Upstream commit 2efd07a7c36949e6fa36a69183df24d368bf9e96 ]
    
    A use-after-free bug exists in the Tegra ADMA driver when audio streams
    are terminated, particularly during XRUN conditions. The issue occurs
    when the DMA buffer is freed by tegra_adma_terminate_all() before the
    vchan completion tasklet finishes accessing it.
    
    The race condition follows this sequence:
    
      1. DMA transfer completes, triggering an interrupt that schedules the
         completion tasklet (tasklet has not executed yet)
      2. Audio playback stops, calling tegra_adma_terminate_all() which
         frees the DMA buffer memory via kfree()
      3. The scheduled tasklet finally executes, calling vchan_complete()
         which attempts to access the already-freed memory
    
    Since tasklets can execute at any time after being scheduled, there is
    no guarantee that the buffer will remain valid when vchan_complete()
    runs.
    
    Fix this by properly synchronizing the virtual channel completion:
     - Calling vchan_terminate_vdesc() in tegra_adma_stop() to mark the
       descriptors as terminated instead of freeing the descriptor.
     - Add the callback tegra_adma_synchronize() that calls
       vchan_synchronize() which kills any pending tasklets and frees any
       terminated descriptors.
    
    Crash logs:
    [  337.427523] BUG: KASAN: use-after-free in vchan_complete+0x124/0x3b0
    [  337.427544] Read of size 8 at addr ffff000132055428 by task swapper/0/0
    
    [  337.427562] Call trace:
    [  337.427564]  dump_backtrace+0x0/0x320
    [  337.427571]  show_stack+0x20/0x30
    [  337.427575]  dump_stack_lvl+0x68/0x84
    [  337.427584]  print_address_description.constprop.0+0x74/0x2b8
    [  337.427590]  kasan_report+0x1f4/0x210
    [  337.427598]  __asan_load8+0xa0/0xd0
    [  337.427603]  vchan_complete+0x124/0x3b0
    [  337.427609]  tasklet_action_common.constprop.0+0x190/0x1d0
    [  337.427617]  tasklet_action+0x30/0x40
    [  337.427623]  __do_softirq+0x1a0/0x5c4
    [  337.427628]  irq_exit+0x110/0x140
    [  337.427633]  handle_domain_irq+0xa4/0xe0
    [  337.427640]  gic_handle_irq+0x64/0x160
    [  337.427644]  call_on_irq_stack+0x20/0x4c
    [  337.427649]  do_interrupt_handler+0x7c/0x90
    [  337.427654]  el1_interrupt+0x30/0x80
    [  337.427659]  el1h_64_irq_handler+0x18/0x30
    [  337.427663]  el1h_64_irq+0x7c/0x80
    [  337.427667]  cpuidle_enter_state+0xe4/0x540
    [  337.427674]  cpuidle_enter+0x54/0x80
    [  337.427679]  do_idle+0x2e0/0x380
    [  337.427685]  cpu_startup_entry+0x2c/0x70
    [  337.427690]  rest_init+0x114/0x130
    [  337.427695]  arch_call_rest_init+0x18/0x24
    [  337.427702]  start_kernel+0x380/0x3b4
    [  337.427706]  __primary_switched+0xc0/0xc8
    
    Fixes: f46b195799b5 ("dmaengine: tegra-adma: Add support for Tegra210 ADMA")
    Signed-off-by: Sheetal <[email protected]>
    Acked-by: Thierry Reding <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

dmaengine: ti: dma-crossbar: fix device leak on am335x route allocation [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 17 17:12:56 2025 +0100

    dmaengine: ti: dma-crossbar: fix device leak on am335x route allocation
    
    commit 4fc17b1c6d2e04ad13fd6c21cfbac68043ec03f9 upstream.
    
    Make sure to drop the reference taken when looking up the crossbar
    platform device during am335x route allocation.
    
    Fixes: 42dbdcc6bf96 ("dmaengine: ti-dma-crossbar: Add support for crossbar on AM33xx/AM43xx")
    Cc: [email protected]      # 4.4
    Cc: Peter Ujfalusi <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: ti: dma-crossbar: fix device leak on dra7x route allocation [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 17 17:12:55 2025 +0100

    dmaengine: ti: dma-crossbar: fix device leak on dra7x route allocation
    
    commit dc7e44db01fc2498644e3106db3e62a9883a93d5 upstream.
    
    Make sure to drop the reference taken when looking up the crossbar
    platform device during dra7x route allocation.
    
    Note that commit 615a4bfc426e ("dmaengine: ti: Add missing put_device in
    ti_dra7_xbar_route_allocate") fixed the leak in the error paths but the
    reference is still leaking on successful allocation.
    
    Fixes: a074ae38f859 ("dmaengine: Add driver for TI DMA crossbar on DRA7x")
    Fixes: 615a4bfc426e ("dmaengine: ti: Add missing put_device in ti_dra7_xbar_route_allocate")
    Cc: [email protected]      # 4.2: 615a4bfc426e
    Cc: Peter Ujfalusi <[email protected]>
    Cc: Miaoqian Lin <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: ti: k3-udma: fix device leak on udma lookup [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 17 17:12:58 2025 +0100

    dmaengine: ti: k3-udma: fix device leak on udma lookup
    
    commit 430f7803b69cd5e5694e5dfc884c6628870af36e upstream.
    
    Make sure to drop the reference taken when looking up the UDMA platform
    device.
    
    Note that holding a reference to a platform device does not prevent its
    driver data from going away so there is no point in keeping the
    reference after the lookup helper returns.
    
    Fixes: d70241913413 ("dmaengine: ti: k3-udma: Add glue layer for non DMAengine users")
    Fixes: 1438cde8fe9c ("dmaengine: ti: k3-udma: add missing put_device() call in of_xudma_dev_get()")
    Cc: [email protected]      # 5.6: 1438cde8fe9c
    Cc: Grygorii Strashko <[email protected]>
    Cc: Yu Kuai <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: xilinx: xdma: Fix regmap max_register [+ + +]
Author: Anthony Brandon <[email protected]>
Date:   Mon Oct 13 17:48:49 2025 +0200

    dmaengine: xilinx: xdma: Fix regmap max_register
    
    [ Upstream commit c7d436a6c1a274c1ac28d5fb3b8eb8f03b6d0e10 ]
    
    The max_register field is assigned the size of the register memory
    region instead of the offset of the last register.
    The result is that reading from the regmap via debugfs can cause
    a segmentation fault:
    
    tail /sys/kernel/debug/regmap/xdma.1.auto/registers
    Unable to handle kernel paging request at virtual address ffff800082f70000
    Mem abort info:
      ESR = 0x0000000096000007
      EC = 0x25: DABT (current EL), IL = 32 bits
      SET = 0, FnV = 0
      EA = 0, S1PTW = 0
      FSC = 0x07: level 3 translation fault
    [...]
    Call trace:
     regmap_mmio_read32le+0x10/0x30
     _regmap_bus_reg_read+0x74/0xc0
     _regmap_read+0x68/0x198
     regmap_read+0x54/0x88
     regmap_read_debugfs+0x140/0x380
     regmap_map_read_file+0x30/0x48
     full_proxy_read+0x68/0xc8
     vfs_read+0xcc/0x310
     ksys_read+0x7c/0x120
     __arm64_sys_read+0x24/0x40
     invoke_syscall.constprop.0+0x64/0x108
     do_el0_svc+0xb0/0xd8
     el0_svc+0x38/0x130
     el0t_64_sync_handler+0x120/0x138
     el0t_64_sync+0x194/0x198
    Code: aa1e03e9 d503201f f9400000 8b214000 (b9400000)
    ---[ end trace 0000000000000000 ]---
    note: tail[1217] exited with irqs disabled
    note: tail[1217] exited with preempt_count 1
    Segmentation fault
    
    Fixes: 17ce252266c7 ("dmaengine: xilinx: xdma: Add xilinx xdma driver")
    Reviewed-by: Lizhi Hou <[email protected]>
    Reviewed-by: Radhey Shyam Pandey <[email protected]>
    Reviewed-by: Alexander Stein <[email protected]>
    Signed-off-by: Anthony Brandon <[email protected]>
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

dmaengine: xilinx_dma: Fix uninitialized addr_width when "xlnx,addrwidth" property is missing [+ + +]
Author: Suraj Gupta <[email protected]>
Date:   Wed Oct 22 00:00:06 2025 +0530

    dmaengine: xilinx_dma: Fix uninitialized addr_width when "xlnx,addrwidth" property is missing
    
    [ Upstream commit c0732fe78728718c853ef8e7af5bbb05262acbd1 ]
    
    When device tree lacks optional "xlnx,addrwidth" property, the addr_width
    variable remained uninitialized with garbage values, causing incorrect
    DMA mask configuration and subsequent probe failure. The fix ensures a
    fallback to the default 32-bit address width when this property is missing.
    
    Signed-off-by: Suraj Gupta <[email protected]>
    Fixes: b72db4005fe4 ("dmaengine: vdma: Add 64 bit addressing support to the driver")
    Reviewed-by: Radhey Shyam Pandey <[email protected]>
    Reviewed-by: Folker Schwesinger <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drivers/dax: add some missing kerneldoc comment fields for struct dev_dax [+ + +]
Author: John Groves <[email protected]>
Date:   Sat Jan 10 13:18:04 2026 -0600

    drivers/dax: add some missing kerneldoc comment fields for struct dev_dax
    
    [ Upstream commit 3e8e590fd65d0572584ab7bba89a35e6d19931f1 ]
    
    Add the missing @align and @memmap_on_memory fields to kerneldoc comment
    header for struct dev_dax.
    
    Also, some other fields were followed by '-' and others by ':'. Fix all
    to be ':' for actual kerneldoc compliance.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 33cf94d71766 ("device-dax: make align a per-device property")
    Fixes: 4eca0ef49af9 ("dax/kmem: allow kmem to add memory with memmap_on_memory")
    Signed-off-by: John Groves <[email protected]>
    Cc: Dan Williams <[email protected]>
    Cc: Joao Martins <[email protected]>
    Cc: Vishal Verma <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amd/display: Bump the HDMI clock to 340MHz [+ + +]
Author: Mario Limonciello <[email protected]>
Date:   Mon Dec 15 14:08:30 2025 -0600

    drm/amd/display: Bump the HDMI clock to 340MHz
    
    commit fee50077656d8a58011f13bca48f743d1b6d6015 upstream.
    
    [Why]
    DP-HDMI dongles can execeed bandwidth requirements on high resolution
    monitors. This can lead to pruning the high resolution modes.
    
    HDMI 1.3 bumped the clock to 340MHz, but display code never matched it.
    
    [How]
    Set default to (DVI) 165MHz.  Once HDMI display is identified update
    to 340MHz.
    
    Reported-by: Dianne Skoll <[email protected]>
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4780
    Reviewed-by: Chris Park <[email protected]>
    Signed-off-by: Mario Limonciello <[email protected]>
    Signed-off-by: Matthew Stewart <[email protected]>
    Tested-by: Dan Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit ac1e65d8ade46c09fb184579b81acadf36dcb91e)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amd/display: Initialise backlight level values from hw [+ + +]
Author: Vivek Das Mohapatra <[email protected]>
Date:   Mon Jan 12 15:28:56 2026 +0000

    drm/amd/display: Initialise backlight level values from hw
    
    commit 52d3d115e9cc975b90b1fc49abf6d36ad5e8847a upstream.
    
    Internal backlight levels are initialised from ACPI but the values
    are sometimes out of sync with the levels in effect until there has
    been a read from hardware (eg triggered by reading from sysfs).
    
    This means that the first drm_commit can cause the levels to be set
    to a different value than the actual starting one, which results in
    a sudden change in brightness.
    
    This path shows the problem (when the values are out of sync):
    
       amdgpu_dm_atomic_commit_tail()
       -> amdgpu_dm_commit_streams()
       -> amdgpu_dm_backlight_set_level(..., dm->brightness[n])
    
    This patch calls the backlight ops get_brightness explicitly
    at the end of backlight registration to make sure dm->brightness[n]
    is in sync with the actual hardware levels.
    
    Fixes: 2fe87f54abdc ("drm/amd/display: Set default brightness according to ACPI")
    Signed-off-by: Vivek Das Mohapatra <[email protected]>
    Reviewed-by: Mario Limonciello (AMD) <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 318b1c36d82a0cd2b06a4bb43272fa6f1bc8adc1)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amd/display: Show link name in PSR status message [+ + +]
Author: Mario Limonciello (AMD) <[email protected]>
Date:   Sun Dec 14 08:59:16 2025 -0600

    drm/amd/display: Show link name in PSR status message
    
    [ Upstream commit 0a1253ba5096f531eaaef40caa4c069da6ad48ae ]
    
    [Why]
    The PSR message was moved in commit 4321742c394e ("drm/amd/display:
    Move PSR support message into amdgpu_dm"). This message however shows
    for every single link without showing which link is which.  This can
    send a confusing message to the user.
    
    [How]
    Add link name into the message.
    
    Fixes: 4321742c394e ("drm/amd/display: Move PSR support message into amdgpu_dm")
    Reviewed-by: Alex Hung <[email protected]>
    Signed-off-by: Mario Limonciello (AMD) <[email protected]>
    Signed-off-by: Matthew Stewart <[email protected]>
    Tested-by: Dan Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 99f77f6229c0766b980ae05affcf9f742d97de6a)
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amd/pm: fix smu overdrive data type wrong issue on smu 14.0.2 [+ + +]
Author: Yang Wang <[email protected]>
Date:   Tue Jan 6 14:42:40 2026 +0800

    drm/amd/pm: fix smu overdrive data type wrong issue on smu 14.0.2
    
    [ Upstream commit 90dbc0bc2aa60021615969841fed06790c992bde ]
    
    resolving the issue of incorrect type definitions potentially causing calculation errors.
    
    Fixes: 54f7f3ca982a ("drm/amdgpu/swm14: Update power limit logic")
    Signed-off-by: Yang Wang <[email protected]>
    Reviewed-by: Hawking Zhang <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit e3a03d0ae16d6b56e893cce8e52b44140e1ed985)
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amd: Clean up kfd node on surprise disconnect [+ + +]
Author: Mario Limonciello (AMD) <[email protected]>
Date:   Wed Jan 7 15:37:28 2026 -0600

    drm/amd: Clean up kfd node on surprise disconnect
    
    commit 28695ca09d326461f8078332aa01db516983e8a2 upstream.
    
    When an eGPU is unplugged the KFD topology should also be destroyed
    for that GPU. This never happens because the fini_sw callbacks never
    get to run. Run them manually before calling amdgpu_device_ip_fini_early()
    when a device has already been disconnected.
    
    This location is intentionally chosen to make sure that the kfd locking
    refcount doesn't get incremented unintentionally.
    
    Cc: [email protected]
    Closes: https://community.frame.work/t/amd-egpu-on-linux/8691/33
    Signed-off-by: Mario Limonciello (AMD) <[email protected]>
    Reviewed-by: Kent Russell <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 6a23e7b4332c10f8b56c33a9c5431b52ecff9aab)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdgpu/userq: Fix fence reference leak on queue teardown v2 [+ + +]
Author: Srinivasan Shanmugam <[email protected]>
Date:   Wed Jan 14 16:14:53 2026 +0530

    drm/amdgpu/userq: Fix fence reference leak on queue teardown v2
    
    [ Upstream commit b2426a211dba6432e32a2e70e9183c6e134475c6 ]
    
    The user mode queue keeps a pointer to the most recent fence in
    userq->last_fence. This pointer holds an extra dma_fence reference.
    
    When the queue is destroyed, we free the fence driver and its xarray,
    but we forgot to drop the last_fence reference.
    
    Because of the missing dma_fence_put(), the last fence object can stay
    alive when the driver unloads. This leaves an allocated object in the
    amdgpu_userq_fence slab cache and triggers
    
    This is visible during driver unload as:
    
      BUG amdgpu_userq_fence: Objects remaining on __kmem_cache_shutdown()
      kmem_cache_destroy amdgpu_userq_fence: Slab cache still has objects
      Call Trace:
        kmem_cache_destroy
        amdgpu_userq_fence_slab_fini
        amdgpu_exit
        __do_sys_delete_module
    
    Fix this by putting userq->last_fence and clearing the pointer during
    amdgpu_userq_fence_driver_free().
    
    This makes sure the fence reference is released and the slab cache is
    empty when the module exits.
    
    v2: Update to only release userq->last_fence with dma_fence_put()
        (Christian)
    
    Fixes: edc762a51c71 ("drm/amdgpu/userq: move some code around")
    Cc: Alex Deucher <[email protected]>
    Cc: Christian König <[email protected]>
    Signed-off-by: Srinivasan Shanmugam <[email protected]>
    Reviewed-by: Christian König <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 8e051e38a8d45caf6a866d4ff842105b577953bb)
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amdgpu: fix drm panic null pointer when driver not support atomic [+ + +]
Author: Lu Yao <[email protected]>
Date:   Tue Jan 6 10:37:12 2026 +0800

    drm/amdgpu: fix drm panic null pointer when driver not support atomic
    
    [ Upstream commit 9cb6278b44c38899961b36d303d7b18b38be2a6e ]
    
    When driver not support atomic, fb using plane->fb rather than
    plane->state->fb.
    
    Fixes: fe151ed7af54 ("drm/amdgpu: add generic display panic helper code")
    Signed-off-by: Lu Yao <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 2f2a72de673513247cd6fae14e53f6c40c5841ef)
    Signed-off-by: Sasha Levin <[email protected]>

drm/amdgpu: Fix gfx9 update PTE mtype flag [+ + +]
Author: Philip Yang <[email protected]>
Date:   Thu Dec 4 12:13:05 2025 -0500

    drm/amdgpu: Fix gfx9 update PTE mtype flag
    
    commit 292e5757b2229c0c6f1d059123a85f8a28f4464d upstream.
    
    Fix copy&paste error, that should have been an assignment instead of an or,
    otherwise MTYPE_UC 0x3 can not be updated to MTYPE_RW 0x1.
    
    Signed-off-by: Philip Yang <[email protected]>
    Reviewed-by: Christian König <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit fc1366016abe4103c0f0fac882811aea961ef213)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amdgpu: make sure userqs are enabled in userq IOCTLs [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Fri Jan 9 08:54:55 2026 -0500

    drm/amdgpu: make sure userqs are enabled in userq IOCTLs
    
    commit b6dff005fcf32dd072f6f2d08ca461394a21bd4f upstream.
    
    These IOCTLs shouldn't be called when userqs are not
    enabled.  Make sure they are enabled before executing
    the IOCTLs.
    
    Reviewed-by: Christian König <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit d967509651601cddce7ff2a9f09479f3636f684d)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdkfd: fix a memory leak in device_queue_manager_init() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Thu Jan 8 15:18:22 2026 +0800

    drm/amdkfd: fix a memory leak in device_queue_manager_init()
    
    commit 80614c509810fc051312d1a7ccac8d0012d6b8d0 upstream.
    
    If dqm->ops.initialize() fails, add deallocate_hiq_sdma_mqd()
    to release the memory allocated by allocate_hiq_sdma_mqd().
    Move deallocate_hiq_sdma_mqd() up to ensure proper function
    visibility at the point of use.
    
    Fixes: 11614c36bc8f ("drm/amdkfd: Allocate MQD trunk for HIQ and SDMA")
    Signed-off-by: Haoxiang Li <[email protected]>
    Signed-off-by: Felix Kuehling <[email protected]>
    Reviewed-by: Oak Zeng <[email protected]>
    Reviewed-by: Felix Kuehling <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit b7cccc8286bb9919a0952c812872da1dcfe9d390)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amdkfd: No need to suspend whole MES to evict process [+ + +]
Author: Harish Kasiviswanathan <[email protected]>
Date:   Sun Jan 11 16:53:18 2026 -0500

    drm/amdkfd: No need to suspend whole MES to evict process
    
    [ Upstream commit 18dbcfb46f692e665c3fe3eee804e56c4eae53d6 ]
    
    Each queue of the process is individually removed and there is not need
    to suspend whole mes. Suspending mes stops kernel mode queues also
    causing unnecessary timeouts when running mixed work loads
    
    Fixes: 079ae5118e1f ("drm/amdkfd: fix suspend/resume all calls in mes based eviction path")
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4765
    Signed-off-by: Harish Kasiviswanathan <[email protected]>
    Reviewed-by: Alex Deucher <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 3fd20580b96a6e9da65b94ac3b58ee288239b731)
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/bridge: dw-hdmi-qp: Fix spurious IRQ on resume [+ + +]
Author: Sebastian Reichel <[email protected]>
Date:   Tue Oct 14 18:00:57 2025 +0200

    drm/bridge: dw-hdmi-qp: Fix spurious IRQ on resume
    
    [ Upstream commit 14adddc65340f2034751c95616861c0e888e2bb1 ]
    
    After resume from suspend to RAM, the following splash is generated if
    the HDMI driver is probed (independent of a connected cable):
    
    [ 1194.484052] irq 80: nobody cared (try booting with the "irqpoll" option)
    [ 1194.484074] CPU: 0 UID: 0 PID: 627 Comm: rtcwake Not tainted 6.17.0-rc7-g96f1a11414b3 #1 PREEMPT
    [ 1194.484082] Hardware name: Rockchip RK3576 EVB V10 Board (DT)
    [ 1194.484085] Call trace:
    [ 1194.484087]  ... (stripped)
    [ 1194.484283] handlers:
    [ 1194.484285] [<00000000bc363dcb>] dw_hdmi_qp_main_hardirq [dw_hdmi_qp]
    [ 1194.484302] Disabling IRQ #80
    
    Apparently the HDMI IP is losing part of its state while the system
    is suspended and generates spurious interrupts during resume. The
    bug has not yet been noticed, as system suspend does not yet work
    properly on upstream kernel with either the Rockchip RK3588 or RK3576
    platform.
    
    Fixes: 128a9bf8ace2 ("drm/rockchip: Add basic RK3588 HDMI output support")
    Signed-off-by: Sebastian Reichel <[email protected]>
    Reviewed-by: Cristian Ciocaltea <[email protected]>
    Signed-off-by: Heiko Stuebner <[email protected]>
    Link: https://patch.msgid.link/20251014-rockchip-hdmi-suspend-fix-v1-1-983fcbf44839@collabora.com
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/gud: fix NULL fb and crtc dereferences on USB disconnect [+ + +]
Author: Shenghao Yang <[email protected]>
Date:   Wed Dec 31 13:50:26 2025 +0800

    drm/gud: fix NULL fb and crtc dereferences on USB disconnect
    
    commit dc2d5ddb193e363187bae2ad358245642d2721fb upstream.
    
    On disconnect drm_atomic_helper_disable_all() is called which
    sets both the fb and crtc for a plane to NULL before invoking a commit.
    
    This causes a kernel oops on every display disconnect.
    
    Add guards for those dereferences.
    
    Cc: <[email protected]> # 6.18.x
    Fixes: 73cfd166e045 ("drm/gud: Replace simple display pipe with DRM atomic helpers")
    Signed-off-by: Shenghao Yang <[email protected]>
    Reviewed-by: Ruben Wauters <[email protected]>
    Signed-off-by: Ruben Wauters <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/nouveau/disp/nv50-: Set lock_core in curs507a_prepare [+ + +]
Author: Lyude Paul <[email protected]>
Date:   Fri Dec 19 16:52:02 2025 -0500

    drm/nouveau/disp/nv50-: Set lock_core in curs507a_prepare
    
    commit 9e9bc6be0fa0b6b6b73f4f831f3b77716d0a8d9e upstream.
    
    For a while, I've been seeing a strange issue where some (usually not all)
    of the display DMA channels will suddenly hang, particularly when there is
    a visible cursor on the screen that is being frequently updated, and
    especially when said cursor happens to go between two screens. While this
    brings back lovely memories of fixing Intel Skylake bugs, I would quite
    like to fix it :).
    
    It turns out the problem that's happening here is that we're managing to
    reach nv50_head_flush_set() in our atomic commit path without actually
    holding nv50_disp->mutex. This means that cursor updates happening in
    parallel (along with any other atomic updates that need to use the core
    channel) will race with eachother, which eventually causes us to corrupt
    the pushbuffer - leading to a plethora of various GSP errors, usually:
    
      nouveau 0000:c1:00.0: gsp: Xid:56 CMDre 00000000 00000218 00102680 00000004 00800003
      nouveau 0000:c1:00.0: gsp: Xid:56 CMDre 00000000 0000021c 00040509 00000004 00000001
      nouveau 0000:c1:00.0: gsp: Xid:56 CMDre 00000000 00000000 00000000 00000001 00000001
    
    The reason this is happening is because generally we check whether we need
    to set nv50_atom->lock_core at the end of nv50_head_atomic_check().
    However, curs507a_prepare is called from the fb_prepare callback, which
    happens after the atomic check phase. As a result, this can lead to commits
    that both touch the core channel but also don't grab nv50_disp->mutex.
    
    So, fix this by making sure that we set nv50_atom->lock_core in
    cus507a_prepare().
    
    Reviewed-by: Dave Airlie <[email protected]>
    Signed-off-by: Lyude Paul <[email protected]>
    Fixes: 1590700d94ac ("drm/nouveau/kms/nv50-: split each resource type into their own source files")
    Cc: <[email protected]> # v4.18+
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/panel-simple: fix connector type for DataImage SCF0700C48GGU18 panel [+ + +]
Author: Marek Vasut <[email protected]>
Date:   Sat Jan 10 16:27:28 2026 +0100

    drm/panel-simple: fix connector type for DataImage SCF0700C48GGU18 panel
    
    commit 6ab3d4353bf75005eaa375677c9fed31148154d6 upstream.
    
    The connector type for the DataImage SCF0700C48GGU18 panel is missing and
    devm_drm_panel_bridge_add() requires connector type to be set. This leads
    to a warning and a backtrace in the kernel log and panel does not work:
    "
    WARNING: CPU: 3 PID: 38 at drivers/gpu/drm/bridge/panel.c:379 devm_drm_of_get_bridge+0xac/0xb8
    "
    The warning is triggered by a check for valid connector type in
    devm_drm_panel_bridge_add(). If there is no valid connector type
    set for a panel, the warning is printed and panel is not added.
    Fill in the missing connector type to fix the warning and make
    the panel operational once again.
    
    Cc: [email protected]
    Fixes: 97ceb1fb08b6 ("drm/panel: simple: Add support for DataImage SCF0700C48GGU18")
    Signed-off-by: Marek Vasut <[email protected]>
    Reviewed-by: Neil Armstrong <[email protected]>
    Signed-off-by: Neil Armstrong <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/panel: simple: restore connector_type fallback [+ + +]
Author: Ludovic Desroches <[email protected]>
Date:   Thu Dec 18 14:34:43 2025 +0100

    drm/panel: simple: restore connector_type fallback
    
    commit 9380dc33cd6ae4a6857818fcefce31cf716f3fae upstream.
    
    The switch from devm_kzalloc() + drm_panel_init() to
    devm_drm_panel_alloc() introduced a regression.
    
    Several panel descriptors do not set connector_type. For those panels,
    panel_simple_probe() used to compute a connector type (currently DPI as a
    fallback) and pass that value to drm_panel_init(). After the conversion
    to devm_drm_panel_alloc(), the call unconditionally used
    desc->connector_type instead, ignoring the computed fallback and
    potentially passing DRM_MODE_CONNECTOR_Unknown, which
    drm_panel_bridge_add() does not allow.
    
    Move the connector_type validation / fallback logic before the
    devm_drm_panel_alloc() call and pass the computed connector_type to
    devm_drm_panel_alloc(), so panels without an explicit connector_type
    once again get the DPI default.
    
    Signed-off-by: Ludovic Desroches <[email protected]>
    Fixes: de04bb0089a9 ("drm/panel/panel-simple: Use the new allocation in place of devm_kzalloc()")
    Cc: [email protected]
    Reviewed-by: Luca Ceresoli <[email protected]>
    Link: https://lore.kernel.org/stable/20251126-lcd_panel_connector_type_fix-v2-1-c15835d1f7cb%40microchip.com
    Signed-off-by: Neil Armstrong <[email protected]>
    Link: https://patch.msgid.link/20251218-lcd_panel_connector_type_fix-v3-1-ddcea6d8d7ef@microchip.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/rockchip: vop2: Add delay between poll registers [+ + +]
Author: Andy Yan <[email protected]>
Date:   Fri Jul 18 14:41:13 2025 +0800

    drm/rockchip: vop2: Add delay between poll registers
    
    [ Upstream commit 9fae82450d8a5f9c8fa016cd15186e975609b2ac ]
    
    According to the implementation of read_poll_timeout_atomic, if the
    delay time is 0, it will only use a simple loop based on timeout_us to
    decrement the count. Therefore, the final timeout time will differ
    significantly from the set timeout time. So, here we set a specific
    delay time to ensure that the calculation of the timeout duration
    is accurate.
    
    Fixes: 3e89a8c68354 ("drm/rockchip: vop2: Fix the update of LAYER/PORT select registers when there are multi display output on rk3588/rk3568")
    Signed-off-by: Andy Yan <[email protected]>
    Signed-off-by: Heiko Stuebner <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

drm/rockchip: vop2: Only wait for changed layer cfg done when there is pending cfgdone bits [+ + +]
Author: Andy Yan <[email protected]>
Date:   Fri Jul 18 14:41:14 2025 +0800

    drm/rockchip: vop2: Only wait for changed layer cfg done when there is pending cfgdone bits
    
    [ Upstream commit 7f6721b767e219343cfe9a894f5bd869ff5b9d3a ]
    
    The write of cfgdone bits always done at .atomic_flush.
    When userspace makes plane zpos changes of two crtc within one commit,
    at the .atomic_begin stage, crtcN will never receive the "layer change
    cfg done" event of crtcM because crtcM has not yet written "cfgdone".
    So only wait when there is pending cfgdone bits to avoid long timeout.
    
    Fixes: 3e89a8c68354 ("drm/rockchip: vop2: Fix the update of LAYER/PORT select registers when there are multi display output on rk3588/rk3568")
    Signed-off-by: Andy Yan <[email protected]>
    Signed-off-by: Heiko Stuebner <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/sysfb: Remove duplicate declarations [+ + +]
Author: Thomas Zimmermann <[email protected]>
Date:   Thu Jan 8 15:19:46 2026 +0100

    drm/sysfb: Remove duplicate declarations
    
    commit b91a565ed14fcf900b4d95e86882b4b763860986 upstream.
    
    Commit 6046b49bafff ("drm/sysfb: Share helpers for integer validation")
    and commit e8c086880b2b ("drm/sysfb: Share helpers for screen_info
    validation") added duplicate function declarations. Remove the latter
    ones.
    
    Signed-off-by: Thomas Zimmermann <[email protected]>
    Fixes: e8c086880b2b ("drm/sysfb: Share helpers for screen_info validation")
    Cc: Thomas Zimmermann <[email protected]>
    Cc: Javier Martinez Canillas <[email protected]>
    Cc: [email protected]
    Cc: <[email protected]> # v6.16+
    Reviewed-by: Javier Martinez Canillas <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/vmwgfx: Fix an error return check in vmw_compat_shader_add() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Wed Dec 24 17:11:05 2025 +0800

    drm/vmwgfx: Fix an error return check in vmw_compat_shader_add()
    
    commit bf72b4b7bb7dbb643d204fa41e7463894a95999f upstream.
    
    In vmw_compat_shader_add(), the return value check of vmw_shader_alloc()
    is not proper. Modify the check for the return pointer 'res'.
    
    Found by code review and compiled on ubuntu 20.04.
    
    Fixes: 18e4a4669c50 ("drm/vmwgfx: Fix compat shader namespace")
    Cc: [email protected]
    Signed-off-by: Haoxiang Li <[email protected]>
    Signed-off-by: Zack Rusin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/vmwgfx: Fix KMS with 3D on HW version 10 [+ + +]
Author: Ian Forbes <[email protected]>
Date:   Fri Nov 14 14:37:03 2025 -0600

    drm/vmwgfx: Fix KMS with 3D on HW version 10
    
    [ Upstream commit d9186faeae6efb7d0841a5e8eb213ff4c7966614 ]
    
    HW version 10 does not have GB Surfaces so there is no backing buffer for
    surface backed FBs. This would result in a nullptr dereference and crash
    the driver causing a black screen.
    
    Fixes: 965544150d1c ("drm/vmwgfx: Refactor cursor handling")
    Signed-off-by: Ian Forbes <[email protected]>
    Reviewed-by: Zack Rusin <[email protected]>
    Signed-off-by: Zack Rusin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

drm/vmwgfx: Merge vmw_bo_release and vmw_bo_free functions [+ + +]
Author: Ian Forbes <[email protected]>
Date:   Wed Jan 7 09:20:59 2026 -0600

    drm/vmwgfx: Merge vmw_bo_release and vmw_bo_free functions
    
    [ Upstream commit 37a0cff4551c14aca4cfa6ef3f2f0e0f61d66825 ]
    
    Some of the warnings need to be reordered between these two functions
    in order to be correct. This has happened multiple times.
    Merging them solves this problem once and for all.
    
    Fixes: d6667f0ddf46 ("drm/vmwgfx: Fix handling of dumb buffers")
    Signed-off-by: Ian Forbes <[email protected]>
    Signed-off-by: Zack Rusin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
dst: fix races in rt6_uncached_list_del() and rt_del_uncached_list() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Mon Jan 12 10:38:25 2026 +0000

    dst: fix races in rt6_uncached_list_del() and rt_del_uncached_list()
    
    [ Upstream commit 9a6f0c4d5796ab89b5a28a890ce542344d58bd69 ]
    
    syzbot was able to crash the kernel in rt6_uncached_list_flush_dev()
    in an interesting way [1]
    
    Crash happens in list_del_init()/INIT_LIST_HEAD() while writing
    list->prev, while the prior write on list->next went well.
    
    static inline void INIT_LIST_HEAD(struct list_head *list)
    {
            WRITE_ONCE(list->next, list); // This went well
            WRITE_ONCE(list->prev, list); // Crash, @list has been freed.
    }
    
    Issue here is that rt6_uncached_list_del() did not attempt to lock
    ul->lock, as list_empty(&rt->dst.rt_uncached) returned
    true because the WRITE_ONCE(list->next, list) happened on the other CPU.
    
    We might use list_del_init_careful() and list_empty_careful(),
    or make sure rt6_uncached_list_del() always grabs the spinlock
    whenever rt->dst.rt_uncached_list has been set.
    
    A similar fix is neeed for IPv4.
    
    [1]
    
     BUG: KASAN: slab-use-after-free in INIT_LIST_HEAD include/linux/list.h:46 [inline]
     BUG: KASAN: slab-use-after-free in list_del_init include/linux/list.h:296 [inline]
     BUG: KASAN: slab-use-after-free in rt6_uncached_list_flush_dev net/ipv6/route.c:191 [inline]
     BUG: KASAN: slab-use-after-free in rt6_disable_ip+0x633/0x730 net/ipv6/route.c:5020
    Write of size 8 at addr ffff8880294cfa78 by task kworker/u8:14/3450
    
    CPU: 0 UID: 0 PID: 3450 Comm: kworker/u8:14 Tainted: G             L      syzkaller #0 PREEMPT_{RT,(full)}
    Tainted: [L]=SOFTLOCKUP
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/25/2025
    Workqueue: netns cleanup_net
    Call Trace:
     <TASK>
      dump_stack_lvl+0xe8/0x150 lib/dump_stack.c:120
      print_address_description mm/kasan/report.c:378 [inline]
      print_report+0xca/0x240 mm/kasan/report.c:482
      kasan_report+0x118/0x150 mm/kasan/report.c:595
      INIT_LIST_HEAD include/linux/list.h:46 [inline]
      list_del_init include/linux/list.h:296 [inline]
      rt6_uncached_list_flush_dev net/ipv6/route.c:191 [inline]
      rt6_disable_ip+0x633/0x730 net/ipv6/route.c:5020
      addrconf_ifdown+0x143/0x18a0 net/ipv6/addrconf.c:3853
     addrconf_notify+0x1bc/0x1050 net/ipv6/addrconf.c:-1
      notifier_call_chain+0x19d/0x3a0 kernel/notifier.c:85
      call_netdevice_notifiers_extack net/core/dev.c:2268 [inline]
      call_netdevice_notifiers net/core/dev.c:2282 [inline]
      netif_close_many+0x29c/0x410 net/core/dev.c:1785
      unregister_netdevice_many_notify+0xb50/0x2330 net/core/dev.c:12353
      ops_exit_rtnl_list net/core/net_namespace.c:187 [inline]
      ops_undo_list+0x3dc/0x990 net/core/net_namespace.c:248
      cleanup_net+0x4de/0x7b0 net/core/net_namespace.c:696
      process_one_work kernel/workqueue.c:3257 [inline]
      process_scheduled_works+0xad1/0x1770 kernel/workqueue.c:3340
      worker_thread+0x8a0/0xda0 kernel/workqueue.c:3421
      kthread+0x711/0x8a0 kernel/kthread.c:463
      ret_from_fork+0x510/0xa50 arch/x86/kernel/process.c:158
      ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:246
     </TASK>
    
    Allocated by task 803:
      kasan_save_stack mm/kasan/common.c:57 [inline]
      kasan_save_track+0x3e/0x80 mm/kasan/common.c:78
      unpoison_slab_object mm/kasan/common.c:340 [inline]
      __kasan_slab_alloc+0x6c/0x80 mm/kasan/common.c:366
      kasan_slab_alloc include/linux/kasan.h:253 [inline]
      slab_post_alloc_hook mm/slub.c:4953 [inline]
      slab_alloc_node mm/slub.c:5263 [inline]
      kmem_cache_alloc_noprof+0x18d/0x6c0 mm/slub.c:5270
      dst_alloc+0x105/0x170 net/core/dst.c:89
      ip6_dst_alloc net/ipv6/route.c:342 [inline]
      icmp6_dst_alloc+0x75/0x460 net/ipv6/route.c:3333
      mld_sendpack+0x683/0xe60 net/ipv6/mcast.c:1844
      mld_send_cr net/ipv6/mcast.c:2154 [inline]
      mld_ifc_work+0x83e/0xd60 net/ipv6/mcast.c:2693
      process_one_work kernel/workqueue.c:3257 [inline]
      process_scheduled_works+0xad1/0x1770 kernel/workqueue.c:3340
      worker_thread+0x8a0/0xda0 kernel/workqueue.c:3421
      kthread+0x711/0x8a0 kernel/kthread.c:463
      ret_from_fork+0x510/0xa50 arch/x86/kernel/process.c:158
      ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:246
    
    Freed by task 20:
      kasan_save_stack mm/kasan/common.c:57 [inline]
      kasan_save_track+0x3e/0x80 mm/kasan/common.c:78
      kasan_save_free_info+0x46/0x50 mm/kasan/generic.c:584
      poison_slab_object mm/kasan/common.c:253 [inline]
      __kasan_slab_free+0x5c/0x80 mm/kasan/common.c:285
      kasan_slab_free include/linux/kasan.h:235 [inline]
      slab_free_hook mm/slub.c:2540 [inline]
      slab_free mm/slub.c:6670 [inline]
      kmem_cache_free+0x18f/0x8d0 mm/slub.c:6781
      dst_destroy+0x235/0x350 net/core/dst.c:121
      rcu_do_batch kernel/rcu/tree.c:2605 [inline]
      rcu_core kernel/rcu/tree.c:2857 [inline]
      rcu_cpu_kthread+0xba5/0x1af0 kernel/rcu/tree.c:2945
      smpboot_thread_fn+0x542/0xa60 kernel/smpboot.c:160
      kthread+0x711/0x8a0 kernel/kthread.c:463
      ret_from_fork+0x510/0xa50 arch/x86/kernel/process.c:158
      ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:246
    
    Last potentially related work creation:
      kasan_save_stack+0x3e/0x60 mm/kasan/common.c:57
      kasan_record_aux_stack+0xbd/0xd0 mm/kasan/generic.c:556
      __call_rcu_common kernel/rcu/tree.c:3119 [inline]
      call_rcu+0xee/0x890 kernel/rcu/tree.c:3239
      refdst_drop include/net/dst.h:266 [inline]
      skb_dst_drop include/net/dst.h:278 [inline]
      skb_release_head_state+0x71/0x360 net/core/skbuff.c:1156
      skb_release_all net/core/skbuff.c:1180 [inline]
      __kfree_skb net/core/skbuff.c:1196 [inline]
      sk_skb_reason_drop+0xe9/0x170 net/core/skbuff.c:1234
      kfree_skb_reason include/linux/skbuff.h:1322 [inline]
      tcf_kfree_skb_list include/net/sch_generic.h:1127 [inline]
      __dev_xmit_skb net/core/dev.c:4260 [inline]
      __dev_queue_xmit+0x26aa/0x3210 net/core/dev.c:4785
      NF_HOOK_COND include/linux/netfilter.h:307 [inline]
      ip6_output+0x340/0x550 net/ipv6/ip6_output.c:247
      NF_HOOK+0x9e/0x380 include/linux/netfilter.h:318
      mld_sendpack+0x8d4/0xe60 net/ipv6/mcast.c:1855
      mld_send_cr net/ipv6/mcast.c:2154 [inline]
      mld_ifc_work+0x83e/0xd60 net/ipv6/mcast.c:2693
      process_one_work kernel/workqueue.c:3257 [inline]
      process_scheduled_works+0xad1/0x1770 kernel/workqueue.c:3340
      worker_thread+0x8a0/0xda0 kernel/workqueue.c:3421
      kthread+0x711/0x8a0 kernel/kthread.c:463
      ret_from_fork+0x510/0xa50 arch/x86/kernel/process.c:158
      ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:246
    
    The buggy address belongs to the object at ffff8880294cfa00
     which belongs to the cache ip6_dst_cache of size 232
    The buggy address is located 120 bytes inside of
     freed 232-byte region [ffff8880294cfa00, ffff8880294cfae8)
    
    The buggy address belongs to the physical page:
    page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x294cf
    memcg:ffff88803536b781
    flags: 0x80000000000000(node=0|zone=1)
    page_type: f5(slab)
    raw: 0080000000000000 ffff88802ff1c8c0 ffffea0000bf2bc0 dead000000000006
    raw: 0000000000000000 00000000800c000c 00000000f5000000 ffff88803536b781
    page dumped because: kasan: bad access detected
    page_owner tracks the page as allocated
    page last allocated via order 0, migratetype Unmovable, gfp_mask 0x52820(GFP_ATOMIC|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP), pid 9, tgid 9 (kworker/0:0), ts 91119585830, free_ts 91088628818
      set_page_owner include/linux/page_owner.h:32 [inline]
      post_alloc_hook+0x234/0x290 mm/page_alloc.c:1857
      prep_new_page mm/page_alloc.c:1865 [inline]
      get_page_from_freelist+0x28c0/0x2960 mm/page_alloc.c:3915
      __alloc_frozen_pages_noprof+0x181/0x370 mm/page_alloc.c:5210
      alloc_pages_mpol+0xd1/0x380 mm/mempolicy.c:2486
      alloc_slab_page mm/slub.c:3075 [inline]
      allocate_slab+0x86/0x3b0 mm/slub.c:3248
      new_slab mm/slub.c:3302 [inline]
      ___slab_alloc+0xb10/0x13e0 mm/slub.c:4656
      __slab_alloc+0xc6/0x1f0 mm/slub.c:4779
      __slab_alloc_node mm/slub.c:4855 [inline]
      slab_alloc_node mm/slub.c:5251 [inline]
      kmem_cache_alloc_noprof+0x101/0x6c0 mm/slub.c:5270
      dst_alloc+0x105/0x170 net/core/dst.c:89
      ip6_dst_alloc net/ipv6/route.c:342 [inline]
      icmp6_dst_alloc+0x75/0x460 net/ipv6/route.c:3333
      mld_sendpack+0x683/0xe60 net/ipv6/mcast.c:1844
      mld_send_cr net/ipv6/mcast.c:2154 [inline]
      mld_ifc_work+0x83e/0xd60 net/ipv6/mcast.c:2693
      process_one_work kernel/workqueue.c:3257 [inline]
      process_scheduled_works+0xad1/0x1770 kernel/workqueue.c:3340
      worker_thread+0x8a0/0xda0 kernel/workqueue.c:3421
      kthread+0x711/0x8a0 kernel/kthread.c:463
      ret_from_fork+0x510/0xa50 arch/x86/kernel/process.c:158
    page last free pid 5859 tgid 5859 stack trace:
      reset_page_owner include/linux/page_owner.h:25 [inline]
      free_pages_prepare mm/page_alloc.c:1406 [inline]
      __free_frozen_pages+0xfe1/0x1170 mm/page_alloc.c:2943
      discard_slab mm/slub.c:3346 [inline]
      __put_partials+0x149/0x170 mm/slub.c:3886
      __slab_free+0x2af/0x330 mm/slub.c:5952
      qlink_free mm/kasan/quarantine.c:163 [inline]
      qlist_free_all+0x97/0x100 mm/kasan/quarantine.c:179
      kasan_quarantine_reduce+0x148/0x160 mm/kasan/quarantine.c:286
      __kasan_slab_alloc+0x22/0x80 mm/kasan/common.c:350
      kasan_slab_alloc include/linux/kasan.h:253 [inline]
      slab_post_alloc_hook mm/slub.c:4953 [inline]
      slab_alloc_node mm/slub.c:5263 [inline]
      kmem_cache_alloc_noprof+0x18d/0x6c0 mm/slub.c:5270
      getname_flags+0xb8/0x540 fs/namei.c:146
      getname include/linux/fs.h:2498 [inline]
      do_sys_openat2+0xbc/0x200 fs/open.c:1426
      do_sys_open fs/open.c:1436 [inline]
      __do_sys_openat fs/open.c:1452 [inline]
      __se_sys_openat fs/open.c:1447 [inline]
      __x64_sys_openat+0x138/0x170 fs/open.c:1447
      do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
      do_syscall_64+0xec/0xf80 arch/x86/entry/syscall_64.c:94
    
    Fixes: 8d0b94afdca8 ("ipv6: Keep track of DST_NOCACHE routes in case of iface down/unregister")
    Fixes: 78df76a065ae ("ipv4: take rt_uncached_lock only if needed")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Cc: Martin KaFai Lau <[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]>

 
EDAC/i3200: Fix a resource leak in i3200_probe1() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Tue Dec 23 20:32:02 2025 +0800

    EDAC/i3200: Fix a resource leak in i3200_probe1()
    
    commit d42d5715dcb559342ff356327b241c53a67584d9 upstream.
    
    If edac_mc_alloc() fails, also unmap the window.
    
      [ bp: Use separate labels, turning it into the classic unwind pattern. ]
    
    Fixes: dd8ef1db87a4 ("edac: i3200 memory controller driver")
    Signed-off-by: Haoxiang Li <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
EDAC/x38: Fix a resource leak in x38_probe1() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Tue Dec 23 20:43:50 2025 +0800

    EDAC/x38: Fix a resource leak in x38_probe1()
    
    commit 0ff7c44106b4715fc27a2e455d9f57f1dfcfd54f upstream.
    
    If edac_mc_alloc() fails, also unmap the window.
    
      [ bp: Use separate labels, turning it into the classic unwind pattern. ]
    
    Fixes: df8bc08c192f ("edac x38: new MC driver module")
    Signed-off-by: Haoxiang Li <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
efi/cper: Fix cper_bits_to_str buffer handling and return value [+ + +]
Author: Morduan Zang <[email protected]>
Date:   Wed Jan 14 13:30:33 2026 +0800

    efi/cper: Fix cper_bits_to_str buffer handling and return value
    
    commit d7f1b4bdc7108be1b178e1617b5f45c8918e88d7 upstream.
    
    The return value calculation was incorrect: `return len - buf_size;`
    Initially `len = buf_size`, then `len` decreases with each operation.
    This results in a negative return value on success.
    
    Fix by returning `buf_size - len` which correctly calculates the actual
    number of bytes written.
    
    Fixes: a976d790f494 ("efi/cper: Add a new helper function to print bitmasks")
    Signed-off-by: Morduan Zang <[email protected]>
    Signed-off-by: Ard Biesheuvel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ext4: fix ext4_tune_sb_params padding [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Thu Dec 4 11:19:10 2025 +0100

    ext4: fix ext4_tune_sb_params padding
    
    commit cd16edba1c6a24af138e1a5ded2711231fffa99f upstream.
    
    The padding at the end of struct ext4_tune_sb_params is architecture
    specific and in particular is different between x86-32 and x86-64,
    since the __u64 member only enforces struct alignment on the latter.
    
    This shows up as a new warning when test-building the headers with
    -Wpadded:
    
    include/linux/ext4.h:144:1: error: padding struct size to alignment boundary with 4 bytes [-Werror=padded]
    
    All members inside the structure are naturally aligned, so the only
    difference here is the amount of padding at the end. Make the padding
    explicit, to have a consistent sizeof(struct ext4_tune_sb_params) of
    232 on all architectures and avoid adding compat ioctl handling for
    EXT4_IOC_GET_TUNE_SB_PARAM/EXT4_IOC_SET_TUNE_SB_PARAM.
    
    This is an ABI break on x86-32 but hopefully this can go into 6.18.y early
    enough as a fixup so no actual users will be affected.  Alternatively, the
    kernel could handle the ioctl commands for both sizes (232 and 228 bytes)
    on all architectures.
    
    Fixes: 04a91570ac67 ("ext4: implemet new ioctls to set and get superblock parameters")
    Signed-off-by: Arnd Bergmann <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: fix iloc.bh leak in ext4_xattr_inode_update_ref [+ + +]
Author: Yang Erkun <[email protected]>
Date:   Sat Dec 13 13:57:06 2025 +0800

    ext4: fix iloc.bh leak in ext4_xattr_inode_update_ref
    
    commit d250bdf531d9cd4096fedbb9f172bb2ca660c868 upstream.
    
    The error branch for ext4_xattr_inode_update_ref forget to release the
    refcount for iloc.bh. Find this when review code.
    
    Fixes: 57295e835408 ("ext4: guard against EA inode refcount underflow in xattr update")
    Signed-off-by: Yang Erkun <[email protected]>
    Reviewed-by: Baokun Li <[email protected]>
    Reviewed-by: Zhang Yi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
firmware: imx: scu-irq: Set mu_resource_id before get handle [+ + +]
Author: Peng Fan <[email protected]>
Date:   Fri Oct 17 09:56:27 2025 +0800

    firmware: imx: scu-irq: Set mu_resource_id before get handle
    
    commit ff3f9913bc0749364fbfd86ea62ba2d31c6136c8 upstream.
    
    mu_resource_id is referenced in imx_scu_irq_get_status() and
    imx_scu_irq_group_enable() which could be used by other modules, so
    need to set correct value before using imx_sc_irq_ipc_handle in
    SCU API call.
    
    Reviewed-by: Frank Li <[email protected]>
    Signed-off-by: Peng Fan <[email protected]>
    Signed-off-by: Shawn Guo <[email protected]>
    Fixes: 81fb53feb66a ("firmware: imx: scu-irq: Init workqueue before request mbox channel")
    Cc: Ben Hutchings <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
 
ftrace: Do not over-allocate ftrace memory [+ + +]
Author: Guenter Roeck <[email protected]>
Date:   Tue Jan 13 07:22:42 2026 -0800

    ftrace: Do not over-allocate ftrace memory
    
    commit be55257fab181b93af38f8c4b1b3cb453a78d742 upstream.
    
    The pg_remaining calculation in ftrace_process_locs() assumes that
    ENTRIES_PER_PAGE multiplied by 2^order equals the actual capacity of the
    allocated page group. However, ENTRIES_PER_PAGE is PAGE_SIZE / ENTRY_SIZE
    (integer division). When PAGE_SIZE is not a multiple of ENTRY_SIZE (e.g.
    4096 / 24 = 170 with remainder 16), high-order allocations (like 256 pages)
    have significantly more capacity than 256 * 170. This leads to pg_remaining
    being underestimated, which in turn makes skip (derived from skipped -
    pg_remaining) larger than expected, causing the WARN(skip != remaining)
    to trigger.
    
    Extra allocated pages for ftrace: 2 with 654 skipped
    WARNING: CPU: 0 PID: 0 at kernel/trace/ftrace.c:7295 ftrace_process_locs+0x5bf/0x5e0
    
    A similar problem in ftrace_allocate_records() can result in allocating
    too many pages. This can trigger the second warning in
    ftrace_process_locs().
    
    Extra allocated pages for ftrace
    WARNING: CPU: 0 PID: 0 at kernel/trace/ftrace.c:7276 ftrace_process_locs+0x548/0x580
    
    Use the actual capacity of a page group to determine the number of pages
    to allocate. Have ftrace_allocate_pages() return the number of allocated
    pages to avoid having to calculate it. Use the actual page group capacity
    when validating the number of unused pages due to skipped entries.
    Drop the definition of ENTRIES_PER_PAGE since it is no longer used.
    
    Cc: [email protected]
    Fixes: 4a3efc6baff93 ("ftrace: Update the mcount_loc check of skipped entries")
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
HID: intel-ish-hid: Fix -Wcast-function-type-strict in devm_ishtp_alloc_workqueue() [+ + +]
Author: Nathan Chancellor <[email protected]>
Date:   Wed Oct 22 00:49:08 2025 +0200

    HID: intel-ish-hid: Fix -Wcast-function-type-strict in devm_ishtp_alloc_workqueue()
    
    commit 3644f4411713f52bf231574aa8759e3d8e20b341 upstream.
    
    Clang warns (or errors with CONFIG_WERROR=y / W=e):
    
      drivers/hid/intel-ish-hid/ipc/ipc.c:935:36: error: cast from 'void (*)(struct workqueue_struct *)' to 'void (*)(void *)' converts to incompatible function type [-Werror,-Wcast-function-type-strict]
        935 |         if (devm_add_action_or_reset(dev, (void (*)(void *))destroy_workqueue,
            |                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      include/linux/device/devres.h:168:34: note: expanded from macro 'devm_add_action_or_reset'
        168 |         __devm_add_action_or_ireset(dev, action, data, #action)
            |                                         ^~~~~~
    
    This warning is pointing out a kernel control flow integrity (kCFI /
    CONFIG_CFI=y) violation will occur due to this function cast when the
    destroy_workqueue() is indirectly called via devm_action_release()
    because the prototype of destroy_workqueue() does not match the
    prototype of (*action)().
    
    Use a local function with the correct prototype to wrap
    destroy_workqueue() to resolve the warning and CFI violation.
    
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Closes: https://github.com/ClangBuiltLinux/linux/issues/2139
    Fixes: 0d30dae38fe0 ("HID: intel-ish-hid: Use dedicated unbound workqueues to prevent resume blocking")
    Signed-off-by: Nathan Chancellor <[email protected]>
    Acked-by: Srinivas Pandruvada <[email protected]>
    Reviewed-by: Zhang Lixu <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

HID: intel-ish-hid: Use dedicated unbound workqueues to prevent resume blocking [+ + +]
Author: Zhang Lixu <[email protected]>
Date:   Fri Oct 10 13:52:54 2025 +0800

    HID: intel-ish-hid: Use dedicated unbound workqueues to prevent resume blocking
    
    commit 0d30dae38fe01cd1de358c6039a0b1184689fe51 upstream.
    
    During suspend/resume tests with S2IDLE, some ISH functional failures were
    observed because of delay in executing ISH resume handler. Here
    schedule_work() is used from resume handler to do actual work.
    schedule_work() uses system_wq, which is a per CPU work queue. Although
    the queuing is not bound to a CPU, but it prefers local CPU of the caller,
    unless prohibited.
    
    Users of this work queue are not supposed to queue long running work.
    But in practice, there are scenarios where long running work items are
    queued on other unbound workqueues, occupying the CPU. As a result, the
    ISH resume handler may not get a chance to execute in a timely manner.
    
    In one scenario, one of the ish_resume_handler() executions was delayed
    nearly 1 second because another work item on an unbound workqueue occupied
    the same CPU. This delay causes ISH functionality failures.
    
    A similar issue was previously observed where the ISH HID driver timed out
    while getting the HID descriptor during S4 resume in the recovery kernel,
    likely caused by the same workqueue contention problem.
    
    Create dedicated unbound workqueues for all ISH operations to allow work
    items to execute on any available CPU, eliminating CPU-specific bottlenecks
    and improving resume reliability under varying system loads. Also ISH has
    three different components, a bus driver which implements ISH protocols, a
    PCI interface layer and HID interface. Use one dedicated work queue for all
    of them.
    
    Signed-off-by: Zhang Lixu <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

HID: usbhid: paper over wrong bNumDescriptor field [+ + +]
Author: Benjamin Tissoires <[email protected]>
Date:   Mon Dec 15 12:57:21 2025 +0100

    HID: usbhid: paper over wrong bNumDescriptor field
    
    commit f28beb69c51517aec7067dfb2074e7c751542384 upstream.
    
    Some faulty devices (ZWO EFWmini) have a wrong optional HID class
    descriptor count compared to the provided length.
    
    Given that we plainly ignore those optional descriptor, we can attempt
    to fix the provided number so we do not lock out those devices.
    
    Signed-off-by: Benjamin Tissoires <[email protected]>
    Cc: Salvatore Bonaccorso <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
hrtimer: Fix softirq base check in update_needs_ipi() [+ + +]
Author: Thomas Weißschuh <[email protected]>
Date:   Wed Jan 7 11:39:24 2026 +0100

    hrtimer: Fix softirq base check in update_needs_ipi()
    
    commit 05dc4a9fc8b36d4c99d76bbc02aa9ec0132de4c2 upstream.
    
    The 'clockid' field is not the correct way to check for a softirq base.
    
    Fix the check to correctly compare the base type instead of the clockid.
    
    Fixes: 1e7f7fbcd40c ("hrtimer: Avoid more SMP function calls in clock_was_set()")
    Signed-off-by: Thomas Weißschuh <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/20260107-hrtimer-clock-base-check-v1-1-afb5dbce94a1@linutronix.de
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
i2c: imx-lpi2c: change to PIO mode in system-wide suspend/resume progress [+ + +]
Author: Carlos Song <[email protected]>
Date:   Fri Nov 21 11:00:30 2025 +0800

    i2c: imx-lpi2c: change to PIO mode in system-wide suspend/resume progress
    
    [ Upstream commit f2a3f51365bf672dab4b58d1e8954926a9196b44 ]
    
    EDMA resumes early and suspends late in the system power transition
    sequence, while LPI2C enters the NOIRQ stage for both suspend and resume.
    This means LPI2C resources become available before EDMA is fully resumed.
    Once IRQs are enabled, a slave device may immediately trigger an LPI2C
    transfer. If the transfer length meets DMA requirements, the driver will
    attempt to use EDMA even though EDMA may still be unavailable.
    
    This timing gap can lead to transfer failures. To prevent this, force
    LPI2C to use PIO mode during system-wide suspend and resume transitions.
    This reduces dependency on EDMA and avoids using an unready DMA resource.
    
    Fixes: a09c8b3f9047 ("i2c: imx-lpi2c: add eDMA mode support for LPI2C")
    Signed-off-by: Carlos Song <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Signed-off-by: Wolfram Sang <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

i2c: qcom-geni: make sure I2C hub controllers can't use SE DMA [+ + +]
Author: Neil Armstrong <[email protected]>
Date:   Wed Oct 29 19:07:42 2025 +0100

    i2c: qcom-geni: make sure I2C hub controllers can't use SE DMA
    
    [ Upstream commit c0c50e3743e467ec4752c638e10e97f89c8644e2 ]
    
    The I2C Hub controller is a simpler GENI I2C variant that doesn't
    support DMA at all, add a no_dma flag to make sure it nevers selects
    the SE DMA mode with mappable 32bytes long transfers.
    
    Fixes: cacd9643eca7 ("i2c: qcom-geni: add support for I2C Master Hub variant")
    Signed-off-by: Neil Armstrong <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Reviewed-by: Mukesh Kumar Savaliya <[email protected]>>
    Signed-off-by: Wolfram Sang <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

i2c: riic: Move suspend handling to NOIRQ phase [+ + +]
Author: Tommaso Merciai <[email protected]>
Date:   Thu Dec 18 16:10:21 2025 +0100

    i2c: riic: Move suspend handling to NOIRQ phase
    
    commit e383f0961422f983451ac4dd6aed1a3d3311f2be upstream.
    
    Commit 53326135d0e0 ("i2c: riic: Add suspend/resume support") added
    suspend support for the Renesas I2C driver and following this change
    on RZ/G3E the following WARNING is seen on entering suspend ...
    
    [  134.275704] Freezing remaining freezable tasks completed (elapsed 0.001 seconds)
    [  134.285536] ------------[ cut here ]------------
    [  134.290298] i2c i2c-2: Transfer while suspended
    [  134.295174] WARNING: drivers/i2c/i2c-core.h:56 at __i2c_smbus_xfer+0x1e4/0x214, CPU#0: systemd-sleep/388
    [  134.365507] Tainted: [W]=WARN
    [  134.368485] Hardware name: Renesas SMARC EVK version 2 based on r9a09g047e57 (DT)
    [  134.375961] pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    [  134.382935] pc : __i2c_smbus_xfer+0x1e4/0x214
    [  134.387329] lr : __i2c_smbus_xfer+0x1e4/0x214
    [  134.391717] sp : ffff800083f23860
    [  134.395040] x29: ffff800083f23860 x28: 0000000000000000 x27: ffff800082ed5d60
    [  134.402226] x26: 0000001f4395fd74 x25: 0000000000000007 x24: 0000000000000001
    [  134.409408] x23: 0000000000000000 x22: 000000000000006f x21: ffff800083f23936
    [  134.416589] x20: ffff0000c090e140 x19: ffff0000c090e0d0 x18: 0000000000000006
    [  134.423771] x17: 6f63657320313030 x16: 2e30206465737061 x15: ffff800083f23280
    [  134.430953] x14: 0000000000000000 x13: ffff800082b16ce8 x12: 0000000000000f09
    [  134.438134] x11: 0000000000000503 x10: ffff800082b6ece8 x9 : ffff800082b16ce8
    [  134.445315] x8 : 00000000ffffefff x7 : ffff800082b6ece8 x6 : 80000000fffff000
    [  134.452495] x5 : 0000000000000504 x4 : 0000000000000000 x3 : 0000000000000000
    [  134.459672] x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff0000c9ee9e80
    [  134.466851] Call trace:
    [  134.469311]  __i2c_smbus_xfer+0x1e4/0x214 (P)
    [  134.473715]  i2c_smbus_xfer+0xbc/0x120
    [  134.477507]  i2c_smbus_read_byte_data+0x4c/0x84
    [  134.482077]  isl1208_i2c_read_time+0x44/0x178 [rtc_isl1208]
    [  134.487703]  isl1208_rtc_read_time+0x14/0x20 [rtc_isl1208]
    [  134.493226]  __rtc_read_time+0x44/0x88
    [  134.497012]  rtc_read_time+0x3c/0x68
    [  134.500622]  rtc_suspend+0x9c/0x170
    
    The warning is triggered because I2C transfers can still be attempted
    while the controller is already suspended, due to inappropriate ordering
    of the system sleep callbacks.
    
    If the controller is autosuspended, there is no way to wake it up once
    runtime PM disabled (in suspend_late()). During system resume, the I2C
    controller will be available only after runtime PM is re-enabled
    (in resume_early()). However, this may be too late for some devices.
    
    Wake up the controller in the suspend() callback while runtime PM is
    still enabled. The I2C controller will remain available until the
    suspend_noirq() callback (pm_runtime_force_suspend()) is called. During
    resume, the I2C controller can be restored by the resume_noirq() callback
    (pm_runtime_force_resume()). Finally, the resume() callback re-enables
    autosuspend. As a result, the I2C controller can remain available until
    the system enters suspend_noirq() and from resume_noirq().
    
    Cc: [email protected]
    Fixes: 53326135d0e0 ("i2c: riic: Add suspend/resume support")
    Signed-off-by: Tommaso Merciai <[email protected]>
    Reviewed-by: Biju Das <[email protected]>
    Tested-by: Biju Das <[email protected]>
    Signed-off-by: Wolfram Sang <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
io_uring: move local task_work in exit cancel loop [+ + +]
Author: Ming Lei <[email protected]>
Date:   Wed Jan 14 16:54:05 2026 +0800

    io_uring: move local task_work in exit cancel loop
    
    commit da579f05ef0faada3559e7faddf761c75cdf85e1 upstream.
    
    With IORING_SETUP_DEFER_TASKRUN, task work is queued to ctx->work_llist
    (local work) rather than the fallback list. During io_ring_exit_work(),
    io_move_task_work_from_local() was called once before the cancel loop,
    moving work from work_llist to fallback_llist.
    
    However, task work can be added to work_llist during the cancel loop
    itself. There are two cases:
    
    1) io_kill_timeouts() is called from io_uring_try_cancel_requests() to
    cancel pending timeouts, and it adds task work via io_req_queue_tw_complete()
    for each cancelled timeout:
    
    2) URING_CMD requests like ublk can be completed via
    io_uring_cmd_complete_in_task() from ublk_queue_rq() during canceling,
    given ublk request queue is only quiesced when canceling the 1st uring_cmd.
    
    Since io_allowed_defer_tw_run() returns false in io_ring_exit_work()
    (kworker != submitter_task), io_run_local_work() is never invoked,
    and the work_llist entries are never processed. This causes
    io_uring_try_cancel_requests() to loop indefinitely, resulting in
    100% CPU usage in kworker threads.
    
    Fix this by moving io_move_task_work_from_local() inside the cancel
    loop, ensuring any work on work_llist is moved to fallback before
    each cancel attempt.
    
    Cc: [email protected]
    Fixes: c0e0d6ba25f1 ("io_uring: add IORING_SETUP_DEFER_TASKRUN")
    Signed-off-by: Ming Lei <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iommu/sva: include mmu_notifier.h header [+ + +]
Author: Carlos Llamas <[email protected]>
Date:   Mon Jan 5 19:07:46 2026 +0000

    iommu/sva: include mmu_notifier.h header
    
    commit 4b5c493ff762bb0433529ca6870b284f0a2a5ca8 upstream.
    
    A call to mmu_notifier_arch_invalidate_secondary_tlbs() was introduced in
    commit e37d5a2d60a3 ("iommu/sva: invalidate stale IOTLB entries for kernel
    address space") but without explicitly adding its corresponding header
    file <linux/mmu_notifier.h>.  This was evidenced while trying to enable
    compile testing support for IOMMU_SVA:
    
       config IOMMU_SVA
              select IOMMU_MM_DATA
      -       bool
      +       bool "Shared Virtual Addressing" if COMPILE_TEST
    
    The thing is for certain architectures this header file is indirectly
    included via <asm/tlbflush.h>.  However, for others such as 32-bit arm the
    header is missing and it results in a build failure:
    
      $ make ARCH=arm allmodconfig
      [...]
      drivers/iommu/iommu-sva.c:340:3: error: call to undeclared function 'mmu_notifier_arch_invalidate_secondary_tlbs' [...]
        340 |  mmu_notifier_arch_invalidate_secondary_tlbs(iommu_mm->mm, start, end);
            |  ^
    
    Fix this by including the appropriate header file.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: e37d5a2d60a3 ("iommu/sva: invalidate stale IOTLB entries for kernel address space")
    Signed-off-by: Carlos Llamas <[email protected]>
    Cc: Baolu Lu <[email protected]>
    Cc: Jason Gunthorpe <[email protected]>
    Cc: Joerg Roedel <[email protected]>
    Cc: Kevin Tian <[email protected]>
    Cc: Robin Murphy <[email protected]>
    Cc: Vasant Hegde <[email protected]>
    Cc: Will Deacon <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iommu/sva: invalidate stale IOTLB entries for kernel address space [+ + +]
Author: Lu Baolu <[email protected]>
Date:   Wed Oct 22 16:26:34 2025 +0800

    iommu/sva: invalidate stale IOTLB entries for kernel address space
    
    commit e37d5a2d60a338c5917c45296bac65da1382eda5 upstream.
    
    Introduce a new IOMMU interface to flush IOTLB paging cache entries for
    the CPU kernel address space.  This interface is invoked from the x86
    architecture code that manages combined user and kernel page tables,
    specifically before any kernel page table page is freed and reused.
    
    This addresses the main issue with vfree() which is a common occurrence
    and can be triggered by unprivileged users.  While this resolves the
    primary problem, it doesn't address some extremely rare case related to
    memory unplug of memory that was present as reserved memory at boot, which
    cannot be triggered by unprivileged users.  The discussion can be found at
    the link below.
    
    Enable SVA on x86 architecture since the IOMMU can now receive
    notification to flush the paging cache before freeing the CPU kernel page
    table pages.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lore.kernel.org/linux-iommu/[email protected]/
    Co-developed-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Lu Baolu <[email protected]>
    Suggested-by: Jann Horn <[email protected]>
    Reviewed-by: Jason Gunthorpe <[email protected]>
    Reviewed-by: Vasant Hegde <[email protected]>
    Reviewed-by: Kevin Tian <[email protected]>
    Cc: Alistair Popple <[email protected]>
    Cc: Andy Lutomirski <[email protected]>
    Cc: Borislav Betkov <[email protected]>
    Cc: Dave Hansen <[email protected]>
    Cc: David Hildenbrand <[email protected]>
    Cc: Ingo Molnar <[email protected]>
    Cc: Jean-Philippe Brucker <[email protected]>
    Cc: Joerg Roedel <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Cc: Lorenzo Stoakes <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Mike Rapoport (Microsoft) <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Robin Murohy <[email protected]>
    Cc: Thomas Gleinxer <[email protected]>
    Cc: "Uladzislau Rezki (Sony)" <[email protected]>
    Cc: Vinicius Costa Gomes <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: Will Deacon <[email protected]>
    Cc: Yi Lai <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ip6_tunnel: use skb_vlan_inet_prepare() in __ip6_tnl_rcv() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Wed Jan 7 16:31:09 2026 +0000

    ip6_tunnel: use skb_vlan_inet_prepare() in __ip6_tnl_rcv()
    
    [ Upstream commit 81c734dae203757fb3c9eee6f9896386940776bd ]
    
    Blamed commit did not take care of VLAN encapsulations
    as spotted by syzbot [1].
    
    Use skb_vlan_inet_prepare() instead of pskb_inet_may_pull().
    
    [1]
     BUG: KMSAN: uninit-value in __INET_ECN_decapsulate include/net/inet_ecn.h:253 [inline]
     BUG: KMSAN: uninit-value in INET_ECN_decapsulate include/net/inet_ecn.h:275 [inline]
     BUG: KMSAN: uninit-value in IP6_ECN_decapsulate+0x7a8/0x1fa0 include/net/inet_ecn.h:321
      __INET_ECN_decapsulate include/net/inet_ecn.h:253 [inline]
      INET_ECN_decapsulate include/net/inet_ecn.h:275 [inline]
      IP6_ECN_decapsulate+0x7a8/0x1fa0 include/net/inet_ecn.h:321
      ip6ip6_dscp_ecn_decapsulate+0x16f/0x1b0 net/ipv6/ip6_tunnel.c:729
      __ip6_tnl_rcv+0xed9/0x1b50 net/ipv6/ip6_tunnel.c:860
      ip6_tnl_rcv+0xc3/0x100 net/ipv6/ip6_tunnel.c:903
     gre_rcv+0x1529/0x1b90 net/ipv6/ip6_gre.c:-1
      ip6_protocol_deliver_rcu+0x1c89/0x2c60 net/ipv6/ip6_input.c:438
      ip6_input_finish+0x1f4/0x4a0 net/ipv6/ip6_input.c:489
      NF_HOOK include/linux/netfilter.h:318 [inline]
      ip6_input+0x9c/0x330 net/ipv6/ip6_input.c:500
      ip6_mc_input+0x7ca/0xc10 net/ipv6/ip6_input.c:590
      dst_input include/net/dst.h:474 [inline]
      ip6_rcv_finish+0x958/0x990 net/ipv6/ip6_input.c:79
      NF_HOOK include/linux/netfilter.h:318 [inline]
      ipv6_rcv+0xf1/0x3c0 net/ipv6/ip6_input.c:311
      __netif_receive_skb_one_core net/core/dev.c:6139 [inline]
      __netif_receive_skb+0x1df/0xac0 net/core/dev.c:6252
      netif_receive_skb_internal net/core/dev.c:6338 [inline]
      netif_receive_skb+0x57/0x630 net/core/dev.c:6397
      tun_rx_batched+0x1df/0x980 drivers/net/tun.c:1485
      tun_get_user+0x5c0e/0x6c60 drivers/net/tun.c:1953
      tun_chr_write_iter+0x3e9/0x5c0 drivers/net/tun.c:1999
      new_sync_write fs/read_write.c:593 [inline]
      vfs_write+0xbe2/0x15d0 fs/read_write.c:686
      ksys_write fs/read_write.c:738 [inline]
      __do_sys_write fs/read_write.c:749 [inline]
      __se_sys_write fs/read_write.c:746 [inline]
      __x64_sys_write+0x1fb/0x4d0 fs/read_write.c:746
      x64_sys_call+0x30ab/0x3e70 arch/x86/include/generated/asm/syscalls_64.h:2
      do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
      do_syscall_64+0xd3/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Uninit was created at:
      slab_post_alloc_hook mm/slub.c:4960 [inline]
      slab_alloc_node mm/slub.c:5263 [inline]
      kmem_cache_alloc_node_noprof+0x9e7/0x17a0 mm/slub.c:5315
      kmalloc_reserve+0x13c/0x4b0 net/core/skbuff.c:586
      __alloc_skb+0x805/0x1040 net/core/skbuff.c:690
      alloc_skb include/linux/skbuff.h:1383 [inline]
      alloc_skb_with_frags+0xc5/0xa60 net/core/skbuff.c:6712
      sock_alloc_send_pskb+0xacc/0xc60 net/core/sock.c:2995
      tun_alloc_skb drivers/net/tun.c:1461 [inline]
      tun_get_user+0x1142/0x6c60 drivers/net/tun.c:1794
      tun_chr_write_iter+0x3e9/0x5c0 drivers/net/tun.c:1999
      new_sync_write fs/read_write.c:593 [inline]
      vfs_write+0xbe2/0x15d0 fs/read_write.c:686
      ksys_write fs/read_write.c:738 [inline]
      __do_sys_write fs/read_write.c:749 [inline]
      __se_sys_write fs/read_write.c:746 [inline]
      __x64_sys_write+0x1fb/0x4d0 fs/read_write.c:746
      x64_sys_call+0x30ab/0x3e70 arch/x86/include/generated/asm/syscalls_64.h:2
      do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
      do_syscall_64+0xd3/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    CPU: 0 UID: 0 PID: 6465 Comm: syz.0.17 Not tainted syzkaller #0 PREEMPT(none)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/25/2025
    
    Fixes: 8d975c15c0cd ("ip6_tunnel: make sure to pull inner header in __ip6_tnl_rcv()")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ipv4: ip_gre: make ipgre_header() robust [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Jan 8 19:02:14 2026 +0000

    ipv4: ip_gre: make ipgre_header() robust
    
    [ Upstream commit e67c577d89894811ce4dcd1a9ed29d8b63476667 ]
    
    Analog to commit db5b4e39c4e6 ("ip6_gre: make ip6gre_header() robust")
    
    Over the years, syzbot found many ways to crash the kernel
    in ipgre_header() [1].
    
    This involves team or bonding drivers ability to dynamically
    change their dev->needed_headroom and/or dev->hard_header_len
    
    In this particular crash mld_newpack() allocated an skb
    with a too small reserve/headroom, and by the time mld_sendpack()
    was called, syzbot managed to attach an ipgre device.
    
    [1]
    skbuff: skb_under_panic: text:ffffffff89ea3cb7 len:2030915468 put:2030915372 head:ffff888058b43000 data:ffff887fdfa6e194 tail:0x120 end:0x6c0 dev:team0
     kernel BUG at net/core/skbuff.c:213 !
    Oops: invalid opcode: 0000 [#1] SMP KASAN PTI
    CPU: 1 UID: 0 PID: 1322 Comm: kworker/1:9 Not tainted syzkaller #0 PREEMPT(full)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/25/2025
    Workqueue: mld mld_ifc_work
     RIP: 0010:skb_panic+0x157/0x160 net/core/skbuff.c:213
    Call Trace:
     <TASK>
      skb_under_panic net/core/skbuff.c:223 [inline]
      skb_push+0xc3/0xe0 net/core/skbuff.c:2641
      ipgre_header+0x67/0x290 net/ipv4/ip_gre.c:897
      dev_hard_header include/linux/netdevice.h:3436 [inline]
      neigh_connected_output+0x286/0x460 net/core/neighbour.c:1618
      NF_HOOK_COND include/linux/netfilter.h:307 [inline]
      ip6_output+0x340/0x550 net/ipv6/ip6_output.c:247
      NF_HOOK+0x9e/0x380 include/linux/netfilter.h:318
      mld_sendpack+0x8d4/0xe60 net/ipv6/mcast.c:1855
      mld_send_cr net/ipv6/mcast.c:2154 [inline]
      mld_ifc_work+0x83e/0xd60 net/ipv6/mcast.c:2693
      process_one_work kernel/workqueue.c:3257 [inline]
      process_scheduled_works+0xad1/0x1770 kernel/workqueue.c:3340
      worker_thread+0x8a0/0xda0 kernel/workqueue.c:3421
      kthread+0x711/0x8a0 kernel/kthread.c:463
      ret_from_fork+0x510/0xa50 arch/x86/kernel/process.c:158
      ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:246
    
    Fixes: c54419321455 ("GRE: Refactor GRE tunneling code.")
    Reported-by: [email protected]
    Closes: https://www.spinics.net/lists/netdev/msg1147302.html
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipv4: ip_tunnel: spread netdev_lockdep_set_classes() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Tue Jan 6 17:24:26 2026 +0000

    ipv4: ip_tunnel: spread netdev_lockdep_set_classes()
    
    [ Upstream commit 872ac785e7680dac9ec7f8c5ccd4f667f49d6997 ]
    
    Inspired by yet another syzbot report.
    
    IPv6 tunnels call netdev_lockdep_set_classes() for each tunnel type,
    while IPv4 currently centralizes netdev_lockdep_set_classes() call from
    ip_tunnel_init().
    
    Make ip_tunnel_init() a macro, so that we have different lockdep
    classes per tunnel type.
    
    Fixes: 0bef512012b1 ("net: add netdev_lockdep_set_classes() to virtual drivers")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ipv6: Fix use-after-free in inet6_addr_del(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Tue Jan 13 01:05:08 2026 +0000

    ipv6: Fix use-after-free in inet6_addr_del().
    
    [ Upstream commit ddf96c393a33aef4887e2e406c76c2f8cda1419c ]
    
    syzbot reported use-after-free of inet6_ifaddr in
    inet6_addr_del(). [0]
    
    The cited commit accidentally moved ipv6_del_addr() for
    mngtmpaddr before reading its ifp->flags for temporary
    addresses in inet6_addr_del().
    
    Let's move ipv6_del_addr() down to fix the UAF.
    
    [0]:
    BUG: KASAN: slab-use-after-free in inet6_addr_del.constprop.0+0x67a/0x6b0 net/ipv6/addrconf.c:3117
    Read of size 4 at addr ffff88807b89c86c by task syz.3.1618/9593
    
    CPU: 0 UID: 0 PID: 9593 Comm: syz.3.1618 Not tainted syzkaller #0 PREEMPT(full)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/25/2025
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:94 [inline]
     dump_stack_lvl+0x116/0x1f0 lib/dump_stack.c:120
     print_address_description mm/kasan/report.c:378 [inline]
     print_report+0xcd/0x630 mm/kasan/report.c:482
     kasan_report+0xe0/0x110 mm/kasan/report.c:595
     inet6_addr_del.constprop.0+0x67a/0x6b0 net/ipv6/addrconf.c:3117
     addrconf_del_ifaddr+0x11e/0x190 net/ipv6/addrconf.c:3181
     inet6_ioctl+0x1e5/0x2b0 net/ipv6/af_inet6.c:582
     sock_do_ioctl+0x118/0x280 net/socket.c:1254
     sock_ioctl+0x227/0x6b0 net/socket.c:1375
     vfs_ioctl fs/ioctl.c:51 [inline]
     __do_sys_ioctl fs/ioctl.c:597 [inline]
     __se_sys_ioctl fs/ioctl.c:583 [inline]
     __x64_sys_ioctl+0x18e/0x210 fs/ioctl.c:583
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xcd/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7f164cf8f749
    Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 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 a8 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007f164de64038 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
    RAX: ffffffffffffffda RBX: 00007f164d1e5fa0 RCX: 00007f164cf8f749
    RDX: 0000200000000000 RSI: 0000000000008936 RDI: 0000000000000003
    RBP: 00007f164d013f91 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: 00007f164d1e6038 R14: 00007f164d1e5fa0 R15: 00007ffde15c8288
     </TASK>
    
    Allocated by task 9593:
     kasan_save_stack+0x33/0x60 mm/kasan/common.c:56
     kasan_save_track+0x14/0x30 mm/kasan/common.c:77
     poison_kmalloc_redzone mm/kasan/common.c:397 [inline]
     __kasan_kmalloc+0xaa/0xb0 mm/kasan/common.c:414
     kmalloc_noprof include/linux/slab.h:957 [inline]
     kzalloc_noprof include/linux/slab.h:1094 [inline]
     ipv6_add_addr+0x4e3/0x2010 net/ipv6/addrconf.c:1120
     inet6_addr_add+0x256/0x9b0 net/ipv6/addrconf.c:3050
     addrconf_add_ifaddr+0x1fc/0x450 net/ipv6/addrconf.c:3160
     inet6_ioctl+0x103/0x2b0 net/ipv6/af_inet6.c:580
     sock_do_ioctl+0x118/0x280 net/socket.c:1254
     sock_ioctl+0x227/0x6b0 net/socket.c:1375
     vfs_ioctl fs/ioctl.c:51 [inline]
     __do_sys_ioctl fs/ioctl.c:597 [inline]
     __se_sys_ioctl fs/ioctl.c:583 [inline]
     __x64_sys_ioctl+0x18e/0x210 fs/ioctl.c:583
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xcd/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Freed by task 6099:
     kasan_save_stack+0x33/0x60 mm/kasan/common.c:56
     kasan_save_track+0x14/0x30 mm/kasan/common.c:77
     kasan_save_free_info+0x3b/0x60 mm/kasan/generic.c:584
     poison_slab_object mm/kasan/common.c:252 [inline]
     __kasan_slab_free+0x5f/0x80 mm/kasan/common.c:284
     kasan_slab_free include/linux/kasan.h:234 [inline]
     slab_free_hook mm/slub.c:2540 [inline]
     slab_free_freelist_hook mm/slub.c:2569 [inline]
     slab_free_bulk mm/slub.c:6696 [inline]
     kmem_cache_free_bulk mm/slub.c:7383 [inline]
     kmem_cache_free_bulk+0x2bf/0x680 mm/slub.c:7362
     kfree_bulk include/linux/slab.h:830 [inline]
     kvfree_rcu_bulk+0x1b7/0x1e0 mm/slab_common.c:1523
     kvfree_rcu_drain_ready mm/slab_common.c:1728 [inline]
     kfree_rcu_monitor+0x1d0/0x2f0 mm/slab_common.c:1801
     process_one_work+0x9ba/0x1b20 kernel/workqueue.c:3257
     process_scheduled_works kernel/workqueue.c:3340 [inline]
     worker_thread+0x6c8/0xf10 kernel/workqueue.c:3421
     kthread+0x3c5/0x780 kernel/kthread.c:463
     ret_from_fork+0x983/0xb10 arch/x86/kernel/process.c:158
     ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:246
    
    Fixes: 00b5b7aab9e42 ("net/ipv6: delete temporary address if mngtmpaddr is removed or unmanaged")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Hangbin Liu <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
landlock: Fix TCP handling of short AF_UNSPEC addresses [+ + +]
Author: Matthieu Buffet <[email protected]>
Date:   Mon Oct 27 20:07:26 2025 +0100

    landlock: Fix TCP handling of short AF_UNSPEC addresses
    
    [ Upstream commit e4d82cbce2258f454634307fdabf33aa46b61ab0 ]
    
    current_check_access_socket() treats AF_UNSPEC addresses as
    AF_INET ones, and only later adds special case handling to
    allow connect(AF_UNSPEC), and on IPv4 sockets
    bind(AF_UNSPEC+INADDR_ANY).
    This would be fine except AF_UNSPEC addresses can be as
    short as a bare AF_UNSPEC sa_family_t field, and nothing
    more. The AF_INET code path incorrectly enforces a length of
    sizeof(struct sockaddr_in) instead.
    
    Move AF_UNSPEC edge case handling up inside the switch-case,
    before the address is (potentially incorrectly) treated as
    AF_INET.
    
    Fixes: fff69fb03dde ("landlock: Support network rules with TCP bind and connect")
    Signed-off-by: Matthieu Buffet <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mickaël Salaün <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

landlock: Fix wrong type usage [+ + +]
Author: Tingmao Wang <[email protected]>
Date:   Sat Dec 6 17:11:06 2025 +0000

    landlock: Fix wrong type usage
    
    [ Upstream commit 29fbfa46e4287c596bdc77e2c599e3a1bbf8bb67 ]
    
    I think, based on my best understanding, that this type is likely a typo
    (even though in the end both are u16)
    
    Signed-off-by: Tingmao Wang <[email protected]>
    Fixes: 2fc80c69df82 ("landlock: Log file-related denials")
    Reviewed-by: Günther Noack <[email protected]>
    Link: https://lore.kernel.org/r/7339ad7b47f998affd84ca629a334a71f913616d.1765040503.git.m@maowtm.org
    Signed-off-by: Mickaël Salaün <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
lib/buildid: use __kernel_read() for sleepable context [+ + +]
Author: Shakeel Butt <[email protected]>
Date:   Mon Dec 22 12:58:59 2025 -0800

    lib/buildid: use __kernel_read() for sleepable context
    
    commit 777a8560fd29738350c5094d4166fe5499452409 upstream.
    
    Prevent a "BUG: unable to handle kernel NULL pointer dereference in
    filemap_read_folio".
    
    For the sleepable context, convert freader to use __kernel_read() instead
    of direct page cache access via read_cache_folio().  This simplifies the
    faultable code path by using the standard kernel file reading interface
    which handles all the complexity of reading file data.
    
    At the moment we are not changing the code for non-sleepable context which
    uses filemap_get_folio() and only succeeds if the target folios are
    already in memory and up-to-date.  The reason is to keep the patch simple
    and easier to backport to stable kernels.
    
    Syzbot repro does not crash the kernel anymore and the selftests run
    successfully.
    
    In the follow up we will make __kernel_read() with IOCB_NOWAIT work for
    non-sleepable contexts.  In addition, I would like to replace the
    secretmem check with a more generic approach and will add fstest for the
    buildid code.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: ad41251c290d ("lib/buildid: implement sleepable build_id_parse() API")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=09b7d050e4806540153d
    Signed-off-by: Shakeel Butt <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Tested-by: Jinchao Wang <[email protected]>
      Link: https://lkml.kernel.org/r/aUteBPWPYzVWIZFH@ndev
    Reviewed-by: Christian Brauner <[email protected]>
    Cc: Alexei Starovoitov <[email protected]>
    Cc: Andrii Nakryiko <[email protected]>
    Cc: Daniel Borkman <[email protected]>
    Cc: "Darrick J. Wong" <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: Linux 6.18.7 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Fri Jan 23 11:21:37 2026 +0100

    Linux 6.18.7
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Salvatore Bonaccorso <[email protected]>
    Tested-by: Ronald Warsow <[email protected]>
    Tested-by: Shuah Khan <[email protected]>
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Justin M. Forbes <[email protected]>
    Tested-by: Takeshi Ogasawara <[email protected]>
    Tested-by: Brett A C Sheffield <[email protected]>
    Tested-by: Shung-Hsi Yu <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Tested-by: Ron Economos <[email protected]>
    Tested-by: Brett Mastbergen <[email protected]>
    Tested-by: Peter Schneider <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
LoongArch: dts: Describe PCI sideband IRQ through interrupt-extended [+ + +]
Author: Yao Zi <[email protected]>
Date:   Sat Jan 17 10:56:52 2026 +0800

    LoongArch: dts: Describe PCI sideband IRQ through interrupt-extended
    
    commit 762cf75bec2ad9d17899087899a34336b1757238 upstream.
    
    SoC integrated peripherals on LS2K1000 and LS2K2000 could be discovered
    as PCI devices, but require sideband interrupts to function, which are
    previously described by interrupts and interrupt-parent properties.
    
    However, pci/pci-device.yaml allows interrupts property to only specify
    PCI INTx interrupts, not sideband ones. Convert these devices to use
    interrupt-extended property, which describes sideband interrupts used by
    PCI devices since dt-schema commit e6ea659d2baa ("schemas: pci-device:
    Allow interrupts-extended for sideband interrupts"), eliminating
    dtbs_check warnings.
    
    Cc: [email protected]
    Fixes: 30a5532a3206 ("LoongArch: dts: DeviceTree for Loongson-2K1000")
    Signed-off-by: Yao Zi <[email protected]>
    Signed-off-by: Binbin Zhou <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

LoongArch: dts: loongson-2k0500: Add default interrupt controller address cells [+ + +]
Author: Binbin Zhou <[email protected]>
Date:   Sat Jan 17 10:56:52 2026 +0800

    LoongArch: dts: loongson-2k0500: Add default interrupt controller address cells
    
    commit c4461754e6fe7e12a3ff198cce4707e3e20e43d4 upstream.
    
    Add missing address-cells 0 to the Local I/O and Extend I/O interrupt
    controller node to silence W=1 warning:
    
      loongson-2k0500.dtsi:513.5-51: Warning (interrupt_map): /bus@10000000/pcie@1a000000/pcie@0,0:interrupt-map:
        Missing property '#address-cells' in node /bus@10000000/interrupt-controller@1fe11600, using 0 as fallback
    
    Value '0' is correct because:
    1. The Local I/O & Extend I/O interrupt controller do not have children,
    2. interrupt-map property (in PCI node) consists of five components and
       the fourth component "parent unit address", which size is defined by
       '#address-cells' of the node pointed to by the interrupt-parent
       component, is not used (=0)
    
    Cc: [email protected]
    Signed-off-by: Binbin Zhou <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

LoongArch: dts: loongson-2k1000: Add default interrupt controller address cells [+ + +]
Author: Binbin Zhou <[email protected]>
Date:   Sat Jan 17 10:56:53 2026 +0800

    LoongArch: dts: loongson-2k1000: Add default interrupt controller address cells
    
    commit 81e8cb7e504a5adbcc48f7f954bf3c2aa9b417f8 upstream.
    
    Add missing address-cells 0 to the Local I/O interrupt controller node
    to silence W=1 warning:
    
      loongson-2k1000.dtsi:498.5-55: Warning (interrupt_map): /bus@10000000/pcie@1a000000/pcie@9,0:interrupt-map:
        Missing property '#address-cells' in node /bus@10000000/interrupt-controller@1fe01440, using 0 as fallback
    
    Value '0' is correct because:
    1. The Local I/O interrupt controller does not have children,
    2. interrupt-map property (in PCI node) consists of five components and
       the fourth component "parent unit address", which size is defined by
       '#address-cells' of the node pointed to by the interrupt-parent
       component, is not used (=0)
    
    Cc: [email protected]
    Signed-off-by: Binbin Zhou <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

LoongArch: dts: loongson-2k1000: Fix i2c-gpio node names [+ + +]
Author: Binbin Zhou <[email protected]>
Date:   Sat Jan 17 10:56:53 2026 +0800

    LoongArch: dts: loongson-2k1000: Fix i2c-gpio node names
    
    commit 14ea5a3625881d79f75418c66e3a7d98db8518e1 upstream.
    
    The binding wants the node to be named "i2c-number", but those are named
    "i2c-gpio-number" instead.
    
    Thus rename those to i2c-0, i2c-1 to adhere to the binding and suppress
    dtbs_check warnings.
    
    Cc: [email protected]
    Reviewed-by: Krzysztof Kozlowski <[email protected]>
    Signed-off-by: Binbin Zhou <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

LoongArch: dts: loongson-2k2000: Add default interrupt controller address cells [+ + +]
Author: Binbin Zhou <[email protected]>
Date:   Sat Jan 17 10:56:53 2026 +0800

    LoongArch: dts: loongson-2k2000: Add default interrupt controller address cells
    
    commit e65df3f77ecd59d3a8647d19df82b22a6ce210a9 upstream.
    
    Add missing address-cells 0 to the Local I/O, Extend I/O and PCH-PIC
    Interrupt Controller node to silence W=1 warning:
    
      loongson-2k2000.dtsi:364.5-49: Warning (interrupt_map): /bus@10000000/pcie@1a000000/pcie@9,0:interrupt-map:
        Missing property '#address-cells' in node /bus@10000000/interrupt-controller@10000000, using 0 as fallback
    
    Value '0' is correct because:
    1. The LIO/EIO/PCH interrupt controller does not have children,
    2. interrupt-map property (in PCI node) consists of five components and
       the fourth component "parent unit address", which size is defined by
       '#address-cells' of the node pointed to by the interrupt-parent
       component, is not used (=0)
    
    Cc: [email protected]
    Signed-off-by: Binbin Zhou <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

LoongArch: Fix PMU counter allocation for mixed-type event groups [+ + +]
Author: Lisa Robinson <[email protected]>
Date:   Sat Jan 17 10:56:43 2026 +0800

    LoongArch: Fix PMU counter allocation for mixed-type event groups
    
    commit a91f86e27087f250a5d9c89bb4a427b9c30fd815 upstream.
    
    When validating a perf event group, validate_group() unconditionally
    attempts to allocate hardware PMU counters for the leader, sibling
    events and the new event being added.
    
    This is incorrect for mixed-type groups. If a PERF_TYPE_SOFTWARE event
    is part of the group, the current code still tries to allocate a hardware
    PMU counter for it, which can wrongly consume hardware PMU resources and
    cause spurious allocation failures.
    
    Fix this by only allocating PMU counters for hardware events during group
    validation, and skipping software events.
    
    A trimmed down reproducer is as simple as this:
    
      #include <stdio.h>
      #include <assert.h>
      #include <unistd.h>
      #include <string.h>
      #include <sys/syscall.h>
      #include <linux/perf_event.h>
    
      int main (int argc, char *argv[])
      {
            struct perf_event_attr attr = { 0 };
            int fds[5];
    
            attr.disabled = 1;
            attr.exclude_kernel = 1;
            attr.exclude_hv = 1;
            attr.read_format = PERF_FORMAT_TOTAL_TIME_ENABLED |
                    PERF_FORMAT_TOTAL_TIME_RUNNING | PERF_FORMAT_ID | PERF_FORMAT_GROUP;
            attr.size = sizeof (attr);
    
            attr.type = PERF_TYPE_SOFTWARE;
            attr.config = PERF_COUNT_SW_DUMMY;
            fds[0] = syscall (SYS_perf_event_open, &attr, 0, -1, -1, 0);
            assert (fds[0] >= 0);
    
            attr.type = PERF_TYPE_HARDWARE;
            attr.config = PERF_COUNT_HW_CPU_CYCLES;
            fds[1] = syscall (SYS_perf_event_open, &attr, 0, -1, fds[0], 0);
            assert (fds[1] >= 0);
    
            attr.type = PERF_TYPE_HARDWARE;
            attr.config = PERF_COUNT_HW_INSTRUCTIONS;
            fds[2] = syscall (SYS_perf_event_open, &attr, 0, -1, fds[0], 0);
            assert (fds[2] >= 0);
    
            attr.type = PERF_TYPE_HARDWARE;
            attr.config = PERF_COUNT_HW_BRANCH_MISSES;
            fds[3] = syscall (SYS_perf_event_open, &attr, 0, -1, fds[0], 0);
            assert (fds[3] >= 0);
    
            attr.type = PERF_TYPE_HARDWARE;
            attr.config = PERF_COUNT_HW_CACHE_REFERENCES;
            fds[4] = syscall (SYS_perf_event_open, &attr, 0, -1, fds[0], 0);
            assert (fds[4] >= 0);
    
            printf ("PASSED\n");
    
            return 0;
      }
    
    Cc: [email protected]
    Fixes: b37042b2bb7c ("LoongArch: Add perf events support")
    Signed-off-by: Lisa Robinson <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

LoongArch: KVM: Fix kvm_device leak in kvm_eiointc_destroy() [+ + +]
Author: Qiang Ma <[email protected]>
Date:   Sat Jan 17 10:57:02 2026 +0800

    LoongArch: KVM: Fix kvm_device leak in kvm_eiointc_destroy()
    
    commit 7d8553fc75aefa7ec936af0cf8443ff90b51732e upstream.
    
    In kvm_ioctl_create_device(), kvm_device has allocated memory,
    kvm_device->destroy() seems to be supposed to free its kvm_device
    struct, but kvm_eiointc_destroy() is not currently doing this, that
    would lead to a memory leak.
    
    So, fix it.
    
    Cc: [email protected]
    Reviewed-by: Bibo Mao <[email protected]>
    Signed-off-by: Qiang Ma <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

LoongArch: KVM: Fix kvm_device leak in kvm_ipi_destroy() [+ + +]
Author: Qiang Ma <[email protected]>
Date:   Sat Jan 17 10:57:02 2026 +0800

    LoongArch: KVM: Fix kvm_device leak in kvm_ipi_destroy()
    
    commit 0bf58cb7288a4d3de6d8ecbb3a65928a9362bf21 upstream.
    
    In kvm_ioctl_create_device(), kvm_device has allocated memory,
    kvm_device->destroy() seems to be supposed to free its kvm_device
    struct, but kvm_ipi_destroy() is not currently doing this, that
    would lead to a memory leak.
    
    So, fix it.
    
    Cc: [email protected]
    Reviewed-by: Bibo Mao <[email protected]>
    Signed-off-by: Qiang Ma <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

LoongArch: KVM: Fix kvm_device leak in kvm_pch_pic_destroy() [+ + +]
Author: Qiang Ma <[email protected]>
Date:   Sat Jan 17 10:57:03 2026 +0800

    LoongArch: KVM: Fix kvm_device leak in kvm_pch_pic_destroy()
    
    commit 1cf342a7c3adc5877837b53bbceb5cc9eff60bbf upstream.
    
    In kvm_ioctl_create_device(), kvm_device has allocated memory,
    kvm_device->destroy() seems to be supposed to free its kvm_device
    struct, but kvm_pch_pic_destroy() is not currently doing this, that
    would lead to a memory leak.
    
    So, fix it.
    
    Cc: [email protected]
    Reviewed-by: Bibo Mao <[email protected]>
    Signed-off-by: Qiang Ma <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
macvlan: fix possible UAF in macvlan_forward_source() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Jan 8 13:36:51 2026 +0000

    macvlan: fix possible UAF in macvlan_forward_source()
    
    [ Upstream commit 7470a7a63dc162f07c26dbf960e41ee1e248d80e ]
    
    Add RCU protection on (struct macvlan_source_entry)->vlan.
    
    Whenever macvlan_hash_del_source() is called, we must clear
    entry->vlan pointer before RCU grace period starts.
    
    This allows macvlan_forward_source() to skip over
    entries queued for freeing.
    
    Note that macvlan_dev are already RCU protected, as they
    are embedded in a standard netdev (netdev_priv(ndev)).
    
    Fixes: 79cf79abce71 ("macvlan: add source mode")
    Reported-by: [email protected]
    https: //lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mips: fix HIGHMEM initialization [+ + +]
Author: Mike Rapoport (Microsoft) <[email protected]>
Date:   Wed Dec 31 12:57:01 2025 +0200

    mips: fix HIGHMEM initialization
    
    [ Upstream commit f171b55f1441294344b86edfeaa575ea9673fd23 ]
    
    Commit 6faea3422e3b ("arch, mm: streamline HIGHMEM freeing") overzealously
    removed mem_init_free_highmem() function that beside freeing high memory
    pages checked for CPU support for high memory as a prerequisite.
    
    Partially restore mem_init_free_highmem() with a new highmem_init() name
    and make it discard high memory in case there is no CPU support for it.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 6faea3422e3b ("arch, mm: streamline HIGHMEM freeing")
    Signed-off-by: Mike Rapoport (Microsoft) <[email protected]>
    Reported-by: Markus Stockhausen <[email protected]>
    Cc: Chris Packham <[email protected]>
    Cc: Hauke Mehrtens <[email protected]>
    Cc: Jonas Jelonek <[email protected]>
    Cc: Thomas Bogendoerfer <[email protected]>
    Cc: Thomas Gleinxer <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mm, kfence: describe @slab parameter in __kfence_obj_info() [+ + +]
Author: Bagas Sanjaya <[email protected]>
Date:   Fri Dec 19 08:40:07 2025 +0700

    mm, kfence: describe @slab parameter in __kfence_obj_info()
    
    [ Upstream commit 6cfab50e1440fde19af7c614aacd85e11aa4dcea ]
    
    Sphinx reports kernel-doc warning:
    
    WARNING: ./include/linux/kfence.h:220 function parameter 'slab' not described in '__kfence_obj_info'
    
    Fix it by describing @slab parameter.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 2dfe63e61cc3 ("mm, kfence: support kmem_dump_obj() for KFENCE objects")
    Signed-off-by: Bagas Sanjaya <[email protected]>
    Acked-by: Marco Elver <[email protected]>
    Acked-by: David Hildenbrand (Red Hat) <[email protected]>
    Acked-by: Harry Yoo <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mm/damon/core: remove call_control in inactive contexts [+ + +]
Author: SeongJae Park <[email protected]>
Date:   Tue Dec 30 17:23:13 2025 -0800

    mm/damon/core: remove call_control in inactive contexts
    
    commit f9132fbc2e83baf2c45a77043672a63a675c9394 upstream.
    
    If damon_call() is executed against a DAMON context that is not running,
    the function returns error while keeping the damon_call_control object
    linked to the context's call_controls list.  Let's suppose the object is
    deallocated after the damon_call(), and yet another damon_call() is
    executed against the same context.  The function tries to add the new
    damon_call_control object to the call_controls list, which still has the
    pointer to the previous damon_call_control object, which is deallocated.
    As a result, use-after-free happens.
    
    This can actually be triggered using the DAMON sysfs interface.  It is not
    easily exploitable since it requires the sysfs write permission and making
    a definitely weird file writes, though.  Please refer to the report for
    more details about the issue reproduction steps.
    
    Fix the issue by making two changes.  Firstly, move the final
    kdamond_call() for cancelling all existing damon_call() requests from
    terminating DAMON context to be done before the ctx->kdamond reset.  This
    makes any code that sees NULL ctx->kdamond can safely assume the context
    may not access damon_call() requests anymore.  Secondly, let damon_call()
    to cleanup the damon_call_control objects that were added to the
    already-terminated DAMON context, before returning the error.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 004ded6bee11 ("mm/damon: accept parallel damon_call() requests")
    Signed-off-by: SeongJae Park <[email protected]>
    Reported-by: JaeJoon Jung <[email protected]>
    Closes: https://lore.kernel.org/[email protected]
    Cc: <[email protected]> # 6.17.x
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/damon/sysfs-scheme: cleanup access_pattern subdirs on scheme dir setup failure [+ + +]
Author: SeongJae Park <[email protected]>
Date:   Wed Dec 24 18:30:37 2025 -0800

    mm/damon/sysfs-scheme: cleanup access_pattern subdirs on scheme dir setup failure
    
    commit 392b3d9d595f34877dd745b470c711e8ebcd225c upstream.
    
    When a DAMOS-scheme DAMON sysfs directory setup fails after setup of
    access_pattern/ directory, subdirectories of access_pattern/ directory are
    not cleaned up.  As a result, DAMON sysfs interface is nearly broken until
    the system reboots, and the memory for the unremoved directory is leaked.
    
    Cleanup the directories under such failures.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 9bbb820a5bd5 ("mm/damon/sysfs: support DAMOS quotas")
    Signed-off-by: SeongJae Park <[email protected]>
    Cc: chongjiapeng <[email protected]>
    Cc: <[email protected]> # 5.18.x
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm/damon/sysfs-scheme: cleanup quotas subdirs on scheme dir setup failure [+ + +]
Author: SeongJae Park <[email protected]>
Date:   Wed Dec 24 18:30:36 2025 -0800

    mm/damon/sysfs-scheme: cleanup quotas subdirs on scheme dir setup failure
    
    commit dc7e1d75fd8c505096d0cddeca9e2efb2b55aaf9 upstream.
    
    When a DAMOS-scheme DAMON sysfs directory setup fails after setup of
    quotas/ directory, subdirectories of quotas/ directory are not cleaned up.
    As a result, DAMON sysfs interface is nearly broken until the system
    reboots, and the memory for the unremoved directory is leaked.
    
    Cleanup the directories under such failures.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 1b32234ab087 ("mm/damon/sysfs: support DAMOS watermarks")
    Signed-off-by: SeongJae Park <[email protected]>
    Cc: chongjiapeng <[email protected]>
    Cc: <[email protected]> # 5.18.x
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/damon/sysfs: cleanup attrs subdirs on context dir setup failure [+ + +]
Author: SeongJae Park <[email protected]>
Date:   Wed Dec 24 18:30:35 2025 -0800

    mm/damon/sysfs: cleanup attrs subdirs on context dir setup failure
    
    commit 9814cc832b88bd040fc2a1817c2b5469d0f7e862 upstream.
    
    When a context DAMON sysfs directory setup is failed after setup of attrs/
    directory, subdirectories of attrs/ directory are not cleaned up.  As a
    result, DAMON sysfs interface is nearly broken until the system reboots,
    and the memory for the unremoved directory is leaked.
    
    Cleanup the directories under such failures.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: c951cd3b8901 ("mm/damon: implement a minimal stub for sysfs-based DAMON interface")
    Signed-off-by: SeongJae Park <[email protected]>
    Cc: chongjiapeng <[email protected]>
    Cc: <[email protected]> # 5.18.x
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm/damon/sysfs: cleanup intervals subdirs on attrs dir setup failure [+ + +]
Author: SeongJae Park <[email protected]>
Date:   Wed Dec 24 18:30:34 2025 -0800

    mm/damon/sysfs: cleanup intervals subdirs on attrs dir setup failure
    
    commit a24ca8ebb0cd5ea07a1462b77be0f0823c40f319 upstream.
    
    Patch series "mm/damon/sysfs: free setup failures generated zombie sub-sub
    dirs".
    
    Some DAMON sysfs directory setup functions generates its sub and sub-sub
    directories.  For example, 'monitoring_attrs/' directory setup creates
    'intervals/' and 'intervals/intervals_goal/' directories under
    'monitoring_attrs/' directory.  When such sub-sub directories are
    successfully made but followup setup is failed, the setup function should
    recursively clean up the subdirectories.
    
    However, such setup functions are only dereferencing sub directory
    reference counters.  As a result, under certain setup failures, the
    sub-sub directories keep having non-zero reference counters.  It means the
    directories cannot be removed like zombies, and the memory for the
    directories cannot be freed.
    
    The user impact of this issue is limited due to the following reasons.
    
    When the issue happens, the zombie directories are still taking the path.
    Hence attempts to generate the directories again will fail, without
    additional memory leak.  This means the upper bound memory leak is
    limited.  Nonetheless this also implies controlling DAMON with a feature
    that requires the setup-failed sysfs files will be impossible until the
    system reboots.
    
    Also, the setup operations are quite simple.  The certain failures would
    hence only rarely happen, and are difficult to artificially trigger.
    
    
    This patch (of 4):
    
    When attrs/ DAMON sysfs directory setup is failed after setup of
    intervals/ directory, intervals/intervals_goal/ directory is not cleaned
    up.  As a result, DAMON sysfs interface is nearly broken until the system
    reboots, and the memory for the unremoved directory is leaked.
    
    Cleanup the directory under such failures.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 8fbbcbeaafeb ("mm/damon/sysfs: implement intervals tuning goal directory")
    Signed-off-by: SeongJae Park <[email protected]>
    Cc: chongjiapeng <[email protected]>
    Cc: <[email protected]> # 6.15.x
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/page_alloc/vmstat: simplify refresh_cpu_vm_stats change detection [+ + +]
Author: Joshua Hahn <[email protected]>
Date:   Tue Oct 14 07:50:08 2025 -0700

    mm/page_alloc/vmstat: simplify refresh_cpu_vm_stats change detection
    
    commit 0acc67c4030c39f39ac90413cc5d0abddd3a9527 upstream.
    
    Patch series "mm/page_alloc: Batch callers of free_pcppages_bulk", v5.
    
    Motivation & Approach
    =====================
    
    While testing workloads with high sustained memory pressure on large
    machines in the Meta fleet (1Tb memory, 316 CPUs), we saw an unexpectedly
    high number of softlockups.  Further investigation showed that the zone
    lock in free_pcppages_bulk was being held for a long time, and was called
    to free 2k+ pages over 100 times just during boot.
    
    This causes starvation in other processes for the zone lock, which can
    lead to the system stalling as multiple threads cannot make progress
    without the locks.  We can see these issues manifesting as warnings:
    
    [ 4512.591979] rcu: INFO: rcu_sched self-detected stall on CPU
    [ 4512.604370] rcu:     20-....: (9312 ticks this GP) idle=a654/1/0x4000000000000000 softirq=309340/309344 fqs=5426
    [ 4512.626401] rcu:              hardirqs   softirqs   csw/system
    [ 4512.638793] rcu:      number:        0        145            0
    [ 4512.651177] rcu:     cputime:       30      10410          174   ==> 10558(ms)
    [ 4512.666657] rcu:     (t=21077 jiffies g=783665 q=1242213 ncpus=316)
    
    While these warnings don't indicate a crash or a kernel panic, they do
    point to the underlying issue of lock contention.  To prevent starvation
    in both locks, batch the freeing of pages using pcp->batch.
    
    Because free_pcppages_bulk is called with the pcp lock and acquires the
    zone lock, relinquishing and reacquiring the locks are only effective when
    both of them are broken together (unless the system was built with queued
    spinlocks).  Thus, instead of modifying free_pcppages_bulk to break both
    locks, batch the freeing from its callers instead.
    
    A similar fix has been implemented in the Meta fleet, and we have seen
    significantly less softlockups.
    
    Testing
    =======
    The following are a few synthetic benchmarks, made on three machines. The
    first is a large machine with 754GiB memory and 316 processors.
    The second is a relatively smaller machine with 251GiB memory and 176
    processors. The third and final is the smallest of the three, which has 62GiB
    memory and 36 processors.
    
    On all machines, I kick off a kernel build with -j$(nproc).
    Negative delta is better (faster compilation).
    
    Large machine (754GiB memory, 316 processors)
    make -j$(nproc)
    +------------+---------------+-----------+
    | Metric (s) | Variation (%) | Delta(%)  |
    +------------+---------------+-----------+
    | real       |        0.8070 |  - 1.4865 |
    | user       |        0.2823 |  + 0.4081 |
    | sys        |        5.0267 |  -11.8737 |
    +------------+---------------+-----------+
    
    Medium machine (251GiB memory, 176 processors)
    make -j$(nproc)
    +------------+---------------+----------+
    | Metric (s) | Variation (%) | Delta(%) |
    +------------+---------------+----------+
    | real       |        0.2806 |  +0.0351 |
    | user       |        0.0994 |  +0.3170 |
    | sys        |        0.6229 |  -0.6277 |
    +------------+---------------+----------+
    
    Small machine (62GiB memory, 36 processors)
    make -j$(nproc)
    +------------+---------------+----------+
    | Metric (s) | Variation (%) | Delta(%) |
    +------------+---------------+----------+
    | real       |        0.1503 |  -2.6585 |
    | user       |        0.0431 |  -2.2984 |
    | sys        |        0.1870 |  -3.2013 |
    +------------+---------------+----------+
    
    Here, variation is the coefficient of variation, i.e.  standard deviation
    / mean.
    
    Based on these results, it seems like there are varying degrees to how
    much lock contention this reduces.  For the largest and smallest machines
    that I ran the tests on, it seems like there is quite some significant
    reduction.  There is also some performance increases visible from
    userspace.
    
    Interestingly, the performance gains don't scale with the size of the
    machine, but rather there seems to be a dip in the gain there is for the
    medium-sized machine.  One possible theory is that because the high
    watermark depends on both memory and the number of local CPUs, what
    impacts zone contention the most is not these individual values, but
    rather the ratio of mem:processors.
    
    
    This patch (of 5):
    
    Currently, refresh_cpu_vm_stats returns an int, indicating how many
    changes were made during its updates.  Using this information, callers
    like vmstat_update can heuristically determine if more work will be done
    in the future.
    
    However, all of refresh_cpu_vm_stats's callers either (a) ignore the
    result, only caring about performing the updates, or (b) only care about
    whether changes were made, but not *how many* changes were made.
    
    Simplify the code by returning a bool instead to indicate if updates
    were made.
    
    In addition, simplify fold_diff and decay_pcp_high to return a bool
    for the same reason.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Joshua Hahn <[email protected]>
    Reviewed-by: Vlastimil Babka <[email protected]>
    Reviewed-by: SeongJae Park <[email protected]>
    Cc: Brendan Jackman <[email protected]>
    Cc: Chris Mason <[email protected]>
    Cc: Johannes Weiner <[email protected]>
    Cc: "Kirill A. Shutemov" <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: Zi Yan <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Stable-dep-of: 038a102535eb ("mm/page_alloc: prevent pcp corruption with SMP=n")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/page_alloc: batch page freeing in decay_pcp_high [+ + +]
Author: Joshua Hahn <[email protected]>
Date:   Tue Oct 14 07:50:09 2025 -0700

    mm/page_alloc: batch page freeing in decay_pcp_high
    
    commit fc4b909c368f3a7b08c895dd5926476b58e85312 upstream.
    
    It is possible for pcp->count - pcp->high to exceed pcp->batch by a lot.
    When this happens, we should perform batching to ensure that
    free_pcppages_bulk isn't called with too many pages to free at once and
    starve out other threads that need the pcp or zone lock.
    
    Since we are still only freeing the difference between the initial
    pcp->count and pcp->high values, there should be no change to how many
    pages are freed.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Joshua Hahn <[email protected]>
    Suggested-by: Chris Mason <[email protected]>
    Suggested-by: Andrew Morton <[email protected]>
    Co-developed-by: Johannes Weiner <[email protected]>
    Reviewed-by: Vlastimil Babka <[email protected]>
    Cc: Brendan Jackman <[email protected]>
    Cc: "Kirill A. Shutemov" <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: SeongJae Park <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: Zi Yan <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Stable-dep-of: 038a102535eb ("mm/page_alloc: prevent pcp corruption with SMP=n")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm/page_alloc: make percpu_pagelist_high_fraction reads lock-free [+ + +]
Author: Aboorva Devarajan <[email protected]>
Date:   Mon Dec 1 11:30:09 2025 +0530

    mm/page_alloc: make percpu_pagelist_high_fraction reads lock-free
    
    commit b9efe36b5e3eb2e91aa3d706066428648af034fc upstream.
    
    When page isolation loops indefinitely during memory offline, reading
    /proc/sys/vm/percpu_pagelist_high_fraction blocks on pcp_batch_high_lock,
    causing hung task warnings.
    
    Make procfs reads lock-free since percpu_pagelist_high_fraction is a
    simple integer with naturally atomic reads, writers still serialize via
    the mutex.
    
    This prevents hung task warnings when reading the procfs file during
    long-running memory offline operations.
    
    [[email protected]: add comment, per Michal]
      Link: https://lkml.kernel.org/r/aS_y9AuJQFydLEXo@tiehlicka
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Aboorva Devarajan <[email protected]>
    Acked-by: Michal Hocko <[email protected]>
    Cc: Brendan Jackman <[email protected]>
    Cc: Johannes Weiner <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: Zi Yan <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm/page_alloc: prevent pcp corruption with SMP=n [+ + +]
Author: Vlastimil Babka <[email protected]>
Date:   Mon Jan 5 16:08:56 2026 +0100

    mm/page_alloc: prevent pcp corruption with SMP=n
    
    commit 038a102535eb49e10e93eafac54352fcc5d78847 upstream.
    
    The kernel test robot has reported:
    
     BUG: spinlock trylock failure on UP on CPU#0, kcompactd0/28
      lock: 0xffff888807e35ef0, .magic: dead4ead, .owner: kcompactd0/28, .owner_cpu: 0
     CPU: 0 UID: 0 PID: 28 Comm: kcompactd0 Not tainted 6.18.0-rc5-00127-ga06157804399 #1 PREEMPT  8cc09ef94dcec767faa911515ce9e609c45db470
     Call Trace:
      <IRQ>
      __dump_stack (lib/dump_stack.c:95)
      dump_stack_lvl (lib/dump_stack.c:123)
      dump_stack (lib/dump_stack.c:130)
      spin_dump (kernel/locking/spinlock_debug.c:71)
      do_raw_spin_trylock (kernel/locking/spinlock_debug.c:?)
      _raw_spin_trylock (include/linux/spinlock_api_smp.h:89 kernel/locking/spinlock.c:138)
      __free_frozen_pages (mm/page_alloc.c:2973)
      ___free_pages (mm/page_alloc.c:5295)
      __free_pages (mm/page_alloc.c:5334)
      tlb_remove_table_rcu (include/linux/mm.h:? include/linux/mm.h:3122 include/asm-generic/tlb.h:220 mm/mmu_gather.c:227 mm/mmu_gather.c:290)
      ? __cfi_tlb_remove_table_rcu (mm/mmu_gather.c:289)
      ? rcu_core (kernel/rcu/tree.c:?)
      rcu_core (include/linux/rcupdate.h:341 kernel/rcu/tree.c:2607 kernel/rcu/tree.c:2861)
      rcu_core_si (kernel/rcu/tree.c:2879)
      handle_softirqs (arch/x86/include/asm/jump_label.h:36 include/trace/events/irq.h:142 kernel/softirq.c:623)
      __irq_exit_rcu (arch/x86/include/asm/jump_label.h:36 kernel/softirq.c:725)
      irq_exit_rcu (kernel/softirq.c:741)
      sysvec_apic_timer_interrupt (arch/x86/kernel/apic/apic.c:1052)
      </IRQ>
      <TASK>
     RIP: 0010:_raw_spin_unlock_irqrestore (arch/x86/include/asm/preempt.h:95 include/linux/spinlock_api_smp.h:152 kernel/locking/spinlock.c:194)
      free_pcppages_bulk (mm/page_alloc.c:1494)
      drain_pages_zone (include/linux/spinlock.h:391 mm/page_alloc.c:2632)
      __drain_all_pages (mm/page_alloc.c:2731)
      drain_all_pages (mm/page_alloc.c:2747)
      kcompactd (mm/compaction.c:3115)
      kthread (kernel/kthread.c:465)
      ? __cfi_kcompactd (mm/compaction.c:3166)
      ? __cfi_kthread (kernel/kthread.c:412)
      ret_from_fork (arch/x86/kernel/process.c:164)
      ? __cfi_kthread (kernel/kthread.c:412)
      ret_from_fork_asm (arch/x86/entry/entry_64.S:255)
      </TASK>
    
    Matthew has analyzed the report and identified that in drain_page_zone()
    we are in a section protected by spin_lock(&pcp->lock) and then get an
    interrupt that attempts spin_trylock() on the same lock.  The code is
    designed to work this way without disabling IRQs and occasionally fail the
    trylock with a fallback.  However, the SMP=n spinlock implementation
    assumes spin_trylock() will always succeed, and thus it's normally a
    no-op.  Here the enabled lock debugging catches the problem, but otherwise
    it could cause a corruption of the pcp structure.
    
    The problem has been introduced by commit 574907741599 ("mm/page_alloc:
    leave IRQs enabled for per-cpu page allocations").  The pcp locking scheme
    recognizes the need for disabling IRQs to prevent nesting spin_trylock()
    sections on SMP=n, but the need to prevent the nesting in spin_lock() has
    not been recognized.  Fix it by introducing local wrappers that change the
    spin_lock() to spin_lock_iqsave() with SMP=n and use them in all places
    that do spin_lock(&pcp->lock).
    
    [[email protected]: add pcp_ prefix to the spin_lock_irqsave wrappers, per Steven]
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 574907741599 ("mm/page_alloc: leave IRQs enabled for per-cpu page allocations")
    Signed-off-by: Vlastimil Babka <[email protected]>
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-lkp/[email protected]
    Analyzed-by: Matthew Wilcox <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]/
    Acked-by: Mel Gorman <[email protected]>
    Cc: Brendan Jackman <[email protected]>
    Cc: Johannes Weiner <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Sebastian Andrzej Siewior <[email protected]>
    Cc: Steven Rostedt <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: Zi Yan <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/zswap: fix error pointer free in zswap_cpu_comp_prepare() [+ + +]
Author: Pavel Butsykin <[email protected]>
Date:   Wed Dec 31 11:46:38 2025 +0400

    mm/zswap: fix error pointer free in zswap_cpu_comp_prepare()
    
    commit 590b13669b813d55844fecd9142c56abd567914d upstream.
    
    crypto_alloc_acomp_node() may return ERR_PTR(), but the fail path checks
    only for NULL and can pass an error pointer to crypto_free_acomp().  Use
    IS_ERR_OR_NULL() to only free valid acomp instances.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 779b9955f643 ("mm: zswap: move allocations during CPU init outside the lock")
    Signed-off-by: Pavel Butsykin <[email protected]>
    Reviewed-by: SeongJae Park <[email protected]>
    Acked-by: Yosry Ahmed <[email protected]>
    Acked-by: Nhat Pham <[email protected]>
    Cc: Johannes Weiner <[email protected]>
    Cc: Chengming Zhou <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm: actually mark kernel page table pages [+ + +]
Author: Dave Hansen <[email protected]>
Date:   Wed Oct 22 16:26:29 2025 +0800

    mm: actually mark kernel page table pages
    
    commit 977870522af34359b461060597ee3a86f27450d6 upstream.
    
    Now that the API is in place, mark kernel page table pages just after they
    are allocated.  Unmark them just before they are freed.
    
    Note: Unconditionally clearing the 'kernel' marking (via
    ptdesc_clear_kernel()) would be functionally identical to what is here.
    But having the if() makes it logically clear that this function can be
    used for kernel and non-kernel page tables.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Dave Hansen <[email protected]>
    Signed-off-by: Lu Baolu <[email protected]>
    Reviewed-by: Jason Gunthorpe <[email protected]>
    Reviewed-by: Kevin Tian <[email protected]>
    Acked-by: David Hildenbrand <[email protected]>
    Acked-by: Mike Rapoport (Microsoft) <[email protected]>
    Cc: Alistair Popple <[email protected]>
    Cc: Andy Lutomirski <[email protected]>
    Cc: Borislav Betkov <[email protected]>
    Cc: Ingo Molnar <[email protected]>
    Cc: Jann Horn <[email protected]>
    Cc: Jean-Philippe Brucker <[email protected]>
    Cc: Joerg Roedel <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Cc: Lorenzo Stoakes <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Robin Murohy <[email protected]>
    Cc: Thomas Gleinxer <[email protected]>
    Cc: "Uladzislau Rezki (Sony)" <[email protected]>
    Cc: Vasant Hegde <[email protected]>
    Cc: Vinicius Costa Gomes <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: Will Deacon <[email protected]>
    Cc: Yi Lai <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm: add a ptdesc flag to mark kernel page tables [+ + +]
Author: Dave Hansen <[email protected]>
Date:   Wed Oct 22 16:26:28 2025 +0800

    mm: add a ptdesc flag to mark kernel page tables
    
    commit 27bfafac65d87c58639f5d7af1353ec1e7886963 upstream.
    
    The page tables used to map the kernel and userspace often have very
    different handling rules.  There are frequently *_kernel() variants of
    functions just for kernel page tables.  That's not great and has lead to
    code duplication.
    
    Instead of having completely separate call paths, allow a 'ptdesc' to be
    marked as being for kernel mappings.  Introduce helpers to set and clear
    this status.
    
    Note: this uses the PG_referenced bit.  Page flags are a great fit for
    this since it is truly a single bit of information.  Use PG_referenced
    itself because it's a fairly benign flag (as opposed to things like
    PG_lock).  It's also (according to Willy) unlikely to go away any time
    soon.
    
    PG_referenced is not in PAGE_FLAGS_CHECK_AT_FREE.  It does not need to be
    cleared before freeing the page, and pages coming out of the allocator
    should have it cleared.  Regardless, introduce an API to clear it anyway.
    Having symmetry in the API makes it easier to change the underlying
    implementation later, like if there was a need to move to a
    PAGE_FLAGS_CHECK_AT_FREE bit.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Dave Hansen <[email protected]>
    Signed-off-by: Lu Baolu <[email protected]>
    Reviewed-by: Jason Gunthorpe <[email protected]>
    Reviewed-by: Kevin Tian <[email protected]>
    Acked-by: David Hildenbrand <[email protected]>
    Acked-by: Mike Rapoport (Microsoft) <[email protected]>
    Cc: Alistair Popple <[email protected]>
    Cc: Andy Lutomirski <[email protected]>
    Cc: Borislav Betkov <[email protected]>
    Cc: Ingo Molnar <[email protected]>
    Cc: Jann Horn <[email protected]>
    Cc: Jean-Philippe Brucker <[email protected]>
    Cc: Joerg Roedel <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Cc: Lorenzo Stoakes <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Robin Murohy <[email protected]>
    Cc: Thomas Gleinxer <[email protected]>
    Cc: "Uladzislau Rezki (Sony)" <[email protected]>
    Cc: Vasant Hegde <[email protected]>
    Cc: Vinicius Costa Gomes <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: Will Deacon <[email protected]>
    Cc: Yi Lai <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm: describe @flags parameter in memalloc_flags_save() [+ + +]
Author: Bagas Sanjaya <[email protected]>
Date:   Fri Dec 19 08:40:04 2025 +0700

    mm: describe @flags parameter in memalloc_flags_save()
    
    [ Upstream commit e2fb7836b01747815f8bb94981c35f2688afb120 ]
    
    Patch series "mm kernel-doc fixes".
    
    Here are kernel-doc fixes for mm subsystem.  I'm also including textsearch
    fix since there's currently no maintainer for include/linux/textsearch.h
    (get_maintainer.pl only shows LKML).
    
    This patch (of 4):
    
    Sphinx reports kernel-doc warning:
    
    WARNING: ./include/linux/sched/mm.h:332 function parameter 'flags' not described in 'memalloc_flags_save'
    
    Describe @flags to fix it.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Bagas Sanjaya <[email protected]>
    Fixes: 3f6d5e6a468d ("mm: introduce memalloc_flags_{save,restore}")
    Acked-by: David Hildenbrand (Red Hat) <[email protected]>
    Acked-by: Harry Yoo <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mm: introduce deferred freeing for kernel page tables [+ + +]
Author: Dave Hansen <[email protected]>
Date:   Wed Oct 22 16:26:33 2025 +0800

    mm: introduce deferred freeing for kernel page tables
    
    commit 5ba2f0a1556479638ac11a3c201421f5515e89f5 upstream.
    
    This introduces a conditional asynchronous mechanism, enabled by
    CONFIG_ASYNC_KERNEL_PGTABLE_FREE.  When enabled, this mechanism defers the
    freeing of pages that are used as page tables for kernel address mappings.
    These pages are now queued to a work struct instead of being freed
    immediately.
    
    This deferred freeing allows for batch-freeing of page tables, providing a
    safe context for performing a single expensive operation (TLB flush) for a
    batch of kernel page tables instead of performing that expensive operation
    for each page table.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Dave Hansen <[email protected]>
    Signed-off-by: Lu Baolu <[email protected]>
    Reviewed-by: Jason Gunthorpe <[email protected]>
    Reviewed-by: Kevin Tian <[email protected]>
    Acked-by: David Hildenbrand <[email protected]>
    Acked-by: Mike Rapoport (Microsoft) <[email protected]>
    Cc: Alistair Popple <[email protected]>
    Cc: Andy Lutomirski <[email protected]>
    Cc: Borislav Betkov <[email protected]>
    Cc: Ingo Molnar <[email protected]>
    Cc: Jann Horn <[email protected]>
    Cc: Jean-Philippe Brucker <[email protected]>
    Cc: Joerg Roedel <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Cc: Lorenzo Stoakes <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Robin Murohy <[email protected]>
    Cc: Thomas Gleinxer <[email protected]>
    Cc: "Uladzislau Rezki (Sony)" <[email protected]>
    Cc: Vasant Hegde <[email protected]>
    Cc: Vinicius Costa Gomes <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: Will Deacon <[email protected]>
    Cc: Yi Lai <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm: introduce pure page table freeing function [+ + +]
Author: Dave Hansen <[email protected]>
Date:   Wed Oct 22 16:26:31 2025 +0800

    mm: introduce pure page table freeing function
    
    commit 01894295672335ff304beed4359f30d14d5765f2 upstream.
    
    The pages used for ptdescs are currently freed back to the allocator in a
    single location.  They will shortly be freed from a second location.
    
    Create a simple helper that just frees them back to the allocator.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Dave Hansen <[email protected]>
    Signed-off-by: Lu Baolu <[email protected]>
    Reviewed-by: Jason Gunthorpe <[email protected]>
    Reviewed-by: Kevin Tian <[email protected]>
    Acked-by: David Hildenbrand <[email protected]>
    Acked-by: Mike Rapoport (Microsoft) <[email protected]>
    Cc: Alistair Popple <[email protected]>
    Cc: Andy Lutomirski <[email protected]>
    Cc: Borislav Betkov <[email protected]>
    Cc: Ingo Molnar <[email protected]>
    Cc: Jann Horn <[email protected]>
    Cc: Jean-Philippe Brucker <[email protected]>
    Cc: Joerg Roedel <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Cc: Lorenzo Stoakes <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Robin Murohy <[email protected]>
    Cc: Thomas Gleinxer <[email protected]>
    Cc: "Uladzislau Rezki (Sony)" <[email protected]>
    Cc: Vasant Hegde <[email protected]>
    Cc: Vinicius Costa Gomes <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: Will Deacon <[email protected]>
    Cc: Yi Lai <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm: kmsan: fix poisoning of high-order non-compound pages [+ + +]
Author: Ryan Roberts <[email protected]>
Date:   Sun Jan 4 13:43:47 2026 +0000

    mm: kmsan: fix poisoning of high-order non-compound pages
    
    commit 4795d205d78690a46b60164f44b8bb7b3e800865 upstream.
    
    kmsan_free_page() is called by the page allocator's free_pages_prepare()
    during page freeing.  Its job is to poison all the memory covered by the
    page.  It can be called with an order-0 page, a compound high-order page
    or a non-compound high-order page.  But page_size() only works for order-0
    and compound pages.  For a non-compound high-order page it will
    incorrectly return PAGE_SIZE.
    
    The implication is that the tail pages of a high-order non-compound page
    do not get poisoned at free, so any invalid access while they are free
    could go unnoticed.  It looks like the pages will be poisoned again at
    allocation time, so that would bookend the window.
    
    Fix this by using the order parameter to calculate the size.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: b073d7f8aee4 ("mm: kmsan: maintain KMSAN metadata for page operations")
    Signed-off-by: Ryan Roberts <[email protected]>
    Reviewed-by: Alexander Potapenko <[email protected]>
    Tested-by: Alexander Potapenko <[email protected]>
    Cc: Dmitriy Vyukov <[email protected]>
    Cc: Dmitry Vyukov <[email protected]>
    Cc: Marco Elver <[email protected]>
    Cc: Ryan Roberts <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm: numa,memblock: include for 'numa_nodes_parsed' [+ + +]
Author: Ben Dooks <[email protected]>
Date:   Thu Jan 8 10:15:39 2026 +0000

    mm: numa,memblock: include <asm/numa.h> for 'numa_nodes_parsed'
    
    commit f46c26f1bcd9164d7f3377f15ca75488a3e44362 upstream.
    
    The 'numa_nodes_parsed' is defined in <asm/numa.h> but this file
    is not included in mm/numa_memblks.c (build x86_64) so add this
    to the incldues to fix the following sparse warning:
    
    mm/numa_memblks.c:13:12: warning: symbol 'numa_nodes_parsed' was not declared. Should it be static?
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 87482708210f ("mm: introduce numa_memblks")
    Signed-off-by: Ben Dooks <[email protected]>
    Reviewed-by: Mike Rapoport (Microsoft) <[email protected]>
    Cc: Ben Dooks <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/mlx5e: Don't store mlx5e_priv in mlx5e_dev devlink priv [+ + +]
Author: Saeed Mahameed <[email protected]>
Date:   Thu Jan 8 13:26:55 2026 -0800

    net/mlx5e: Don't store mlx5e_priv in mlx5e_dev devlink priv
    
    [ Upstream commit 123eda2e5b1638e298e3a66bb1e64a8da92de5e1 ]
    
    mlx5e_priv is an unstable structure that can be memset(0) if profile
    attaching fails, mlx5e_priv in mlx5e_dev devlink private is used to
    reference the netdev and mdev associated with that struct. Instead,
    store netdev directly into mlx5e_dev and get mdev from the containing
    mlx5_adev aux device structure.
    
    This fixes a kernel oops in mlx5e_remove when switchdev mode fails due
    to change profile failure.
    
    $ devlink dev eswitch set pci/0000:00:03.0 mode switchdev
    Error: mlx5_core: Failed setting eswitch to offloads.
    dmesg:
    workqueue: Failed to create a rescuer kthread for wq "mlx5e": -EINTR
    mlx5_core 0012:03:00.1: mlx5e_netdev_init_profile:6214:(pid 37199): mlx5e_priv_init failed, err=-12
    mlx5_core 0012:03:00.1 gpu3rdma1: mlx5e_netdev_change_profile: new profile init failed, -12
    workqueue: Failed to create a rescuer kthread for wq "mlx5e": -EINTR
    mlx5_core 0012:03:00.1: mlx5e_netdev_init_profile:6214:(pid 37199): mlx5e_priv_init failed, err=-12
    mlx5_core 0012:03:00.1 gpu3rdma1: mlx5e_netdev_change_profile: failed to rollback to orig profile, -12
    
    $ devlink dev reload pci/0000:00:03.0 ==> oops
    
    BUG: kernel NULL pointer dereference, address: 0000000000000520
     #PF: supervisor read access in kernel mode
     #PF: error_code(0x0000) - not-present page
    PGD 0 P4D 0
    Oops: Oops: 0000 [#1] SMP NOPTI
    CPU: 3 UID: 0 PID: 521 Comm: devlink Not tainted 6.18.0-rc5+ #117 PREEMPT(voluntary)
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-2.fc40 04/01/2014
    RIP: 0010:mlx5e_remove+0x68/0x130
    RSP: 0018:ffffc900034838f0 EFLAGS: 00010246
    RAX: ffff88810283c380 RBX: ffff888101874400 RCX: ffffffff826ffc45
    RDX: 0000000000000000 RSI: 0000000000000001 RDI: 0000000000000000
    RBP: ffff888102d789c0 R08: ffff8881007137f0 R09: ffff888100264e10
    R10: ffffc90003483898 R11: ffffc900034838a0 R12: ffff888100d261a0
    R13: ffff888100d261a0 R14: ffff8881018749a0 R15: ffff888101874400
    FS:  00007f8565fea740(0000) GS:ffff88856a759000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000520 CR3: 000000010b11a004 CR4: 0000000000370ef0
    Call Trace:
     <TASK>
     device_release_driver_internal+0x19c/0x200
     bus_remove_device+0xc6/0x130
     device_del+0x160/0x3d0
     ? devl_param_driverinit_value_get+0x2d/0x90
     mlx5_detach_device+0x89/0xe0
     mlx5_unload_one_devl_locked+0x3a/0x70
     mlx5_devlink_reload_down+0xc8/0x220
     devlink_reload+0x7d/0x260
     devlink_nl_reload_doit+0x45b/0x5a0
     genl_family_rcv_msg_doit+0xe8/0x140
    
    Fixes: ee75f1fc44dd ("net/mlx5e: Create separate devlink instance for ethernet auxiliary device")
    Fixes: c4d7eb57687f ("net/mxl5e: Add change profile method")
    Signed-off-by: Saeed Mahameed <[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: Fix crash on profile change rollback failure [+ + +]
Author: Saeed Mahameed <[email protected]>
Date:   Thu Jan 8 13:26:54 2026 -0800

    net/mlx5e: Fix crash on profile change rollback failure
    
    [ Upstream commit 4dadc4077e3f77d6d31e199a925fc7a705e7adeb ]
    
    mlx5e_netdev_change_profile can fail to attach a new profile and can
    fail to rollback to old profile, in such case, we could end up with a
    dangling netdev with a fully reset netdev_priv. A retry to change
    profile, e.g. another attempt to call mlx5e_netdev_change_profile via
    switchdev mode change, will crash trying to access the now NULL
    priv->mdev.
    
    This fix allows mlx5e_netdev_change_profile() to handle previous
    failures and an empty priv, by not assuming priv is valid.
    
    Pass netdev and mdev to all flows requiring
    mlx5e_netdev_change_profile() and avoid passing priv.
    In mlx5e_netdev_change_profile() check if current priv is valid, and if
    not, just attach the new profile without trying to access the old one.
    
    This fixes the following oops, when enabling switchdev mode for the 2nd
    time after first time failure:
    
     ## Enabling switchdev mode first time:
    
    mlx5_core 0012:03:00.1: E-Switch: Supported tc chains and prios offload
    workqueue: Failed to create a rescuer kthread for wq "mlx5e": -EINTR
    mlx5_core 0012:03:00.1: mlx5e_netdev_init_profile:6214:(pid 37199): mlx5e_priv_init failed, err=-12
    mlx5_core 0012:03:00.1 gpu3rdma1: mlx5e_netdev_change_profile: new profile init failed, -12
    workqueue: Failed to create a rescuer kthread for wq "mlx5e": -EINTR
    mlx5_core 0012:03:00.1: mlx5e_netdev_init_profile:6214:(pid 37199): mlx5e_priv_init failed, err=-12
    mlx5_core 0012:03:00.1 gpu3rdma1: mlx5e_netdev_change_profile: failed to rollback to orig profile, -12
                                                                             ^^^^^^^^
    mlx5_core 0000:00:03.0: E-Switch: Disable: mode(LEGACY), nvfs(0), necvfs(0), active vports(0)
    
     ## retry: Enabling switchdev mode 2nd time:
    
    mlx5_core 0000:00:03.0: E-Switch: Supported tc chains and prios offload
    BUG: kernel NULL pointer dereference, address: 0000000000000038
     #PF: supervisor read access in kernel mode
     #PF: error_code(0x0000) - not-present page
    PGD 0 P4D 0
    Oops: Oops: 0000 [#1] SMP NOPTI
    CPU: 13 UID: 0 PID: 520 Comm: devlink Not tainted 6.18.0-rc4+ #91 PREEMPT(voluntary)
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-2.fc40 04/01/2014
    RIP: 0010:mlx5e_detach_netdev+0x3c/0x90
    Code: 50 00 00 f0 80 4f 78 02 48 8b bf e8 07 00 00 48 85 ff 74 16 48 8b 73 78 48 d1 ee 83 e6 01 83 f6 01 40 0f b6 f6 e8 c4 42 00 00 <48> 8b 45 38 48 85 c0 74 08 48 89 df e8 cc 47 40 1e 48 8b bb f0 07
    RSP: 0018:ffffc90000673890 EFLAGS: 00010246
    RAX: 0000000000000000 RBX: ffff8881036a89c0 RCX: 0000000000000000
    RDX: ffff888113f63800 RSI: ffffffff822fe720 RDI: 0000000000000000
    RBP: 0000000000000000 R08: 0000000000002dcd R09: 0000000000000000
    R10: ffffc900006738e8 R11: 00000000ffffffff R12: 0000000000000000
    R13: 0000000000000000 R14: ffff8881036a89c0 R15: 0000000000000000
    FS:  00007fdfb8384740(0000) GS:ffff88856a9d6000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000038 CR3: 0000000112ae0005 CR4: 0000000000370ef0
    Call Trace:
     <TASK>
     mlx5e_netdev_change_profile+0x45/0xb0
     mlx5e_vport_rep_load+0x27b/0x2d0
     mlx5_esw_offloads_rep_load+0x72/0xf0
     esw_offloads_enable+0x5d0/0x970
     mlx5_eswitch_enable_locked+0x349/0x430
     ? is_mp_supported+0x57/0xb0
     mlx5_devlink_eswitch_mode_set+0x26b/0x430
     devlink_nl_eswitch_set_doit+0x6f/0xf0
     genl_family_rcv_msg_doit+0xe8/0x140
     genl_rcv_msg+0x18b/0x290
     ? __pfx_devlink_nl_pre_doit+0x10/0x10
     ? __pfx_devlink_nl_eswitch_set_doit+0x10/0x10
     ? __pfx_devlink_nl_post_doit+0x10/0x10
     ? __pfx_genl_rcv_msg+0x10/0x10
     netlink_rcv_skb+0x52/0x100
     genl_rcv+0x28/0x40
     netlink_unicast+0x282/0x3e0
     ? __alloc_skb+0xd6/0x190
     netlink_sendmsg+0x1f7/0x430
     __sys_sendto+0x213/0x220
     ? __sys_recvmsg+0x6a/0xd0
     __x64_sys_sendto+0x24/0x30
     do_syscall_64+0x50/0x1f0
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    RIP: 0033:0x7fdfb8495047
    
    Fixes: c4d7eb57687f ("net/mxl5e: Add change profile method")
    Signed-off-by: Saeed Mahameed <[email protected]>
    Reviewed-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/mlx5e: Pass netdev to mlx5e_destroy_netdev instead of priv [+ + +]
Author: Saeed Mahameed <[email protected]>
Date:   Thu Jan 8 13:26:56 2026 -0800

    net/mlx5e: Pass netdev to mlx5e_destroy_netdev instead of priv
    
    [ Upstream commit 4ef8512e1427111f7ba92b4a847d181ff0aeec42 ]
    
    mlx5e_priv is an unstable structure that can be memset(0) if profile
    attaching fails.
    
    Pass netdev to mlx5e_destroy_netdev() to guarantee it will work on a
    valid netdev.
    
    On mlx5e_remove: Check validity of priv->profile, before attempting
    to cleanup any resources that might be not there.
    
    This fixes a kernel oops in mlx5e_remove when switchdev mode fails due
    to change profile failure.
    
    $ devlink dev eswitch set pci/0000:00:03.0 mode switchdev
    Error: mlx5_core: Failed setting eswitch to offloads.
    dmesg:
    workqueue: Failed to create a rescuer kthread for wq "mlx5e": -EINTR
    mlx5_core 0012:03:00.1: mlx5e_netdev_init_profile:6214:(pid 37199): mlx5e_priv_init failed, err=-12
    mlx5_core 0012:03:00.1 gpu3rdma1: mlx5e_netdev_change_profile: new profile init failed, -12
    workqueue: Failed to create a rescuer kthread for wq "mlx5e": -EINTR
    mlx5_core 0012:03:00.1: mlx5e_netdev_init_profile:6214:(pid 37199): mlx5e_priv_init failed, err=-12
    mlx5_core 0012:03:00.1 gpu3rdma1: mlx5e_netdev_change_profile: failed to rollback to orig profile, -12
    
    $ devlink dev reload pci/0000:00:03.0 ==> oops
    
    BUG: kernel NULL pointer dereference, address: 0000000000000370
    PGD 0 P4D 0
    Oops: Oops: 0000 [#1] SMP NOPTI
    CPU: 15 UID: 0 PID: 520 Comm: devlink Not tainted 6.18.0-rc5+ #115 PREEMPT(voluntary)
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-2.fc40 04/01/2014
    RIP: 0010:mlx5e_dcbnl_dscp_app+0x23/0x100
    RSP: 0018:ffffc9000083f8b8 EFLAGS: 00010286
    RAX: ffff8881126fc380 RBX: ffff8881015ac400 RCX: ffffffff826ffc45
    RDX: 0000000000000000 RSI: 0000000000000001 RDI: ffff8881035109c0
    RBP: ffff8881035109c0 R08: ffff888101e3e838 R09: ffff888100264e10
    R10: ffffc9000083f898 R11: ffffc9000083f8a0 R12: ffff888101b921a0
    R13: ffff888101b921a0 R14: ffff8881015ac9a0 R15: ffff8881015ac400
    FS:  00007f789a3c8740(0000) GS:ffff88856aa59000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000370 CR3: 000000010b6c0001 CR4: 0000000000370ef0
    Call Trace:
     <TASK>
     mlx5e_remove+0x57/0x110
     device_release_driver_internal+0x19c/0x200
     bus_remove_device+0xc6/0x130
     device_del+0x160/0x3d0
     ? devl_param_driverinit_value_get+0x2d/0x90
     mlx5_detach_device+0x89/0xe0
     mlx5_unload_one_devl_locked+0x3a/0x70
     mlx5_devlink_reload_down+0xc8/0x220
     devlink_reload+0x7d/0x260
     devlink_nl_reload_doit+0x45b/0x5a0
     genl_family_rcv_msg_doit+0xe8/0x140
    
    Fixes: c4d7eb57687f ("net/mxl5e: Add change profile method")
    Signed-off-by: Saeed Mahameed <[email protected]>
    Reviewed-by: Shay Drori <[email protected]>
    Reviewed-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/mlx5e: Restore destroying state bit after profile cleanup [+ + +]
Author: Saeed Mahameed <[email protected]>
Date:   Thu Jan 8 13:26:57 2026 -0800

    net/mlx5e: Restore destroying state bit after profile cleanup
    
    [ Upstream commit 5629f8859dca7ef74d7314b60de6a957f23166c0 ]
    
    Profile rollback can fail in mlx5e_netdev_change_profile() and we will
    end up with invalid mlx5e_priv memset to 0, we must maintain the
    'destroying' bit in order to gracefully shutdown even if the
    profile/priv are not valid.
    
    This patch maintains the previous state of the 'destroying' state of
    mlx5e_priv after priv cleanup, to allow the remove flow to cleanup
    common resources from mlx5_core to avoid FW fatal errors as seen below:
    
    $ devlink dev eswitch set pci/0000:00:03.0 mode switchdev
        Error: mlx5_core: Failed setting eswitch to offloads.
    dmesg: mlx5_core 0000:00:03.0 enp0s3np0: failed to rollback to orig profile, ...
    
    $ devlink dev reload pci/0000:00:03.0
    
    mlx5_core 0000:00:03.0: E-Switch: Disable: mode(LEGACY), nvfs(0), necvfs(0), active vports(0)
    mlx5_core 0000:00:03.0: poll_health:803:(pid 519): Fatal error 3 detected
    mlx5_core 0000:00:03.0: firmware version: 28.41.1000
    mlx5_core 0000:00:03.0: 0.000 Gb/s available PCIe bandwidth (Unknown x255 link)
    mlx5_core 0000:00:03.0: mlx5_function_enable:1200:(pid 519): enable hca failed
    mlx5_core 0000:00:03.0: mlx5_function_enable:1200:(pid 519): enable hca failed
    mlx5_core 0000:00:03.0: mlx5_health_try_recover:340:(pid 141): handling bad device here
    mlx5_core 0000:00:03.0: mlx5_handle_bad_state:285:(pid 141): Expected to see disabled NIC but it is full driver
    mlx5_core 0000:00:03.0: mlx5_error_sw_reset:236:(pid 141): start
    mlx5_core 0000:00:03.0: NIC IFC still 0 after 4000ms.
    
    Fixes: c4d7eb57687f ("net/mxl5e: Add change profile method")
    Signed-off-by: Saeed Mahameed <[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/sched: sch_qfq: do not free existing class in qfq_change_class() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Mon Jan 12 17:56:56 2026 +0000

    net/sched: sch_qfq: do not free existing class in qfq_change_class()
    
    [ Upstream commit 3879cffd9d07aa0377c4b8835c4f64b4fb24ac78 ]
    
    Fixes qfq_change_class() error case.
    
    cl->qdisc and cl should only be freed if a new class and qdisc
    were allocated, or we risk various UAF.
    
    Fixes: 462dbc9101ac ("pkt_sched: QFQ Plus: fair-queueing service at DRR cost")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Reviewed-by: Jamal Hadi Salim <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net: airoha: Fix typo in airoha_ppe_setup_tc_block_cb definition [+ + +]
Author: Lorenzo Bianconi <[email protected]>
Date:   Fri Jan 9 10:29:06 2026 +0100

    net: airoha: Fix typo in airoha_ppe_setup_tc_block_cb definition
    
    [ Upstream commit dfdf774656205515b2d6ad94fce63c7ccbe92d91 ]
    
    Fix Typo in airoha_ppe_dev_setup_tc_block_cb routine definition when
    CONFIG_NET_AIROHA is not enabled.
    
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Fixes: f45fc18b6de04 ("net: airoha: Add airoha_ppe_dev struct definition")
    Signed-off-by: Lorenzo Bianconi <[email protected]>
    Link: https://patch.msgid.link/20260109-airoha_ppe_dev_setup_tc_block_cb-typo-v1-1-282e8834a9f9@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: bridge: annotate data-races around fdb->{updated,used} [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Jan 8 09:38:06 2026 +0000

    net: bridge: annotate data-races around fdb->{updated,used}
    
    [ Upstream commit b25a0b4a2193407aa72a4cd1df66a7ed07dd4f1e ]
    
    fdb->updated and fdb->used are read and written locklessly.
    
    Add READ_ONCE()/WRITE_ONCE() annotations.
    
    Fixes: 31cbc39b6344 ("net: bridge: add option to allow activity notifications for any fdb entries")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/
    Signed-off-by: Eric Dumazet <[email protected]>
    Acked-by: Nikolay Aleksandrov <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: can: j1939: j1939_xtp_rx_rts_session_active(): deactivate session upon receiving the second rts [+ + +]
Author: Tetsuo Handa <[email protected]>
Date:   Wed Jan 14 00:28:47 2026 +0900

    net: can: j1939: j1939_xtp_rx_rts_session_active(): deactivate session upon receiving the second rts
    
    commit 1809c82aa073a11b7d335ae932d81ce51a588a4a upstream.
    
    Since j1939_session_deactivate_activate_next() in j1939_tp_rxtimer() is
    called only when the timer is enabled, we need to call
    j1939_session_deactivate_activate_next() if we cancelled the timer.
    Otherwise, refcount for j1939_session leaks, which will later appear as
    
    | unregister_netdevice: waiting for vcan0 to become free. Usage count = 2.
    
    problem.
    
    Reported-by: syzbot <[email protected]>
    Closes: https://syzkaller.appspot.com/bug?extid=881d65229ca4f9ae8c84
    Signed-off-by: Tetsuo Handa <[email protected]>
    Tested-by: Oleksij Rempel <[email protected]>
    Acked-by: Oleksij Rempel <[email protected]>
    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Link: https://patch.msgid.link/[email protected]
    Cc: [email protected]
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: hv_netvsc: reject RSS hash key programming without RX indirection table [+ + +]
Author: Aditya Garg <[email protected]>
Date:   Mon Jan 12 02:01:33 2026 -0800

    net: hv_netvsc: reject RSS hash key programming without RX indirection table
    
    [ Upstream commit d23564955811da493f34412d7de60fa268c8cb50 ]
    
    RSS configuration requires a valid RX indirection table. When the device
    reports a single receive queue, rndis_filter_device_add() does not
    allocate an indirection table, accepting RSS hash key updates in this
    state leads to a hang.
    
    Fix this by gating netvsc_set_rxfh() on ndc->rx_table_sz and return
    -EOPNOTSUPP when the table is absent. This aligns set_rxfh with the device
    capabilities and prevents incorrect behavior.
    
    Fixes: 962f3fee83a4 ("netvsc: add ethtool ops to get/set RSS key")
    Signed-off-by: Aditya Garg <[email protected]>
    Reviewed-by: Dipayaan Roy <[email protected]>
    Reviewed-by: Haiyang Zhang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: octeon_ep_vf: fix free_irq dev_id mismatch in IRQ rollback [+ + +]
Author: Kery Qi <[email protected]>
Date:   Fri Jan 9 00:42:57 2026 +0800

    net: octeon_ep_vf: fix free_irq dev_id mismatch in IRQ rollback
    
    [ Upstream commit f93fc5d12d69012788f82151bee55fce937e1432 ]
    
    octep_vf_request_irqs() requests MSI-X queue IRQs with dev_id set to
    ioq_vector. If request_irq() fails part-way, the rollback loop calls
    free_irq() with dev_id set to 'oct', which does not match the original
    dev_id and may leave the irqaction registered.
    
    This can keep IRQ handlers alive while ioq_vector is later freed during
    unwind/teardown, leading to a use-after-free or crash when an interrupt
    fires.
    
    Fix the error path to free IRQs with the same ioq_vector dev_id used
    during request_irq().
    
    Fixes: 1cd3b407977c ("octeon_ep_vf: add Tx/Rx processing and interrupt support")
    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]>

net: phy: motorcomm: fix duplex setting error for phy leds [+ + +]
Author: Jijie Shao <[email protected]>
Date:   Thu Jan 8 15:14:09 2026 +0800

    net: phy: motorcomm: fix duplex setting error for phy leds
    
    [ Upstream commit e02f2a0f1f9b6d4f0c620de2ce037d4436b58f70 ]
    
    fix duplex setting error for phy leds
    
    Fixes: 355b82c54c12 ("net: phy: motorcomm: Add support for PHY LEDs on YT8521")
    Signed-off-by: Jijie Shao <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: update netdev_lock_{type,name} [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Jan 8 09:32:44 2026 +0000

    net: update netdev_lock_{type,name}
    
    [ Upstream commit eb74c19fe10872ee1f29a8f90ca5ce943921afe9 ]
    
    Add missing entries in netdev_lock_type[] and netdev_lock_name[] :
    
    CAN, MCTP, RAWIP, CAIF, IP6GRE, 6LOWPAN, NETLINK, VSOCKMON,
    IEEE802154_MONITOR.
    
    Also add a WARN_ONCE() in netdev_lock_pos() to help future bug hunting
    next time a protocol is added without updating these arrays.
    
    Fixes: 1a33e10e4a95 ("net: partially revert dynamic lockdep key changes")
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
NFS/localio: Deal with page bases that are > PAGE_SIZE [+ + +]
Author: Trond Myklebust <[email protected]>
Date:   Fri Jan 2 18:55:08 2026 -0500

    NFS/localio: Deal with page bases that are > PAGE_SIZE
    
    [ Upstream commit 60699ab7cbf0a4eb19929cce243002b39c67917d ]
    
    When resending requests, etc, the page base can quickly grow larger than
    the page size.
    
    Fixes: 091bdcfcece0 ("nfs/localio: refactor iocb and iov_iter_bvec initialization")
    Signed-off-by: Trond Myklebust <[email protected]>
    Reviewed-by: Mike Snitzer <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
NFS: Fix a deadlock involving nfs_release_folio() [+ + +]
Author: Trond Myklebust <[email protected]>
Date:   Wed Dec 31 11:42:31 2025 -0500

    NFS: Fix a deadlock involving nfs_release_folio()
    
    [ Upstream commit cce0be6eb4971456b703aaeafd571650d314bcca ]
    
    Wang Zhaolong reports a deadlock involving NFSv4.1 state recovery
    waiting on kthreadd, which is attempting to reclaim memory by calling
    nfs_release_folio(). The latter cannot make progress due to state
    recovery being needed.
    
    It seems that the only safe thing to do here is to kick off a writeback
    of the folio, without waiting for completion, or else kicking off an
    asynchronous commit.
    
    Reported-by: Wang Zhaolong <[email protected]>
    Fixes: 96780ca55e3c ("NFS: fix up nfs_release_folio() to try to release the page")
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

NFS: Fix size read races in truncate, fallocate and copy offload [+ + +]
Author: Trond Myklebust <[email protected]>
Date:   Sat Jan 10 18:53:34 2026 -0500

    NFS: Fix size read races in truncate, fallocate and copy offload
    
    [ Upstream commit d5811e6297f3fd9020ac31f51fc317dfdb260cb0 ]
    
    If the pre-operation file size is read before locking the inode and
    quiescing O_DIRECT writes, then nfs_truncate_last_folio() might end up
    overwriting valid file data.
    
    Fixes: b1817b18ff20 ("NFS: Protect against 'eof page pollution'")
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
null_blk: fix kmemleak by releasing references to fault configfs items [+ + +]
Author: Nilay Shroff <[email protected]>
Date:   Tue Jan 13 12:27:22 2026 +0530

    null_blk: fix kmemleak by releasing references to fault configfs items
    
    commit 40b94ec7edbbb867c4e26a1a43d2b898f04b93c5 upstream.
    
    When CONFIG_BLK_DEV_NULL_BLK_FAULT_INJECTION is enabled, the null-blk
    driver sets up fault injection support by creating the timeout_inject,
    requeue_inject, and init_hctx_fault_inject configfs items as children
    of the top-level nullbX configfs group.
    
    However, when the nullbX device is removed, the references taken to
    these fault-config configfs items are not released. As a result,
    kmemleak reports a memory leak, for example:
    
    unreferenced object 0xc00000021ff25c40 (size 32):
      comm "mkdir", pid 10665, jiffies 4322121578
      hex dump (first 32 bytes):
        69 6e 69 74 5f 68 63 74 78 5f 66 61 75 6c 74 5f  init_hctx_fault_
        69 6e 6a 65 63 74 00 88 00 00 00 00 00 00 00 00  inject..........
      backtrace (crc 1a018c86):
        __kmalloc_node_track_caller_noprof+0x494/0xbd8
        kvasprintf+0x74/0xf4
        config_item_set_name+0xf0/0x104
        config_group_init_type_name+0x48/0xfc
        fault_config_init+0x48/0xf0
        0xc0080000180559e4
        configfs_mkdir+0x304/0x814
        vfs_mkdir+0x49c/0x604
        do_mkdirat+0x314/0x3d0
        sys_mkdir+0xa0/0xd8
        system_call_exception+0x1b0/0x4f0
        system_call_vectored_common+0x15c/0x2ec
    
    Fix this by explicitly releasing the references to the fault-config
    configfs items when dropping the reference to the top-level nullbX
    configfs group.
    
    Cc: [email protected]
    Reviewed-by: Chaitanya Kulkarni <[email protected]>
    Fixes: bb4c19e030f4 ("block: null_blk: make fault-injection dynamically configurable per device")
    Signed-off-by: Nilay Shroff <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nvme-apple: add "apple,t8103-nvme-ans2" as compatible [+ + +]
Author: Janne Grunau <[email protected]>
Date:   Wed Dec 31 11:10:57 2025 +0100

    nvme-apple: add "apple,t8103-nvme-ans2" as compatible
    
    commit 7d3fa7e954934fbda0a017ac1c305b7b10ecceef upstream.
    
    After discussion with the devicetree maintainers we agreed to not extend
    lists with the generic compatible "apple,nvme-ans2" anymore [1]. Add
    "apple,t8103-nvme-ans2" as fallback compatible as it is the SoC the
    driver and bindings were written for.
    
    [1]: https://lore.kernel.org/asahi/[email protected]/
    
    Cc: [email protected] # v6.18+
    Fixes: 5bd2927aceba ("nvme-apple: Add initial Apple SoC NVMe driver")
    Reviewed-by: Neal Gompa <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Janne Grunau <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nvme-pci: disable secondary temp for Wodposit WPBSNM8 [+ + +]
Author: Ilikara Zheng <[email protected]>
Date:   Mon Dec 8 21:23:40 2025 +0800

    nvme-pci: disable secondary temp for Wodposit WPBSNM8
    
    commit 340f4fc5508c2905a1f30de229e2a4b299d55735 upstream.
    
    Secondary temperature thresholds (temp2_{min,max}) were not reported
    properly on this NVMe SSD. This resulted in an error while attempting to
    read these values with sensors(1):
    
      ERROR: Can't get value of subfeature temp2_min: I/O error
      ERROR: Can't get value of subfeature temp2_max: I/O error
    
    Add the device to the nvme_id_table with the
    NVME_QUIRK_NO_SECONDARY_TEMP_THRESH flag to suppress access to all non-
    composite temperature thresholds.
    
    Cc: [email protected]
    Tested-by: Wu Haotian <[email protected]>
    Signed-off-by: Ilikara Zheng <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nvme-tcp: fix NULL pointer dereferences in nvmet_tcp_build_pdu_iovec [+ + +]
Author: Shivam Kumar <[email protected]>
Date:   Sat Dec 13 13:57:48 2025 -0500

    nvme-tcp: fix NULL pointer dereferences in nvmet_tcp_build_pdu_iovec
    
    [ Upstream commit 32b63acd78f577b332d976aa06b56e70d054cbba ]
    
    Commit efa56305908b ("nvmet-tcp: Fix a kernel panic when host sends an invalid H2C PDU length")
    added ttag bounds checking and data_offset
    validation in nvmet_tcp_handle_h2c_data_pdu(), but it did not validate
    whether the command's data structures (cmd->req.sg and cmd->iov) have
    been properly initialized before processing H2C_DATA PDUs.
    
    The nvmet_tcp_build_pdu_iovec() function dereferences these pointers
    without NULL checks. This can be triggered by sending H2C_DATA PDU
    immediately after the ICREQ/ICRESP handshake, before
    sending a CONNECT command or NVMe write command.
    
    Attack vectors that trigger NULL pointer dereferences:
    1. H2C_DATA PDU sent before CONNECT → both pointers NULL
    2. H2C_DATA PDU for READ command → cmd->req.sg allocated, cmd->iov NULL
    3. H2C_DATA PDU for uninitialized command slot → both pointers NULL
    
    The fix validates both cmd->req.sg and cmd->iov before calling
    nvmet_tcp_build_pdu_iovec(). Both checks are required because:
    - Uninitialized commands: both NULL
    - READ commands: cmd->req.sg allocated, cmd->iov NULL
    - WRITE commands: both allocated
    
    Fixes: efa56305908b ("nvmet-tcp: Fix a kernel panic when host sends an invalid H2C PDU length")
    Reviewed-by: Sagi Grimberg <[email protected]>
    Signed-off-by: Shivam Kumar <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nvme: fix PCIe subsystem reset controller state transition [+ + +]
Author: Nilay Shroff <[email protected]>
Date:   Wed Jan 14 12:54:13 2026 +0530

    nvme: fix PCIe subsystem reset controller state transition
    
    commit 0edb475ac0a7d153318a24d4dca175a270a5cc4f upstream.
    
    The commit d2fe192348f9 (“nvme: only allow entering LIVE from CONNECTING
    state”) disallows controller state transitions directly from RESETTING
    to LIVE. However, the NVMe PCIe subsystem reset path relies on this
    transition to recover the controller on PowerPC (PPC) systems.
    
    On PPC systems, issuing a subsystem reset causes a temporary loss of
    communication with the NVMe adapter. A subsequent PCIe MMIO read then
    triggers EEH recovery, which restores the PCIe link and brings the
    controller back online. For EEH recovery to proceed correctly, the
    controller must transition back to the LIVE state.
    
    Due to the changes introduced by commit d2fe192348f9 (“nvme: only allow
    entering LIVE from CONNECTING state”), the controller can no longer
    transition directly from RESETTING to LIVE. As a result, EEH recovery
    exits prematurely, leaving the controller stuck in the RESETTING state.
    
    Fix this by explicitly transitioning the controller state from RESETTING
    to CONNECTING and then to LIVE. This satisfies the updated state
    transition rules and allows the controller to be successfully recovered
    on PPC systems following a PCIe subsystem reset.
    
    Cc: [email protected]
    Fixes: d2fe192348f9 ("nvme: only allow entering LIVE from CONNECTING state")
    Reviewed-by: Daniel Wagner <[email protected]>
    Signed-off-by: Nilay Shroff <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
phy: broadcom: ns-usb3: Fix Wvoid-pointer-to-enum-cast warning (again) [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Wed Dec 24 12:55:34 2025 +0100

    phy: broadcom: ns-usb3: Fix Wvoid-pointer-to-enum-cast warning (again)
    
    [ Upstream commit fb21116099bbea1fc59efa9207e63c4be390ab72 ]
    
    "family" is an enum, thus cast of pointer on 64-bit compile test with
    clang W=1 causes:
    
      phy-bcm-ns-usb3.c:206:17: error: cast to smaller integer type 'enum bcm_ns_family' from 'const void *' [-Werror,-Wvoid-pointer-to-enum-cast]
    
    This was already fixed in commit bd6e74a2f0a0 ("phy: broadcom: ns-usb3:
    fix Wvoid-pointer-to-enum-cast warning") but then got bad in commit
    21bf6fc47a1e ("phy: Use device_get_match_data()").
    
    Note that after various discussions the preferred cast is via "unsigned
    long", not "uintptr_t".
    
    Fixes: 21bf6fc47a1e ("phy: Use device_get_match_data()")
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

phy: freescale: imx8m-pcie: assert phy reset during power on [+ + +]
Author: Rafael Beims <[email protected]>
Date:   Tue Dec 23 12:02:54 2025 -0300

    phy: freescale: imx8m-pcie: assert phy reset during power on
    
    commit f2ec4723defbc66a50e0abafa830ae9f8bceb0d7 upstream.
    
    After U-Boot initializes PCIe with "pcie enum", Linux fails to detect
    an NVMe disk on some boot cycles with:
    
      phy phy-32f00000.pcie-phy.0: phy poweron failed --> -110
    
    Discussion with NXP identified that the iMX8MP PCIe PHY PLL may fail to
    lock when re-initialized without a reset cycle [1].
    
    The issue reproduces on 7% of tested hardware platforms, with a 30-40%
    failure rate per affected device across boot cycles.
    
    Insert a reset cycle in the power-on routine to ensure the PHY is
    initialized from a known state.
    
    [1] https://community.nxp.com/t5/i-MX-Processors/iMX8MP-PCIe-initialization-in-U-Boot/m-p/2248437#M242401
    
    Signed-off-by: Rafael Beims <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

phy: fsl-imx8mq-usb: Clear the PCS_TX_SWING_FULL field before using it [+ + +]
Author: Stefano Radaelli <[email protected]>
Date:   Fri Dec 19 17:09:12 2025 +0100

    phy: fsl-imx8mq-usb: Clear the PCS_TX_SWING_FULL field before using it
    
    [ Upstream commit 8becf9179a4b45104a1701010ed666b55bf4b3a6 ]
    
    Clear the PCS_TX_SWING_FULL field mask before setting the new value
    in PHY_CTRL5 register. Without clearing the mask first, the OR operation
    could leave previously set bits, resulting in incorrect register
    configuration.
    
    Fixes: 63c85ad0cd81 ("phy: fsl-imx8mp-usb: add support for phy tuning")
    Suggested-by: Leonid Segal <[email protected]>
    Acked-by: Pierluigi Passaro <[email protected]>
    Signed-off-by: Stefano Radaelli <[email protected]>
    Reviewed-by: Xu Yang <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Reviewed-by: Fabio Estevam <[email protected]>
    Reviewed-by: Ahmad Fatoum <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

phy: fsl-imx8mq-usb: fix typec orientation switch when built as module [+ + +]
Author: Franz Schnyder <[email protected]>
Date:   Wed Nov 26 15:01:33 2025 +0100

    phy: fsl-imx8mq-usb: fix typec orientation switch when built as module
    
    commit 49ccab4bedd4779899246107dc19fb01c5b6fea3 upstream.
    
    Currently, the PHY only registers the typec orientation switch when it
    is built in. If the typec driver is built as a module, the switch
    registration is skipped due to the preprocessor condition, causing
    orientation detection to fail.
    
    With commit
    45fe729be9a6 ("usb: typec: Stub out typec_switch APIs when CONFIG_TYPEC=n")
    the preprocessor condition is not needed anymore and the orientation
    switch is correctly registered for both built-in and module builds.
    
    Fixes: b58f0f86fd61 ("phy: fsl-imx8mq-usb: add tca function driver for imx95")
    Cc: [email protected]
    Suggested-by: Xu Yang <[email protected]>
    Signed-off-by: Franz Schnyder <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Reviewed-by: Xu Yang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

phy: qcom-qusb2: Fix NULL pointer dereference on early suspend [+ + +]
Author: Loic Poulain <[email protected]>
Date:   Fri Dec 19 09:56:40 2025 +0100

    phy: qcom-qusb2: Fix NULL pointer dereference on early suspend
    
    [ Upstream commit 1ca52c0983c34fca506921791202ed5bdafd5306 ]
    
    Enabling runtime PM before attaching the QPHY instance as driver data
    can lead to a NULL pointer dereference in runtime PM callbacks that
    expect valid driver data. There is a small window where the suspend
    callback may run after PM runtime enabling and before runtime forbid.
    This causes a sporadic crash during boot:
    
    ```
    Unable to handle kernel NULL pointer dereference at virtual address 00000000000000a1
    [...]
    CPU: 0 UID: 0 PID: 11 Comm: kworker/0:1 Not tainted 6.16.7+ #116 PREEMPT
    Workqueue: pm pm_runtime_work
    pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    pc : qusb2_phy_runtime_suspend+0x14/0x1e0 [phy_qcom_qusb2]
    lr : pm_generic_runtime_suspend+0x2c/0x44
    [...]
    ```
    
    Attach the QPHY instance as driver data before enabling runtime PM to
    prevent NULL pointer dereference in runtime PM callbacks.
    
    Reorder pm_runtime_enable() and pm_runtime_forbid() to prevent a
    short window where an unnecessary runtime suspend can occur.
    
    Use the devres-managed version to ensure PM runtime is symmetrically
    disabled during driver removal for proper cleanup.
    
    Fixes: 891a96f65ac3 ("phy: qcom-qusb2: Add support for runtime PM")
    Signed-off-by: Loic Poulain <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Abel Vesa <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

phy: rockchip: inno-usb2: Fix a double free bug in rockchip_usb2phy_probe() [+ + +]
Author: Wentao Liang <[email protected]>
Date:   Fri Jan 9 15:46:26 2026 +0000

    phy: rockchip: inno-usb2: Fix a double free bug in rockchip_usb2phy_probe()
    
    commit e07dea3de508cd6950c937cec42de7603190e1ca upstream.
    
    The for_each_available_child_of_node() calls of_node_put() to
    release child_np in each success loop. After breaking from the
    loop with the child_np has been released, the code will jump to
    the put_child label and will call the of_node_put() again if the
    devm_request_threaded_irq() fails. These cause a double free bug.
    
    Fix by returning directly to avoid the duplicate of_node_put().
    
    Fixes: ed2b5a8e6b98 ("phy: phy-rockchip-inno-usb2: support muxed interrupts")
    Cc: [email protected]
    Signed-off-by: Wentao Liang <[email protected]>
    Reviewed-by: Neil Armstrong <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

phy: rockchip: inno-usb2: fix communication disruption in gadget mode [+ + +]
Author: Luca Ceresoli <[email protected]>
Date:   Thu Nov 27 11:26:17 2025 +0100

    phy: rockchip: inno-usb2: fix communication disruption in gadget mode
    
    commit 7d8f725b79e35fa47e42c88716aad8711e1168d8 upstream.
    
    When the OTG USB port is used to power to SoC, configured as peripheral and
    used in gadget mode, communication stops without notice about 6 seconds
    after the gadget is configured and enumerated.
    
    The problem was observed on a Radxa Rock Pi S board, which can only be
    powered by the only USB-C connector. That connector is the only one usable
    in gadget mode. This implies the USB cable is connected from before boot
    and never disconnects while the kernel runs.
    
    The related code flow in the PHY driver code can be summarized as:
    
     * the first time chg_detect_work starts (6 seconds after gadget is
       configured and enumerated)
       -> rockchip_chg_detect_work():
           if chg_state is UNDEFINED:
              property_enable(base, &rphy->phy_cfg->chg_det.opmode, false); [Y]
    
     * rockchip_chg_detect_work() changes state and re-triggers itself a few
       times until it reaches the DETECTED state:
       -> rockchip_chg_detect_work():
           if chg_state is DETECTED:
              property_enable(base, &rphy->phy_cfg->chg_det.opmode, true); [Z]
    
    At [Y] all existing communications stop. E.g. using a CDC serial gadget,
    the /dev/tty* devices are still present on both host and device, but no
    data is transferred anymore. The later call with a 'true' argument at [Z]
    does not restore it.
    
    Due to the lack of documentation, what chg_det.opmode does exactly is not
    clear, however by code inspection it seems reasonable that is disables
    something needed to keep the communication working, and testing proves that
    disabling these lines lets gadget mode keep working. So prevent changes to
    chg_det.opmode when there is a cable connected (VBUS present).
    
    Fixes: 98898f3bc83c ("phy: rockchip-inno-usb2: support otg-port for rk3399")
    Cc: [email protected]
    Closes: https://lore.kernel.org/lkml/20250414185458.7767aabc@booty/
    Signed-off-by: Luca Ceresoli <[email protected]>
    Reviewed-by: Théo Lebrun <[email protected]>
    Link: https://patch.msgid.link/20251127-rk3308-fix-usb-gadget-phy-disconnect-v2-2-dac8a02cd2ca@bootlin.com
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

phy: rockchip: inno-usb2: fix disconnection in gadget mode [+ + +]
Author: Louis Chauvet <[email protected]>
Date:   Thu Nov 27 11:26:16 2025 +0100

    phy: rockchip: inno-usb2: fix disconnection in gadget mode
    
    commit 028e8ca7b20fb7324f3e5db34ba8bd366d9d3acc upstream.
    
    When the OTG USB port is used to power the SoC, configured as peripheral
    and used in gadget mode, there is a disconnection about 6 seconds after the
    gadget is configured and enumerated.
    
    The problem was observed on a Radxa Rock Pi S board, which can only be
    powered by the only USB-C connector. That connector is the only one usable
    in gadget mode. This implies the USB cable is connected from before boot
    and never disconnects while the kernel runs.
    
    The problem happens because of the PHY driver code flow, summarized as:
    
     * UDC start code (triggered via configfs at any time after boot)
       -> phy_init
           -> rockchip_usb2phy_init
               -> schedule_delayed_work(otg_sm_work [A], 6 sec)
       -> phy_power_on
           -> rockchip_usb2phy_power_on
               -> enable clock
               -> rockchip_usb2phy_reset
    
     * Now the gadget interface is up and running.
    
     * 6 seconds later otg_sm_work starts [A]
       -> rockchip_usb2phy_otg_sm_work():
           if (B_IDLE state && VBUS present && ...):
               schedule_delayed_work(&rport->chg_work [B], 0);
    
     * immediately the chg_detect_work starts [B]
       -> rockchip_chg_detect_work():
           if chg_state is UNDEFINED:
               if (!rport->suspended):
                   rockchip_usb2phy_power_off() <--- [X]
    
    At [X], the PHY is powered off, causing a disconnection. This quickly
    triggers a new connection and following re-enumeration, but any connection
    that had been established during the 6 seconds is broken.
    
    The code already checks for !rport->suspended (which, somewhat
    counter-intuitively, means the PHY is powered on), so add a guard for VBUS
    as well to avoid a disconnection when a cable is connected.
    
    Fixes: 98898f3bc83c ("phy: rockchip-inno-usb2: support otg-port for rk3399")
    Cc: [email protected]
    Closes: https://lore.kernel.org/lkml/20250414185458.7767aabc@booty/
    Signed-off-by: Louis Chauvet <[email protected]>
    Co-developed-by: Luca Ceresoli <[email protected]>
    Signed-off-by: Luca Ceresoli <[email protected]>
    Reviewed-by: Théo Lebrun <[email protected]>
    Link: https://patch.msgid.link/20251127-rk3308-fix-usb-gadget-phy-disconnect-v2-1-dac8a02cd2ca@bootlin.com
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

phy: stm32-usphyc: Fix off by one in probe() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Tue Dec 9 09:53:36 2025 +0300

    phy: stm32-usphyc: Fix off by one in probe()
    
    [ Upstream commit cabd25b57216ddc132efbcc31f972baa03aad15a ]
    
    The "index" variable is used as an index into the usbphyc->phys[] array
    which has usbphyc->nphys elements.  So if it is equal to usbphyc->nphys
    then it is one element out of bounds.  The "index" comes from the
    device tree so it's data that we trust and it's unlikely to be wrong,
    however it's obviously still worth fixing the bug.  Change the > to >=.
    
    Fixes: 94c358da3a05 ("phy: stm32: add support for STM32 USB PHY Controller (USBPHYC)")
    Signed-off-by: Dan Carpenter <[email protected]>
    Reviewed-by: Amelie Delaunay <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

phy: tegra: xusb: Explicitly configure HS_DISCON_LEVEL to 0x7 [+ + +]
Author: Wayne Chang <[email protected]>
Date:   Fri Dec 12 11:21:16 2025 +0800

    phy: tegra: xusb: Explicitly configure HS_DISCON_LEVEL to 0x7
    
    commit b246caa68037aa495390a60d080acaeb84f45fff upstream.
    
    The USB2 Bias Pad Control register manages analog parameters for signal
    detection. Previously, the HS_DISCON_LEVEL relied on hardware reset
    values, which may lead to the detection failure.
    
    Explicitly configure HS_DISCON_LEVEL to 0x7. This ensures the disconnect
    threshold is sufficient to guarantee reliable detection.
    
    Fixes: bbf711682cd5 ("phy: tegra: xusb: Add Tegra186 support")
    Cc: [email protected]
    Signed-off-by: Wayne Chang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

phy: ti: da8xx-usb: Handle devm_pm_runtime_enable() errors [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Mon Nov 24 18:57:34 2025 +0800

    phy: ti: da8xx-usb: Handle devm_pm_runtime_enable() errors
    
    [ Upstream commit 08aa19de72110df8ac10c9e67349dd884eeed41d ]
    
    devm_pm_runtime_enable() can fail due to memory allocation. The current
    code ignores its return value after calling pm_runtime_set_active(),
    leaving the device in an inconsistent state if runtime PM initialization
    fails.
    
    Check the return value of devm_pm_runtime_enable() and return on
    failure. Also move the declaration of 'ret' to the function scope
    to support this check.
    
    Fixes: ee8e41b5044f ("phy: ti: phy-da8xx-usb: Add runtime PM support")
    Suggested-by: Neil Armstrong <[email protected]>
    Signed-off-by: Haotian Zhang <[email protected]>
    Reviewed-by: Neil Armstrong <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

phy: ti: gmii-sel: fix regmap leak on probe failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Thu Nov 27 14:48:34 2025 +0100

    phy: ti: gmii-sel: fix regmap leak on probe failure
    
    commit 4914d67da947031d6f645c81c74f7879e0844d5d upstream.
    
    The mmio regmap that may be allocated during probe is never freed.
    
    Switch to using the device managed allocator so that the regmap is
    released on probe failures (e.g. probe deferral) and on driver unbind.
    
    Fixes: 5ab90f40121a ("phy: ti: gmii-sel: Do not use syscon helper to build regmap")
    Cc: [email protected]      # 6.14
    Cc: Andrew Davis <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Acked-by: Andrew Davis <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
PM: EM: Fix incorrect description of the cost field in struct em_perf_state [+ + +]
Author: Yaxiong Tian <[email protected]>
Date:   Tue Dec 30 14:15:34 2025 +0800

    PM: EM: Fix incorrect description of the cost field in struct em_perf_state
    
    [ Upstream commit 54b603f2db6b95495bc33a8f2bde80f044baff9a ]
    
    Due to commit 1b600da51073 ("PM: EM: Optimize em_cpu_energy() and remove
    division"), the logic for energy consumption calculation has been modified.
    The actual calculation of cost is 10 * power * max_frequency / frequency
    instead of power * max_frequency / frequency.
    
    Therefore, the comment for cost has been updated to reflect the correct
    content.
    
    Fixes: 1b600da51073 ("PM: EM: Optimize em_cpu_energy() and remove division")
    Signed-off-by: Yaxiong Tian <[email protected]>
    Reviewed-by: Lukasz Luba <[email protected]>
    [ rjw: Added Fixes: tag ]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
pnfs/blocklayout: Fix memory leak in bl_parse_scsi() [+ + +]
Author: Zilin Guan <[email protected]>
Date:   Thu Dec 25 08:45:26 2025 +0000

    pnfs/blocklayout: Fix memory leak in bl_parse_scsi()
    
    [ Upstream commit 5a74af51c3a6f4cd22c128b0c1c019f68fa90011 ]
    
    In bl_parse_scsi(), if the block device length is zero, the function
    returns immediately without releasing the file reference obtained via
    bl_open_path(), leading to a memory leak.
    
    Fix this by jumping to the out_blkdev_put label to ensure the file
    reference is properly released.
    
    Fixes: d76c769c8db4c ("pnfs/blocklayout: Don't add zero-length pnfs_block_dev")
    Signed-off-by: Zilin Guan <[email protected]>
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
pnfs/flexfiles: Fix memory leak in nfs4_ff_alloc_deviceid_node() [+ + +]
Author: Zilin Guan <[email protected]>
Date:   Thu Dec 25 07:41:03 2025 +0000

    pnfs/flexfiles: Fix memory leak in nfs4_ff_alloc_deviceid_node()
    
    [ Upstream commit 0c728083654f0066f5e10a1d2b0bd0907af19a58 ]
    
    In nfs4_ff_alloc_deviceid_node(), if the allocation for ds_versions fails,
    the function jumps to the out_scratch label without freeing the already
    allocated dsaddrs list, leading to a memory leak.
    
    Fix this by jumping to the out_err_drain_dsaddrs label, which properly
    frees the dsaddrs list before cleaning up other resources.
    
    Fixes: d67ae825a59d6 ("pnfs/flexfiles: Add the FlexFile Layout Driver")
    Signed-off-by: Zilin Guan <[email protected]>
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
pNFS: Fix a deadlock when returning a delegation during open() [+ + +]
Author: Trond Myklebust <[email protected]>
Date:   Mon Dec 8 14:45:00 2025 -0500

    pNFS: Fix a deadlock when returning a delegation during open()
    
    [ Upstream commit 857bf9056291a16785ae3be1d291026b2437fc48 ]
    
    Ben Coddington reports seeing a hang in the following stack trace:
      0 [ffffd0b50e1774e0] __schedule at ffffffff9ca05415
      1 [ffffd0b50e177548] schedule at ffffffff9ca05717
      2 [ffffd0b50e177558] bit_wait at ffffffff9ca061e1
      3 [ffffd0b50e177568] __wait_on_bit at ffffffff9ca05cfb
      4 [ffffd0b50e1775c8] out_of_line_wait_on_bit at ffffffff9ca05ea5
      5 [ffffd0b50e177618] pnfs_roc at ffffffffc154207b [nfsv4]
      6 [ffffd0b50e1776b8] _nfs4_proc_delegreturn at ffffffffc1506586 [nfsv4]
      7 [ffffd0b50e177788] nfs4_proc_delegreturn at ffffffffc1507480 [nfsv4]
      8 [ffffd0b50e1777f8] nfs_do_return_delegation at ffffffffc1523e41 [nfsv4]
      9 [ffffd0b50e177838] nfs_inode_set_delegation at ffffffffc1524a75 [nfsv4]
     10 [ffffd0b50e177888] nfs4_process_delegation at ffffffffc14f41dd [nfsv4]
     11 [ffffd0b50e1778a0] _nfs4_opendata_to_nfs4_state at ffffffffc1503edf [nfsv4]
     12 [ffffd0b50e1778c0] _nfs4_open_and_get_state at ffffffffc1504e56 [nfsv4]
     13 [ffffd0b50e177978] _nfs4_do_open at ffffffffc15051b8 [nfsv4]
     14 [ffffd0b50e1779f8] nfs4_do_open at ffffffffc150559c [nfsv4]
     15 [ffffd0b50e177a80] nfs4_atomic_open at ffffffffc15057fb [nfsv4]
     16 [ffffd0b50e177ad0] nfs4_file_open at ffffffffc15219be [nfsv4]
     17 [ffffd0b50e177b78] do_dentry_open at ffffffff9c09e6ea
     18 [ffffd0b50e177ba8] vfs_open at ffffffff9c0a082e
     19 [ffffd0b50e177bd0] dentry_open at ffffffff9c0a0935
    
    The issue is that the delegreturn is being asked to wait for a layout
    return that cannot complete because a state recovery was initiated. The
    state recovery cannot complete until the open() finishes processing the
    delegations it was given.
    
    The solution is to propagate the existing flags that indicate a
    non-blocking call to the function pnfs_roc(), so that it knows not to
    wait in this situation.
    
    Reported-by: Benjamin Coddington <[email protected]>
    Fixes: 29ade5db1293 ("pNFS: Wait on outstanding layoutreturns to complete in pnfs_roc()")
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "functionfs: fix the open/removal races" [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Wed Jan 21 18:21:16 2026 +0100

    Revert "functionfs: fix the open/removal races"
    
    This reverts commit b49c766856fb5901490de577e046149ebf15e39d which is
    commit e5bf5ee266633cb18fff6f98f0b7d59a62819eee upstream.
    
    It has been reported to cause test problems in Android devices.  As the
    other functionfs changes were not also backported at the same time,
    something is out of sync.  So just revert this one for now and it can
    come back in the future as a patch series if it is tested.
    
    Cc: Al Viro <[email protected]>
    Cc: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "gfs2: Fix use of bio_chain" [+ + +]
Author: Andreas Gruenbacher <[email protected]>
Date:   Mon Jan 12 11:47:35 2026 +0100

    Revert "gfs2: Fix use of bio_chain"
    
    commit 469d71512d135907bf5ea0972dfab8c420f57848 upstream.
    
    This reverts commit 8a157e0a0aa5143b5d94201508c0ca1bb8cfb941.
    
    That commit incorrectly assumed that the bio_chain() arguments were
    swapped in gfs2.  However, gfs2 intentionally constructs bio chains so
    that the first bio's bi_end_io callback is invoked when all bios in the
    chain have completed, unlike bio chains where the last bio's callback is
    invoked.
    
    Fixes: 8a157e0a0aa5 ("gfs2: Fix use of bio_chain")
    Cc: [email protected]
    Signed-off-by: Andreas Gruenbacher <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
rust: bitops: fix missing _find_* functions on 32-bit ARM [+ + +]
Author: Alice Ryhl <[email protected]>
Date:   Mon Jan 5 10:44:06 2026 +0000

    rust: bitops: fix missing _find_* functions on 32-bit ARM
    
    commit 6a069876eb1402478900ee0eb7d7fe276bb1f4e3 upstream.
    
    On 32-bit ARM, you may encounter linker errors such as this one:
    
            ld.lld: error: undefined symbol: _find_next_zero_bit
            >>> referenced by rust_binder_main.43196037ba7bcee1-cgu.0
            >>>               drivers/android/binder/rust_binder_main.o:(<rust_binder_main::process::Process>::insert_or_update_handle) in archive vmlinux.a
            >>> referenced by rust_binder_main.43196037ba7bcee1-cgu.0
            >>>               drivers/android/binder/rust_binder_main.o:(<rust_binder_main::process::Process>::insert_or_update_handle) in archive vmlinux.a
    
    This error occurs because even though the functions are declared by
    include/linux/find.h, the definition is #ifdef'd out on 32-bit ARM. This
    is because arch/arm/include/asm/bitops.h contains:
    
            #define find_first_zero_bit(p,sz)       _find_first_zero_bit_le(p,sz)
            #define find_next_zero_bit(p,sz,off)    _find_next_zero_bit_le(p,sz,off)
            #define find_first_bit(p,sz)            _find_first_bit_le(p,sz)
            #define find_next_bit(p,sz,off)         _find_next_bit_le(p,sz,off)
    
    And the underscore-prefixed function is conditional on #ifndef of the
    non-underscore-prefixed name, but the declaration in find.h is *not*
    conditional on that #ifndef.
    
    To fix the linker error, we ensure that the symbols in question exist
    when compiling Rust code. We do this by defining them in rust/helpers/
    whenever the normal definition is #ifndef'd out.
    
    Note that these helpers are somewhat unusual in that they do not have
    the rust_helper_ prefix that most helpers have. Adding the rust_helper_
    prefix does not compile, as 'bindings::_find_next_zero_bit()' will
    result in a call to a symbol called _find_next_zero_bit as defined by
    include/linux/find.h rather than a symbol with the rust_helper_ prefix.
    This is because when a symbol is present in both include/ and
    rust/helpers/, the one from include/ wins under the assumption that the
    current configuration is one where that helper is unnecessary. This
    heuristic fails for _find_next_zero_bit() because the header file always
    declares it even if the symbol does not exist.
    
    The functions still use the __rust_helper annotation. This lets the
    wrapper function be inlined into Rust code even if full kernel LTO is
    not used once the patch series for that feature lands.
    
    Yury: arches are free to implement they own find_bit() functions. Most
    rely on generic implementation, but arm32 and m86k - not; so they require
    custom handling. Alice confirmed it fixes the build for both.
    
    Cc: [email protected]
    Fixes: 6cf93a9ed39e ("rust: add bindings for bitops.h")
    Reported-by: Andreas Hindborg <[email protected]>
    Closes: https://rust-for-linux.zulipchat.com/#narrow/channel/x/topic/x/near/561677301
    Tested-by: Andreas Hindborg <[email protected]>
    Reviewed-by: Dirk Behme <[email protected]>
    Signed-off-by: Alice Ryhl <[email protected]>
    Signed-off-by: Yury Norov (NVIDIA) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sched/deadline: Avoid double update_rq_clock() [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Tue Jan 13 12:57:14 2026 +0100

    sched/deadline: Avoid double update_rq_clock()
    
    [ Upstream commit 4de9ff76067b40c3660df73efaea57389e62ea7a ]
    
    When setup_new_dl_entity() is called from enqueue_task_dl() ->
    enqueue_dl_entity(), the rq-clock should already be updated, and
    calling update_rq_clock() again is not right.
    
    Move the update_rq_clock() to the one other caller of
    setup_new_dl_entity(): sched_init_dl_server().
    
    Fixes: 9f239df55546 ("sched/deadline: Initialize dl_servers after SMP")
    Reported-by: Pierre Gondois <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Tested-by: Pierre Gondois <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
sched: Deadline has dynamic priority [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Thu Jan 15 09:25:37 2026 +0100

    sched: Deadline has dynamic priority
    
    [ Upstream commit e008ec6c7904ed99d3b2cb634b6545b008a99288 ]
    
    While FIFO/RR have static priority, DEADLINE is a dynamic priority
    scheme. Notably it has static priority -1. Do not assume the priority
    doesn't change for deadline tasks just because the static priority
    doesn't change.
    
    This ensures DL always sees {DE,EN}QUEUE_MOVE where appropriate.
    
    Fixes: ff77e4685359 ("sched/rt: Fix PI handling vs. sched_setscheduler()")
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Tested-by: Pierre Gondois <[email protected]>
    Tested-by: Juri Lelli <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
scsi: core: Fix error handler encryption support [+ + +]
Author: Brian Kao <[email protected]>
Date:   Thu Dec 18 03:17:23 2025 +0000

    scsi: core: Fix error handler encryption support
    
    commit 9a49157deeb23581fc5c8189b486340d7343264a upstream.
    
    Some low-level drivers (LLD) access block layer crypto fields, such as
    rq->crypt_keyslot and rq->crypt_ctx within `struct request`, to
    configure hardware for inline encryption.  However, SCSI Error Handling
    (EH) commands (e.g., TEST UNIT READY, START STOP UNIT) should not
    involve any encryption setup.
    
    To prevent drivers from erroneously applying crypto settings during EH,
    this patch saves the original values of rq->crypt_keyslot and
    rq->crypt_ctx before an EH command is prepared via scsi_eh_prep_cmnd().
    These fields in the 'struct request' are then set to NULL.  The original
    values are restored in scsi_eh_restore_cmnd() after the EH command
    completes.
    
    This ensures that the block layer crypto context does not leak into EH
    command execution.
    
    Signed-off-by: Brian Kao <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: [email protected]
    Reviewed-by: Bart Van Assche <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
selftests/bpf: Fix selftest verif_scale_strobemeta failure with llvm22 [+ + +]
Author: Yonghong Song <[email protected]>
Date:   Mon Oct 13 22:16:39 2025 -0700

    selftests/bpf: Fix selftest verif_scale_strobemeta failure with llvm22
    
    commit 4f8543b5f20f851cedbb23f8eade159871d84e2a upstream.
    
    With latest llvm22, I hit the verif_scale_strobemeta selftest failure
    below:
      $ ./test_progs -n 618
      libbpf: prog 'on_event': BPF program load failed: -E2BIG
      libbpf: prog 'on_event': -- BEGIN PROG LOAD LOG --
      BPF program is too large. Processed 1000001 insn
      verification time 7019091 usec
      stack depth 488
      processed 1000001 insns (limit 1000000) max_states_per_insn 28 total_states 33927 peak_states 12813 mark_read 0
      -- END PROG LOAD LOG --
      libbpf: prog 'on_event': failed to load: -E2BIG
      libbpf: failed to load object 'strobemeta.bpf.o'
      scale_test:FAIL:expect_success unexpected error: -7 (errno 7)
      #618     verif_scale_strobemeta:FAIL
    
    But if I increase the verificaiton insn limit from 1M to 10M, the above
    test_progs run actually will succeed. The below is the result from veristat:
      $ ./veristat strobemeta.bpf.o
      Processing 'strobemeta.bpf.o'...
      File              Program   Verdict  Duration (us)    Insns  States  Program size  Jited size
      ----------------  --------  -------  -------------  -------  ------  ------------  ----------
      strobemeta.bpf.o  on_event  success       90250893  9777685  358230         15954       80794
      ----------------  --------  -------  -------------  -------  ------  ------------  ----------
      Done. Processed 1 files, 0 programs. Skipped 1 files, 0 programs.
    
    Further debugging shows the llvm commit [1] is responsible for the verificaiton
    failure as it tries to convert certain switch statement to if-condition. Such
    change may cause different transformation compared to original switch statement.
    
    In bpf program strobemeta.c case, the initial llvm ir for read_int_var() function is
      define internal void @read_int_var(ptr noundef %0, i64 noundef %1, ptr noundef %2,
          ptr noundef %3, ptr noundef %4) #2 !dbg !535 {
        %6 = alloca ptr, align 8
        %7 = alloca i64, align 8
        %8 = alloca ptr, align 8
        %9 = alloca ptr, align 8
        %10 = alloca ptr, align 8
        %11 = alloca ptr, align 8
        %12 = alloca i32, align 4
        ...
        %20 = icmp ne ptr %19, null, !dbg !561
        br i1 %20, label %22, label %21, !dbg !562
    
      21:                                               ; preds = %5
        store i32 1, ptr %12, align 4
        br label %48, !dbg !563
    
      22:
        %23 = load ptr, ptr %9, align 8, !dbg !564
        ...
    
      47:                                               ; preds = %38, %22
        store i32 0, ptr %12, align 4, !dbg !588
        br label %48, !dbg !588
    
      48:                                               ; preds = %47, %21
        call void @llvm.lifetime.end.p0(ptr %11) #4, !dbg !588
        %49 = load i32, ptr %12, align 4
        switch i32 %49, label %51 [
          i32 0, label %50
          i32 1, label %50
        ]
    
      50:                                               ; preds = %48, %48
        ret void, !dbg !589
    
      51:                                               ; preds = %48
        unreachable
      }
    
    Note that the above 'switch' statement is added by clang frontend.
    Without [1], the switch statement will survive until SelectionDag,
    so the switch statement acts like a 'barrier' and prevents some
    transformation involved with both 'before' and 'after' the switch statement.
    
    But with [1], the switch statement will be removed during middle end
    optimization and later middle end passes (esp. after inlining) have more
    freedom to reorder the code.
    
    The following is the related source code:
    
      static void *calc_location(struct strobe_value_loc *loc, void *tls_base):
            bpf_probe_read_user(&tls_ptr, sizeof(void *), dtv);
            /* if pointer has (void *)-1 value, then TLS wasn't initialized yet */
            return tls_ptr && tls_ptr != (void *)-1
                    ? tls_ptr + tls_index.offset
                    : NULL;
    
      In read_int_var() func, we have:
            void *location = calc_location(&cfg->int_locs[idx], tls_base);
            if (!location)
                    return;
    
            bpf_probe_read_user(value, sizeof(struct strobe_value_generic), location);
            ...
    
    The static func calc_location() is called inside read_int_var(). The asm code
    without [1]:
         77: .123....89 (85) call bpf_probe_read_user#112
         78: ........89 (79) r1 = *(u64 *)(r10 -368)
         79: .1......89 (79) r2 = *(u64 *)(r10 -8)
         80: .12.....89 (bf) r3 = r2
         81: .123....89 (0f) r3 += r1
         82: ..23....89 (07) r2 += 1
         83: ..23....89 (79) r4 = *(u64 *)(r10 -464)
         84: ..234...89 (a5) if r2 < 0x2 goto pc+13
         85: ...34...89 (15) if r3 == 0x0 goto pc+12
         86: ...3....89 (bf) r1 = r10
         87: .1.3....89 (07) r1 += -400
         88: .1.3....89 (b4) w2 = 16
    In this case, 'r2 < 0x2' and 'r3 == 0x0' go to null 'locaiton' place,
    so the verifier actually prefers to do verification first at 'r1 = r10' etc.
    
    The asm code with [1]:
        119: .123....89 (85) call bpf_probe_read_user#112
        120: ........89 (79) r1 = *(u64 *)(r10 -368)
        121: .1......89 (79) r2 = *(u64 *)(r10 -8)
        122: .12.....89 (bf) r3 = r2
        123: .123....89 (0f) r3 += r1
        124: ..23....89 (07) r2 += -1
        125: ..23....89 (a5) if r2 < 0xfffffffe goto pc+6
        126: ........89 (05) goto pc+17
        ...
        144: ........89 (b4) w1 = 0
        145: .1......89 (6b) *(u16 *)(r8 +80) = r1
    In this case, if 'r2 < 0xfffffffe' is true, the control will go to
    non-null 'location' branch, so 'goto pc+17' will actually go to
    null 'location' branch. This seems causing tremendous amount of
    verificaiton state.
    
    To fix the issue, rewrite the following code
      return tls_ptr && tls_ptr != (void *)-1
                    ? tls_ptr + tls_index.offset
                    : NULL;
    to if/then statement and hopefully these explicit if/then statements
    are sticky during middle-end optimizations.
    
    Test with llvm20 and llvm21 as well and all strobemeta related selftests
    are passed.
    
      [1] https://github.com/llvm/llvm-project/pull/161000
    
    Signed-off-by: Yonghong Song <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Shung-Hsi Yu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
selftests/landlock: Fix TCP bind(AF_UNSPEC) test case [+ + +]
Author: Matthieu Buffet <[email protected]>
Date:   Mon Oct 27 20:07:24 2025 +0100

    selftests/landlock: Fix TCP bind(AF_UNSPEC) test case
    
    [ Upstream commit bd09d9a05cf04028f639e209b416bacaeffd4909 ]
    
    The nominal error code for bind(AF_UNSPEC) on an IPv6 socket
    is -EAFNOSUPPORT, not -EINVAL. -EINVAL is only returned when
    the supplied address struct is too short, which happens to be
    the case in current selftests because they treat AF_UNSPEC
    like IPv4 sockets do: as an alias for AF_INET (which is a
    16-byte struct instead of the 24 bytes required by IPv6
    sockets).
    
    Make the union large enough for any address (by adding struct
    sockaddr_storage to the union), and make AF_UNSPEC addresses
    large enough for any family.
    
    Test for -EAFNOSUPPORT instead, and add a dedicated test case
    for truncated inputs with -EINVAL.
    
    Fixes: a549d055a22e ("selftests/landlock: Add network tests")
    Signed-off-by: Matthieu Buffet <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mickaël Salaün <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

selftests/landlock: Properly close a file descriptor [+ + +]
Author: Günther Noack <[email protected]>
Date:   Thu Jan 1 14:40:58 2026 +0100

    selftests/landlock: Properly close a file descriptor
    
    [ Upstream commit 15e8d739fda1084d81f7d3813e9600eba6e0f134 ]
    
    Add a missing close(srv_fd) call, and use EXPECT_EQ() to check the
    result.
    
    Signed-off-by: Günther Noack <[email protected]>
    Fixes: f83d51a5bdfe ("selftests/landlock: Check IOCTL restrictions for named UNIX domain sockets")
    Link: https://lore.kernel.org/r/[email protected]
    [mic: Use EXPECT_EQ() and update commit message]
    Signed-off-by: Mickaël Salaün <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

selftests/landlock: Remove invalid unix socket bind() [+ + +]
Author: Matthieu Buffet <[email protected]>
Date:   Mon Dec 1 01:36:31 2025 +0100

    selftests/landlock: Remove invalid unix socket bind()
    
    [ Upstream commit e1a57c33590a50a6639798e60a597af4a23b0340 ]
    
    Remove bind() call on a client socket that doesn't make sense.
    Since strlen(cli_un.sun_path) returns a random value depending on stack
    garbage, that many uninitialized bytes are read from the stack as an
    unix socket address. This creates random test failures due to the bind
    address being invalid or already in use if the same stack value comes up
    twice.
    
    Fixes: f83d51a5bdfe ("selftests/landlock: Check IOCTL restrictions for named UNIX domain sockets")
    Signed-off-by: Matthieu Buffet <[email protected]>
    Reviewed-by: Günther Noack <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mickaël Salaün <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
selftests: drv-net: fix RPS mask handling for high CPU numbers [+ + +]
Author: Gal Pressman <[email protected]>
Date:   Mon Jan 12 19:37:15 2026 +0200

    selftests: drv-net: fix RPS mask handling for high CPU numbers
    
    [ Upstream commit cf055f8c000445aa688c53a706ef4f580818eedb ]
    
    The RPS bitmask bounds check uses ~(RPS_MAX_CPUS - 1) which equals ~15 =
    0xfff0, only allowing CPUs 0-3.
    
    Change the mask to ~((1UL << RPS_MAX_CPUS) - 1) = ~0xffff to allow CPUs
    0-15.
    
    Fixes: 5ebfb4cc3048 ("selftests/net: toeplitz test")
    Reviewed-by: Nimrod Oren <[email protected]>
    Signed-off-by: Gal Pressman <[email protected]>
    Reviewed-by: Willem de Bruijn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

selftests: kvm: replace numbered sync points with actions [+ + +]
Author: Paolo Bonzini <[email protected]>
Date:   Wed Dec 24 00:44:49 2025 +0100

    selftests: kvm: replace numbered sync points with actions
    
    commit a1025dcd377ef92d9a09af03b70ce80be281ee22 upstream.
    
    Rework the guest=>host syncs in the AMX test to use named actions instead
    of arbitrary, incrementing numbers.  The "stage" of the test has no real
    meaning, what matters is what action the test wants the host to perform.
    The incrementing numbers are somewhat helpful for triaging failures, but
    fully debugging failures almost always requires a much deeper dive into
    the test (and KVM).
    
    Using named actions not only makes it easier to extend the test without
    having to shift all sync point numbers, it makes the code easier to read.
    
    [Commit message by Sean Christopherson]
    
    Cc: [email protected]
    Signed-off-by: Paolo Bonzini <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

selftests: kvm: try getting XFD and XSAVE state out of sync [+ + +]
Author: Paolo Bonzini <[email protected]>
Date:   Wed Dec 31 16:47:26 2025 +0100

    selftests: kvm: try getting XFD and XSAVE state out of sync
    
    commit 0383a8edef396cf0a6884b0be81d62bde60737b0 upstream.
    
    The host is allowed to set FPU state that includes a disabled
    xstate component.  Check that this does not cause bad effects.
    
    Cc: [email protected]
    Signed-off-by: Paolo Bonzini <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
soundwire: bus: fix off-by-one when allocating slave IDs [+ + +]
Author: Harshit Mogalapalli <[email protected]>
Date:   Sat Jan 10 12:19:58 2026 -0800

    soundwire: bus: fix off-by-one when allocating slave IDs
    
    [ Upstream commit 12d4fd9a657174496677cff2841315090f1c11fc ]
    
    ida_alloc_max() interprets its max argument as inclusive.
    
    Using SDW_FW_MAX_DEVICES(16) therefore allows an ID of 16 to be
    allocated, but the IRQ domain created for the bus is sized for IDs
    0-15.  If 16 is returned, irq_create_mapping() fails and the driver
    ends up with an invalid IRQ mapping.
    
    Limit the allocation to 0-15 by passing SDW_FW_MAX_DEVICES - 1.
    
    Reported-by: kernel test robot <[email protected]>
    Reported-by: Dan Carpenter <[email protected]>
    Closes: https://lore.kernel.org/r/[email protected]/
    Fixes: aab12022b076 ("soundwire: bus: Add internal slave ID and use for IRQs")
    Signed-off-by: Harshit Mogalapalli <[email protected]>
    Reviewed-by: Charles Keepax <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tcpm: allow looking for role_sw device in the main node [+ + +]
Author: Arnaud Ferraris <[email protected]>
Date:   Mon Jan 5 09:43:23 2026 +0100

    tcpm: allow looking for role_sw device in the main node
    
    commit 1366cd228b0c67b60a2c0c26ef37fe9f7cfedb7f upstream.
    
    If ports are defined in the tcpc main node, fwnode_usb_role_switch_get()
    returns an error, meaning usb_role_switch_get() (which would succeed)
    never gets a chance to run as port->role_sw isn't NULL, causing a
    regression on devices where this is the case.
    
    Fix this by turning the NULL check into IS_ERR_OR_NULL(), so
    usb_role_switch_get() can actually run and the device get properly probed.
    
    Fixes: 2d8713f807a4 ("tcpm: switch check for role_sw device with fw_node")
    Cc: stable <[email protected]>
    Reviewed-by: Heikki Krogerus <[email protected]>
    Reviewed-by: Dragan Simic <[email protected]>
    Signed-off-by: Arnaud Ferraris <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
textsearch: describe @list member in ts_ops search [+ + +]
Author: Bagas Sanjaya <[email protected]>
Date:   Fri Dec 19 08:40:05 2025 +0700

    textsearch: describe @list member in ts_ops search
    
    [ Upstream commit f26528478bb102c28e7ac0cbfc8ec8185afdafc7 ]
    
    Sphinx reports kernel-doc warning:
    
    WARNING: ./include/linux/textsearch.h:49 struct member 'list' not described in 'ts_ops'
    
    Describe @list member to fix it.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 2de4ff7bd658 ("[LIB]: Textsearch infrastructure.")
    Signed-off-by: Bagas Sanjaya <[email protected]>
    Cc: Thomas Graf <[email protected]>
    Cc: "David S. Miller" <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tools/testing/selftests: add forked (un)/faulted VMA merge tests [+ + +]
Author: Lorenzo Stoakes <[email protected]>
Date:   Mon Jan 5 20:11:50 2026 +0000

    tools/testing/selftests: add forked (un)/faulted VMA merge tests
    
    commit fb39444732f02c32a8312c168d97e33d872c14d3 upstream.
    
    Now we correctly handle forked faulted/unfaulted merge on mremap(),
    exhaustively assert that we handle this correctly.
    
    Do this in the less duplicative way by adding a new merge_with_fork
    fixture and forked/unforked variants, and abstract the forking logic as
    necessary to avoid code duplication with this also.
    
    Link: https://lkml.kernel.org/r/1daf76d89fdb9d96f38a6a0152d8f3c2e9e30ac7.1767638272.git.lorenzo.stoakes@oracle.com
    Fixes: 879bca0a2c4f ("mm/vma: fix incorrectly disallowed anonymous VMA merges")
    Signed-off-by: Lorenzo Stoakes <[email protected]>
    Cc: David Hildenbrand (Red Hat) <[email protected]>
    Cc: Jann Horn <[email protected]>
    Cc: Jeongjun Park <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Cc: Pedro Falcato <[email protected]>
    Cc: Rik van Riel <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: Yeoreum Yun <[email protected]>
    Cc: Harry Yoo <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

tools/testing/selftests: add tests for !tgt, src mremap() merges [+ + +]
Author: Lorenzo Stoakes <[email protected]>
Date:   Mon Jan 5 20:11:48 2026 +0000

    tools/testing/selftests: add tests for !tgt, src mremap() merges
    
    commit 0ace8f2db6b3b4b0677e559d1a7ab7fd625d61ec upstream.
    
    Test that mremap()'ing a VMA into a position such that the target VMA on
    merge is unfaulted and the source faulted is correctly performed.
    
    We cover 4 cases:
    
        1. Previous VMA unfaulted:
    
                      copied -----|
                                  v
                |-----------|.............|
                | unfaulted |(faulted VMA)|
                |-----------|.............|
                     prev
    
        target = prev, expand prev to cover.
    
        2. Next VMA unfaulted:
    
                      copied -----|
                                  v
                            |.............|-----------|
                            |(faulted VMA)| unfaulted |
                            |.............|-----------|
                                              next
    
        target = next, expand next to cover.
    
        3. Both adjacent VMAs unfaulted:
    
                      copied -----|
                                  v
                |-----------|.............|-----------|
                | unfaulted |(faulted VMA)| unfaulted |
                |-----------|.............|-----------|
                     prev                      next
    
        target = prev, expand prev to cover.
    
        4. prev unfaulted, next faulted:
    
                      copied -----|
                                  v
                |-----------|.............|-----------|
                | unfaulted |(faulted VMA)|  faulted  |
                |-----------|.............|-----------|
                     prev                      next
    
        target = prev, expand prev to cover. Essentially equivalent to 3, but
        with additional requirement that next's anon_vma is the same as the
        copied VMA's.
    
    Each of these are performed with MREMAP_DONTUNMAP set, which will cause a
    KASAN assert for UAF or an assert on zero refcount anon_vma if a bug
    exists with correctly propagating anon_vma state in each scenario.
    
    Link: https://lkml.kernel.org/r/f903af2930c7c2c6e0948c886b58d0f42d8e8ba3.1767638272.git.lorenzo.stoakes@oracle.com
    Fixes: 879bca0a2c4f ("mm/vma: fix incorrectly disallowed anonymous VMA merges")
    Signed-off-by: Lorenzo Stoakes <[email protected]>
    Cc: David Hildenbrand (Red Hat) <[email protected]>
    Cc: Jann Horn <[email protected]>
    Cc: Jeongjun Park <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Cc: Pedro Falcato <[email protected]>
    Cc: Rik van Riel <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: Yeoreum Yun <[email protected]>
    Cc: Harry Yoo <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

tools/testing/selftests: fix gup_longterm for unknown fs [+ + +]
Author: Lorenzo Stoakes <[email protected]>
Date:   Tue Jan 6 15:45:47 2026 +0000

    tools/testing/selftests: fix gup_longterm for unknown fs
    
    commit 21c68ad1d9771d331198cc73cbf6e908d7915f35 upstream.
    
    Commit 66bce7afbaca ("selftests/mm: fix test result reporting in
    gup_longterm") introduced a small bug causing unknown filesystems to
    always result in a test failure.
    
    This is because do_test() was updated to use a common reporting path, but
    this case appears to have been missed.
    
    This is problematic for e.g.  virtme-ng which uses an overlayfs file
    system, causing gup_longterm to appear to fail each time due to a test
    count mismatch:
    
            # Planned tests != run tests (50 != 46)
            # Totals: pass:24 fail:0 xfail:0 xpass:0 skip:22 error:0
    
    The fix is to simply change the return into a break.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 66bce7afbaca ("selftests/mm: fix test result reporting in gup_longterm")
    Signed-off-by: Lorenzo Stoakes <[email protected]>
    Reviewed-by: David Hildenbrand (Red Hat) <[email protected]>
    Cc: Jason Gunthorpe <[email protected]>
    Cc: John Hubbard <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Cc: "Liam R. Howlett" <[email protected]>
    Cc: Mark Brown <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Mike Rapoport <[email protected]>
    Cc: Peter Xu <[email protected]>
    Cc: Shuah Khan <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor [+ + +]
Author: Johannes Brüderl <[email protected]>
Date:   Sun Dec 7 10:02:20 2025 +0100

    usb: core: add USB_QUIRK_NO_BOS for devices that hang on BOS descriptor
    
    commit 2740ac33c87b3d0dfa022efd6ba04c6261b1abbd upstream.
    
    Add USB_QUIRK_NO_BOS quirk flag to skip requesting the BOS descriptor
    for devices that cannot handle it.
    
    Add Elgato 4K X (0fd9:009b) to the quirk table. This device hangs when
    the BOS descriptor is requested at SuperSpeed Plus (10Gbps).
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=220027
    Cc: stable <[email protected]>
    Signed-off-by: Johannes Brüderl <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: dwc3: Check for USB4 IP_NAME [+ + +]
Author: Thinh Nguyen <[email protected]>
Date:   Fri Jan 2 21:53:46 2026 +0000

    usb: dwc3: Check for USB4 IP_NAME
    
    commit 0ed91d47959cb7573c17e06487f0fb891d59dfb3 upstream.
    
    Synopsys renamed DWC_usb32 IP to DWC_usb4 as of IP version 1.30. No
    functional change except checking for the IP_NAME here. The driver will
    treat the new IP_NAME as if it's DWC_usb32. Additional features for USB4
    will be introduced and checked separately.
    
    Cc: [email protected]
    Signed-off-by: Thinh Nguyen <[email protected]>
    Link: https://patch.msgid.link/e6f1827754c7a7ddc5eb7382add20bfe3a9b312f.1767390747.git.Thinh.Nguyen@synopsys.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: uvc: fix interval_duration calculation [+ + +]
Author: Xu Yang <[email protected]>
Date:   Tue Jan 13 17:53:08 2026 +0800

    usb: gadget: uvc: fix interval_duration calculation
    
    commit 010dc57cb5163e5f4a32430dd5091cc29efd0471 upstream.
    
    According to USB specification:
    
      For full-/high-speed isochronous endpoints, the bInterval value is
      used as the exponent for a 2^(bInterval-1) value.
    
    To correctly convert bInterval as interval_duration:
      interval_duration = 2^(bInterval-1) * frame_interval
    
    Because the unit of video->interval is 100ns, add a comment info to
    make it clear.
    
    Fixes: 48dbe731171e ("usb: gadget: uvc: set req_size and n_requests based on the frame interval")
    Cc: [email protected]
    Reviewed-by: Frank Li <[email protected]>
    Signed-off-by: Xu Yang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: uvc: fix req_payload_size calculation [+ + +]
Author: Xu Yang <[email protected]>
Date:   Tue Jan 13 17:53:07 2026 +0800

    usb: gadget: uvc: fix req_payload_size calculation
    
    commit 2edc1acb1a2512843425aa19d0c6060a0a924605 upstream.
    
    Current req_payload_size calculation has 2 issue:
    
    (1) When the first time calculate req_payload_size for all the buffers,
        reqs_per_frame = 0 will be the divisor of DIV_ROUND_UP(). So
        the result is undefined.
        This happens because VIDIOC_STREAMON is always executed after
        VIDIOC_QBUF. So video->reqs_per_frame will be 0 until VIDIOC_STREAMON
        is run.
    
    (2) The buf->req_payload_size may be bigger than max_req_size.
    
        Take YUYV pixel format as example:
        If bInterval = 1, video->interval = 666666, high-speed:
        video->reqs_per_frame = 666666 / 1250 = 534
         720p: buf->req_payload_size = 1843200 / 534 = 3452
        1080p: buf->req_payload_size = 4147200 / 534 = 7766
    
        Based on such req_payload_size, the controller can't run normally.
    
    To fix above issue, assign max_req_size to buf->req_payload_size when
    video->reqs_per_frame = 0. And limit buf->req_payload_size to
    video->req_size if it's large than video->req_size. Since max_req_size
    is used at many place, add it to struct uvc_video and set the value once
    endpoint is enabled.
    
    Fixes: 98ad03291560 ("usb: gadget: uvc: set req_length based on payload by nreqs instead of req_size")
    Cc: [email protected]
    Reviewed-by: Frank Li <[email protected]>
    Signed-off-by: Xu Yang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: host: xhci-tegra: Use platform_get_irq_optional() for wake IRQs [+ + +]
Author: Wayne Chang <[email protected]>
Date:   Mon Jan 12 22:56:53 2026 +0800

    usb: host: xhci-tegra: Use platform_get_irq_optional() for wake IRQs
    
    commit d13b6a128a12e528bb18f971f2969feb286f45c7 upstream.
    
    When some wake IRQs are disabled in the device tree, the corresponding
    interrupt entries are removed from DT. In such cases, the driver
    currently calls platform_get_irq(), which returns -ENXIO and logs
    an error like:
    
      tegra-xusb 3610000.usb: error -ENXIO: IRQ index 2 not found
    
    However, not all wake IRQs are mandatory. The hardware can operate
    normally even if some wake sources are not defined in DT. To avoid this
    false alarm and allow missing wake IRQs gracefully, use
    platform_get_irq_optional() instead of platform_get_irq().
    
    Fixes: 5df186e2ef11 ("usb: xhci: tegra: Support USB wakeup function for Tegra234")
    Cc: stable <[email protected]>
    Signed-off-by: Wayne Chang <[email protected]>
    Signed-off-by: Wei-Cheng Chen <[email protected]>
    Reviewed-by: Jon Hunter <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
USB: OHCI/UHCI: Add soft dependencies on ehci_platform [+ + +]
Author: Huacai Chen <[email protected]>
Date:   Mon Jan 12 16:48:02 2026 +0800

    USB: OHCI/UHCI: Add soft dependencies on ehci_platform
    
    commit 01ef7f1b8713a78ab1a9512cf8096d2474c70633 upstream.
    
    Commit 9beeee6584b9aa4f ("USB: EHCI: log a warning if ehci-hcd is not
    loaded first") said that ehci-hcd should be loaded before ohci-hcd and
    uhci-hcd. However, commit 05c92da0c52494ca ("usb: ohci/uhci - add soft
    dependencies on ehci_pci") only makes ohci-pci/uhci-pci depend on ehci-
    pci, which is not enough and we may still see the warnings in boot log.
    
    To eliminate the warnings we should make ohci-hcd/uhci-hcd depend on
    ehci-hcd. But Alan said that the warning introduced by 9beeee6584b9aa4f
    is bogus, we only need the soft dependencies in the PCI level rather
    than the HCD level.
    
    However, there is really another neccessary soft dependencies between
    ohci-platform/uhci-platform and ehci-platform, which is added by this
    patch. The boot logs are below.
    
    1. ohci-platform loaded before ehci-platform:
    
     ohci-platform 1f058000.usb: Generic Platform OHCI controller
     ohci-platform 1f058000.usb: new USB bus registered, assigned bus number 1
     ohci-platform 1f058000.usb: irq 28, io mem 0x1f058000
     hub 1-0:1.0: USB hub found
     hub 1-0:1.0: 4 ports detected
     Warning! ehci_hcd should always be loaded before uhci_hcd and ohci_hcd, not after
     usb 1-4: new low-speed USB device number 2 using ohci-platform
     ehci-platform 1f050000.usb: EHCI Host Controller
     ehci-platform 1f050000.usb: new USB bus registered, assigned bus number 2
     ehci-platform 1f050000.usb: irq 29, io mem 0x1f050000
     ehci-platform 1f050000.usb: USB 2.0 started, EHCI 1.00
     usb 1-4: device descriptor read/all, error -62
     hub 2-0:1.0: USB hub found
     hub 2-0:1.0: 4 ports detected
     usb 1-4: new low-speed USB device number 3 using ohci-platform
     input: YSPRINGTECH USB OPTICAL MOUSE as /devices/platform/bus@10000000/1f058000.usb/usb1/1-4/1-4:1.0/0003:10C4:8105.0001/input/input0
     hid-generic 0003:10C4:8105.0001: input,hidraw0: USB HID v1.11 Mouse [YSPRINGTECH USB OPTICAL MOUSE] on usb-1f058000.usb-4/input0
    
    2. ehci-platform loaded before ohci-platform:
    
     ehci-platform 1f050000.usb: EHCI Host Controller
     ehci-platform 1f050000.usb: new USB bus registered, assigned bus number 1
     ehci-platform 1f050000.usb: irq 28, io mem 0x1f050000
     ehci-platform 1f050000.usb: USB 2.0 started, EHCI 1.00
     hub 1-0:1.0: USB hub found
     hub 1-0:1.0: 4 ports detected
     ohci-platform 1f058000.usb: Generic Platform OHCI controller
     ohci-platform 1f058000.usb: new USB bus registered, assigned bus number 2
     ohci-platform 1f058000.usb: irq 29, io mem 0x1f058000
     hub 2-0:1.0: USB hub found
     hub 2-0:1.0: 4 ports detected
     usb 2-4: new low-speed USB device number 2 using ohci-platform
     input: YSPRINGTECH USB OPTICAL MOUSE as /devices/platform/bus@10000000/1f058000.usb/usb2/2-4/2-4:1.0/0003:10C4:8105.0001/input/input0
     hid-generic 0003:10C4:8105.0001: input,hidraw0: USB HID v1.11 Mouse [YSPRINGTECH USB OPTICAL MOUSE] on usb-1f058000.usb-4/input0
    
    In the later case, there is no re-connection for USB-1.0/1.1 devices,
    which is expected.
    
    Cc: stable <[email protected]>
    Reported-by: Shengwen Xiao <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Reviewed-by: Alan Stern <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: ftdi_sio: add support for PICAXE AXE027 cable [+ + +]
Author: Ethan Nelson-Moore <[email protected]>
Date:   Wed Dec 10 18:01:17 2025 -0800

    USB: serial: ftdi_sio: add support for PICAXE AXE027 cable
    
    commit c0afe95e62984ceea171c3ea319beaf84a21181c upstream.
    
    The vendor provides instructions to write "0403 bd90" to
    /sys/bus/usb-serial/drivers/ftdi_sio/new_id; see:
    https://picaxe.com/docs/picaxe_linux_instructions.pdf
    
    Cc: [email protected]
    Signed-off-by: Ethan Nelson-Moore <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: option: add Telit LE910 MBIM composition [+ + +]
Author: Ulrich Mohr <[email protected]>
Date:   Tue Dec 9 21:08:41 2025 +0100

    USB: serial: option: add Telit LE910 MBIM composition
    
    commit 8af4274ab5999831f4757dfd5bd11665ba3b1569 upstream.
    
    Add support for Telit LE910 module when operating in MBIM composition
    with additional ttys. This USB product ID is used by the module
    when AT#USBCFG is set to 7.
    
    0x1252: MBIM + tty(NMEA) + tty(MODEM) + tty(MODEM) + SAP
    
    T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#=  2 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=1252 Rev=03.18
    S:  Manufacturer=Android
    S:  Product=LE910C1-EU
    S:  SerialNumber=0123456789ABCDEF
    C:  #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    
    Signed-off-by: Ulrich Mohr <[email protected]>
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
virtio-net: don't schedule delayed refill worker [+ + +]
Author: Bui Quang Minh <[email protected]>
Date:   Tue Jan 6 22:04:36 2026 +0700

    virtio-net: don't schedule delayed refill worker
    
    commit fcdef3bcbb2c04e06ae89f8faff2cd6416b3a467 upstream.
    
    When we fail to refill the receive buffers, we schedule a delayed worker
    to retry later. However, this worker creates some concurrency issues.
    For example, when the worker runs concurrently with virtnet_xdp_set,
    both need to temporarily disable queue's NAPI before enabling again.
    Without proper synchronization, a deadlock can happen when
    napi_disable() is called on an already disabled NAPI. That
    napi_disable() call will be stuck and so will the subsequent
    napi_enable() call.
    
    To simplify the logic and avoid further problems, we will instead retry
    refilling in the next NAPI poll.
    
    Fixes: 4bc12818b363 ("virtio-net: disable delayed refill when pausing rx")
    Reported-by: Paolo Abeni <[email protected]>
    Closes: https://lore.kernel.org/[email protected]
    Cc: [email protected]
    Suggested-by: Xuan Zhuo <[email protected]>
    Signed-off-by: Bui Quang Minh <[email protected]>
    Acked-by: Michael S. Tsirkin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
virtio_net: Fix misalignment bug in struct virtnet_info [+ + +]
Author: Gustavo A. R. Silva <[email protected]>
Date:   Sat Jan 10 17:07:17 2026 +0900

    virtio_net: Fix misalignment bug in struct virtnet_info
    
    commit 4156c3745f06bc197094b9ee97a9584e69ed00bf upstream.
    
    Use the new TRAILING_OVERLAP() helper to fix a misalignment bug
    along with the following warning:
    
    drivers/net/virtio_net.c:429:46: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
    
    This helper creates a union between a flexible-array member (FAM)
    and a set of members that would otherwise follow it (in this case
    `u8 rss_hash_key_data[VIRTIO_NET_RSS_MAX_KEY_SIZE];`). This
    overlays the trailing members (rss_hash_key_data) onto the FAM
    (hash_key_data) while keeping the FAM and the start of MEMBERS aligned.
    The static_assert() ensures this alignment remains.
    
    Notice that due to tail padding in flexible `struct
    virtio_net_rss_config_trailer`, `rss_trailer.hash_key_data`
    (at offset 83 in struct virtnet_info) and `rss_hash_key_data` (at
    offset 84 in struct virtnet_info) are misaligned by one byte. See
    below:
    
    struct virtio_net_rss_config_trailer {
            __le16                     max_tx_vq;            /*     0     2 */
            __u8                       hash_key_length;      /*     2     1 */
            __u8                       hash_key_data[];      /*     3     0 */
    
            /* size: 4, cachelines: 1, members: 3 */
            /* padding: 1 */
            /* last cacheline: 4 bytes */
    };
    
    struct virtnet_info {
    ...
            struct virtio_net_rss_config_trailer rss_trailer; /*    80     4 */
    
            /* XXX last struct has 1 byte of padding */
    
            u8                         rss_hash_key_data[40]; /*    84    40 */
    ...
            /* size: 832, cachelines: 13, members: 48 */
            /* sum members: 801, holes: 8, sum holes: 31 */
            /* paddings: 2, sum paddings: 5 */
    };
    
    After changes, those members are correctly aligned at offset 795:
    
    struct virtnet_info {
    ...
            union {
                    struct virtio_net_rss_config_trailer rss_trailer; /*   792     4 */
                    struct {
                            unsigned char __offset_to_hash_key_data[3]; /*   792     3 */
                            u8         rss_hash_key_data[40]; /*   795    40 */
                    };                                       /*   792    43 */
            };                                               /*   792    44 */
    ...
            /* size: 840, cachelines: 14, members: 47 */
            /* sum members: 801, holes: 8, sum holes: 35 */
            /* padding: 4 */
            /* paddings: 1, sum paddings: 4 */
            /* last cacheline: 8 bytes */
    };
    
    As a result, the RSS key passed to the device is shifted by 1
    byte: the last byte is cut off, and instead a (possibly
    uninitialized) byte is added at the beginning.
    
    As a last note `struct virtio_net_rss_config_hdr *rss_hdr;` is also
    moved to the end, since it seems those three members should stick
    around together. :)
    
    Cc: [email protected]
    Fixes: ed3100e90d0d ("virtio_net: Use new RSS config structs")
    Signed-off-by: Gustavo A. R. Silva <[email protected]>
    Acked-by: Michael S. Tsirkin <[email protected]>
    Link: https://patch.msgid.link/aWIItWq5dV9XTTCJ@kspp
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
vsock/test: add a final full barrier after run all tests [+ + +]
Author: Stefano Garzarella <[email protected]>
Date:   Thu Jan 8 12:44:19 2026 +0100

    vsock/test: add a final full barrier after run all tests
    
    [ Upstream commit c39a6a277e0e67ffff6a8efcbbf7e7e23ce9e38c ]
    
    If the last test fails, the other side still completes correctly,
    which could lead to false positives.
    
    Let's add a final barrier that ensures that the last test has finished
    correctly on both sides, but also that the two sides agree on the
    number of tests to be performed.
    
    Fixes: 2f65b44e199c ("VSOCK: add full barrier between test cases")
    Reviewed-by: Luigi Leonardi <[email protected]>
    Signed-off-by: Stefano Garzarella <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
x86/fpu: Clear XSTATE_BV[i] in guest XSAVE state whenever XFD[i]=1 [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Wed Dec 31 16:43:15 2025 +0100

    x86/fpu: Clear XSTATE_BV[i] in guest XSAVE state whenever XFD[i]=1
    
    commit b45f721775947a84996deb5c661602254ce25ce6 upstream.
    
    When loading guest XSAVE state via KVM_SET_XSAVE, and when updating XFD in
    response to a guest WRMSR, clear XFD-disabled features in the saved (or to
    be restored) XSTATE_BV to ensure KVM doesn't attempt to load state for
    features that are disabled via the guest's XFD.  Because the kernel
    executes XRSTOR with the guest's XFD, saving XSTATE_BV[i]=1 with XFD[i]=1
    will cause XRSTOR to #NM and panic the kernel.
    
    E.g. if fpu_update_guest_xfd() sets XFD without clearing XSTATE_BV:
    
      ------------[ cut here ]------------
      WARNING: arch/x86/kernel/traps.c:1524 at exc_device_not_available+0x101/0x110, CPU#29: amx_test/848
      Modules linked in: kvm_intel kvm irqbypass
      CPU: 29 UID: 1000 PID: 848 Comm: amx_test Not tainted 6.19.0-rc2-ffa07f7fd437-x86_amx_nm_xfd_non_init-vm #171 NONE
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
      RIP: 0010:exc_device_not_available+0x101/0x110
      Call Trace:
       <TASK>
       asm_exc_device_not_available+0x1a/0x20
      RIP: 0010:restore_fpregs_from_fpstate+0x36/0x90
       switch_fpu_return+0x4a/0xb0
       kvm_arch_vcpu_ioctl_run+0x1245/0x1e40 [kvm]
       kvm_vcpu_ioctl+0x2c3/0x8f0 [kvm]
       __x64_sys_ioctl+0x8f/0xd0
       do_syscall_64+0x62/0x940
       entry_SYSCALL_64_after_hwframe+0x4b/0x53
       </TASK>
      ---[ end trace 0000000000000000 ]---
    
    This can happen if the guest executes WRMSR(MSR_IA32_XFD) to set XFD[18] = 1,
    and a host IRQ triggers kernel_fpu_begin() prior to the vmexit handler's
    call to fpu_update_guest_xfd().
    
    and if userspace stuffs XSTATE_BV[i]=1 via KVM_SET_XSAVE:
    
      ------------[ cut here ]------------
      WARNING: arch/x86/kernel/traps.c:1524 at exc_device_not_available+0x101/0x110, CPU#14: amx_test/867
      Modules linked in: kvm_intel kvm irqbypass
      CPU: 14 UID: 1000 PID: 867 Comm: amx_test Not tainted 6.19.0-rc2-2dace9faccd6-x86_amx_nm_xfd_non_init-vm #168 NONE
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
      RIP: 0010:exc_device_not_available+0x101/0x110
      Call Trace:
       <TASK>
       asm_exc_device_not_available+0x1a/0x20
      RIP: 0010:restore_fpregs_from_fpstate+0x36/0x90
       fpu_swap_kvm_fpstate+0x6b/0x120
       kvm_load_guest_fpu+0x30/0x80 [kvm]
       kvm_arch_vcpu_ioctl_run+0x85/0x1e40 [kvm]
       kvm_vcpu_ioctl+0x2c3/0x8f0 [kvm]
       __x64_sys_ioctl+0x8f/0xd0
       do_syscall_64+0x62/0x940
       entry_SYSCALL_64_after_hwframe+0x4b/0x53
       </TASK>
      ---[ end trace 0000000000000000 ]---
    
    The new behavior is consistent with the AMX architecture.  Per Intel's SDM,
    XSAVE saves XSTATE_BV as '0' for components that are disabled via XFD
    (and non-compacted XSAVE saves the initial configuration of the state
    component):
    
      If XSAVE, XSAVEC, XSAVEOPT, or XSAVES is saving the state component i,
      the instruction does not generate #NM when XCR0[i] = IA32_XFD[i] = 1;
      instead, it operates as if XINUSE[i] = 0 (and the state component was
      in its initial state): it saves bit i of XSTATE_BV field of the XSAVE
      header as 0; in addition, XSAVE saves the initial configuration of the
      state component (the other instructions do not save state component i).
    
    Alternatively, KVM could always do XRSTOR with XFD=0, e.g. by using
    a constant XFD based on the set of enabled features when XSAVEing for
    a struct fpu_guest.  However, having XSTATE_BV[i]=1 for XFD-disabled
    features can only happen in the above interrupt case, or in similar
    scenarios involving preemption on preemptible kernels, because
    fpu_swap_kvm_fpstate()'s call to save_fpregs_to_fpstate() saves the
    outgoing FPU state with the current XFD; and that is (on all but the
    first WRMSR to XFD) the guest XFD.
    
    Therefore, XFD can only go out of sync with XSTATE_BV in the above
    interrupt case, or in similar scenarios involving preemption on
    preemptible kernels, and it we can consider it (de facto) part of KVM
    ABI that KVM_GET_XSAVE returns XSTATE_BV[i]=0 for XFD-disabled features.
    
    Reported-by: Paolo Bonzini <[email protected]>
    Cc: [email protected]
    Fixes: 820a6ee944e7 ("kvm: x86: Add emulation for IA32_XFD", 2022-01-14)
    Signed-off-by: Sean Christopherson <[email protected]>
    [Move clearing of XSTATE_BV from fpu_copy_uabi_to_guest_fpstate
     to kvm_vcpu_ioctl_x86_set_xsave. - Paolo]
    Reviewed-by: Binbin Wu <[email protected]>
    Signed-off-by: Paolo Bonzini <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86/kaslr: Recognize all ZONE_DEVICE users as physaddr consumers [+ + +]
Author: Dan Williams <[email protected]>
Date:   Thu Nov 6 15:13:50 2025 -0800

    x86/kaslr: Recognize all ZONE_DEVICE users as physaddr consumers
    
    commit 269031b15c1433ff39e30fa7ea3ab8f0be9d6ae2 upstream.
    
    Commit 7ffb791423c7 ("x86/kaslr: Reduce KASLR entropy on most x86 systems")
    is too narrow. The effect being mitigated in that commit is caused by
    ZONE_DEVICE which PCI_P2PDMA has a dependency. ZONE_DEVICE, in general,
    lets any physical address be added to the direct-map. I.e. not only ACPI
    hotplug ranges, CXL Memory Windows, or EFI Specific Purpose Memory, but
    also any PCI MMIO range for the DEVICE_PRIVATE and PCI_P2PDMA cases. Update
    the mitigation, limit KASLR entropy, to apply in all ZONE_DEVICE=y cases.
    
    Distro kernels typically have PCI_P2PDMA=y, so the practical exposure of
    this problem is limited to the PCI_P2PDMA=n case.
    
    A potential path to recover entropy would be to walk ACPI and determine the
    limits for hotplug and PCI MMIO before kernel_randomize_memory(). On
    smaller systems that could yield some KASLR address bits. This needs
    additional investigation to determine if some limited ACPI table scanning
    can happen this early without an open coded solution like
    arch/x86/boot/compressed/acpi.c needs to deploy.
    
    Cc: Ingo Molnar <[email protected]>
    Cc: Kees Cook <[email protected]>
    Cc: Bjorn Helgaas <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Andy Lutomirski <[email protected]>
    Cc: Logan Gunthorpe <[email protected]>
    Cc: Andrew Morton <[email protected]>
    Cc: David Hildenbrand <[email protected]>
    Cc: Lorenzo Stoakes <[email protected]>
    Cc: "Liam R. Howlett" <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: Mike Rapoport <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Fixes: 7ffb791423c7 ("x86/kaslr: Reduce KASLR entropy on most x86 systems")
    Cc: <[email protected]>
    Signed-off-by: Dan Williams <[email protected]>
    Reviewed-by: Balbir Singh <[email protected]>
    Tested-by: Yasunori Goto <[email protected]>
    Acked-by: Dave Hansen <[email protected]>
    Link: http://patch.msgid.link/[email protected]
    Signed-off-by: Dave Jiang <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86/mm: use 'ptdesc' when freeing PMD pages [+ + +]
Author: Dave Hansen <[email protected]>
Date:   Wed Oct 22 16:26:30 2025 +0800

    x86/mm: use 'ptdesc' when freeing PMD pages
    
    commit 412d000346ea38ac4b9bb715a86c73ef89d90dea upstream.
    
    There are a billion ways to refer to a physical memory address.  One of
    the x86 PMD freeing code location chooses to use a 'pte_t *' to point to a
    PMD page and then call a PTE-specific freeing function for it.  That's a
    bit wonky.
    
    Just use a 'struct ptdesc *' instead.  Its entire purpose is to refer to
    page table pages.  It also means being able to remove an explicit cast.
    
    Right now, pte_free_kernel() is a one-liner that calls
    pagetable_dtor_free().  Effectively, all this patch does is remove one
    superfluous __pa(__va(paddr)) conversion and then call
    pagetable_dtor_free() directly instead of through a helper.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Dave Hansen <[email protected]>
    Signed-off-by: Lu Baolu <[email protected]>
    Reviewed-by: Jason Gunthorpe <[email protected]>
    Reviewed-by: Kevin Tian <[email protected]>
    Cc: Alistair Popple <[email protected]>
    Cc: Andy Lutomirski <[email protected]>
    Cc: Borislav Betkov <[email protected]>
    Cc: David Hildenbrand <[email protected]>
    Cc: Ingo Molnar <[email protected]>
    Cc: Jann Horn <[email protected]>
    Cc: Jean-Philippe Brucker <[email protected]>
    Cc: Joerg Roedel <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Cc: Lorenzo Stoakes <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Mike Rapoport (Microsoft) <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Robin Murohy <[email protected]>
    Cc: Thomas Gleinxer <[email protected]>
    Cc: "Uladzislau Rezki (Sony)" <[email protected]>
    Cc: Vasant Hegde <[email protected]>
    Cc: Vinicius Costa Gomes <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: Will Deacon <[email protected]>
    Cc: Yi Lai <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

x86/mm: use pagetable_free() [+ + +]
Author: Lu Baolu <[email protected]>
Date:   Wed Oct 22 16:26:32 2025 +0800

    x86/mm: use pagetable_free()
    
    commit bf9e4e30f3538391745a99bc2268ec4f5e4a401e upstream.
    
    The kernel's memory management subsystem provides a dedicated interface,
    pagetable_free(), for freeing page table pages.  Updates two call sites to
    use pagetable_free() instead of the lower-level __free_page() or
    free_pages().  This improves code consistency and clarity, and ensures the
    correct freeing mechanism is used.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Lu Baolu <[email protected]>
    Reviewed-by: Jason Gunthorpe <[email protected]>
    Acked-by: David Hildenbrand <[email protected]>
    Acked-by: Mike Rapoport (Microsoft) <[email protected]>
    Cc: Alistair Popple <[email protected]>
    Cc: Andy Lutomirski <[email protected]>
    Cc: Borislav Betkov <[email protected]>
    Cc: Dave Hansen <[email protected]>
    Cc: Ingo Molnar <[email protected]>
    Cc: Jann Horn <[email protected]>
    Cc: Jean-Philippe Brucker <[email protected]>
    Cc: Joerg Roedel <[email protected]>
    Cc: Kevin Tian <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Cc: Lorenzo Stoakes <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Robin Murohy <[email protected]>
    Cc: Thomas Gleinxer <[email protected]>
    Cc: "Uladzislau Rezki (Sony)" <[email protected]>
    Cc: Vasant Hegde <[email protected]>
    Cc: Vinicius Costa Gomes <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: Will Deacon <[email protected]>
    Cc: Yi Lai <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86/resctrl: Add missing resctrl initialization for Hygon [+ + +]
Author: Xiaochen Shen <[email protected]>
Date:   Tue Dec 9 14:26:49 2025 +0800

    x86/resctrl: Add missing resctrl initialization for Hygon
    
    commit 6ee98aabdc700b5705e4f1833e2edc82a826b53b upstream.
    
    Hygon CPUs supporting Platform QoS features currently undergo partial resctrl
    initialization through resctrl_cpu_detect() in the Hygon BSP init helper and
    AMD/Hygon common initialization code. However, several critical data
    structures remain uninitialized for Hygon CPUs in the following paths:
    
     - get_mem_config()-> __rdt_get_mem_config_amd():
         rdt_resource::membw,alloc_capable
         hw_res::num_closid
    
     - rdt_init_res_defs()->rdt_init_res_defs_amd():
         rdt_resource::cache
         hw_res::msr_base,msr_update
    
    Add the missing AMD/Hygon common initialization to ensure proper Platform QoS
    functionality on Hygon CPUs.
    
    Fixes: d8df126349da ("x86/cpu/hygon: Add missing resctrl_cpu_detect() in bsp_init helper")
    Signed-off-by: Xiaochen Shen <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Reviewed-by: Reinette Chatre <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

x86/resctrl: Fix memory bandwidth counter width for Hygon [+ + +]
Author: Xiaochen Shen <[email protected]>
Date:   Tue Dec 9 14:26:50 2025 +0800

    x86/resctrl: Fix memory bandwidth counter width for Hygon
    
    commit 7517e899e1b87b4c22a92c7e40d8733c48e4ec3c upstream.
    
    The memory bandwidth calculation relies on reading the hardware counter
    and measuring the delta between samples. To ensure accurate measurement,
    the software reads the counter frequently enough to prevent it from
    rolling over twice between reads.
    
    The default Memory Bandwidth Monitoring (MBM) counter width is 24 bits.
    Hygon CPUs provide a 32-bit width counter, but they do not support the
    MBM capability CPUID leaf (0xF.[ECX=1]:EAX) to report the width offset
    (from 24 bits).
    
    Consequently, the kernel falls back to the 24-bit default counter width,
    which causes incorrect overflow handling on Hygon CPUs.
    
    Fix this by explicitly setting the counter width offset to 8 bits (resulting
    in a 32-bit total counter width) for Hygon CPUs.
    
    Fixes: d8df126349da ("x86/cpu/hygon: Add missing resctrl_cpu_detect() in bsp_init helper")
    Signed-off-by: Xiaochen Shen <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Reviewed-by: Tony Luck <[email protected]>
    Reviewed-by: Reinette Chatre <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
xfrm: Fix inner mode lookup in tunnel mode GSO segmentation [+ + +]
Author: Jianbo Liu <[email protected]>
Date:   Thu Nov 20 05:56:09 2025 +0200

    xfrm: Fix inner mode lookup in tunnel mode GSO segmentation
    
    [ Upstream commit 3d5221af9c7711b7aec8da1298c8fc393ef6183d ]
    
    Commit 61fafbee6cfe ("xfrm: Determine inner GSO type from packet inner
    protocol") attempted to fix GSO segmentation by reading the inner
    protocol from XFRM_MODE_SKB_CB(skb)->protocol. This was incorrect
    because the field holds the inner L4 protocol (TCP/UDP) instead of the
    required tunnel protocol. Also, the memory location (shared by
    XFRM_SKB_CB(skb) which could be overwritten by xfrm_replay_overflow())
    is prone to corruption. This combination caused the kernel to select
    the wrong inner mode and get the wrong address family.
    
    The correct value is in xfrm_offload(skb)->proto, which is set from
    the outer tunnel header's protocol field by esp[4|6]_gso_encap(). It
    is initialized by xfrm[4|6]_tunnel_encap_add() to either IPPROTO_IPIP
    or IPPROTO_IPV6, using xfrm_af2proto() and correctly reflects the
    inner packet's address family.
    
    Fixes: 61fafbee6cfe ("xfrm: Determine inner GSO type from packet inner protocol")
    Signed-off-by: Jianbo Liu <[email protected]>
    Reviewed-by: Sabrina Dubroca <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

xfrm: set ipv4 no_pmtu_disc flag only on output sa when direction is set [+ + +]
Author: Antony Antony <[email protected]>
Date:   Thu Dec 11 11:30:27 2025 +0100

    xfrm: set ipv4 no_pmtu_disc flag only on output sa when direction is set
    
    [ Upstream commit c196def07bbc6e8306d7a274433913444b0db20a ]
    
    The XFRM_STATE_NOPMTUDISC flag is only meaningful for output SAs, but
    it was being applied regardless of the SA direction when the sysctl
    ip_no_pmtu_disc is enabled. This can unintentionally affect input SAs.
    
    Limit setting XFRM_STATE_NOPMTUDISC to output SAs when the SA direction
    is configured.
    
    Closes: https://github.com/strongswan/strongswan/issues/2946
    Fixes: a4a87fa4e96c ("xfrm: Add Direction to the SA in or out")
    Signed-off-by: Antony Antony <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
xfs: Fix the return value of xfs_rtcopy_summary() [+ + +]
Author: Nirjhar Roy (IBM) <[email protected]>
Date:   Mon Jan 12 15:35:23 2026 +0530

    xfs: Fix the return value of xfs_rtcopy_summary()
    
    commit 6b2d155366581705a848833a9b626bfea41d5a8d upstream.
    
    xfs_rtcopy_summary() should return the appropriate error code
    instead of always returning 0. The caller of this function which is
    xfs_growfs_rt_bmblock() is already handling the error.
    
    Fixes: e94b53ff699c ("xfs: cache last bitmap block in realtime allocator")
    Signed-off-by: Nirjhar Roy (IBM) <[email protected]>
    Reviewed-by: Darrick J. Wong <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Cc: [email protected] # v6.7
    Signed-off-by: Carlos Maiolino <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

xfs: set max_agbno to allow sparse alloc of last full inode chunk [+ + +]
Author: Brian Foster <[email protected]>
Date:   Fri Jan 9 12:49:05 2026 -0500

    xfs: set max_agbno to allow sparse alloc of last full inode chunk
    
    commit c360004c0160dbe345870f59f24595519008926f upstream.
    
    Sparse inode cluster allocation sets min/max agbno values to avoid
    allocating an inode cluster that might map to an invalid inode
    chunk. For example, we can't have an inode record mapped to agbno 0
    or that extends past the end of a runt AG of misaligned size.
    
    The initial calculation of max_agbno is unnecessarily conservative,
    however. This has triggered a corner case allocation failure where a
    small runt AG (i.e. 2063 blocks) is mostly full save for an extent
    to the EOFS boundary: [2050,13]. max_agbno is set to 2048 in this
    case, which happens to be the offset of the last possible valid
    inode chunk in the AG. In practice, we should be able to allocate
    the 4-block cluster at agbno 2052 to map to the parent inode record
    at agbno 2048, but the max_agbno value precludes it.
    
    Note that this can result in filesystem shutdown via dirty trans
    cancel on stable kernels prior to commit 9eb775968b68 ("xfs: walk
    all AGs if TRYLOCK passed to xfs_alloc_vextent_iterate_ags") because
    the tail AG selection by the allocator sets t_highest_agno on the
    transaction. If the inode allocator spins around and finds an inode
    chunk with free inodes in an earlier AG, the subsequent dir name
    creation path may still fail to allocate due to the AG restriction
    and cancel.
    
    To avoid this problem, update the max_agbno calculation to the agbno
    prior to the last chunk aligned agbno in the AG. This is not
    necessarily the last valid allocation target for a sparse chunk, but
    since inode chunks (i.e. records) are chunk aligned and sparse
    allocs are cluster sized/aligned, this allows the sb_spino_align
    alignment restriction to take over and round down the max effective
    agbno to within the last valid inode chunk in the AG.
    
    Note that even though the allocator improvements in the
    aforementioned commit seem to avoid this particular dirty trans
    cancel situation, the max_agbno logic improvement still applies as
    we should be able to allocate from an AG that has been appropriately
    selected. The more important target for this patch however are
    older/stable kernels prior to this allocator rework/improvement.
    
    Cc: [email protected] # v4.2
    Fixes: 56d1115c9bc7 ("xfs: allocate sparse inode chunks on full chunk allocation failure")
    Signed-off-by: Brian Foster <[email protected]>
    Reviewed-by: Darrick J. Wong <[email protected]>
    Signed-off-by: Carlos Maiolino <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
xhci: sideband: don't dereference freed ring when removing sideband endpoint [+ + +]
Author: Mathias Nyman <[email protected]>
Date:   Fri Jan 16 01:37:58 2026 +0200

    xhci: sideband: don't dereference freed ring when removing sideband endpoint
    
    commit dd83dc1249737b837ac5d57c81f2b0977c613d9f upstream.
    
    xhci_sideband_remove_endpoint() incorrecly assumes that the endpoint is
    running and has a valid transfer ring.
    
    Lianqin reported a crash during suspend/wake-up stress testing, and
    found the cause to be dereferencing a non-existing transfer ring
    'ep->ring' during xhci_sideband_remove_endpoint().
    
    The endpoint and its ring may be in unknown state if this function
    is called after xHCI was reinitialized in resume (lost power), or if
    device is being re-enumerated, disconnected or endpoint already dropped.
    
    Fix this by both removing unnecessary ring access, and by checking
    ep->ring exists before dereferencing it. Also make sure endpoint is
    running before attempting to stop it.
    
    Remove the xhci_initialize_ring_info() call during sideband endpoint
    removal as is it only initializes ring structure enqueue, dequeue and
    cycle state values to their starting values without changing actual
    hardware enqueue, dequeue and cycle state. Leaving them out of sync
    is worse than leaving it as it is. The endpoint will get freed in after
    this in most usecases.
    
    If the (audio) class driver want's to reuse the endpoint after offload
    then it is up to the class driver to ensure endpoint is properly set up.
    
    Reported-by: 胡连勤 <[email protected]>
    Closes: https://lore.kernel.org/linux-usb/TYUPR06MB6217B105B059A7730C4F6EC8D2B9A@TYUPR06MB6217.apcprd06.prod.outlook.com/
    Tested-by: 胡连勤 <[email protected]>
    Fixes: de66754e9f80 ("xhci: sideband: add initial api to register a secondary interrupter entity")
    Cc: [email protected]
    Signed-off-by: Mathias Nyman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>