Changelog in Linux kernel 6.18.10

 
ALSA: aloop: Fix racy access at PCM trigger [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Tue Feb 3 15:09:59 2026 +0100

    ALSA: aloop: Fix racy access at PCM trigger
    
    commit 826af7fa62e347464b1b4e0ba2fe19a92438084f upstream.
    
    The PCM trigger callback of aloop driver tries to check the PCM state
    and stop the stream of the tied substream in the corresponding cable.
    Since both check and stop operations are performed outside the cable
    lock, this may result in UAF when a program attempts to trigger
    frequently while opening/closing the tied stream, as spotted by
    fuzzers.
    
    For addressing the UAF, this patch changes two things:
    - It covers the most of code in loopback_check_format() with
      cable->lock spinlock, and add the proper NULL checks.  This avoids
      already some racy accesses.
    - In addition, now we try to check the state of the capture PCM stream
      that may be stopped in this function, which was the major pain point
      leading to UAF.
    
    Reported-by: syzbot+5f8f3acdee1ec7a7ef7b@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/69783ba1.050a0220.c9109.0011.GAE@google.com
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20260203141003.116584-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda/realtek: add HP Laptop 15s-eq1xxx mute LED quirk [+ + +]
Author: Ruslan Krupitsa <krupitsarus@outlook.com>
Date:   Fri Jan 2 02:53:36 2026 +0300

    ALSA: hda/realtek: add HP Laptop 15s-eq1xxx mute LED quirk
    
    [ Upstream commit 9ed7a28225af02b74f61e7880d460db49db83758 ]
    
    HP Laptop 15s-eq1xxx with ALC236 codec does not enable the
    mute LED automatically. This patch adds a quirk entry for
    subsystem ID 0x8706 using the ALC236_FIXUP_HP_MUTE_LED_COEFBIT2
    fixup, enabling correct mute LED behavior.
    
    Signed-off-by: Ruslan Krupitsa <krupitsarus@outlook.com>
    Link: https://patch.msgid.link/AS8P194MB112895B8EC2D87D53A876085BBBAA@AS8P194MB1128.EURP194.PROD.OUTLOOK.COM
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/realtek: Add quirk for Acer Nitro AN517-55 [+ + +]
Author: Matouš Lánský <matouslansky@post.cz>
Date:   Wed Dec 31 18:12:07 2025 +0100

    ALSA: hda/realtek: Add quirk for Acer Nitro AN517-55
    
    [ Upstream commit 9be25402d8522e16e5ebe84f2b1b6c5de082a388 ]
    
    Add headset mic quirk for Acer Nitro AN517-55. This laptop uses
    the same audio configuration as the AN515-58 model.
    
    Signed-off-by: Matouš Lánský <matouslansky@post.cz>
    Link: https://patch.msgid.link/20251231171207.76943-1-matouslansky@post.cz
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/realtek: ALC269 fixup for Lenovo Yoga Book 9i 13IRU8 audio [+ + +]
Author: Martin Hamilton <m@martinh.net>
Date:   Thu Jan 22 02:51:18 2026 +0000

    ALSA: hda/realtek: ALC269 fixup for Lenovo Yoga Book 9i 13IRU8 audio
    
    [ Upstream commit 64e0924ed3b446fdd758dfab582e0e961863a116 ]
    
    The amp/speakers on the Lenovo Yoga Book 9i 13IRU8 laptop aren't
    fully powered up, resulting in horrible tinny sound by default.
    
    The kernel has an existing quirk for PCI SSID 0x17aa3843 which
    matches this machine and several others. The quirk applies the
    ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP fixup, however the fixup does not
    work on this machine.
    
    This patch modifies the existing quirk by adding a check for the
    subsystem ID 0x17aa3881. If present, ALC287_FIXUP_TAS2781_I2C will
    be applied instead of ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP. With this
    change the TAS2781 amp is powered up, firmware is downloaded and
    recognised by HDA/SOF - i.e. all is good, and we can boogie.
    
    Code is re-used from alc298_fixup_lenovo_c940_duet7(), which fixes a
    similar problem with two other Lenovo laptops.
    
    Cross checked against ALSA cardinfo database for potential clashes.
    Tested against 6.18.5 kernel built with Arch Linux default options.
    Tested in HDA mode and SOF mode.
    
    Note: Possible further work required to address quality of life issues
    caused by the firmware's agressive power saving, and to improve ALSA
    control mappings.
    
    Signed-off-by: Martin Hamilton <m@martinh.net>
    Link: https://patch.msgid.link/20260122-alc269-yogabook9i-fixup-v1-1-a6883429400f@martinh.net
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/realtek: Fix headset mic for TongFang X6AR55xU [+ + +]
Author: Tim Guttzeit <t.guttzeit@tuxedocomputers.com>
Date:   Mon Jan 19 16:15:55 2026 +0100

    ALSA: hda/realtek: Fix headset mic for TongFang X6AR55xU
    
    [ Upstream commit b48fe9af1e60360baf09ca6b7a3cd6541f16e611 ]
    
    Add a PCI quirk to enable microphone detection on the headphone jack of
    TongFang X6AR55xU devices.
    
    Signed-off-by: Tim Guttzeit <t.guttzeit@tuxedocomputers.com>
    Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
    Link: https://patch.msgid.link/20260119151626.35481-1-wse@tuxedocomputers.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/realtek: Really fix headset mic for TongFang X6AR55xU. [+ + +]
Author: Werner Sembach <wse@tuxedocomputers.com>
Date:   Fri Jan 23 23:12:24 2026 +0100

    ALSA: hda/realtek: Really fix headset mic for TongFang X6AR55xU.
    
    commit 1aaedafb21f38cb872d44f7608b4828a1e14e795 upstream.
    
    Add a PCI quirk to enable microphone detection on the headphone jack of
    TongFang X6AR55xU devices.
    
    The former quirk entry did not acomplish this and is removed.
    
    Fixes: b48fe9af1e60 ("ALSA: hda/realtek: Fix headset mic for TongFang X6AR55xU")
    Signed-off-by: Tim Guttzeit <t.guttzeit@tuxedocomputers.com>
    Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
    Link: https://patch.msgid.link/20260123221233.28273-1-wse@tuxedocomputers.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda/tas2781: Add newly-released HP laptop [+ + +]
Author: Shenghao Ding <shenghao-ding@ti.com>
Date:   Thu Jan 15 20:49:06 2026 +0800

    ALSA: hda/tas2781: Add newly-released HP laptop
    
    [ Upstream commit 46b8d0888f01f250fbd24d00ff80b755c3c42cd4 ]
    
    HP released the new laptop with the subid 0x103C.
    
    Signed-off-by: Shenghao Ding <shenghao-ding@ti.com>
    Link: https://patch.msgid.link/20260115124907.629-1-shenghao-ding@ti.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: usb-audio: Add delay quirk for MOONDROP Moonriver2 Ti [+ + +]
Author: Lianqin Hu <hulianqin@vivo.com>
Date:   Fri Jan 16 06:33:03 2026 +0000

    ALSA: usb-audio: Add delay quirk for MOONDROP Moonriver2 Ti
    
    [ Upstream commit 49985bc466b51af88d534485631c8cd8c9c65f43 ]
    
    Audio control requests that sets sampling frequency sometimes fail on
    this card. Adding delay between control messages eliminates that problem.
    
    usb 1-1: New USB device found, idVendor=2fc6, idProduct=f06b
    usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    usb 1-1: Product: MOONDROP Moonriver2 Ti
    usb 1-1: Manufacturer: MOONDROP
    usb 1-1: SerialNumber: MOONDROP Moonriver2 Ti
    
    Signed-off-by: Lianqin Hu <hulianqin@vivo.com>
    Reviewed-by: Cryolitia PukNgae <cryolitia@uniontech.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Link: https://patch.msgid.link/TYUPR06MB6217911EFC7E9224935FA507D28DA@TYUPR06MB6217.apcprd06.prod.outlook.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: usb-audio: fix broken logic in snd_audigy2nx_led_update() [+ + +]
Author: Sergey Shtylyov <s.shtylyov@auroraos.dev>
Date:   Tue Feb 3 19:15:57 2026 +0300

    ALSA: usb-audio: fix broken logic in snd_audigy2nx_led_update()
    
    [ Upstream commit 124bdc6eccc8c5cba68fee00e01c084c116c4360 ]
    
    When the support for the Sound Blaster X-Fi Surround 5.1 Pro was added,
    the existing logic for the X-Fi Surround 5.1 in snd_audigy2nx_led_put()
    was broken due to missing *else* before the added *if*: snd_usb_ctl_msg()
    became incorrectly called twice and an error from first snd_usb_ctl_msg()
    call ignored.  As the added snd_usb_ctl_msg() call was totally identical
    to the existing one for the "plain" X-Fi Surround 5.1, just merge those
    two *if* statements while fixing the broken logic...
    
    Found by Linux Verification Center (linuxtesting.org) with the Svace static
    analysis tool.
    
    Fixes: 7cdd8d73139e ("ALSA: usb-audio - Add support for USB X-Fi S51 Pro")
    Signed-off-by: Sergey Shtylyov <s.shtylyov@auroraos.dev>
    Link: https://patch.msgid.link/20260203161558.18680-1-s.shtylyov@auroraos.dev
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: usb-audio: Prevent excessive number of frames [+ + +]
Author: Edward Adam Davis <eadavis@qq.com>
Date:   Tue Jan 13 16:29:23 2026 +0800

    ALSA: usb-audio: Prevent excessive number of frames
    
    [ Upstream commit ef5749ef8b307bf8717945701b1b79d036af0a15 ]
    
    In this case, the user constructed the parameters with maxpacksize 40
    for rate 22050 / pps 1000, and packsize[0] 22 packsize[1] 23. The buffer
    size for each data URB is maxpacksize * packets, which in this example
    is 40 * 6 = 240; When the user performs a write operation to send audio
    data into the ALSA PCM playback stream, the calculated number of frames
    is packsize[0] * packets = 264, which exceeds the allocated URB buffer
    size, triggering the out-of-bounds (OOB) issue reported by syzbot [1].
    
    Added a check for the number of single data URB frames when calculating
    the number of frames to prevent [1].
    
    [1]
    BUG: KASAN: slab-out-of-bounds in copy_to_urb+0x261/0x460 sound/usb/pcm.c:1487
    Write of size 264 at addr ffff88804337e800 by task syz.0.17/5506
    Call Trace:
     copy_to_urb+0x261/0x460 sound/usb/pcm.c:1487
     prepare_playback_urb+0x953/0x13d0 sound/usb/pcm.c:1611
     prepare_outbound_urb+0x377/0xc50 sound/usb/endpoint.c:333
    
    Reported-by: syzbot+6db0415d6d5c635f72cb@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=6db0415d6d5c635f72cb
    Tested-by: syzbot+6db0415d6d5c635f72cb@syzkaller.appspotmail.com
    Signed-off-by: Edward Adam Davis <eadavis@qq.com>
    Link: https://patch.msgid.link/tencent_9AECE6CD2C7A826D902D696C289724E8120A@qq.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: usb-audio: Use the right limit for PCM OOB check [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Wed Jan 21 09:20:20 2026 +0100

    ALSA: usb-audio: Use the right limit for PCM OOB check
    
    commit 70b4db7d258118a7464f039112a74ddb49a95b06 upstream.
    
    The recent fix commit for addressing the OOB access of PCM URB data
    buffer caused a regression on Behringer UMC2020HD device, resulting in
    choppy sound.  The fix used ep->max_urb_frames for the upper limit
    check, and this is no right value to be referred.
    
    Use the actual buffer size (ctx->buffer_size) as the upper limit
    instead, which also avoids the regression on the device above.
    
    Fixes: ef5749ef8b30 ("ALSA: usb-audio: Prevent excessive number of frames")
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=220997
    Link: https://patch.msgid.link/20260121082025.718748-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ARM: 9468/1: fix memset64() on big-endian [+ + +]
Author: Thomas Weissschuh <thomas.weissschuh@linutronix.de>
Date:   Wed Jan 7 11:01:49 2026 +0100

    ARM: 9468/1: fix memset64() on big-endian
    
    commit 23ea2a4c72323feb6e3e025e8a6f18336513d5ad upstream.
    
    On big-endian systems the 32-bit low and high halves need to be swapped
    for the underlying assembly implementation to work correctly.
    
    Fixes: fd1d362600e2 ("ARM: implement memset32 & memset64")
    Cc: stable@vger.kernel.org
    Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
    Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ASoC: amd: fix memory leak in acp3x pdm dma ops [+ + +]
Author: Chris Bainbridge <chris.bainbridge@gmail.com>
Date:   Mon Feb 2 20:50:33 2026 +0000

    ASoC: amd: fix memory leak in acp3x pdm dma ops
    
    [ Upstream commit 7f67ba5413f98d93116a756e7f17cd2c1d6c2bd6 ]
    
    Fixes: 4a767b1d039a8 ("ASoC: amd: add acp3x pdm driver dma ops")
    Signed-off-by: Chris Bainbridge <chris.bainbridge@gmail.com>
    Link: https://patch.msgid.link/20260202205034.7697-1-chris.bainbridge@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: amd: yc: Fix microphone on ASUS M6500RE [+ + +]
Author: Radhi Bajahaw <bajahawradhi@gmail.com>
Date:   Mon Jan 12 21:38:14 2026 +0100

    ASoC: amd: yc: Fix microphone on ASUS M6500RE
    
    [ Upstream commit 8e29db1b08808f709231e6fd4c79dcdee5b17a17 ]
    
    Add DMI match for ASUSTeK COMPUTER INC. M6500RE to enable the
    internal microphone.
    
    Signed-off-by: Radhi Bajahaw <bajahawradhi@gmail.com>
    Link: https://patch.msgid.link/20260112203814.155-1-bajahawradhi@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: davinci-evm: Fix reference leak in davinci_evm_probe [+ + +]
Author: Kery Qi <qikeyu2017@gmail.com>
Date:   Wed Jan 7 23:48:37 2026 +0800

    ASoC: davinci-evm: Fix reference leak in davinci_evm_probe
    
    [ Upstream commit 5b577d214fcc109707bcb77b4ae72a31cfd86798 ]
    
    The davinci_evm_probe() function calls of_parse_phandle() to acquire
    device nodes for "ti,audio-codec" and "ti,mcasp-controller". These
    functions return device nodes with incremented reference counts.
    
    However, in several error paths (e.g., when the second of_parse_phandle(),
    snd_soc_of_parse_card_name(), or devm_snd_soc_register_card() fails),
    the function returns directly without releasing the acquired nodes,
    leading to reference leaks.
    
    This patch adds an error handling path 'err_put' to properly release
    the device nodes using of_node_put() and clean up the pointers when
    an error occurs.
    
    Signed-off-by: Kery Qi <qikeyu2017@gmail.com>
    Link: https://patch.msgid.link/20260107154836.1521-2-qikeyu2017@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: Intel: sof_sdw: Add new quirks for PTL on Dell with CS42L43 [+ + +]
Author: Deep Harsora <Deep_Harsora@dell.com>
Date:   Fri Jan 2 15:21:24 2026 +0000

    ASoC: Intel: sof_sdw: Add new quirks for PTL on Dell with CS42L43
    
    [ Upstream commit 12cacdfb023d1b2f6c4e5af471f2d5b6f0cbf909 ]
    
    Add missing quirks for some new Dell laptops using cs42l43's speaker
    outputs.
    
    Signed-off-by: Deep Harsora <Deep_Harsora@dell.com>
    Signed-off-by: Maciej Strozek <mstrozek@opensource.cirrus.com>
    Link: https://patch.msgid.link/20260102152132.3053106-1-mstrozek@opensource.cirrus.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: simple-card-utils: Check device node before overwrite direction [+ + +]
Author: Shengjiu Wang <shengjiu.wang@nxp.com>
Date:   Mon Dec 29 17:04:32 2025 +0800

    ASoC: simple-card-utils: Check device node before overwrite direction
    
    [ Upstream commit 22a507d7680f2c3499c133f6384349f62f916176 ]
    
    Even the device node don't exist, the graph_util_parse_link_direction()
    will overwrite the playback_only and capture_only to be zero. Which
    cause the playback_only and capture_only are not correct, so check device
    node exist or not before update the value.
    
    Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
    Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
    Link: https://patch.msgid.link/20251229090432.3964848-1-shengjiu.wang@nxp.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: tlv320adcx140: Propagate error codes during probe [+ + +]
Author: Dimitrios Katsaros <patcherwork@gmail.com>
Date:   Tue Jan 13 11:58:46 2026 +0100

    ASoC: tlv320adcx140: Propagate error codes during probe
    
    [ Upstream commit d89aad92cfd15edbd704746f44c98fe687f9366f ]
    
    When scanning for the reset pin, we could get an -EPROBE_DEFER.
    The driver would assume that no reset pin had been defined,
    which would mean that the chip would never be powered.
    
    Now we both respect any error we get from devm_gpiod_get_optional.
    We also now properly report the missing GPIO definition when
    'gpio_reset' is NULL.
    
    Signed-off-by: Dimitrios Katsaros <patcherwork@gmail.com>
    Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
    Link: https://patch.msgid.link/20260113-sound-soc-codecs-tvl320adcx140-v4-3-8f7ecec525c8@pengutronix.de
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
binder: fix BR_FROZEN_REPLY error log [+ + +]
Author: Carlos Llamas <cmllamas@google.com>
Date:   Fri Jan 23 17:57:02 2026 +0000

    binder: fix BR_FROZEN_REPLY error log
    
    commit 1769f90e5ba2a6d24bb46b85da33fe861c68f005 upstream.
    
    The error logging for failed transactions is misleading as it always
    reports "dead process or thread" even when the target is actually
    frozen. Additionally, the pid and tid are reversed which can further
    confuse debugging efforts. Fix both issues.
    
    Cc: stable@kernel.org
    Cc: Steven Moreland <smoreland@google.com>
    Fixes: a15dac8b2286 ("binder: additional transaction error logs")
    Signed-off-by: Carlos Llamas <cmllamas@google.com>
    Reviewed-by: Alice Ryhl <aliceryhl@google.com>
    Link: https://patch.msgid.link/20260123175702.2154348-1-cmllamas@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

binder: fix UAF in binder_netlink_report() [+ + +]
Author: Carlos Llamas <cmllamas@google.com>
Date:   Thu Jan 22 18:02:02 2026 +0000

    binder: fix UAF in binder_netlink_report()
    
    commit 5e8a3d01544282e50d887d76f30d1496a0a53562 upstream.
    
    Oneway transactions sent to frozen targets via binder_proc_transaction()
    return a BR_TRANSACTION_PENDING_FROZEN error but they are still treated
    as successful since the target is expected to thaw at some point. It is
    then not safe to access 't' after BR_TRANSACTION_PENDING_FROZEN errors
    as the transaction could have been consumed by the now thawed target.
    
    This is the case for binder_netlink_report() which derreferences 't'
    after a pending frozen error, as pointed out by the following KASAN
    report:
    
      ==================================================================
      BUG: KASAN: slab-use-after-free in binder_netlink_report.isra.0+0x694/0x6c8
      Read of size 8 at addr ffff00000f98ba38 by task binder-util/522
    
      CPU: 4 UID: 0 PID: 522 Comm: binder-util Not tainted 6.19.0-rc6-00015-gc03e9c42ae8f #1 PREEMPT
      Hardware name: linux,dummy-virt (DT)
      Call trace:
       binder_netlink_report.isra.0+0x694/0x6c8
       binder_transaction+0x66e4/0x79b8
       binder_thread_write+0xab4/0x4440
       binder_ioctl+0x1fd4/0x2940
       [...]
    
      Allocated by task 522:
       __kmalloc_cache_noprof+0x17c/0x50c
       binder_transaction+0x584/0x79b8
       binder_thread_write+0xab4/0x4440
       binder_ioctl+0x1fd4/0x2940
       [...]
    
      Freed by task 488:
       kfree+0x1d0/0x420
       binder_free_transaction+0x150/0x234
       binder_thread_read+0x2d08/0x3ce4
       binder_ioctl+0x488/0x2940
       [...]
      ==================================================================
    
    Instead, make a transaction copy so the data can be safely accessed by
    binder_netlink_report() after a pending frozen error. While here, add a
    comment about not using t->buffer in binder_netlink_report().
    
    Cc: stable@vger.kernel.org
    Fixes: 63740349eba7 ("binder: introduce transaction reports via netlink")
    Signed-off-by: Carlos Llamas <cmllamas@google.com>
    Reviewed-by: Alice Ryhl <aliceryhl@google.com>
    Link: https://patch.msgid.link/20260122180203.1502637-1-cmllamas@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
binderfs: fix ida_alloc_max() upper bound [+ + +]
Author: Carlos Llamas <cmllamas@google.com>
Date:   Tue Jan 27 23:55:11 2026 +0000

    binderfs: fix ida_alloc_max() upper bound
    
    commit ec4ddc90d201d09ef4e4bef8a2c6d9624525ad68 upstream.
    
    The 'max' argument of ida_alloc_max() takes the maximum valid ID and not
    the "count". Using an ID of BINDERFS_MAX_MINOR (1 << 20) for dev->minor
    would exceed the limits of minor numbers (20-bits). Fix this off-by-one
    error by subtracting 1 from the 'max'.
    
    Cc: stable@vger.kernel.org
    Fixes: 3ad20fe393b3 ("binder: implement binderfs")
    Signed-off-by: Carlos Llamas <cmllamas@google.com>
    Link: https://patch.msgid.link/20260127235545.2307876-2-cmllamas@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
block,bfq: fix aux stat accumulation destination [+ + +]
Author: shechenglong <shechenglong@xfusion.com>
Date:   Sun Dec 28 21:04:26 2025 +0800

    block,bfq: fix aux stat accumulation destination
    
    [ Upstream commit 04bdb1a04d8a2a89df504c1e34250cd3c6e31a1c ]
    
    Route bfqg_stats_add_aux() time accumulation into the destination
    stats object instead of the source, aligning with other stat fields.
    
    Reviewed-by: Yu Kuai <yukuai@fnnas.com>
    Signed-off-by: shechenglong <shechenglong@xfusion.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
btrfs: do not free data reservation in fallback from inline due to -ENOSPC [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Fri Dec 12 17:10:10 2025 +0000

    btrfs: do not free data reservation in fallback from inline due to -ENOSPC
    
    [ Upstream commit f8da41de0bff9eb1d774a7253da0c9f637c4470a ]
    
    If we fail to create an inline extent due to -ENOSPC, we will attempt to
    go through the normal COW path, reserve an extent, create an ordered
    extent, etc. However we were always freeing the reserved qgroup data,
    which is wrong since we will use data. Fix this by freeing the reserved
    qgroup data in __cow_file_range_inline() only if we are not doing the
    fallback (ret is <= 0).
    
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: fix reservation leak in some error paths when inserting inline extent [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Fri Dec 12 17:18:25 2025 +0000

    btrfs: fix reservation leak in some error paths when inserting inline extent
    
    [ Upstream commit c1c050f92d8f6aac4e17f7f2230160794fceef0c ]
    
    If we fail to allocate a path or join a transaction, we return from
    __cow_file_range_inline() without freeing the reserved qgroup data,
    resulting in a leak. Fix this by ensuring we call btrfs_qgroup_free_data()
    in such cases.
    
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: fix Wmaybe-uninitialized warning in replay_one_buffer() [+ + +]
Author: Qiang Ma <maqianga@uniontech.com>
Date:   Thu Dec 18 16:16:18 2025 +0800

    btrfs: fix Wmaybe-uninitialized warning in replay_one_buffer()
    
    [ Upstream commit 9c7e71c97c8cd086b148d0d3d1cd84a1deab023c ]
    
    Warning was found when compiling using loongarch64-gcc 12.3.1:
    
      $ make CFLAGS_tree-log.o=-Wmaybe-uninitialized
    
      In file included from fs/btrfs/ctree.h:21,
                       from fs/btrfs/tree-log.c:12:
      fs/btrfs/accessors.h: In function 'replay_one_buffer':
      fs/btrfs/accessors.h:66:16: warning: 'inode_item' may be used uninitialized [-Wmaybe-uninitialized]
         66 |         return btrfs_get_##bits(eb, s, offsetof(type, member));         \
            |                ^~~~~~~~~~
      fs/btrfs/tree-log.c:2803:42: note: 'inode_item' declared here
       2803 |                 struct btrfs_inode_item *inode_item;
            |                                          ^~~~~~~~~~
    
    Initialize the inode_item to NULL, the compiler does not seem to see the
    relation between the first 'wc->log_key.type == BTRFS_INODE_ITEM_KEY'
    check and the other one that also checks the replay phase.
    
    Signed-off-by: Qiang Ma <maqianga@uniontech.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: reject new transactions if the fs is fully read-only [+ + +]
Author: Qu Wenruo <wqu@suse.com>
Date:   Wed Jan 14 07:28:28 2026 +1030

    btrfs: reject new transactions if the fs is fully read-only
    
    [ Upstream commit 1972f44c189c8aacde308fa9284e474c1a5cbd9f ]
    
    [BUG]
    There is a bug report where a heavily fuzzed fs is mounted with all
    rescue mount options, which leads to the following warnings during
    unmount:
    
      BTRFS: Transaction aborted (error -22)
      Modules linked in:
      CPU: 0 UID: 0 PID: 9758 Comm: repro.out Not tainted
      6.19.0-rc5-00002-gb71e635feefc #7 PREEMPT(full)
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
      RIP: 0010:find_free_extent_update_loop fs/btrfs/extent-tree.c:4208 [inline]
      RIP: 0010:find_free_extent+0x52f0/0x5d20 fs/btrfs/extent-tree.c:4611
      Call Trace:
       <TASK>
       btrfs_reserve_extent+0x2cd/0x790 fs/btrfs/extent-tree.c:4705
       btrfs_alloc_tree_block+0x1e1/0x10e0 fs/btrfs/extent-tree.c:5157
       btrfs_force_cow_block+0x578/0x2410 fs/btrfs/ctree.c:517
       btrfs_cow_block+0x3c4/0xa80 fs/btrfs/ctree.c:708
       btrfs_search_slot+0xcad/0x2b50 fs/btrfs/ctree.c:2130
       btrfs_truncate_inode_items+0x45d/0x2350 fs/btrfs/inode-item.c:499
       btrfs_evict_inode+0x923/0xe70 fs/btrfs/inode.c:5628
       evict+0x5f4/0xae0 fs/inode.c:837
       __dentry_kill+0x209/0x660 fs/dcache.c:670
       finish_dput+0xc9/0x480 fs/dcache.c:879
       shrink_dcache_for_umount+0xa0/0x170 fs/dcache.c:1661
       generic_shutdown_super+0x67/0x2c0 fs/super.c:621
       kill_anon_super+0x3b/0x70 fs/super.c:1289
       btrfs_kill_super+0x41/0x50 fs/btrfs/super.c:2127
       deactivate_locked_super+0xbc/0x130 fs/super.c:474
       cleanup_mnt+0x425/0x4c0 fs/namespace.c:1318
       task_work_run+0x1d4/0x260 kernel/task_work.c:233
       exit_task_work include/linux/task_work.h:40 [inline]
       do_exit+0x694/0x22f0 kernel/exit.c:971
       do_group_exit+0x21c/0x2d0 kernel/exit.c:1112
       __do_sys_exit_group kernel/exit.c:1123 [inline]
       __se_sys_exit_group kernel/exit.c:1121 [inline]
       __x64_sys_exit_group+0x3f/0x40 kernel/exit.c:1121
       x64_sys_call+0x2210/0x2210 arch/x86/include/generated/asm/syscalls_64.h:232
       do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
       do_syscall_64+0xe8/0xf80 arch/x86/entry/syscall_64.c:94
       entry_SYSCALL_64_after_hwframe+0x77/0x7f
      RIP: 0033:0x44f639
      Code: Unable to access opcode bytes at 0x44f60f.
      RSP: 002b:00007ffc15c4e088 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7
      RAX: ffffffffffffffda RBX: 00000000004c32f0 RCX: 000000000044f639
      RDX: 000000000000003c RSI: 00000000000000e7 RDI: 0000000000000001
      RBP: 0000000000000001 R08: ffffffffffffffc0 R09: 0000000000000000
      R10: 0000000000000000 R11: 0000000000000246 R12: 00000000004c32f0
      R13: 0000000000000001 R14: 0000000000000000 R15: 0000000000000001
       </TASK>
    
    Since rescue mount options will mark the full fs read-only, there should
    be no new transaction triggered.
    
    But during unmount we will evict all inodes, which can trigger a new
    transaction, and triggers warnings on a heavily corrupted fs.
    
    [CAUSE]
    Btrfs allows new transaction even on a read-only fs, this is to allow
    log replay happen even on read-only mounts, just like what ext4/xfs do.
    
    However with rescue mount options, the fs is fully read-only and cannot
    be remounted read-write, thus in that case we should also reject any new
    transactions.
    
    [FIX]
    If we find the fs has rescue mount options, we should treat the fs as
    error, so that no new transaction can be started.
    
    Reported-by: Jiaming Zhang <r772577952@gmail.com>
    Link: https://lore.kernel.org/linux-btrfs/CANypQFYw8Nt8stgbhoycFojOoUmt+BoZ-z8WJOZVxcogDdwm=Q@mail.gmail.com/
    Reviewed-by: Boris Burkov <boris@bur.io>
    Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: sync read disk super and set block size [+ + +]
Author: Edward Adam Davis <eadavis@qq.com>
Date:   Fri Jan 9 21:02:02 2026 +0800

    btrfs: sync read disk super and set block size
    
    [ Upstream commit 3f29d661e5686f3aa14e6f11537ff5c49846f2e2 ]
    
    When the user performs a btrfs mount, the block device is not set
    correctly. The user sets the block size of the block device to 0x4000
    by executing the BLKBSZSET command.
    Since the block size change also changes the mapping->flags value, this
    further affects the result of the mapping_min_folio_order() calculation.
    
    Let's analyze the following two scenarios:
    
    Scenario 1: Without executing the BLKBSZSET command, the block size is
    0x1000, and mapping_min_folio_order() returns 0;
    
    Scenario 2: After executing the BLKBSZSET command, the block size is
    0x4000, and mapping_min_folio_order() returns 2.
    
    do_read_cache_folio() allocates a folio before the BLKBSZSET command
    is executed. This results in the allocated folio having an order value
    of 0. Later, after BLKBSZSET is executed, the block size increases to
    0x4000, and the mapping_min_folio_order() calculation result becomes 2.
    
    This leads to two undesirable consequences:
    
    1. filemap_add_folio() triggers a VM_BUG_ON_FOLIO(folio_order(folio) <
    mapping_min_folio_order(mapping)) assertion.
    
    2. The syzbot report [1] shows a null pointer dereference in
    create_empty_buffers() due to a buffer head allocation failure.
    
    Synchronization should be established based on the inode between the
    BLKBSZSET command and read cache page to prevent inconsistencies in
    block size or mapping flags before and after folio allocation.
    
    [1]
    KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
    RIP: 0010:create_empty_buffers+0x4d/0x480 fs/buffer.c:1694
    Call Trace:
     folio_create_buffers+0x109/0x150 fs/buffer.c:1802
     block_read_full_folio+0x14c/0x850 fs/buffer.c:2403
     filemap_read_folio+0xc8/0x2a0 mm/filemap.c:2496
     do_read_cache_folio+0x266/0x5c0 mm/filemap.c:4096
     do_read_cache_page mm/filemap.c:4162 [inline]
     read_cache_page_gfp+0x29/0x120 mm/filemap.c:4195
     btrfs_read_disk_super+0x192/0x500 fs/btrfs/volumes.c:1367
    
    Reported-by: syzbot+b4a2af3000eaa84d95d5@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=b4a2af3000eaa84d95d5
    Signed-off-by: Edward Adam Davis <eadavis@qq.com>
    Reviewed-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bus: mhi: host: pci_generic: Add Telit FE990B40 modem support [+ + +]
Author: Daniele Palmas <dnlplm@gmail.com>
Date:   Wed Oct 15 12:20:59 2025 +0200

    bus: mhi: host: pci_generic: Add Telit FE990B40 modem support
    
    commit 6eaee77923ddf04beedb832c06f983679586361c upstream.
    
    Add SDX72 based modem Telit FE990B40, reusing FN920C04 configuration.
    
    01:00.0 Unassigned class [ff00]: Qualcomm Device 0309
            Subsystem: Device 1c5d:2025
    
    Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
    Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
    Link: https://patch.msgid.link/20251015102059.1781001-1-dnlplm@gmail.com
    Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ceph: fix NULL pointer dereference in ceph_mds_auth_match() [+ + +]
Author: Viacheslav Dubeyko <Slava.Dubeyko@ibm.com>
Date:   Tue Feb 3 14:54:46 2026 -0800

    ceph: fix NULL pointer dereference in ceph_mds_auth_match()
    
    commit 7987cce375ac8ce98e170a77aa2399f2cf6eb99f upstream.
    
    The CephFS kernel client has regression starting from 6.18-rc1.
    We have issue in ceph_mds_auth_match() if fs_name == NULL:
    
        const char fs_name = mdsc->fsc->mount_options->mds_namespace;
        ...
        if (auth->match.fs_name && strcmp(auth->match.fs_name, fs_name)) {
                / fsname mismatch, try next one */
                return 0;
        }
    
    Patrick Donnelly suggested that: In summary, we should definitely start
    decoding `fs_name` from the MDSMap and do strict authorizations checks
    against it. Note that the `-o mds_namespace=foo` should only be used for
    selecting the file system to mount and nothing else. It's possible
    no mds_namespace is specified but the kernel will mount the only
    file system that exists which may have name "foo".
    
    This patch reworks ceph_mdsmap_decode() and namespace_equals() with
    the goal of supporting the suggested concept. Now struct ceph_mdsmap
    contains m_fs_name field that receives copy of extracted FS name
    by ceph_extract_encoded_string(). For the case of "old" CephFS file
    systems, it is used "cephfs" name.
    
    [ idryomov: replace redundant %*pE with %s in ceph_mdsmap_decode(),
      get rid of a series of strlen() calls in ceph_namespace_match(),
      drop changes to namespace_equals() body to avoid treating empty
      mds_namespace as equal, drop changes to ceph_mdsc_handle_fsmap()
      as namespace_equals() isn't an equivalent substitution there ]
    
    Cc: stable@vger.kernel.org
    Fixes: 22c73d52a6d0 ("ceph: fix multifs mds auth caps issue")
    Link: https://tracker.ceph.com/issues/73886
    Signed-off-by: Viacheslav Dubeyko <Slava.Dubeyko@ibm.com>
    Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
    Tested-by: Patrick Donnelly <pdonnell@ibm.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ceph: fix oops due to invalid pointer for kfree() in parse_longname() [+ + +]
Author: Daniel Vogelbacher <daniel@chaospixel.com>
Date:   Sun Feb 1 09:34:01 2026 +0100

    ceph: fix oops due to invalid pointer for kfree() in parse_longname()
    
    commit bc8dedae022ce3058659c3addef3ec4b41d15e00 upstream.
    
    This fixes a kernel oops when reading ceph snapshot directories (.snap),
    for example by simply running `ls /mnt/my_ceph/.snap`.
    
    The variable str is guarded by __free(kfree), but advanced by one for
    skipping the initial '_' in snapshot names. Thus, kfree() is called
    with an invalid pointer.  This patch removes the need for advancing the
    pointer so kfree() is called with correct memory pointer.
    
    Steps to reproduce:
    
    1. Create snapshots on a cephfs volume (I've 63 snaps in my testcase)
    
    2. Add cephfs mount to fstab
    $ echo "samba-fileserver@.files=/volumes/datapool/stuff/3461082b-ecc9-4e82-8549-3fd2590d3fb6      /mnt/test/stuff   ceph     acl,noatime,_netdev    0       0" >> /etc/fstab
    
    3. Reboot the system
    $ systemctl reboot
    
    4. Check if it's really mounted
    $ mount | grep stuff
    
    5. List snapshots (expected 63 snapshots on my system)
    $ ls /mnt/test/stuff/.snap
    
    Now ls hangs forever and the kernel log shows the oops.
    
    Cc: stable@vger.kernel.org
    Fixes: 101841c38346 ("[ceph] parse_longname(): strrchr() expects NUL-terminated string")
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220807
    Suggested-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Daniel Vogelbacher <daniel@chaospixel.com>
    Reviewed-by: Viacheslav Dubeyko <Slava.Dubeyko@ibm.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
cgroup/dmem: avoid pool UAF [+ + +]
Author: Chen Ridong <chenridong@huawei.com>
Date:   Mon Feb 2 12:27:18 2026 +0000

    cgroup/dmem: avoid pool UAF
    
    commit 99a2ef500906138ba58093b9893972a5c303c734 upstream.
    
    An UAF issue was observed:
    
    BUG: KASAN: slab-use-after-free in page_counter_uncharge+0x65/0x150
    Write of size 8 at addr ffff888106715440 by task insmod/527
    
    CPU: 4 UID: 0 PID: 527 Comm: insmod    6.19.0-rc7-next-20260129+ #11
    Tainted: [O]=OOT_MODULE
    Call Trace:
    <TASK>
    dump_stack_lvl+0x82/0xd0
    kasan_report+0xca/0x100
    kasan_check_range+0x39/0x1c0
    page_counter_uncharge+0x65/0x150
    dmem_cgroup_uncharge+0x1f/0x260
    
    Allocated by task 527:
    
    Freed by task 0:
    
    The buggy address belongs to the object at ffff888106715400
    which belongs to the cache kmalloc-512 of size 512
    The buggy address is located 64 bytes inside of
    freed 512-byte region [ffff888106715400, ffff888106715600)
    
    The buggy address belongs to the physical page:
    
    Memory state around the buggy address:
    ffff888106715300: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    ffff888106715380: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    >ffff888106715400: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                                         ^
    ffff888106715480: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    ffff888106715500: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    
    The issue occurs because a pool can still be held by a caller after its
    associated memory region is unregistered. The current implementation frees
    the pool even if users still hold references to it (e.g., before uncharge
    operations complete).
    
    This patch adds a reference counter to each pool, ensuring that a pool is
    only freed when its reference count drops to zero.
    
    Fixes: b168ed458dde ("kernel/cgroup: Add "dmem" memory accounting cgroup")
    Cc: stable@vger.kernel.org # v6.14+
    Signed-off-by: Chen Ridong <chenridong@huawei.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

cgroup/dmem: avoid rcu warning when unregister region [+ + +]
Author: Chen Ridong <chenridong@huawei.com>
Date:   Mon Feb 2 12:27:17 2026 +0000

    cgroup/dmem: avoid rcu warning when unregister region
    
    commit 592a68212c5664bcaa88f24ed80bf791282790fe upstream.
    
    A warnning was detected:
    
     WARNING: suspicious RCU usage
     6.19.0-rc7-next-20260129+ #1101 Tainted: G           O
     kernel/cgroup/dmem.c:456 suspicious rcu_dereference_check() usage!
    
     other info that might help us debug this:
    
     rcu_scheduler_active = 2, debug_locks = 1
     1 lock held by insmod/532:
      #0: ffffffff85e78b38 (dmemcg_lock){+.+.}-dmem_cgroup_unregister_region+
    
     stack backtrace:
     CPU: 2 UID: 0 PID: 532 Comm: insmod Tainted: 6.19.0-rc7-next-
     Tainted: [O]=OOT_MODULE
     Call Trace:
      <TASK>
      dump_stack_lvl+0xb0/0xd0
      lockdep_rcu_suspicious+0x151/0x1c0
      dmem_cgroup_unregister_region+0x1e2/0x380
      ? __pfx_dmem_test_init+0x10/0x10 [dmem_uaf]
      dmem_test_init+0x65/0xff0 [dmem_uaf]
      do_one_initcall+0xbb/0x3a0
    
    The macro list_for_each_rcu() must be used within an RCU read-side critical
    section (between rcu_read_lock() and rcu_read_unlock()). Using it outside
    that context, as seen in dmem_cgroup_unregister_region(), triggers the
    lockdep warning because the RCU protection is not guaranteed.
    
    Replace list_for_each_rcu() with list_for_each_entry_safe(), which is
    appropriate for traversal under spinlock protection where nodes may be
    deleted.
    
    Fixes: b168ed458dde ("kernel/cgroup: Add "dmem" memory accounting cgroup")
    Cc: stable@vger.kernel.org # v6.14+
    Signed-off-by: Chen Ridong <chenridong@huawei.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

cgroup/dmem: fix NULL pointer dereference when setting max [+ + +]
Author: Chen Ridong <chenridong@huawei.com>
Date:   Mon Feb 2 12:27:16 2026 +0000

    cgroup/dmem: fix NULL pointer dereference when setting max
    
    commit 43151f812886be1855d2cba059f9c93e4729460b upstream.
    
    An issue was triggered:
    
     BUG: kernel NULL pointer dereference, address: 0000000000000000
     #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: 15 UID: 0 PID: 658 Comm: bash Tainted: 6.19.0-rc6-next-2026012
     Tainted: [O]=OOT_MODULE
     Hardware name: QEMU Standard PC (i440FX + PIIX, 1996),
     RIP: 0010:strcmp+0x10/0x30
     RSP: 0018:ffffc900017f7dc0 EFLAGS: 00000246
     RAX: 0000000000000000 RBX: 0000000000000000 RCX: ffff888107cd4358
     RDX: 0000000019f73907 RSI: ffffffff82cc381a RDI: 0000000000000000
     RBP: ffff8881016bef0d R08: 000000006c0e7145 R09: 0000000056c0e714
     R10: 0000000000000001 R11: ffff888107cd4358 R12: 0007ffffffffffff
     R13: ffff888101399200 R14: ffff888100fcb360 R15: 0007ffffffffffff
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 0000000000000000 CR3: 0000000105c79000 CR4: 00000000000006f0
     Call Trace:
      <TASK>
      dmemcg_limit_write.constprop.0+0x16d/0x390
      ? __pfx_set_resource_max+0x10/0x10
      kernfs_fop_write_iter+0x14e/0x200
      vfs_write+0x367/0x510
      ksys_write+0x66/0xe0
      do_syscall_64+0x6b/0x390
      entry_SYSCALL_64_after_hwframe+0x76/0x7e
     RIP: 0033:0x7f42697e1887
    
    It was trriggered setting max without limitation, the command is like:
    "echo test/region0 > dmem.max". To fix this issue, add check whether
    options is valid after parsing the region_name.
    
    Fixes: b168ed458dde ("kernel/cgroup: Add "dmem" memory accounting cgroup")
    Cc: stable@vger.kernel.org # v6.14+
    Signed-off-by: Chen Ridong <chenridong@huawei.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dmaengine: mmp_pdma: Fix race condition in mmp_pdma_residue() [+ + +]
Author: Guodong Xu <guodong@riscstar.com>
Date:   Tue Dec 16 22:10:06 2025 +0800

    dmaengine: mmp_pdma: Fix race condition in mmp_pdma_residue()
    
    [ Upstream commit a143545855bc2c6e1330f6f57ae375ac44af00a7 ]
    
    Add proper locking in mmp_pdma_residue() to prevent use-after-free when
    accessing descriptor list and descriptor contents.
    
    The race occurs when multiple threads call tx_status() while the tasklet
    on another CPU is freeing completed descriptors:
    
    CPU 0                              CPU 1
    -----                              -----
    mmp_pdma_tx_status()
    mmp_pdma_residue()
      -> NO LOCK held
         list_for_each_entry(sw, ..)
                                       DMA interrupt
                                       dma_do_tasklet()
                                         -> spin_lock(&desc_lock)
                                            list_move(sw->node, ...)
                                            spin_unlock(&desc_lock)
      |                                     dma_pool_free(sw) <- FREED!
      -> access sw->desc <- UAF!
    
    This issue can be reproduced when running dmatest on the same channel with
    multiple threads (threads_per_chan > 1).
    
    Fix by protecting the chain_running list iteration and descriptor access
    with the chan->desc_lock spinlock.
    
    Signed-off-by: Juan Li <lijuan@linux.spacemit.com>
    Signed-off-by: Guodong Xu <guodong@riscstar.com>
    Link: https://patch.msgid.link/20251216-mmp-pdma-race-v1-1-976a224bb622@riscstar.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dpaa2-switch: add bounds check for if_id in IRQ handler [+ + +]
Author: Junrui Luo <moonafterrain@outlook.com>
Date:   Thu Jan 29 00:55:13 2026 +0800

    dpaa2-switch: add bounds check for if_id in IRQ handler
    
    [ Upstream commit 31a7a0bbeb006bac2d9c81a2874825025214b6d8 ]
    
    The IRQ handler extracts if_id from the upper 16 bits of the hardware
    status register and uses it to index into ethsw->ports[] without
    validation. Since if_id can be any 16-bit value (0-65535) but the ports
    array is only allocated with sw_attr.num_ifs elements, this can lead to
    an out-of-bounds read potentially.
    
    Add a bounds check before accessing the array, consistent with the
    existing validation in dpaa2_switch_rx().
    
    Reported-by: Yuhao Jiang <danisjiang@gmail.com>
    Reported-by: Junrui Luo <moonafterrain@outlook.com>
    Fixes: 24ab724f8a46 ("dpaa2-switch: use the port index in the IRQ handler")
    Signed-off-by: Junrui Luo <moonafterrain@outlook.com>
    Link: https://patch.msgid.link/SYBPR01MB7881D420AB43FF1A227B84AFAF91A@SYBPR01MB7881.ausprd01.prod.outlook.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

dpaa2-switch: prevent ZERO_SIZE_PTR dereference when num_ifs is zero [+ + +]
Author: Junrui Luo <moonafterrain@outlook.com>
Date:   Wed Jan 28 16:07:34 2026 +0800

    dpaa2-switch: prevent ZERO_SIZE_PTR dereference when num_ifs is zero
    
    [ Upstream commit ed48a84a72fefb20a82dd90a7caa7807e90c6f66 ]
    
    The driver allocates arrays for ports, FDBs, and filter blocks using
    kcalloc() with ethsw->sw_attr.num_ifs as the element count. When the
    device reports zero interfaces (either due to hardware configuration
    or firmware issues), kcalloc(0, ...) returns ZERO_SIZE_PTR (0x10)
    instead of NULL.
    
    Later in dpaa2_switch_probe(), the NAPI initialization unconditionally
    accesses ethsw->ports[0]->netdev, which attempts to dereference
    ZERO_SIZE_PTR (address 0x10), resulting in a kernel panic.
    
    Add a check to ensure num_ifs is greater than zero after retrieving
    device attributes. This prevents the zero-sized allocations and
    subsequent invalid pointer dereference.
    
    Reported-by: Yuhao Jiang <danisjiang@gmail.com>
    Reported-by: Junrui Luo <moonafterrain@outlook.com>
    Fixes: 0b1b71370458 ("staging: dpaa2-switch: handle Rx path on control interface")
    Signed-off-by: Junrui Luo <moonafterrain@outlook.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://patch.msgid.link/SYBPR01MB7881BEABA8DA896947962470AF91A@SYBPR01MB7881.ausprd01.prod.outlook.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amd/display: fix wrong color value mapping on MCM shaper LUT [+ + +]
Author: Melissa Wen <mwen@igalia.com>
Date:   Thu Jan 22 12:20:29 2026 -0300

    drm/amd/display: fix wrong color value mapping on MCM shaper LUT
    
    [ Upstream commit 8f959d37c1f2efec6dac55915ee82302e98101fb ]
    
    Some shimmer/colorful points appears when using the steamOS color
    pipeline for HDR on gaming with DCN32. These points look like black
    values being wrongly mapped to red/blue/green values. It was caused
    because the number of hw points in regular LUTs and in a shaper LUT was
    treated as the same.
    
    DCN3+ regular LUTs have 257 bases and implicit deltas (i.e. HW
    calculates them), but shaper LUT is a special case: it has 256 bases and
    256 deltas, as in DCN1-2 regular LUTs, and outputs 14-bit values.
    
    Fix that by setting by decreasing in 1 the number of HW points computed
    in the LUT segmentation so that shaper LUT (i.e. fixpoint == true) keeps
    the same DCN10 CM logic and regular LUTs go with `hw_points + 1`.
    
    CC: Krunoslav Kovac <Krunoslav.Kovac@amd.com>
    Fixes: 4d5fd3d08ea9 ("drm/amd/display: PQ tail accuracy")
    Signed-off-by: Melissa Wen <mwen@igalia.com>
    Reviewed-by: Alex Hung <alex.hung@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 5006505b19a2119e71c008044d59f6d753c858b9)
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd/display: Reduce number of arguments of dcn30's CalculatePrefetchSchedule() [+ + +]
Author: Nathan Chancellor <nathan@kernel.org>
Date:   Sat Dec 13 19:58:10 2025 +0900

    drm/amd/display: Reduce number of arguments of dcn30's CalculatePrefetchSchedule()
    
    [ Upstream commit f54a91f5337cd918eb86cf600320d25b6cfd8209 ]
    
    After an innocuous optimization change in clang-22,
    dml30_ModeSupportAndSystemConfigurationFull() is over the 2048 byte
    stack limit for display_mode_vba_30.c.
    
      drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn30/display_mode_vba_30.c:3529:6: warning: stack frame size (2096) exceeds limit (2048) in 'dml30_ModeSupportAndSystemConfigurationFull' [-Wframe-larger-than]
       3529 | void dml30_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
            |      ^
    
    With clang-21, this function was already close to the limit:
    
      drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn30/display_mode_vba_30.c:3529:6: warning: stack frame size (1912) exceeds limit (1586) in 'dml30_ModeSupportAndSystemConfigurationFull' [-Wframe-larger-than]
       3529 | void dml30_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib)
            |      ^
    
    CalculatePrefetchSchedule() has a large number of parameters, which must
    be passed on the stack. Most of the parameters between the two callsites
    are the same, so they can be accessed through the existing mode_lib
    pointer, instead of being passed as explicit arguments. Doing this
    reduces the stack size of dml30_ModeSupportAndSystemConfigurationFull()
    from 2096 bytes to 1912 bytes with clang-22.
    
    Closes: https://github.com/ClangBuiltLinux/linux/issues/2117
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit b20b3fc4210f83089f835cdb91deec4b0778761a)
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amd/pm: Disable MMIO access during SMU Mode 1 reset [+ + +]
Author: Perry Yuan <perry.yuan@amd.com>
Date:   Thu Dec 25 16:43:49 2025 +0800

    drm/amd/pm: Disable MMIO access during SMU Mode 1 reset
    
    [ Upstream commit 0de604d0357d0d22cbf03af1077d174b641707b6 ]
    
    During Mode 1 reset, the ASIC undergoes a reset cycle and becomes
    temporarily inaccessible via PCIe. Any attempt to access MMIO registers
    during this window (e.g., from interrupt handlers or other driver threads)
    can result in uncompleted PCIe transactions, leading to NMI panics or
    system hangs.
    
    To prevent this, set the `no_hw_access` flag to true immediately after
    triggering the reset. This signals other driver components to skip
    register accesses while the device is offline.
    
    A memory barrier `smp_mb()` is added to ensure the flag update is
    globally visible to all cores before the driver enters the sleep/wait
    state.
    
    Signed-off-by: Perry Yuan <perry.yuan@amd.com>
    Reviewed-by: Yifan Zhang <yifan1.zhang@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 7edb503fe4b6d67f47d8bb0dfafb8e699bb0f8a4)
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amd: Set minimum version for set_hw_resource_1 on gfx11 to 0x52 [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Thu Jan 29 13:47:22 2026 -0600

    drm/amd: Set minimum version for set_hw_resource_1 on gfx11 to 0x52
    
    commit 1478a34470bf4755465d29b348b24a610bccc180 upstream.
    
    commit f81cd793119e ("drm/amd/amdgpu: Fix MES init sequence") caused
    a dependency on new enough MES firmware to use amdgpu.  This was fixed
    on most gfx11 and gfx12 hardware with commit 0180e0a5dd5c
    ("drm/amdgpu/mes: add compatibility checks for set_hw_resource_1"), but
    this left out that GC 11.0.4 had breakage at MES 0x51.
    
    Bump the requirement to 0x52 instead.
    
    Reported-by: danijel@nausys.com
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4576
    Fixes: f81cd793119e ("drm/amd/amdgpu: Fix MES init sequence")
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit c2d2ccc85faf8cc6934d50c18e43097eb453ade2)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/mgag200: fix mgag200_bmc_stop_scanout() [+ + +]
Author: Jacob Keller <jacob.e.keller@intel.com>
Date:   Mon Feb 2 16:16:39 2026 -0800

    drm/mgag200: fix mgag200_bmc_stop_scanout()
    
    [ Upstream commit 0e0c8f4d16de92520623aa1ea485cadbf64e6929 ]
    
    The mgag200_bmc_stop_scanout() function is called by the .atomic_disable()
    handler for the MGA G200 VGA BMC encoder. This function performs a few
    register writes to inform the BMC of an upcoming mode change, and then
    polls to wait until the BMC actually stops.
    
    The polling is implemented using a busy loop with udelay() and an iteration
    timeout of 300, resulting in the function blocking for 300 milliseconds.
    
    The function gets called ultimately by the output_poll_execute work thread
    for the DRM output change polling thread of the mgag200 driver:
    
    kworker/0:0-mm_    3528 [000]  4555.315364:
            ffffffffaa0e25b3 delay_halt.part.0+0x33
            ffffffffc03f6188 mgag200_bmc_stop_scanout+0x178
            ffffffffc087ae7a disable_outputs+0x12a
            ffffffffc087c12a drm_atomic_helper_commit_tail+0x1a
            ffffffffc03fa7b6 mgag200_mode_config_helper_atomic_commit_tail+0x26
            ffffffffc087c9c1 commit_tail+0x91
            ffffffffc087d51b drm_atomic_helper_commit+0x11b
            ffffffffc0509694 drm_atomic_commit+0xa4
            ffffffffc05105e8 drm_client_modeset_commit_atomic+0x1e8
            ffffffffc0510ce6 drm_client_modeset_commit_locked+0x56
            ffffffffc0510e24 drm_client_modeset_commit+0x24
            ffffffffc088a743 __drm_fb_helper_restore_fbdev_mode_unlocked+0x93
            ffffffffc088a683 drm_fb_helper_hotplug_event+0xe3
            ffffffffc050f8aa drm_client_dev_hotplug+0x9a
            ffffffffc088555a output_poll_execute+0x29a
            ffffffffa9b35924 process_one_work+0x194
            ffffffffa9b364ee worker_thread+0x2fe
            ffffffffa9b3ecad kthread+0xdd
            ffffffffa9a08549 ret_from_fork+0x29
    
    On a server running ptp4l with the mgag200 driver loaded, we found that
    ptp4l would sometimes get blocked from execution because of this busy
    waiting loop.
    
    Every so often, approximately once every 20 minutes -- though with large
    variance -- the output_poll_execute() thread would detect some sort of
    change that required performing a hotplug event which results in attempting
    to stop the BMC scanout, resulting in a 300msec delay on one CPU.
    
    On this system, ptp4l was pinned to a single CPU. When the
    output_poll_execute() thread ran on that CPU, it blocked ptp4l from
    executing for its 300 millisecond duration.
    
    This resulted in PTP service disruptions such as failure to send a SYNC
    message on time, failure to handle ANNOUNCE messages on time, and clock
    check warnings from the application. All of this despite the application
    being configured with FIFO_RT and a higher priority than the background
    workqueue tasks. (However, note that the kernel did not use
    CONFIG_PREEMPT...)
    
    It is unclear if the event is due to a faulty VGA connection, another bug,
    or actual events causing a change in the connection. At least on the system
    under test it is not a one-time event and consistently causes disruption to
    the time sensitive applications.
    
    The function has some helpful comments explaining what steps it is
    attempting to take. In particular, step 3a and 3b are explained as such:
    
      3a - The third step is to verify if there is an active scan. We are
           waiting on a 0 on remhsyncsts (<XSPAREREG<0>.
    
      3b - This step occurs only if the remove is actually scanning. We are
           waiting for the end of the frame which is a 1 on remvsyncsts
           (<XSPAREREG<1>).
    
    The actual steps 3a and 3b are implemented as while loops with a
    non-sleeping udelay(). The first step iterates while the tmp value at
    position 0 is *not* set. That is, it keeps iterating as long as the bit is
    zero. If the bit is already 0 (because there is no active scan), it will
    iterate the entire 300 attempts which wastes 300 milliseconds in total.
    This is opposite of what the description claims.
    
    The step 3b logic only executes if we do not iterate over the entire 300
    attempts in the first loop. If it does trigger, it is trying to check and
    wait for a 1 on the remvsyncsts. However, again the condition is actually
    inverted and it will loop as long as the bit is 1, stopping once it hits
    zero (rather than the explained attempt to wait until we see a 1).
    
    Worse, both loops are implemented using non-sleeping waits which spin
    instead of allowing the scheduler to run other processes. If the kernel is
    not configured to allow arbitrary preemption, it will waste valuable CPU
    time doing nothing.
    
    There does not appear to be any documentation for the BMC register
    interface, beyond what is in the comments here. It seems more probable that
    the comment here is correct and the implementation accidentally got
    inverted from the intended logic.
    
    Reading through other DRM driver implementations, it does not appear that
    the .atomic_enable or .atomic_disable handlers need to delay instead of
    sleep. For example, the ast_astdp_encoder_helper_atomic_disable() function
    calls ast_dp_set_phy_sleep() which uses msleep(). The "atomic" in the name
    is referring to the atomic modesetting support, which is the support to
    enable atomic configuration from userspace, and not to the "atomic context"
    of the kernel. There is no reason to use udelay() here if a sleep would be
    sufficient.
    
    Replace the while loops with a read_poll_timeout() based implementation
    that will sleep between iterations, and which stops polling once the
    condition is met (instead of looping as long as the condition is met). This
    aligns with the commented behavior and avoids blocking on the CPU while
    doing nothing.
    
    Note the RREG_DAC is implemented using a statement expression to allow
    working properly with the read_poll_timeout family of functions. The other
    RREG_<TYPE> macros ought to be cleaned up to have better semantics, and
    several places in the mgag200 driver could make use of RREG_DAC or similar
    RREG_* macros should likely be cleaned up for better semantics as well, but
    that task has been left as a future cleanup for a non-bugfix.
    
    Fixes: 414c45310625 ("mgag200: initial g200se driver (v2)")
    Suggested-by: Thomas Zimmermann <tzimmermann@suse.de>
    Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
    Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
    Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
    Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
    Link: https://patch.msgid.link/20260202-jk-mgag200-fix-bad-udelay-v2-1-ce1e9665987d@intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/xe/guc: Fix CFI violation in debugfs access. [+ + +]
Author: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Date:   Thu Jan 29 10:25:48 2026 -0800

    drm/xe/guc: Fix CFI violation in debugfs access.
    
    [ Upstream commit 4cb1b327135dddf3d0ec2544ea36ed05ba2252bc ]
    
    xe_guc_print_info is void-returning, but the function pointer it is
    assigned to expects an int-returning function, leading to the following
    CFI error:
    
    [  206.873690] CFI failure at guc_debugfs_show+0xa1/0xf0 [xe]
    (target: xe_guc_print_info+0x0/0x370 [xe]; expected type: 0xbe3bc66a)
    
    Fix this by updating xe_guc_print_info to return an integer.
    
    Fixes: e15826bb3c2c ("drm/xe/guc: Refactor GuC debugfs initialization")
    Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
    Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
    Cc: George D Sworo <george.d.sworo@intel.com>
    Reviewed-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
    Link: https://patch.msgid.link/20260129182547.32899-2-daniele.ceraolospurio@intel.com
    (cherry picked from commit dd8ea2f2ab71b98887fdc426b0651dbb1d1ea760)
    Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/xe/pm: Disable D3Cold for BMG only on specific platforms [+ + +]
Author: Karthik Poosa <karthik.poosa@intel.com>
Date:   Fri Jan 23 23:02:38 2026 +0530

    drm/xe/pm: Disable D3Cold for BMG only on specific platforms
    
    [ Upstream commit bb36170d959fad7f663f91eb9c32a84dd86bef2b ]
    
    Restrict D3Cold disablement for BMG to unsupported NUC platforms,
    instead of disabling it on all platforms.
    
    Signed-off-by: Karthik Poosa <karthik.poosa@intel.com>
    Fixes: 3e331a6715ee ("drm/xe/pm: Temporarily disable D3Cold on BMG")
    Link: https://patch.msgid.link/20260123173238.1642383-1-karthik.poosa@intel.com
    Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
    (cherry picked from commit 39125eaf8863ab09d70c4b493f58639b08d5a897)
    Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/xe/query: Fix topology query pointer advance [+ + +]
Author: Shuicheng Lin <shuicheng.lin@intel.com>
Date:   Fri Jan 30 04:39:08 2026 +0000

    drm/xe/query: Fix topology query pointer advance
    
    [ Upstream commit 7ee9b3e091c63da71e15c72003f1f07e467f5158 ]
    
    The topology query helper advanced the user pointer by the size
    of the pointer, not the size of the structure. This can misalign
    the output blob and corrupt the following mask. Fix the increment
    to use sizeof(*topo).
    There is no issue currently, as sizeof(*topo) happens to be equal
    to sizeof(topo) on 64-bit systems (both evaluate to 8 bytes).
    
    Fixes: dd08ebf6c352 ("drm/xe: Introduce a new DRM driver for Intel GPUs")
    Signed-off-by: Shuicheng Lin <shuicheng.lin@intel.com>
    Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
    Link: https://patch.msgid.link/20260130043907.465128-2-shuicheng.lin@intel.com
    Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
    (cherry picked from commit c2a6859138e7f73ad904be17dd7d1da6cc7f06b3)
    Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
firmware: cs_dsp: Factor out common debugfs string read [+ + +]
Author: Richard Fitzgerald <rf@opensource.cirrus.com>
Date:   Thu Nov 20 13:06:39 2025 +0000

    firmware: cs_dsp: Factor out common debugfs string read
    
    [ Upstream commit 78cfd833bc04c0398ca4cfc64704350aebe4d4c2 ]
    
    cs_dsp_debugfs_wmfw_read() and cs_dsp_debugfs_bin_read() were identical
    except for which struct member they printed. Move all this duplicated
    code into a common function cs_dsp_debugfs_string_read().
    
    The check for dsp->booted has been removed because this is redundant.
    The two strings are set when the DSP is booted and cleared when the
    DSP is powered-down.
    
    Access to the string char * must be protected by the pwr_lock mutex. The
    string is passed into cs_dsp_debugfs_string_read() as a pointer to the
    char * so that the mutex lock can also be factored out into
    cs_dsp_debugfs_string_read().
    
    wmfw_file_name and bin_file_name members of struct cs_dsp have been
    changed to const char *. It makes for a better API to pass a const
    pointer into cs_dsp_debugfs_string_read().
    
    Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
    Link: https://patch.msgid.link/20251120130640.1169780-2-rf@opensource.cirrus.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: 10db9f6899dd ("firmware: cs_dsp: rate-limit log messages in KUnit builds")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

firmware: cs_dsp: rate-limit log messages in KUnit builds [+ + +]
Author: Richard Fitzgerald <rf@opensource.cirrus.com>
Date:   Fri Jan 30 17:12:56 2026 +0000

    firmware: cs_dsp: rate-limit log messages in KUnit builds
    
    [ Upstream commit 10db9f6899dd3a2dfd26efd40afd308891dc44a8 ]
    
    Use the dev_*_ratelimit() macros if the cs_dsp KUnit tests are enabled
    in the build, and allow the KUnit tests to disable message output.
    
    Some of the KUnit tests cause a very large number of log messages from
    cs_dsp, because the tests perform many different test cases. This could
    cause some lines to be dropped from the kernel log. Dropped lines can
    prevent the KUnit wrappers from parsing the ktap output in the dmesg log.
    
    The KUnit builds of cs_dsp export three bools that the KUnit tests can
    use to entirely disable log output of err, warn and info messages. Some
    tests have been updated to use this, replacing the previous fudge of a
    usleep() in the exit handler of each test. We don't necessarily want to
    disable all log messages if they aren't expected to be excessive,
    so the rate-limiting allows leaving some logging enabled.
    
    The rate-limited macros are not used in normal builds because it is not
    appropriate to rate-limit every message. That could cause important
    messages to be dropped, and there wouldn't be such a high rate of
    messages in normal operation.
    
    Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
    Reported-by: Mark Brown <broonie@kernel.org>
    Closes: https://lore.kernel.org/linux-sound/af393f08-facb-4c44-a054-1f61254803ec@opensource.cirrus.com/T/#t
    Fixes: cd8c058499b6 ("firmware: cs_dsp: Add KUnit testing of bin error cases")
    Link: https://patch.msgid.link/20260130171256.863152-1-rf@opensource.cirrus.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gpio: loongson-64bit: Fix incorrect NULL check after devm_kcalloc() [+ + +]
Author: Chen Ni <nichen@iscas.ac.cn>
Date:   Thu Feb 5 15:26:49 2026 +0800

    gpio: loongson-64bit: Fix incorrect NULL check after devm_kcalloc()
    
    [ Upstream commit e34f77b09080c86c929153e2a72da26b4f8947ff ]
    
    Fix incorrect NULL check in loongson_gpio_init_irqchip().
    The function checks chip->parent instead of chip->irq.parents.
    
    Fixes: 03c146cb6cd1 ("gpio: loongson-64bit: Add support for Loongson-2K0300 SoC")
    Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
    Link: https://patch.msgid.link/20260205072649.3271158-1-nichen@iscas.ac.cn
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gve: Correct ethtool rx_dropped calculation [+ + +]
Author: Max Yuan <maxyuan@google.com>
Date:   Mon Feb 2 19:39:25 2026 +0000

    gve: Correct ethtool rx_dropped calculation
    
    commit c7db85d579a1dccb624235534508c75fbf2dfe46 upstream.
    
    The gve driver's "rx_dropped" statistic, exposed via `ethtool -S`,
    incorrectly includes `rx_buf_alloc_fail` counts. These failures
    represent an inability to allocate receive buffers, not true packet
    drops where a received packet is discarded. This misrepresentation can
    lead to inaccurate diagnostics.
    
    This patch rectifies the ethtool "rx_dropped" calculation. It removes
    `rx_buf_alloc_fail` from the total and adds `xdp_tx_errors` and
    `xdp_redirect_errors`, which represent legitimate packet drops within
    the XDP path.
    
    Cc: stable@vger.kernel.org
    Fixes: 433e274b8f7b ("gve: Add stats for gve.")
    Signed-off-by: Max Yuan <maxyuan@google.com>
    Reviewed-by: Jordan Rhee <jordanrhee@google.com>
    Reviewed-by: Joshua Washington <joshwash@google.com>
    Reviewed-by: Matt Olson <maolson@google.com>
    Signed-off-by: Harshitha Ramamurthy <hramamurthy@google.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Link: https://patch.msgid.link/20260202193925.3106272-3-hramamurthy@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

gve: Fix stats report corruption on queue count change [+ + +]
Author: Debarghya Kundu <debarghyak@google.com>
Date:   Mon Feb 2 19:39:24 2026 +0000

    gve: Fix stats report corruption on queue count change
    
    commit 7b9ebcce0296e104a0d82a6b09d68564806158ff upstream.
    
    The driver and the NIC share a region in memory for stats reporting.
    The NIC calculates its offset into this region based on the total size
    of the stats region and the size of the NIC's stats.
    
    When the number of queues is changed, the driver's stats region is
    resized. If the queue count is increased, the NIC can write past
    the end of the allocated stats region, causing memory corruption.
    If the queue count is decreased, there is a gap between the driver
    and NIC stats, leading to incorrect stats reporting.
    
    This change fixes the issue by allocating stats region with maximum
    size, and the offset calculation for NIC stats is changed to match
    with the calculation of the NIC.
    
    Cc: stable@vger.kernel.org
    Fixes: 24aeb56f2d38 ("gve: Add Gvnic stats AQ command and ethtool show/set-priv-flags.")
    Signed-off-by: Debarghya Kundu <debarghyak@google.com>
    Reviewed-by: Joshua Washington <joshwash@google.com>
    Signed-off-by: Harshitha Ramamurthy <hramamurthy@google.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Link: https://patch.msgid.link/20260202193925.3106272-2-hramamurthy@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
HID: Apply quirk HID_QUIRK_ALWAYS_POLL to Edifier QR30 (2d99:a101) [+ + +]
Author: Rodrigo Lugathe da Conceição Alves <lugathe2@gmail.com>
Date:   Thu Nov 27 19:03:57 2025 -0300

    HID: Apply quirk HID_QUIRK_ALWAYS_POLL to Edifier QR30 (2d99:a101)
    
    [ Upstream commit 85a866809333cd2bf8ddac93d9a3e3ba8e4f807d ]
    
    The USB speaker has a bug that causes it to reboot when changing the
    brightness using the physical knob.
    
    Add a new vendor and product ID entry in hid-ids.h, and register
    the corresponding device in hid-quirks.c with the required quirk.
    
    Signed-off-by: Rodrigo Lugathe da Conceição Alves <lugathe2@gmail.com>
    Reviewed-by: Terry Junge <linuxhid@cosmicgizmosystems.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: Elecom: Add support for ELECOM M-XT3DRBK (018C) [+ + +]
Author: Arnoud Willemsen <mail@lynthium.com>
Date:   Sun Dec 7 03:43:19 2025 +0100

    HID: Elecom: Add support for ELECOM M-XT3DRBK (018C)
    
    [ Upstream commit 12adb969658ec39265eb8c7ea9e1856867fb9ceb ]
    
    Wireless/new version of the Elecom trackball mouse M-XT3DRBK has a
    product id that differs from the existing M-XT3DRBK.
    The report descriptor format also seems to have changed and matches
    other (newer?) models instead (except for six buttons instead of eight).
    This patch follows the same format as the patch for the M-XT3URBK (018F)
    by Naoki Ueki (Nov 3rd 2025) to enable the sixth mouse button.
    
    dmesg output:
    [  292.074664] usb 1-2: new full-speed USB device number 7 using xhci_hcd
    [  292.218667] usb 1-2: New USB device found, idVendor=056e, idProduct=018c, bcdDevice= 1.00
    [  292.218676] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
    [  292.218679] usb 1-2: Product: ELECOM TrackBall Mouse
    [  292.218681] usb 1-2: Manufacturer: ELECOM
    
    usbhid-dump output:
    001:006:000:DESCRIPTOR         1765072638.050578
     05 01 09 02 A1 01 09 01 A1 00 85 01 05 09 19 01
     29 05 15 00 25 01 95 08 75 01 81 02 95 01 75 00
     81 01 05 01 09 30 09 31 16 00 80 26 FF 7F 75 10
     95 02 81 06 C0 A1 00 05 01 09 38 15 81 25 7F 75
     08 95 01 81 06 C0 A1 00 05 0C 0A 38 02 95 01 75
     08 15 81 25 7F 81 06 C0 C0 06 01 FF 09 00 A1 01
     85 02 09 00 15 00 26 FF 00 75 08 95 07 81 02 C0
     05 0C 09 01 A1 01 85 05 15 00 26 3C 02 19 00 2A
     3C 02 75 10 95 01 81 00 C0 05 01 09 80 A1 01 85
     03 19 81 29 83 15 00 25 01 95 03 75 01 81 02 95
     01 75 05 81 01 C0 06 BC FF 09 88 A1 01 85 04 95
     01 75 08 15 00 26 FF 00 19 00 2A FF 00 81 00 C0
     06 02 FF 09 02 A1 01 85 06 09 02 15 00 26 FF 00
     75 08 95 07 B1 02 C0
    
    Signed-off-by: Arnoud Willemsen <mail@lynthium.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: i2c-hid: fix potential buffer overflow in i2c_hid_get_report() [+ + +]
Author: Kwok Kin Ming <kenkinming2002@gmail.com>
Date:   Thu Jan 1 02:18:26 2026 +0800

    HID: i2c-hid: fix potential buffer overflow in i2c_hid_get_report()
    
    [ Upstream commit 2497ff38c530b1af0df5130ca9f5ab22c5e92f29 ]
    
    `i2c_hid_xfer` is used to read `recv_len + sizeof(__le16)` bytes of data
    into `ihid->rawbuf`.
    
    The former can come from the userspace in the hidraw driver and is only
    bounded by HID_MAX_BUFFER_SIZE(16384) by default (unless we also set
    `max_buffer_size` field of `struct hid_ll_driver` which we do not).
    
    The latter has size determined at runtime by the maximum size of
    different report types you could receive on any particular device and
    can be a much smaller value.
    
    Fix this by truncating `recv_len` to `ihid->bufsize - sizeof(__le16)`.
    
    The impact is low since access to hidraw devices requires root.
    
    Signed-off-by: Kwok Kin Ming <kenkinming2002@gmail.com>
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: intel-ish-hid: Reset enum_devices_done before enumeration [+ + +]
Author: Zhang Lixu <lixu.zhang@intel.com>
Date:   Fri Dec 12 10:51:50 2025 +0800

    HID: intel-ish-hid: Reset enum_devices_done before enumeration
    
    [ Upstream commit 56e230723e3a818373bd62331bccb1c6d2b3881b ]
    
    Some systems have enabled ISH without any sensors. In this case sending
    HOSTIF_DM_ENUM_DEVICES results in 0 sensors. This triggers ISH hardware
    reset on subsequent enumeration after S3/S4 resume.
    
    The enum_devices_done flag was not reset before sending the
    HOSTIF_DM_ENUM_DEVICES command. On subsequent enumeration calls (such as
    after S3/S4 resume), this flag retains its previous true value, causing the
    wait loop to be skipped and returning prematurely to hid_ishtp_cl_init().
    If 0 HID devices are found, hid_ishtp_cl_init() skips getting HID device
    descriptors and sets init_done to true. When the delayed enumeration
    response arrives with init_done already true, the driver treats it as a bad
    packet and triggers an ISH hardware reset.
    
    Set enum_devices_done to false before sending the enumeration command,
    consistent with similar functions like ishtp_get_hid_descriptor() and
    ishtp_get_report_descriptor() which reset their respective flags.
    
    Signed-off-by: Zhang Lixu <lixu.zhang@intel.com>
    Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: intel-ish-hid: Update ishtp bus match to support device ID table [+ + +]
Author: Zhang Lixu <lixu.zhang@intel.com>
Date:   Wed Dec 10 10:53:28 2025 +0800

    HID: intel-ish-hid: Update ishtp bus match to support device ID table
    
    [ Upstream commit daeed86b686855adda79f13729e0c9b0530990be ]
    
    The ishtp_cl_bus_match() function previously only checked the first entry
    in the driver's device ID table. Update it to iterate over the entire
    table, allowing proper matching for drivers with multiple supported
    protocol GUIDs.
    
    Signed-off-by: Zhang Lixu <lixu.zhang@intel.com>
    Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: Intel-thc-hid: Intel-thc: Add safety check for reading DMA buffer [+ + +]
Author: Even Xu <even.xu@intel.com>
Date:   Fri Dec 26 11:39:53 2025 +0800

    HID: Intel-thc-hid: Intel-thc: Add safety check for reading DMA buffer
    
    [ Upstream commit a9a917998d172ec117f9e9de1919174153c0ace4 ]
    
    Add DMA buffer readiness check before reading DMA buffer to avoid
    unexpected NULL pointer accessing.
    
    Signed-off-by: Even Xu <even.xu@intel.com>
    Tested-by: Rui Zhang <rui1.zhang@intel.com>
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: logitech: add HID++ support for Logitech MX Anywhere 3S [+ + +]
Author: Dennis Marttinen <twelho@welho.tech>
Date:   Sun Jan 4 13:00:51 2026 +0000

    HID: logitech: add HID++ support for Logitech MX Anywhere 3S
    
    [ Upstream commit d7f6629bffdcb962d383ef8c9a30afef81e997fe ]
    
    I've acquired a Logitech MX Anywhere 3S mouse, which supports HID++ over
    Bluetooth. Adding its PID 0xb037 to the allowlist enables the additional
    features, such as high-resolution scrolling. Tested working across multiple
    machines, with a mix of Intel and Mediatek Bluetooth chips.
    
    [jkosina@suse.com: standardize shortlog]
    Signed-off-by: Dennis Marttinen <twelho@welho.tech>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: multitouch: add MT_QUIRK_STICKY_FINGERS to MT_CLS_VTL [+ + +]
Author: DaytonCL <artem749507@gmail.com>
Date:   Sun Dec 14 14:34:36 2025 +0100

    HID: multitouch: add MT_QUIRK_STICKY_FINGERS to MT_CLS_VTL
    
    [ Upstream commit ff3f234ff1dcd6d626a989151db067a1b7f0f215 ]
    
    Some VTL-class touchpads (e.g. TOPS0102:00 35CC:0104) intermittently
    fail to release a finger contact. A previous slot remains logically
    active, accompanied by stale BTN_TOOL_DOUBLETAP state, causing
    gestures to stay latched and resulting in stuck two-finger
    scrolling and false right-clicks.
    
    Apply MT_QUIRK_STICKY_FINGERS to handle the unreleased contact correctly.
    
    Link: https://gitlab.freedesktop.org/libinput/libinput/-/issues/1225
    Suggested-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
    Tested-by: DaytonCL <artem749507@gmail.com>
    Signed-off-by: DaytonCL <artem749507@gmail.com>
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: playstation: Center initial joystick axes to prevent spurious events [+ + +]
Author: Siarhei Vishniakou <svv@google.com>
Date:   Tue Nov 11 15:45:19 2025 -0800

    HID: playstation: Center initial joystick axes to prevent spurious events
    
    [ Upstream commit e9143268d259d98e111a649affa061acb8e13c5b ]
    
    When a new PlayStation gamepad (DualShock 4 or DualSense) is initialized,
    the input subsystem sets the default value for its absolute axes (e.g.,
    ABS_X, ABS_Y) to 0.
    
    However, the hardware's actual neutral/resting state for these joysticks
    is 128 (0x80). This creates a mismatch.
    
    When the first HID report arrives from the device, the driver sees the
    resting value of 128. The kernel compares this to its initial state of 0
    and incorrectly interprets this as a delta (0 -> 128). Consequently, it
    generates EV_ABS events for this initial, non-existent movement.
    
    This behavior can fail userspace 'sanity check' tests (e.g., in
    Android CTS) that correctly assert no motion events should be generated
    from a device that is already at rest.
    
    This patch fixes the issue by explicitly setting the initial value of the
    main joystick axes (e.g., ABS_X, ABS_Y, ABS_RX, ABS_RY) to 128 (0x80)
    in the common ps_gamepad_create() function.
    
    This aligns the kernel's initial state with the hardware's expected
    neutral state, ensuring that the first report (at 128) produces no
    delta and thus, no spurious event.
    
    Signed-off-by: Siarhei Vishniakou <svv@google.com>
    Reviewed-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: quirks: Add another Chicony HP 5MP Cameras to hid_ignore_list [+ + +]
Author: Chris Chiu <chris.chiu@canonical.com>
Date:   Fri Jan 2 06:56:43 2026 +0000

    HID: quirks: Add another Chicony HP 5MP Cameras to hid_ignore_list
    
    [ Upstream commit c06bc3557542307b9658fbd43cc946a14250347b ]
    
    Another Chicony Electronics HP 5MP Camera with USB ID 04F2:B882
    reports a HID sensor interface that is not actually implemented.
    
    Add the device to the HID ignore list so the bogus sensor is never
    exposed to userspace. Then the system won't hang when runtime PM
    tries to wake the unresponsive device.
    
    Signed-off-by: Chris Chiu <chris.chiu@canonical.com>
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
hwmon: (acpi_power_meter) Fix deadlocks related to acpi_power_meter_notify() [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Sat Jan 31 07:23:28 2026 -0800

    hwmon: (acpi_power_meter) Fix deadlocks related to acpi_power_meter_notify()
    
    [ Upstream commit 615901b57b7ef8eb655f71358f7e956e42bcd16b ]
    
    The acpi_power_meter driver's .notify() callback function,
    acpi_power_meter_notify(), calls hwmon_device_unregister() under a lock
    that is also acquired by callbacks in sysfs attributes of the device
    being unregistered which is prone to deadlocks between sysfs access and
    device removal.
    
    Address this by moving the hwmon device removal in
    acpi_power_meter_notify() outside the lock in question, but notice
    that doing it alone is not sufficient because two concurrent
    METER_NOTIFY_CONFIG notifications may be attempting to remove the
    same device at the same time.  To prevent that from happening, add a
    new lock serializing the execution of the switch () statement in
    acpi_power_meter_notify().  For simplicity, it is a static mutex
    which should not be a problem from the performance perspective.
    
    The new lock also allows the hwmon_device_register_with_info()
    in acpi_power_meter_notify() to be called outside the inner lock
    because it prevents the other notifications handled by that function
    from manipulating the "resource" object while the hwmon device based
    on it is being registered.  The sending of ACPI netlink messages from
    acpi_power_meter_notify() is serialized by the new lock too which
    generally helps to ensure that the order of handling firmware
    notifications is the same as the order of sending netlink messages
    related to them.
    
    In addition, notice that hwmon_device_register_with_info() may fail
    in which case resource->hwmon_dev will become an error pointer,
    so add checks to avoid attempting to unregister the hwmon device
    pointer to by it in that case to acpi_power_meter_notify() and
    acpi_power_meter_remove().
    
    Fixes: 16746ce8adfe ("hwmon: (acpi_power_meter) Replace the deprecated hwmon_device_register")
    Closes: https://lore.kernel.org/linux-hwmon/CAK8fFZ58fidGUCHi5WFX0uoTPzveUUDzT=k=AAm4yWo3bAuCFg@mail.gmail.com/
    Reported-by: Jaroslav Pulchart <jaroslav.pulchart@gooddata.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (dell-smm) Add Dell G15 5510 to fan control whitelist [+ + +]
Author: leobannocloutier@gmail.com <leobannocloutier@gmail.com>
Date:   Fri Jan 16 20:53:15 2026 -0500

    hwmon: (dell-smm) Add Dell G15 5510 to fan control whitelist
    
    [ Upstream commit 830e0bef79aaaea8b1ef426b8032e70c63a58653 ]
    
    On the Dell G15 5510, fans spin at maximum speed when AC power is
    connected. This behavior has been observed as a regression in recent
    kernels (v6.18+).
    
    Add the Dell G15 5510 to the fan control whitelist to enable manual fan
    control and resolve the issue. This model requires the same fan control
    configuration as the Dell G15 5511.
    
    Fixes: 1c1658058c99 ("hwmon: (dell-smm) Add support for automatic fan mode")
    Signed-off-by: Leo Banno-Cloutier <leobannocloutier@gmail.com>
    Link: https://lore.kernel.org/r/20260117015315.214569-2-leobannocloutier@gmail.com
    [groeck: Updated patch description to follow guidance]
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (gpio-fan) Allow to stop FANs when CONFIG_PM is disabled [+ + +]
Author: Gabor Juhos <j4g8y7@gmail.com>
Date:   Mon Feb 2 16:58:57 2026 +0100

    hwmon: (gpio-fan) Allow to stop FANs when CONFIG_PM is disabled
    
    commit 52fb36a5f9c15285b7d67c0ff87dc17b3206b5df upstream.
    
    When CONFIG_PM is disabled, the GPIO controlled FANs can't be stopped by
    using the sysfs attributes since commit 0d01110e6356 ("hwmon: (gpio-fan)
    Add regulator support").
    
    Using either the 'pwm1' or the 'fan1_target' attribute fails the same way:
    
      $ echo 0 > /sys/class/hwmon/hwmon1/pwm1
      ash: write error: Function not implemented
      $ echo 0 > /sys/class/hwmon/hwmon1/fan1_target
      ash: write error: Function not implemented
    
    Both commands were working flawlessly before the mentioned commit.
    
    The issue happens because pm_runtime_put_sync() returns with -ENOSYS
    when CONFIG_PM is disabled, and the set_fan_speed() function handles
    this as an error.
    
    In order to restore the previous behaviour, change the error check in
    the set_fan_speed() function to ignore the -ENOSYS error code.
    
    Cc: stable@vger.kernel.org
    Fixes: 0d01110e6356 ("hwmon: (gpio-fan) Add regulator support")
    Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
    Link: https://lore.kernel.org/r/20260202-gpio-fan-stop-fix-v1-1-c7853183d93d@gmail.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

hwmon: (gpio-fan) Fix set_rpm() return value [+ + +]
Author: Gabor Juhos <j4g8y7@gmail.com>
Date:   Sun Feb 1 21:35:06 2026 +0100

    hwmon: (gpio-fan) Fix set_rpm() return value
    
    commit f5c092787c48296633c2dd7240752f88fa9710fc upstream.
    
    The set_rpm function is used as a 'store' callback of a device attribute,
    and as such it should return with the number of bytes consumed. However
    since commit 0d01110e6356 ("hwmon: (gpio-fan) Add regulator support"),
    the function returns with zero on success.
    
    Due to this, the function gets called again and again whenever the user
    tries to change the FAN speed by writing the desired RPM value into the
    'fan1_target' sysfs attribute.
    
    The broken behaviour can be reproduced easily. For example, the following
    command never returns unless it gets terminated:
    
      $ echo 500 > /sys/class/hwmon/hwmon1/fan1_target
      ^C
      $
    
    Change the code to return with the same value as the 'count' parameter
    on success to indicate that all bytes from the input buffer are consumed.
    The function behaved the same way prior to the offending change.
    
    Cc: stable@vger.kernel.org
    Fixes: 0d01110e6356 ("hwmon: (gpio-fan) Add regulator support")
    Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
    Link: https://lore.kernel.org/r/20260201-gpio-fan-set_rpm-retval-fix-v1-1-dc39bc7693ca@gmail.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

hwmon: (occ) Mark occ_init_attribute() as __printf [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue Feb 3 17:34:36 2026 +0100

    hwmon: (occ) Mark occ_init_attribute() as __printf
    
    [ Upstream commit 831a2b27914cc880130ffe8fb8d1e65a5324d07f ]
    
    This is a printf-style function, which gcc -Werror=suggest-attribute=format
    correctly points out:
    
    drivers/hwmon/occ/common.c: In function 'occ_init_attribute':
    drivers/hwmon/occ/common.c:761:9: error: function 'occ_init_attribute' might be a candidate for 'gnu_printf' format attribute [-Werror=suggest-attribute=format]
    
    Add the attribute to avoid this warning and ensure any incorrect
    format strings are detected here.
    
    Fixes: 744c2fe950e9 ("hwmon: (occ) Rework attribute registration for stack usage")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Link: https://lore.kernel.org/r/20260203163440.2674340-1-arnd@kernel.org
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
i2c: imx: preserve error state in block data length handler [+ + +]
Author: LI Qingwu <Qing-wu.Li@leica-geosystems.com.cn>
Date:   Fri Jan 16 11:19:05 2026 +0000

    i2c: imx: preserve error state in block data length handler
    
    commit b126097b0327437048bd045a0e4d273dea2910dd upstream.
    
    When a block read returns an invalid length, zero or >I2C_SMBUS_BLOCK_MAX,
    the length handler sets the state to IMX_I2C_STATE_FAILED. However,
    i2c_imx_master_isr() unconditionally overwrites this with
    IMX_I2C_STATE_READ_CONTINUE, causing an endless read loop that overruns
    buffers and crashes the system.
    
    Guard the state transition to preserve error states set by the length
    handler.
    
    Fixes: 5f5c2d4579ca ("i2c: imx: prevent rescheduling in non dma mode")
    Signed-off-by: LI Qingwu <Qing-wu.Li@leica-geosystems.com.cn>
    Cc: <stable@vger.kernel.org> # v6.13+
    Reviewed-by: Stefan Eichenberger <eichest@gmail.com>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Link: https://lore.kernel.org/r/20260116111906.3413346-2-Qing-wu.Li@leica-geosystems.com.cn
    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
i40e: drop udp_tunnel_get_rx_info() call from i40e_open() [+ + +]
Author: Mohammad Heib <mheib@redhat.com>
Date:   Sun Dec 28 21:40:20 2025 +0200

    i40e: drop udp_tunnel_get_rx_info() call from i40e_open()
    
    [ Upstream commit 40857194956dcaf3d2b66d6bd113d844c93bef54 ]
    
    The i40e driver calls udp_tunnel_get_rx_info() during i40e_open().
    This is redundant because UDP tunnel RX offload state is preserved
    across device down/up cycles. The udp_tunnel core handles
    synchronization automatically when required.
    
    Furthermore, recent changes in the udp_tunnel infrastructure require
    querying RX info while holding the udp_tunnel lock. Calling it
    directly from the ndo_open path violates this requirement,
    triggering the following lockdep warning:
    
      Call Trace:
       <TASK>
       ? __udp_tunnel_nic_assert_locked+0x39/0x40 [udp_tunnel]
       i40e_open+0x135/0x14f [i40e]
       __dev_open+0x121/0x2e0
       __dev_change_flags+0x227/0x270
       dev_change_flags+0x3d/0xb0
       devinet_ioctl+0x56f/0x860
       sock_do_ioctl+0x7b/0x130
       __x64_sys_ioctl+0x91/0xd0
       do_syscall_64+0x90/0x170
       ...
       </TASK>
    
    Remove the redundant and unsafe call to udp_tunnel_get_rx_info() from
    i40e_open() resolve the locking violation.
    
    Fixes: 1ead7501094c ("udp_tunnel: remove rtnl_lock dependency")
    Signed-off-by: Mohammad Heib <mheib@redhat.com>
    Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>
    Tested-by: Rinitha S <sx.rinitha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ice: drop udp_tunnel_get_rx_info() call from ndo_open() [+ + +]
Author: Mohammad Heib <mheib@redhat.com>
Date:   Sun Dec 28 21:40:21 2025 +0200

    ice: drop udp_tunnel_get_rx_info() call from ndo_open()
    
    [ Upstream commit 234e615bfece9e3e91c50fe49ab9e68ee37c791a ]
    
    The ice driver calls udp_tunnel_get_rx_info() during ice_open_internal().
    This is redundant because UDP tunnel RX offload state is preserved
    across device down/up cycles. The udp_tunnel core handles
    synchronization automatically when required.
    
    Furthermore, recent changes in the udp_tunnel infrastructure require
    querying RX info while holding the udp_tunnel lock. Calling it
    directly from the ndo_open path violates this requirement,
    triggering the following lockdep warning:
    
    Call Trace:
      <TASK>
      ice_open_internal+0x253/0x350 [ice]
      __udp_tunnel_nic_assert_locked+0x86/0xb0 [udp_tunnel]
      __dev_open+0x2f5/0x880
      __dev_change_flags+0x44c/0x660
      netif_change_flags+0x80/0x160
      devinet_ioctl+0xd21/0x15f0
      inet_ioctl+0x311/0x350
      sock_ioctl+0x114/0x220
      __x64_sys_ioctl+0x131/0x1a0
      ...
      </TASK>
    
    Remove the redundant and unsafe call to udp_tunnel_get_rx_info() from
    ice_open_internal() to resolve the locking violation
    
    Fixes: 1ead7501094c ("udp_tunnel: remove rtnl_lock dependency")
    Signed-off-by: Mohammad Heib <mheib@redhat.com>
    Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Tested-by: Rinitha S <sx.rinitha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ice: fix missing TX timestamps interrupts on E825 devices [+ + +]
Author: Grzegorz Nitka <grzegorz.nitka@intel.com>
Date:   Thu Nov 27 10:25:58 2025 +0100

    ice: fix missing TX timestamps interrupts on E825 devices
    
    [ Upstream commit 99854c167cfc113ad863832b1601c4ca1a639cfe ]
    
    Modify PTP (Precision Time Protocol) configuration on link down flow.
    Previously, PHY_REG_TX_OFFSET_READY register was cleared in such case.
    This register is used to determine if the timestamp is valid or not on
    the hardware side.
    However, there is a possibility that there is still the packet in the
    HW queue which originally was supposed to be timestamped but the link
    is already down and given register is cleared.
    This potentially might lead to the situation in which that 'delayed'
    packet's timestamp is treated as invalid one when the link is up
    again.
    This in turn leads to the situation in which the driver is not able to
    effectively clean timestamp memory and interrupt configuration.
    From the hardware perspective, that 'old' interrupt was not handled
    properly and even if new timestamp packets are processed, no new
    interrupts is generated. As a result, providing timestamps to the user
    applications (like ptp4l) is not possible.
    The solution for this problem is implemented at the driver level rather
    than the firmware, and maintains the tx_ready bit high, even during
    link down events. This avoids entering a potential inconsistent state
    between the driver and the timestamp hardware.
    
    Testing hints:
    - run PTP traffic at higher rate (like 16 PTP messages per second)
    - observe ptp4l behaviour at the client side in the following
      conditions:
            a) trigger link toggle events. It needs to be physiscal
               link down/up events
            b) link speed change
    In all above cases, PTP processing at ptp4l application should resume
    always. In failure case, the following permanent error message in ptp4l
    log was observed:
    controller-0 ptp4l: err [6175.116] ptp4l-legacy timed out while polling
            for tx timestamp
    
    Fixes: 7cab44f1c35f ("ice: Introduce ETH56G PHY model for E825C products")
    Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Signed-off-by: Grzegorz Nitka <grzegorz.nitka@intel.com>
    Tested-by: Sunitha Mekala <sunithax.d.mekala@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ice: Fix PTP NULL pointer dereference during VSI rebuild [+ + +]
Author: Aaron Ma <aaron.ma@canonical.com>
Date:   Wed Jan 21 15:51:06 2026 +0800

    ice: Fix PTP NULL pointer dereference during VSI rebuild
    
    [ Upstream commit fc6f36eaaedcf4b81af6fe1a568f018ffd530660 ]
    
    Fix race condition where PTP periodic work runs while VSI is being
    rebuilt, accessing NULL vsi->rx_rings.
    
    The sequence was:
    1. ice_ptp_prepare_for_reset() cancels PTP work
    2. ice_ptp_rebuild() immediately queues PTP work
    3. VSI rebuild happens AFTER ice_ptp_rebuild()
    4. PTP work runs and accesses NULL vsi->rx_rings
    
    Fix: Keep PTP work cancelled during rebuild, only queue it after
    VSI rebuild completes in ice_rebuild().
    
    Added ice_ptp_queue_work() helper function to encapsulate the logic
    for queuing PTP work, ensuring it's only queued when PTP is supported
    and the state is ICE_PTP_READY.
    
    Error log:
    [  121.392544] ice 0000:60:00.1: PTP reset successful
    [  121.392692] BUG: kernel NULL pointer dereference, address: 0000000000000000
    [  121.392712] #PF: supervisor read access in kernel mode
    [  121.392720] #PF: error_code(0x0000) - not-present page
    [  121.392727] PGD 0
    [  121.392734] Oops: Oops: 0000 [#1] SMP NOPTI
    [  121.392746] CPU: 8 UID: 0 PID: 1005 Comm: ice-ptp-0000:60 Tainted: G S                  6.19.0-rc6+ #4 PREEMPT(voluntary)
    [  121.392761] Tainted: [S]=CPU_OUT_OF_SPEC
    [  121.392773] RIP: 0010:ice_ptp_update_cached_phctime+0xbf/0x150 [ice]
    [  121.393042] Call Trace:
    [  121.393047]  <TASK>
    [  121.393055]  ice_ptp_periodic_work+0x69/0x180 [ice]
    [  121.393202]  kthread_worker_fn+0xa2/0x260
    [  121.393216]  ? __pfx_ice_ptp_periodic_work+0x10/0x10 [ice]
    [  121.393359]  ? __pfx_kthread_worker_fn+0x10/0x10
    [  121.393371]  kthread+0x10d/0x230
    [  121.393382]  ? __pfx_kthread+0x10/0x10
    [  121.393393]  ret_from_fork+0x273/0x2b0
    [  121.393407]  ? __pfx_kthread+0x10/0x10
    [  121.393417]  ret_from_fork_asm+0x1a/0x30
    [  121.393432]  </TASK>
    
    Fixes: 803bef817807d ("ice: factor out ice_ptp_rebuild_owner()")
    Signed-off-by: Aaron Ma <aaron.ma@canonical.com>
    Tested-by: Sunitha Mekala <sunithax.d.mekala@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ice: PTP: fix missing timestamps on E825 hardware [+ + +]
Author: Jacob Keller <jacob.e.keller@intel.com>
Date:   Wed Jan 21 10:44:19 2026 -0800

    ice: PTP: fix missing timestamps on E825 hardware
    
    [ Upstream commit 88b68f35eb43ad5ac77ac1107059040b04e6f477 ]
    
    The E825 hardware currently has each PF handle the PFINT_TSYN_TX cause of
    the miscellaneous OICR interrupt vector. The actual interrupt cause
    underlying this is shared by all ports on the same quad:
    
      ┌─────────────────────────────────┐
      │                                 │
      │   ┌────┐ ┌────┐ ┌────┐ ┌────┐   │
      │   │PF 0│ │PF 1│ │PF 2│ │PF 3│   │
      │   └────┘ └────┘ └────┘ └────┘   │
      │                                 │
      └────────────────▲────────────────┘
                       │
                       │
      ┌────────────────┼────────────────┐
      │             PHY QUAD            │
      └───▲────────▲────────▲────────▲──┘
          │        │        │        │
      ┌───┼──┐ ┌───┴──┐ ┌───┼──┐ ┌───┼──┐
      │Port 0│ │Port 1│ │Port 2│ │Port 3│
      └──────┘ └──────┘ └──────┘ └──────┘
    
    If multiple PFs issue Tx timestamp requests near simultaneously, it is
    possible that the correct PF will not be interrupted and will miss its
    timestamp. Understanding why is somewhat complex.
    
    Consider the following sequence of events:
    
      CPU 0:
      Send Tx packet on PF 0
      ...
      PF 0 enqueues packet with Tx request          CPU 1, PF1:
      ...                                           Send Tx packet on PF1
      ...                                           PF 1 enqueues packet with Tx request
    
      HW:
      PHY Port 0 sends packet
      PHY raises Tx timestamp event interrupt
      MAC raises each PF interrupt
    
      CPU 0, PF0:                                   CPU 1, PF1:
      ice_misc_intr() checks for Tx timestamps      ice_misc_intr() checks for Tx timestamp
      Sees packet ready bit set                     Sees nothing available
      ...                                           Exits
      ...
      ...
      HW:
      PHY port 1 sends packet
      PHY interrupt ignored because not all packet timestamps read yet.
      ...
      Read timestamp, report to stack
    
    Because the interrupt event is shared for all ports on the same quad, the
    PHY will not raise a new interrupt for any PF until all timestamps are
    read.
    
    In the example above, the second timestamp comes in for port 1 before the
    timestamp from port 0 is read. At this point, there is no longer an
    interrupt thread running that will read the timestamps, because each PF has
    checked and found that there was no work to do. Applications such as ptp4l
    will timeout after waiting a few milliseconds. Eventually, the watchdog
    service task will re-check for all quads and notice that there are
    outstanding timestamps, and issue a software interrupt to recover. However,
    by this point it is far too late, and applications have already failed.
    
    All of this occurs because of the underlying hardware behavior. The PHY
    cannot raise a new interrupt signal until all outstanding timestamps have
    been read.
    
    As a first step to fix this, switch the E825C hardware to the
    ICE_PTP_TX_INTERRUPT_ALL mode. In this mode, only the clock owner PF will
    respond to the PFINT_TSYN_TX cause. Other PFs disable this cause and will
    not wake. In this mode, the clock owner will iterate over all ports and
    handle timestamps for each connected port.
    
    This matches the E822 behavior, and is a necessary but insufficient step to
    resolve the missing timestamps.
    
    Even with use of the ICE_PTP_TX_INTERRUPT_ALL mode, we still sometimes miss
    a timestamp event. The ice_ptp_tx_tstamp_owner() does re-check the ready
    bitmap, but does so before re-enabling the OICR interrupt vector. It also
    only checks the ready bitmap, but not the software Tx timestamp tracker.
    
    To avoid risk of losing a timestamp, refactor the logic to check both the
    software Tx timestamp tracker bitmap *and* the hardware ready bitmap.
    Additionally, do this outside of ice_ptp_process_ts() after we have already
    re-enabled the OICR interrupt.
    
    Remove the checks from the ice_ptp_tx_tstamp(), ice_ptp_tx_tstamp_owner(),
    and the ice_ptp_process_ts() functions. This results in ice_ptp_tx_tstamp()
    being nothing more than a wrapper around ice_ptp_process_tx_tstamp() so we
    can remove it.
    
    Add the ice_ptp_tx_tstamps_pending() function which returns a boolean
    indicating if there are any pending Tx timestamps. First, check the
    software timestamp tracker bitmap. In ICE_PTP_TX_INTERRUPT_ALL mode, check
    *all* ports software trackers. If a tracker has outstanding timestamp
    requests, return true. Additionally, check the PHY ready bitmap to confirm
    if the PHY indicates any outstanding timestamps.
    
    In the ice_misc_thread_fn(), call ice_ptp_tx_tstamps_pending() just before
    returning from the IRQ thread handler. If it returns true, write to
    PFINT_OICR to trigger a PFINT_OICR_TSYN_TX_M software interrupt. This will
    force the handler to interrupt again and complete the work even if the PHY
    hardware did not interrupt for any reason.
    
    This results in the following new flow for handling Tx timestamps:
    
    1) send Tx packet
    2) PHY captures timestamp
    3) PHY triggers MAC interrupt
    4) clock owner executes ice_misc_intr() with PFINT_OICR_TSYN_TX flag set
    5) ice_ptp_ts_irq() returns IRQ_WAKE_THREAD
    7) The interrupt thread wakes up and kernel calls ice_misc_intr_thread_fn()
    8) ice_ptp_process_ts() is called to handle any outstanding timestamps
    9) ice_irq_dynamic_ena() is called to re-enable the OICR hardware interrupt
       cause
    10) ice_ptp_tx_tstamps_pending() is called to check if we missed any more
        outstanding timestamps, checking both software and hardware indicators.
    
    With this change, it should no longer be possible for new timestamps to
    come in such a way that we lose an interrupt. If a timestamp comes in
    before the ice_ptp_tx_tstamps_pending() call, it will be noticed by at
    least one of the software bitmap check or the hardware bitmap check. If the
    timestamp comes in *after* this check, it should cause a timestamp
    interrupt as we have already read all timestamps from the PHY and the OICR
    vector has been re-enabled.
    
    Fixes: 7cab44f1c35f ("ice: Introduce ETH56G PHY model for E825C products")
    Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
    Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Reviewed-by: Przemyslaw Korba <przemyslaw.korba@intel.com>
    Tested-by: Vitaly Grinberg <vgrinber@redhat.com>
    Tested-by: Sunitha Mekala <sunithax.d.mekala@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
io_uring/rw: free potentially allocated iovec on cache put failure [+ + +]
Author: Jens Axboe <axboe@kernel.dk>
Date:   Sun Jan 18 19:48:01 2026 -0700

    io_uring/rw: free potentially allocated iovec on cache put failure
    
    [ Upstream commit 4b9748055457ac3a0710bf210c229d01ea1b01b9 ]
    
    If a read/write request goes through io_req_rw_cleanup() and has an
    allocated iovec attached and fails to put to the rw_cache, then it may
    end up with an unaccounted iovec pointer. Have io_rw_recycle() return
    whether it recycled the request or not, and use that to gauge whether to
    free a potential iovec or not.
    
    Reviewed-by: Nitesh Shetty <nj.shetty@samsung.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
io_uring/zcrx: fix page array leak [+ + +]
Author: Pavel Begunkov <asml.silence@gmail.com>
Date:   Sun Feb 1 21:18:53 2026 +0000

    io_uring/zcrx: fix page array leak
    
    [ Upstream commit 0ae91d8ab70922fb74c22c20bedcb69459579b1c ]
    
    d9f595b9a65e ("io_uring/zcrx: fix leaking pages on sg init fail") fixed
    a page leakage but didn't free the page array, release it as well.
    
    Fixes: b84621d96ee02 ("io_uring/zcrx: allocate sgtable for umem areas")
    Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
io_uring: use GFP_NOWAIT for overflow CQEs on legacy rings [+ + +]
Author: Alexandre Negrel <alexandre@negrel.dev>
Date:   Tue Dec 30 19:57:28 2025 +0100

    io_uring: use GFP_NOWAIT for overflow CQEs on legacy rings
    
    [ Upstream commit fc5ff2500976cd2710a7acecffd12d95ee4f98fc ]
    
    Allocate the overflowing CQE with GFP_NOWAIT instead of GFP_ATOMIC. This
    changes causes allocations to fail earlier in out-of-memory situations,
    rather than being deferred. Using GFP_ATOMIC allows a process to exceed
    memory limits.
    
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220794
    Signed-off-by: Alexandre Negrel <alexandre@negrel.dev>
    Link: https://lore.kernel.org/io-uring/20251229201933.515797-1-alexandre@negrel.dev/
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipv6: Fix ECMP sibling count mismatch when clearing RTF_ADDRCONF [+ + +]
Author: Shigeru Yoshida <syoshida@redhat.com>
Date:   Wed Feb 4 18:58:37 2026 +0900

    ipv6: Fix ECMP sibling count mismatch when clearing RTF_ADDRCONF
    
    [ Upstream commit bbf4a17ad9ffc4e3d7ec13d73ecd59dea149ed25 ]
    
    syzbot reported a kernel BUG in fib6_add_rt2node() when adding an IPv6
    route. [0]
    
    Commit f72514b3c569 ("ipv6: clear RA flags when adding a static
    route") introduced logic to clear RTF_ADDRCONF from existing routes
    when a static route with the same nexthop is added. However, this
    causes a problem when the existing route has a gateway.
    
    When RTF_ADDRCONF is cleared from a route that has a gateway, that
    route becomes eligible for ECMP, i.e. rt6_qualify_for_ecmp() returns
    true. The issue is that this route was never added to the
    fib6_siblings list.
    
    This leads to a mismatch between the following counts:
    
    - The sibling count computed by iterating fib6_next chain, which
      includes the newly ECMP-eligible route
    
    - The actual siblings in fib6_siblings list, which does not include
      that route
    
    When a subsequent ECMP route is added, fib6_add_rt2node() hits
    BUG_ON(sibling->fib6_nsiblings != rt->fib6_nsiblings) because the
    counts don't match.
    
    Fix this by only clearing RTF_ADDRCONF when the existing route does
    not have a gateway. Routes without a gateway cannot qualify for ECMP
    anyway (rt6_qualify_for_ecmp() requires fib_nh_gw_family), so clearing
    RTF_ADDRCONF on them is safe and matches the original intent of the
    commit.
    
    [0]:
    kernel BUG at net/ipv6/ip6_fib.c:1217!
    Oops: invalid opcode: 0000 [#1] SMP KASAN PTI
    CPU: 0 UID: 0 PID: 6010 Comm: syz.0.17 Not tainted syzkaller #0 PREEMPT(full)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/25/2025
    RIP: 0010:fib6_add_rt2node+0x3433/0x3470 net/ipv6/ip6_fib.c:1217
    [...]
    Call Trace:
     <TASK>
     fib6_add+0x8da/0x18a0 net/ipv6/ip6_fib.c:1532
     __ip6_ins_rt net/ipv6/route.c:1351 [inline]
     ip6_route_add+0xde/0x1b0 net/ipv6/route.c:3946
     ipv6_route_ioctl+0x35c/0x480 net/ipv6/route.c:4571
     inet6_ioctl+0x219/0x280 net/ipv6/af_inet6.c:577
     sock_do_ioctl+0xdc/0x300 net/socket.c:1245
     sock_ioctl+0x576/0x790 net/socket.c:1366
     vfs_ioctl fs/ioctl.c:51 [inline]
     __do_sys_ioctl fs/ioctl.c:597 [inline]
     __se_sys_ioctl+0xfc/0x170 fs/ioctl.c:583
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xfa/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Fixes: f72514b3c569 ("ipv6: clear RA flags when adding a static route")
    Reported-by: syzbot+cb809def1baaac68ab92@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=cb809def1baaac68ab92
    Tested-by: syzbot+cb809def1baaac68ab92@syzkaller.appspotmail.com
    Signed-off-by: Shigeru Yoshida <syoshida@redhat.com>
    Reviewed-by: Fernando Fernandez Mancera <fmancera@suse.de>
    Link: https://patch.msgid.link/20260204095837.1285552-1-syoshida@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
KVM: Don't clobber irqfd routing type when deassigning irqfd [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Tue Jan 13 09:46:05 2026 -0800

    KVM: Don't clobber irqfd routing type when deassigning irqfd
    
    commit b4d37cdb77a0015f51fee083598fa227cc07aaf1 upstream.
    
    When deassigning a KVM_IRQFD, don't clobber the irqfd's copy of the IRQ's
    routing entry as doing so breaks kvm_arch_irq_bypass_del_producer() on x86
    and arm64, which explicitly look for KVM_IRQ_ROUTING_MSI.  Instead, to
    handle a concurrent routing update, verify that the irqfd is still active
    before consuming the routing information.  As evidenced by the x86 and
    arm64 bugs, and another bug in kvm_arch_update_irqfd_routing() (see below),
    clobbering the entry type without notifying arch code is surprising and
    error prone.
    
    As a bonus, checking that the irqfd is active provides a convenient
    location for documenting _why_ KVM must not consume the routing entry for
    an irqfd that is in the process of being deassigned: once the irqfd is
    deleted from the list (which happens *before* the eventfd is detached), it
    will no longer receive updates via kvm_irq_routing_update(), and so KVM
    could deliver an event using stale routing information (relative to
    KVM_SET_GSI_ROUTING returning to userspace).
    
    As an even better bonus, explicitly checking for the irqfd being active
    fixes a similar bug to the one the clobbering is trying to prevent: if an
    irqfd is deactivated, and then its routing is changed,
    kvm_irq_routing_update() won't invoke kvm_arch_update_irqfd_routing()
    (because the irqfd isn't in the list).  And so if the irqfd is in bypass
    mode, IRQs will continue to be posted using the old routing information.
    
    As for kvm_arch_irq_bypass_del_producer(), clobbering the routing type
    results in KVM incorrectly keeping the IRQ in bypass mode, which is
    especially problematic on AMD as KVM tracks IRQs that are being posted to
    a vCPU in a list whose lifetime is tied to the irqfd.
    
    Without the help of KASAN to detect use-after-free, the most common
    sympton on AMD is a NULL pointer deref in amd_iommu_update_ga() due to
    the memory for irqfd structure being re-allocated and zeroed, resulting
    in irqfd->irq_bypass_data being NULL when read by
    avic_update_iommu_vcpu_affinity():
    
      BUG: kernel NULL pointer dereference, address: 0000000000000018
      #PF: supervisor read access in kernel mode
      #PF: error_code(0x0000) - not-present page
      PGD 40cf2b9067 P4D 40cf2b9067 PUD 408362a067 PMD 0
      Oops: Oops: 0000 [#1] SMP
      CPU: 6 UID: 0 PID: 40383 Comm: vfio_irq_test
      Tainted: G     U  W  O        6.19.0-smp--5dddc257e6b2-irqfd #31 NONE
      Tainted: [U]=USER, [W]=WARN, [O]=OOT_MODULE
      Hardware name: Google, Inc. Arcadia_IT_80/Arcadia_IT_80, BIOS 34.78.2-0 09/05/2025
      RIP: 0010:amd_iommu_update_ga+0x19/0xe0
      Call Trace:
       <TASK>
       avic_update_iommu_vcpu_affinity+0x3d/0x90 [kvm_amd]
       __avic_vcpu_load+0xf4/0x130 [kvm_amd]
       kvm_arch_vcpu_load+0x89/0x210 [kvm]
       vcpu_load+0x30/0x40 [kvm]
       kvm_arch_vcpu_ioctl_run+0x45/0x620 [kvm]
       kvm_vcpu_ioctl+0x571/0x6a0 [kvm]
       __se_sys_ioctl+0x6d/0xb0
       do_syscall_64+0x6f/0x9d0
       entry_SYSCALL_64_after_hwframe+0x4b/0x53
      RIP: 0033:0x46893b
        </TASK>
      ---[ end trace 0000000000000000 ]---
    
    If AVIC is inhibited when the irfd is deassigned, the bug will manifest as
    list corruption, e.g. on the next irqfd assignment.
    
      list_add corruption. next->prev should be prev (ffff8d474d5cd588),
                           but was 0000000000000000. (next=ffff8d8658f86530).
      ------------[ cut here ]------------
      kernel BUG at lib/list_debug.c:31!
      Oops: invalid opcode: 0000 [#1] SMP
      CPU: 128 UID: 0 PID: 80818 Comm: vfio_irq_test
      Tainted: G     U  W  O        6.19.0-smp--f19dc4d680ba-irqfd #28 NONE
      Tainted: [U]=USER, [W]=WARN, [O]=OOT_MODULE
      Hardware name: Google, Inc. Arcadia_IT_80/Arcadia_IT_80, BIOS 34.78.2-0 09/05/2025
      RIP: 0010:__list_add_valid_or_report+0x97/0xc0
      Call Trace:
       <TASK>
       avic_pi_update_irte+0x28e/0x2b0 [kvm_amd]
       kvm_pi_update_irte+0xbf/0x190 [kvm]
       kvm_arch_irq_bypass_add_producer+0x72/0x90 [kvm]
       irq_bypass_register_consumer+0xcd/0x170 [irqbypass]
       kvm_irqfd+0x4c6/0x540 [kvm]
       kvm_vm_ioctl+0x118/0x5d0 [kvm]
       __se_sys_ioctl+0x6d/0xb0
       do_syscall_64+0x6f/0x9d0
       entry_SYSCALL_64_after_hwframe+0x4b/0x53
       </TASK>
      ---[ end trace 0000000000000000 ]---
    
    On Intel and arm64, the bug is less noisy, as the end result is that the
    device keeps posting IRQs to the vCPU even after it's been deassigned.
    
    Note, the worst of the breakage can be traced back to commit cb210737675e
    ("KVM: Pass new routing entries and irqfd when updating IRTEs"), as before
    that commit KVM would pull the routing information from the per-VM routing
    table.  But as above, similar bugs have existed since support for IRQ
    bypass was added.  E.g. if a routing change finished before irq_shutdown()
    invoked kvm_arch_irq_bypass_del_producer(), VMX and SVM would see stale
    routing information and potentially leave the irqfd in bypass mode.
    
    Alternatively, x86 could be fixed by explicitly checking irq_bypass_vcpu
    instead of irq_entry.type in kvm_arch_irq_bypass_del_producer(), and arm64
    could be modified to utilize irq_bypass_vcpu in a similar manner.  But (a)
    that wouldn't fix the routing updates bug, and (b) fixing core code doesn't
    preclude x86 (or arm64) from adding such code as a sanity check (spoiler
    alert).
    
    Fixes: f70c20aaf141 ("KVM: Add an arch specific hooks in 'struct kvm_kernel_irqfd'")
    Fixes: cb210737675e ("KVM: Pass new routing entries and irqfd when updating IRTEs")
    Fixes: a0d7e2fc61ab ("KVM: arm64: vgic-v4: Only attempt vLPI mapping for actual MSIs")
    Cc: stable@vger.kernel.org
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Oliver Upton <oupton@kernel.org>
    Link: https://patch.msgid.link/20260113174606.104978-2-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: selftests: Add -U_FORTIFY_SOURCE to avoid some unpredictable test failures [+ + +]
Author: Zhiquan Li <zhiquan_li@163.com>
Date:   Thu Jan 22 13:35:50 2026 +0800

    KVM: selftests: Add -U_FORTIFY_SOURCE to avoid some unpredictable test failures
    
    commit e396a74222654486d6ab45dca5d0c54c408b8b91 upstream.
    
    Some distributions (such as Ubuntu) configure GCC so that
    _FORTIFY_SOURCE is automatically enabled at -O1 or above.  This results
    in some fortified version of definitions of standard library functions
    are included.  While linker resolves the symbols, the fortified versions
    might override the definitions in lib/string_override.c and reference to
    those PLT entries in GLIBC.  This is not a problem for the code in host,
    but it is a disaster for the guest code.  E.g., if build and run
    x86/nested_emulation_test on Ubuntu 24.04 will encounter a L1 #PF due to
    memset() reference to __memset_chk@plt.
    
    The option -fno-builtin-memset is not helpful here, because those
    fortified versions are not built-in but some definitions which are
    included by header, they are for different intentions.
    
    In order to eliminate the unpredictable behaviors may vary depending on
    the linker and platform, add the "-U_FORTIFY_SOURCE" into CFLAGS to
    prevent from introducing the fortified definitions.
    
    Signed-off-by: Zhiquan Li <zhiquan_li@163.com>
    Link: https://patch.msgid.link/20260122053551.548229-1-zhiquan_li@163.com
    Fixes: 6b6f71484bf4 ("KVM: selftests: Implement memcmp(), memcpy(), and memset() for guest use")
    Cc: stable@vger.kernel.org
    [sean: tag for stable]
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: x86: Explicitly configure supported XSS from {svm,vmx}_set_cpu_caps() [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Tue Jan 27 17:43:08 2026 -0800

    KVM: x86: Explicitly configure supported XSS from {svm,vmx}_set_cpu_caps()
    
    commit f8ade833b733ae0b72e87ac6d2202a1afbe3eb4a upstream.
    
    Explicitly configure KVM's supported XSS as part of each vendor's setup
    flow to fix a bug where clearing SHSTK and IBT in kvm_cpu_caps, e.g. due
    to lack of CET XFEATURE support, makes kvm-intel.ko unloadable when nested
    VMX is enabled, i.e. when nested=1.  The late clearing results in
    nested_vmx_setup_{entry,exit}_ctls() clearing VM_{ENTRY,EXIT}_LOAD_CET_STATE
    when nested_vmx_setup_ctls_msrs() runs during the CPU compatibility checks,
    ultimately leading to a mismatched VMCS config due to the reference config
    having the CET bits set, but every CPU's "local" config having the bits
    cleared.
    
    Note, kvm_caps.supported_{xcr0,xss} are unconditionally initialized by
    kvm_x86_vendor_init(), before calling into vendor code, and not referenced
    between ops->hardware_setup() and their current/old location.
    
    Fixes: 69cc3e886582 ("KVM: x86: Add XSS support for CET_KERNEL and CET_USER")
    Cc: stable@vger.kernel.org
    Cc: Mathias Krause <minipli@grsecurity.net>
    Cc: John Allen <john.allen@amd.com>
    Cc: Rick Edgecombe <rick.p.edgecombe@intel.com>
    Cc: Chao Gao <chao.gao@intel.com>
    Cc: Binbin Wu <binbin.wu@linux.intel.com>
    Cc: Xiaoyao Li <xiaoyao.li@intel.com>
    Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
    Reviewed-by: Binbin Wu <binbin.wu@linux.intel.com>
    Link: https://patch.msgid.link/20260128014310.3255561-2-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
linkwatch: use __dev_put() in callers to prevent UAF [+ + +]
Author: Jiayuan Chen <jiayuan.chen@shopee.com>
Date:   Sun Feb 1 21:59:10 2026 +0800

    linkwatch: use __dev_put() in callers to prevent UAF
    
    [ Upstream commit 83b67cc9be9223183caf91826d9c194d7fb128fa ]
    
    After linkwatch_do_dev() calls __dev_put() to release the linkwatch
    reference, the device refcount may drop to 1. At this point,
    netdev_run_todo() can proceed (since linkwatch_sync_dev() sees an
    empty list and returns without blocking), wait for the refcount to
    become 1 via netdev_wait_allrefs_any(), and then free the device
    via kobject_put().
    
    This creates a use-after-free when __linkwatch_run_queue() tries to
    call netdev_unlock_ops() on the already-freed device.
    
    Note that adding netdev_lock_ops()/netdev_unlock_ops() pair in
    netdev_run_todo() before kobject_put() would not work, because
    netdev_lock_ops() is conditional - it only locks when
    netdev_need_ops_lock() returns true. If the device doesn't require
    ops_lock, linkwatch won't hold any lock, and netdev_run_todo()
    acquiring the lock won't provide synchronization.
    
    Fix this by moving __dev_put() from linkwatch_do_dev() to its
    callers. The device reference logically pairs with de-listing the
    device, so it's reasonable for the caller that did the de-listing
    to release it. This allows placing __dev_put() after all device
    accesses are complete, preventing UAF.
    
    The bug can be reproduced by adding mdelay(2000) after
    linkwatch_do_dev() in __linkwatch_run_queue(), then running:
    
      ip tuntap add mode tun name tun_test
      ip link set tun_test up
      ip link set tun_test carrier off
      ip link set tun_test carrier on
      sleep 0.5
      ip tuntap del mode tun name tun_test
    
    KASAN report:
    
     ==================================================================
     BUG: KASAN: use-after-free in netdev_need_ops_lock include/net/netdev_lock.h:33 [inline]
     BUG: KASAN: use-after-free in netdev_unlock_ops include/net/netdev_lock.h:47 [inline]
     BUG: KASAN: use-after-free in __linkwatch_run_queue+0x865/0x8a0 net/core/link_watch.c:245
     Read of size 8 at addr ffff88804de5c008 by task kworker/u32:10/8123
    
     CPU: 0 UID: 0 PID: 8123 Comm: kworker/u32:10 Not tainted syzkaller #0 PREEMPT(full)
     Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
     Workqueue: events_unbound linkwatch_event
     Call Trace:
      <TASK>
      __dump_stack lib/dump_stack.c:94 [inline]
      dump_stack_lvl+0x100/0x190 lib/dump_stack.c:120
      print_address_description mm/kasan/report.c:378 [inline]
      print_report+0x156/0x4c9 mm/kasan/report.c:482
      kasan_report+0xdf/0x1a0 mm/kasan/report.c:595
      netdev_need_ops_lock include/net/netdev_lock.h:33 [inline]
      netdev_unlock_ops include/net/netdev_lock.h:47 [inline]
      __linkwatch_run_queue+0x865/0x8a0 net/core/link_watch.c:245
      linkwatch_event+0x8f/0xc0 net/core/link_watch.c:304
      process_one_work+0x9c2/0x1840 kernel/workqueue.c:3257
      process_scheduled_works kernel/workqueue.c:3340 [inline]
      worker_thread+0x5da/0xe40 kernel/workqueue.c:3421
      kthread+0x3b3/0x730 kernel/kthread.c:463
      ret_from_fork+0x754/0xaf0 arch/x86/kernel/process.c:158
      ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:246
      </TASK>
     ==================================================================
    
    Fixes: 04efcee6ef8d ("net: hold instance lock during NETDEV_CHANGE")
    Reported-by: syzbot+1ec2f6a450f0b54af8c8@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/6824d064.a70a0220.3e9d8.001a.GAE@google.com/T/
    Signed-off-by: Jiayuan Chen <jiayuan.chen@shopee.com>
    Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20260201135915.393451-1-jiayuan.chen@linux.dev
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: Linux 6.18.10 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Wed Feb 11 13:42:01 2026 +0100

    Linux 6.18.10
    
    Link: https://lore.kernel.org/r/20260209142320.474120190@linuxfoundation.org
    Tested-by: Ronald Warsow <rwarsow@gmx.de>
    Tested-by: Brett A C Sheffield <bacs@librecast.net>
    Tested-by: Luna Jernberg <droidbittin@gmail.com>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Hardik Garg <hargar@linux.microsoft.com>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Takeshi Ogasawara <takeshi.ogasawara@futuring-girl.com>
    Tested-by: Justin M. Forbes <jforbes@fedoraproject.org>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Jeffrin Jose T <jeffrin@rajagiritech.edu.in>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Dileep Malepu <dileep.debian@gmail.com>
    Tested-by: Shung-Hsi Yu <shung-hsi.yu@suse.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Tested-by: Barry K. Nathan <barryn@pobox.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
LoongArch: Enable exception fixup for specific ADE subcode [+ + +]
Author: Chenghao Duan <duanchenghao@kylinos.cn>
Date:   Wed Dec 31 15:19:20 2025 +0800

    LoongArch: Enable exception fixup for specific ADE subcode
    
    [ Upstream commit 9bdc1ab5e4ce6f066119018d8f69631a46f9c5a0 ]
    
    This patch allows the LoongArch BPF JIT to handle recoverable memory
    access errors generated by BPF_PROBE_MEM* instructions.
    
    When a BPF program performs memory access operations, the instructions
    it executes may trigger ADEM exceptions. The kernel’s built-in BPF
    exception table mechanism (EX_TYPE_BPF) will generate corresponding
    exception fixup entries in the JIT compilation phase; however, the
    architecture-specific trap handling function needs to proactively call
    the common fixup routine to achieve exception recovery.
    
    do_ade(): fix EX_TYPE_BPF memory access exceptions for BPF programs,
    ensure safe execution.
    
    Relevant test cases: illegal address access tests in module_attach and
    subprogs_extable of selftests/bpf.
    
    Signed-off-by: Chenghao Duan <duanchenghao@kylinos.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

LoongArch: Set correct protection_map[] for VM_NONE/VM_SHARED [+ + +]
Author: Huacai Chen <chenhuacai@kernel.org>
Date:   Wed Dec 31 15:19:10 2025 +0800

    LoongArch: Set correct protection_map[] for VM_NONE/VM_SHARED
    
    [ Upstream commit d5be446948b379f1d1a8e7bc6656d13f44c5c7b1 ]
    
    For 32BIT platform _PAGE_PROTNONE is 0, so set a VMA to be VM_NONE or
    VM_SHARED will make pages non-present, then cause Oops with kernel page
    fault.
    
    Fix it by set correct protection_map[] for VM_NONE/VM_SHARED, replacing
    _PAGE_PROTNONE with _PAGE_PRESENT.
    
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
macvlan: fix error recovery in macvlan_common_newlink() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Jan 29 20:43:59 2026 +0000

    macvlan: fix error recovery in macvlan_common_newlink()
    
    [ Upstream commit f8db6475a83649689c087a8f52486fcc53e627e9 ]
    
    valis provided a nice repro to crash the kernel:
    
    ip link add p1 type veth peer p2
    ip link set address 00:00:00:00:00:20 dev p1
    ip link set up dev p1
    ip link set up dev p2
    
    ip link add mv0 link p2 type macvlan mode source
    ip link add invalid% link p2 type macvlan mode source macaddr add 00:00:00:00:00:20
    
    ping -c1 -I p1 1.2.3.4
    
    He also gave a very detailed analysis:
    
    <quote valis>
    
    The issue is triggered when a new macvlan link is created  with
    MACVLAN_MODE_SOURCE mode and MACVLAN_MACADDR_ADD (or
    MACVLAN_MACADDR_SET) parameter, lower device already has a macvlan
    port and register_netdevice() called from macvlan_common_newlink()
    fails (e.g. because of the invalid link name).
    
    In this case macvlan_hash_add_source is called from
    macvlan_change_sources() / macvlan_common_newlink():
    
    This adds a reference to vlan to the port's vlan_source_hash using
    macvlan_source_entry.
    
    vlan is a pointer to the priv data of the link that is being created.
    
    When register_netdevice() fails, the error is returned from
    macvlan_newlink() to rtnl_newlink_create():
    
            if (ops->newlink)
                    err = ops->newlink(dev, ¶ms, extack);
            else
                    err = register_netdevice(dev);
            if (err < 0) {
                    free_netdev(dev);
                    goto out;
            }
    
    and free_netdev() is called, causing a kvfree() on the struct
    net_device that is still referenced in the source entry attached to
    the lower device's macvlan port.
    
    Now all packets sent on the macvlan port with a matching source mac
    address will trigger a use-after-free in macvlan_forward_source().
    
    </quote valis>
    
    With all that, my fix is to make sure we call macvlan_flush_sources()
    regardless of @create value whenever "goto destroy_macvlan_port;"
    path is taken.
    
    Many thanks to valis for following up on this issue.
    
    Fixes: aa5fd0fb7748 ("driver: macvlan: Destroy new macvlan port if macvlan_common_newlink failed.")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: valis <sec@valis.email>
    Reported-by: syzbot+7182fbe91e58602ec1fe@syzkaller.appspotmail.com
    Closes: https: //lore.kernel.org/netdev/695fb1e8.050a0220.1c677c.039f.GAE@google.com/T/#u
    Cc: Boudewijn van der Heide <boudewijn@delta-utec.com>
    Link: https://patch.msgid.link/20260129204359.632556-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
md: suspend array while updating raid_disks via sysfs [+ + +]
Author: FengWei Shih <dannyshih@synology.com>
Date:   Fri Dec 26 18:18:16 2025 +0800

    md: suspend array while updating raid_disks via sysfs
    
    [ Upstream commit 2cc583653bbe050bacd1cadcc9776d39bf449740 ]
    
    In raid1_reshape(), freeze_array() is called before modifying the r1bio
    memory pool (conf->r1bio_pool) and conf->raid_disks, and
    unfreeze_array() is called after the update is completed.
    
    However, freeze_array() only waits until nr_sync_pending and
    (nr_pending - nr_queued) of all buckets reaches zero. When an I/O error
    occurs, nr_queued is increased and the corresponding r1bio is queued to
    either retry_list or bio_end_io_list. As a result, freeze_array() may
    unblock before these r1bios are released.
    
    This can lead to a situation where conf->raid_disks and the mempool have
    already been updated while queued r1bios, allocated with the old
    raid_disks value, are later released. Consequently, free_r1bio() may
    access memory out of bounds in put_all_bios() and release r1bios of the
    wrong size to the new mempool, potentially causing issues with the
    mempool as well.
    
    Since only normal I/O might increase nr_queued while an I/O error occurs,
    suspending the array avoids this issue.
    
    Note: Updating raid_disks via ioctl SET_ARRAY_INFO already suspends
    the array. Therefore, we suspend the array when updating raid_disks
    via sysfs to avoid this issue too.
    
    Signed-off-by: FengWei Shih <dannyshih@synology.com>
    Link: https://lore.kernel.org/linux-raid/20251226101816.4506-1-dannyshih@synology.com
    Signed-off-by: Yu Kuai <yukuai@fnnas.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mm, shmem: prevent infinite loop on truncate race [+ + +]
Author: Kairui Song <kasong@tencent.com>
Date:   Thu Jan 29 00:19:23 2026 +0800

    mm, shmem: prevent infinite loop on truncate race
    
    commit 2030dddf95451b4e7a389f052091e7c4b7b274c6 upstream.
    
    When truncating a large swap entry, shmem_free_swap() returns 0 when the
    entry's index doesn't match the given index due to lookup alignment.  The
    failure fallback path checks if the entry crosses the end border and
    aborts when it happens, so truncate won't erase an unexpected entry or
    range.  But one scenario was ignored.
    
    When `index` points to the middle of a large swap entry, and the large
    swap entry doesn't go across the end border, find_get_entries() will
    return that large swap entry as the first item in the batch with
    `indices[0]` equal to `index`.  The entry's base index will be smaller
    than `indices[0]`, so shmem_free_swap() will fail and return 0 due to the
    "base < index" check.  The code will then call shmem_confirm_swap(), get
    the order, check if it crosses the END boundary (which it doesn't), and
    retry with the same index.
    
    The next iteration will find the same entry again at the same index with
    same indices, leading to an infinite loop.
    
    Fix this by retrying with a round-down index, and abort if the index is
    smaller than the truncate range.
    
    Link: https://lkml.kernel.org/r/aXo6ltB5iqAKJzY8@KASONG-MC4
    Fixes: 809bc86517cc ("mm: shmem: support large folio swap out")
    Fixes: 8a1968bd997f ("mm/shmem, swap: fix race of truncate and swap entry split")
    Signed-off-by: Kairui Song <kasong@tencent.com>
    Reported-by: Chris Mason <clm@meta.com>
    Closes: https://lore.kernel.org/linux-mm/20260128130336.727049-1-clm@meta.com/
    Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
    Cc: Baoquan He <bhe@redhat.com>
    Cc: Barry Song <baohua@kernel.org>
    Cc: Chris Li <chrisl@kernel.org>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Kemeng Shi <shikemeng@huaweicloud.com>
    Cc: Nhat Pham <nphamcs@gmail.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/slab: Add alloc_tagging_slab_free_hook for memcg_alloc_abort_single [+ + +]
Author: Hao Ge <hao.ge@linux.dev>
Date:   Wed Feb 4 18:14:01 2026 +0800

    mm/slab: Add alloc_tagging_slab_free_hook for memcg_alloc_abort_single
    
    commit e6c53ead2d8fa73206e0a63e9cd9aea6bc929837 upstream.
    
    When CONFIG_MEM_ALLOC_PROFILING_DEBUG is enabled, the following warning
    may be noticed:
    
    [ 3959.023862] ------------[ cut here ]------------
    [ 3959.023891] alloc_tag was not cleared (got tag for lib/xarray.c:378)
    [ 3959.023947] WARNING: ./include/linux/alloc_tag.h:155 at alloc_tag_add+0x128/0x178, CPU#6: mkfs.ntfs/113998
    [ 3959.023978] Modules linked in: dns_resolver tun brd overlay exfat btrfs blake2b libblake2b xor xor_neon raid6_pq loop sctp ip6_udp_tunnel udp_tunnel ext4 crc16 mbcache jbd2 rfkill sunrpc vfat fat sg fuse nfnetlink sr_mod virtio_gpu cdrom drm_client_lib virtio_dma_buf drm_shmem_helper drm_kms_helper ghash_ce drm sm4 backlight virtio_net net_failover virtio_scsi failover virtio_console virtio_blk virtio_mmio dm_mirror dm_region_hash dm_log dm_multipath dm_mod i2c_dev aes_neon_bs aes_ce_blk [last unloaded: hwpoison_inject]
    [ 3959.024170] CPU: 6 UID: 0 PID: 113998 Comm: mkfs.ntfs Kdump: loaded Tainted: G        W           6.19.0-rc7+ #7 PREEMPT(voluntary)
    [ 3959.024182] Tainted: [W]=WARN
    [ 3959.024186] Hardware name: QEMU KVM Virtual Machine, BIOS unknown 2/2/2022
    [ 3959.024192] pstate: 604000c5 (nZCv daIF +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    [ 3959.024199] pc : alloc_tag_add+0x128/0x178
    [ 3959.024207] lr : alloc_tag_add+0x128/0x178
    [ 3959.024214] sp : ffff80008b696d60
    [ 3959.024219] x29: ffff80008b696d60 x28: 0000000000000000 x27: 0000000000000240
    [ 3959.024232] x26: 0000000000000000 x25: 0000000000000240 x24: ffff800085d17860
    [ 3959.024245] x23: 0000000000402800 x22: ffff0000c0012dc0 x21: 00000000000002d0
    [ 3959.024257] x20: ffff0000e6ef3318 x19: ffff800085ae0410 x18: 0000000000000000
    [ 3959.024269] x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000
    [ 3959.024281] x14: 0000000000000000 x13: 0000000000000001 x12: ffff600064101293
    [ 3959.024292] x11: 1fffe00064101292 x10: ffff600064101292 x9 : dfff800000000000
    [ 3959.024305] x8 : 00009fff9befed6e x7 : ffff000320809493 x6 : 0000000000000001
    [ 3959.024316] x5 : ffff000320809490 x4 : ffff600064101293 x3 : ffff800080691838
    [ 3959.024328] x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff0000d5bcd640
    [ 3959.024340] Call trace:
    [ 3959.024346]  alloc_tag_add+0x128/0x178 (P)
    [ 3959.024355]  __alloc_tagging_slab_alloc_hook+0x11c/0x1a8
    [ 3959.024362]  kmem_cache_alloc_lru_noprof+0x1b8/0x5e8
    [ 3959.024369]  xas_alloc+0x304/0x4f0
    [ 3959.024381]  xas_create+0x1e0/0x4a0
    [ 3959.024388]  xas_store+0x68/0xda8
    [ 3959.024395]  __filemap_add_folio+0x5b0/0xbd8
    [ 3959.024409]  filemap_add_folio+0x16c/0x7e0
    [ 3959.024416]  __filemap_get_folio_mpol+0x2dc/0x9e8
    [ 3959.024424]  iomap_get_folio+0xfc/0x180
    [ 3959.024435]  __iomap_get_folio+0x2f8/0x4b8
    [ 3959.024441]  iomap_write_begin+0x198/0xc18
    [ 3959.024448]  iomap_write_iter+0x2ec/0x8f8
    [ 3959.024454]  iomap_file_buffered_write+0x19c/0x290
    [ 3959.024461]  blkdev_write_iter+0x38c/0x978
    [ 3959.024470]  vfs_write+0x4d4/0x928
    [ 3959.024482]  ksys_write+0xfc/0x1f8
    [ 3959.024489]  __arm64_sys_write+0x74/0xb0
    [ 3959.024496]  invoke_syscall+0xd4/0x258
    [ 3959.024507]  el0_svc_common.constprop.0+0xb4/0x240
    [ 3959.024514]  do_el0_svc+0x48/0x68
    [ 3959.024520]  el0_svc+0x40/0xf8
    [ 3959.024526]  el0t_64_sync_handler+0xa0/0xe8
    [ 3959.024533]  el0t_64_sync+0x1ac/0x1b0
    [ 3959.024540] ---[ end trace 0000000000000000 ]---
    
    When __memcg_slab_post_alloc_hook() fails, there are two different
    free paths depending on whether size == 1 or size != 1. In the
    kmem_cache_free_bulk() path, we do call alloc_tagging_slab_free_hook().
    However, in memcg_alloc_abort_single() we don't, the above warning will be
    triggered on the next allocation.
    
    Therefore, add alloc_tagging_slab_free_hook() to the
    memcg_alloc_abort_single() path.
    
    Fixes: 9f9796b413d3 ("mm, slab: move memcg charging to post-alloc hook")
    Cc: stable@vger.kernel.org
    Suggested-by: Hao Li <hao.li@linux.dev>
    Signed-off-by: Hao Ge <hao.ge@linux.dev>
    Reviewed-by: Hao Li <hao.li@linux.dev>
    Reviewed-by: Suren Baghdasaryan <surenb@google.com>
    Reviewed-by: Harry Yoo <harry.yoo@oracle.com>
    Link: https://patch.msgid.link/20260204101401.202762-1-hao.ge@linux.dev
    Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/sched: cls_u32: use skb_header_pointer_careful() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jan 28 14:15:39 2026 +0000

    net/sched: cls_u32: use skb_header_pointer_careful()
    
    [ Upstream commit cabd1a976375780dabab888784e356f574bbaed8 ]
    
    skb_header_pointer() does not fully validate negative @offset values.
    
    Use skb_header_pointer_careful() instead.
    
    GangMin Kim provided a report and a repro fooling u32_classify():
    
    BUG: KASAN: slab-out-of-bounds in u32_classify+0x1180/0x11b0
    net/sched/cls_u32.c:221
    
    Fixes: fbc2e7d9cf49 ("cls_u32: use skb_header_pointer() to dereference data safely")
    Reported-by: GangMin Kim <km.kim1503@gmail.com>
    Closes: https://lore.kernel.org/netdev/CANn89iJkyUZ=mAzLzC4GdcAgLuPnUoivdLaOs6B9rq5_erj76w@mail.gmail.com/T/
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20260128141539.3404400-3-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: add proper RCU protection to /proc/net/ptype [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Mon Feb 2 20:52:17 2026 +0000

    net: add proper RCU protection to /proc/net/ptype
    
    [ Upstream commit f613e8b4afea0cd17c7168e8b00e25bc8d33175d ]
    
    Yin Fengwei reported an RCU stall in ptype_seq_show() and provided
    a patch.
    
    Real issue is that ptype_seq_next() and ptype_seq_show() violate
    RCU rules.
    
    ptype_seq_show() runs under rcu_read_lock(), and reads pt->dev
    to get device name without any barrier.
    
    At the same time, concurrent writers can remove a packet_type structure
    (which is correctly freed after an RCU grace period) and clear pt->dev
    without an RCU grace period.
    
    Define ptype_iter_state to carry a dev pointer along seq_net_private:
    
    struct ptype_iter_state {
            struct seq_net_private  p;
            struct net_device       *dev; // added in this patch
    };
    
    We need to record the device pointer in ptype_get_idx() and
    ptype_seq_next() so that ptype_seq_show() is safe against
    concurrent pt->dev changes.
    
    We also need to add full RCU protection in ptype_seq_next().
    (Missing READ_ONCE() when reading list.next values)
    
    Many thanks to Dong Chenchen for providing a repro.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Fixes: 1d10f8a1f40b ("net-procfs: show net devices bound packet types")
    Fixes: c353e8983e0d ("net: introduce per netns packet chains")
    Reported-by: Yin Fengwei <fengwei_yin@linux.alibaba.com>
    Reported-by: Dong Chenchen <dongchenchen2@huawei.com>
    Closes: https://lore.kernel.org/netdev/CANn89iKRRKPnWjJmb-_3a=sq+9h6DvTQM4DBZHT5ZRGPMzQaiA@mail.gmail.com/T/#m7b80b9fc9b9267f90e0b7aad557595f686f9c50d
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Tested-by: Yin Fengwei <fengwei_yin@linux.alibaba.com>
    Link: https://patch.msgid.link/20260202205217.2881198-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: add skb_header_pointer_careful() helper [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jan 28 14:15:38 2026 +0000

    net: add skb_header_pointer_careful() helper
    
    [ Upstream commit 13e00fdc9236bd4d0bff4109d2983171fbcb74c4 ]
    
    This variant of skb_header_pointer() should be used in contexts
    where @offset argument is user-controlled and could be negative.
    
    Negative offsets are supported, as long as the zone starts
    between skb->head and skb->data.
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20260128141539.3404400-2-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: cabd1a976375 ("net/sched: cls_u32: use skb_header_pointer_careful()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: cpsw: Execute ndo_set_rx_mode callback in a work queue [+ + +]
Author: Kevin Hao <haokexin@gmail.com>
Date:   Tue Feb 3 10:18:31 2026 +0800

    net: cpsw: Execute ndo_set_rx_mode callback in a work queue
    
    commit 0b8c878d117319f2be34c8391a77e0f4d5c94d79 upstream.
    
    Commit 1767bb2d47b7 ("ipv6: mcast: Don't hold RTNL for
    IPV6_ADD_MEMBERSHIP and MCAST_JOIN_GROUP.") removed the RTNL lock for
    IPV6_ADD_MEMBERSHIP and MCAST_JOIN_GROUP operations. However, this
    change triggered the following call trace on my BeagleBone Black board:
      WARNING: net/8021q/vlan_core.c:236 at vlan_for_each+0x120/0x124, CPU#0: rpcbind/481
      RTNL: assertion failed at net/8021q/vlan_core.c (236)
      Modules linked in:
      CPU: 0 UID: 997 PID: 481 Comm: rpcbind Not tainted 6.19.0-rc7-next-20260130-yocto-standard+ #35 PREEMPT
      Hardware name: Generic AM33XX (Flattened Device Tree)
      Call trace:
       unwind_backtrace from show_stack+0x28/0x2c
       show_stack from dump_stack_lvl+0x30/0x38
       dump_stack_lvl from __warn+0xb8/0x11c
       __warn from warn_slowpath_fmt+0x130/0x194
       warn_slowpath_fmt from vlan_for_each+0x120/0x124
       vlan_for_each from cpsw_add_mc_addr+0x54/0x98
       cpsw_add_mc_addr from __hw_addr_ref_sync_dev+0xc4/0xec
       __hw_addr_ref_sync_dev from __dev_mc_add+0x78/0x88
       __dev_mc_add from igmp6_group_added+0x84/0xec
       igmp6_group_added from __ipv6_dev_mc_inc+0x1fc/0x2f0
       __ipv6_dev_mc_inc from __ipv6_sock_mc_join+0x124/0x1b4
       __ipv6_sock_mc_join from do_ipv6_setsockopt+0x84c/0x1168
       do_ipv6_setsockopt from ipv6_setsockopt+0x88/0xc8
       ipv6_setsockopt from do_sock_setsockopt+0xe8/0x19c
       do_sock_setsockopt from __sys_setsockopt+0x84/0xac
       __sys_setsockopt from ret_fast_syscall+0x0/0x54
    
    This trace occurs because vlan_for_each() is called within
    cpsw_ndo_set_rx_mode(), which expects the RTNL lock to be held.
    Since modifying vlan_for_each() to operate without the RTNL lock is not
    straightforward, and because ndo_set_rx_mode() is invoked both with and
    without the RTNL lock across different code paths, simply adding
    rtnl_lock() in cpsw_ndo_set_rx_mode() is not a viable solution.
    
    To resolve this issue, we opt to execute the actual processing within
    a work queue, following the approach used by the icssg-prueth driver.
    
    Please note: To reproduce this issue, I manually reverted the changes to
    am335x-bone-common.dtsi from commit c477358e66a3 ("ARM: dts: am335x-bone:
    switch to new cpsw switch drv") in order to revert to the legacy cpsw
    driver.
    
    Fixes: 1767bb2d47b7 ("ipv6: mcast: Don't hold RTNL for IPV6_ADD_MEMBERSHIP and MCAST_JOIN_GROUP.")
    Signed-off-by: Kevin Hao <haokexin@gmail.com>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260203-bbb-v5-2-ea0ea217a85c@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: cpsw_new: Execute ndo_set_rx_mode callback in a work queue [+ + +]
Author: Kevin Hao <haokexin@gmail.com>
Date:   Tue Feb 3 10:18:30 2026 +0800

    net: cpsw_new: Execute ndo_set_rx_mode callback in a work queue
    
    commit c0b5dc73a38f954e780f93a549b8fe225235c07a upstream.
    
    Commit 1767bb2d47b7 ("ipv6: mcast: Don't hold RTNL for
    IPV6_ADD_MEMBERSHIP and MCAST_JOIN_GROUP.") removed the RTNL lock for
    IPV6_ADD_MEMBERSHIP and MCAST_JOIN_GROUP operations. However, this
    change triggered the following call trace on my BeagleBone Black board:
      WARNING: net/8021q/vlan_core.c:236 at vlan_for_each+0x120/0x124, CPU#0: rpcbind/496
      RTNL: assertion failed at net/8021q/vlan_core.c (236)
      Modules linked in:
      CPU: 0 UID: 997 PID: 496 Comm: rpcbind Not tainted 6.19.0-rc6-next-20260122-yocto-standard+ #8 PREEMPT
      Hardware name: Generic AM33XX (Flattened Device Tree)
      Call trace:
       unwind_backtrace from show_stack+0x28/0x2c
       show_stack from dump_stack_lvl+0x30/0x38
       dump_stack_lvl from __warn+0xb8/0x11c
       __warn from warn_slowpath_fmt+0x130/0x194
       warn_slowpath_fmt from vlan_for_each+0x120/0x124
       vlan_for_each from cpsw_add_mc_addr+0x54/0xd8
       cpsw_add_mc_addr from __hw_addr_ref_sync_dev+0xc4/0xec
       __hw_addr_ref_sync_dev from __dev_mc_add+0x78/0x88
       __dev_mc_add from igmp6_group_added+0x84/0xec
       igmp6_group_added from __ipv6_dev_mc_inc+0x1fc/0x2f0
       __ipv6_dev_mc_inc from __ipv6_sock_mc_join+0x124/0x1b4
       __ipv6_sock_mc_join from do_ipv6_setsockopt+0x84c/0x1168
       do_ipv6_setsockopt from ipv6_setsockopt+0x88/0xc8
       ipv6_setsockopt from do_sock_setsockopt+0xe8/0x19c
       do_sock_setsockopt from __sys_setsockopt+0x84/0xac
       __sys_setsockopt from ret_fast_syscall+0x0/0x5
    
    This trace occurs because vlan_for_each() is called within
    cpsw_ndo_set_rx_mode(), which expects the RTNL lock to be held.
    Since modifying vlan_for_each() to operate without the RTNL lock is not
    straightforward, and because ndo_set_rx_mode() is invoked both with and
    without the RTNL lock across different code paths, simply adding
    rtnl_lock() in cpsw_ndo_set_rx_mode() is not a viable solution.
    
    To resolve this issue, we opt to execute the actual processing within
    a work queue, following the approach used by the icssg-prueth driver.
    
    Fixes: 1767bb2d47b7 ("ipv6: mcast: Don't hold RTNL for IPV6_ADD_MEMBERSHIP and MCAST_JOIN_GROUP.")
    Signed-off-by: Kevin Hao <haokexin@gmail.com>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260203-bbb-v5-1-ea0ea217a85c@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: don't touch dev->stats in BPF redirect paths [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Thu Jan 29 19:38:27 2026 -0800

    net: don't touch dev->stats in BPF redirect paths
    
    [ Upstream commit fdf3f6800be36377e045e2448087f12132b88d2f ]
    
    Gal reports that BPF redirect increments dev->stats.tx_errors
    on failure. This is not correct, most modern drivers completely
    ignore dev->stats so these drops will be invisible to the user.
    Core code should use the dedicated core stats which are folded
    into device stats in dev_get_stats().
    
    Note that we're switching from tx_errors to tx_dropped.
    Core only has tx_dropped, hence presumably users already expect
    that counter to increment for "stack" Tx issues.
    
    Reported-by: Gal Pressman <gal@nvidia.com>
    Link: https://lore.kernel.org/c5df3b60-246a-4030-9c9a-0a35cd1ca924@nvidia.com
    Fixes: b4ab31414970 ("bpf: Add redirect_neigh helper as redirect drop-in")
    Acked-by: Martin KaFai Lau <martin.lau@kernel.org>
    Acked-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20260130033827.698841-1-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: enetc: Convert 16-bit register reads to 32-bit for ENETC v4 [+ + +]
Author: Claudiu Manoil <claudiu.manoil@nxp.com>
Date:   Fri Jan 30 16:10:35 2026 +0200

    net: enetc: Convert 16-bit register reads to 32-bit for ENETC v4
    
    [ Upstream commit c28d765ec5da160d3a48d0928528084cef97bf19 ]
    
    It is not recommended to access the 32‑bit registers of this hardware IP
    using lower‑width accessors (i.e. 16‑bit), and the only exception to
    this rule was introduced in the initial ENETC v1 driver for the PMAR1
    register, which holds the lower 16 bits of the primary MAC address of
    an SI. Meanwhile, this exception has been replicated in the v4 driver
    code as well.
    
    Since LS1028 (the only SoC with ENETC v1) is not affected by this issue,
    the current patch converts the 16‑bit reads from PMAR1 starting with
    ENETC v4.
    
    Fixes: 99100d0d9922 ("net: enetc: add preliminary support for i.MX95 ENETC PF")
    Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com>
    Reviewed-by: Wei Fang <wei.fang@nxp.com>
    Link: https://patch.msgid.link/20260130141035.272471-5-claudiu.manoil@nxp.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: enetc: Convert 16-bit register writes to 32-bit for ENETC v4 [+ + +]
Author: Claudiu Manoil <claudiu.manoil@nxp.com>
Date:   Fri Jan 30 16:10:34 2026 +0200

    net: enetc: Convert 16-bit register writes to 32-bit for ENETC v4
    
    [ Upstream commit 21d0fc95b5920ae8e69a2c0394bef82b8392bcc9 ]
    
    For ENETC v4, which is integrated into more complex SoCs (compared to v1),
    16‑bit register writes are blocked in the SoC interconnect on some chips.
    
    To be fair, it is not recommended to access 32‑bit registers of this IP
    using lower‑width accessors (i.e. 16‑bit), and the only exception to
    this rule was introduced by me in the initial ENETC v1 driver for the
    PMAR1 register, which holds the lower 16 bits of the primary MAC address
    of an SI. Meanwhile, this exception has been replicated for v4 as well.
    
    Since LS1028 (the only SoC with ENETC v1) is not affected by this issue,
    the current patch fixes the 16‑bit writes to PMAR1 starting with ENETC
    v4.
    
    Fixes: 99100d0d9922 ("net: enetc: add preliminary support for i.MX95 ENETC PF")
    Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com>
    Reviewed-by: Wei Fang <wei.fang@nxp.com>
    Link: https://patch.msgid.link/20260130141035.272471-4-claudiu.manoil@nxp.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: enetc: Remove CBDR cacheability AXI settings for ENETC v4 [+ + +]
Author: Claudiu Manoil <claudiu.manoil@nxp.com>
Date:   Fri Jan 30 16:10:33 2026 +0200

    net: enetc: Remove CBDR cacheability AXI settings for ENETC v4
    
    [ Upstream commit 9ae13b2e64fcd2ca00a76b7d60fc4641a6b9209d ]
    
    For ENETC v4 these settings are controlled by the global ENETC
    command cache attribute registers (EnCAR), from the IERB register
    block.
    
    The hardcoded CDBR cacheability settings were inherited from LS1028A,
    and should be removed from the ENETC v4 driver as they conflict
    with the global IERB settings.
    
    Fixes: e3f4a0a8ddb4 ("net: enetc: add command BD ring support for i.MX95 ENETC")
    Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com>
    Reviewed-by: Wei Fang <wei.fang@nxp.com>
    Link: https://patch.msgid.link/20260130141035.272471-3-claudiu.manoil@nxp.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: enetc: Remove SI/BDR cacheability AXI settings for ENETC v4 [+ + +]
Author: Claudiu Manoil <claudiu.manoil@nxp.com>
Date:   Fri Jan 30 16:10:32 2026 +0200

    net: enetc: Remove SI/BDR cacheability AXI settings for ENETC v4
    
    [ Upstream commit a69c17230cab07bd156f894fdc82bd78b43ea72f ]
    
    For ENETC v4 these settings are controlled by the global ENETC
    message and buffer cache attribute registers (EnBCAR and EnMCAR),
    from the IERB register block.
    
    The hardcoded cacheability settings were inherited from LS1028A,
    and should be removed from the ENETC v4 driver as they conflict
    with the global IERB settings.
    
    Fixes: 99100d0d9922 ("net: enetc: add preliminary support for i.MX95 ENETC PF")
    Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com>
    Reviewed-by: Wei Fang <wei.fang@nxp.com>
    Link: https://patch.msgid.link/20260130141035.272471-2-claudiu.manoil@nxp.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ethernet: adi: adin1110: Check return value of devm_gpiod_get_optional() in adin1110_check_spi() [+ + +]
Author: Chen Ni <nichen@iscas.ac.cn>
Date:   Mon Feb 2 12:02:28 2026 +0800

    net: ethernet: adi: adin1110: Check return value of devm_gpiod_get_optional() in adin1110_check_spi()
    
    [ Upstream commit 78211543d2e44f84093049b4ef5f5bfa535f4645 ]
    
    The devm_gpiod_get_optional() function may return an ERR_PTR in case of
    genuine GPIO acquisition errors, not just NULL which indicates the
    legitimate absence of an optional GPIO.
    
    Add an IS_ERR() check after the call in adin1110_check_spi(). On error,
    return the error code to ensure proper failure handling rather than
    proceeding with invalid pointers.
    
    Fixes: 36934cac7aaf ("net: ethernet: adi: adin1110: add reset GPIO")
    Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
    Reviewed-by: Nuno Sá <nuno.sa@analog.com>
    Link: https://patch.msgid.link/20260202040228.4129097-1-nichen@iscas.ac.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: gro: fix outer network offset [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Mon Feb 2 12:43:14 2026 +0100

    net: gro: fix outer network offset
    
    [ Upstream commit 5c2c3c38be396257a6a2e55bd601a12bb9781507 ]
    
    The udp GRO complete stage assumes that all the packets inserted the RX
    have the `encapsulation` flag zeroed. Such assumption is not true, as a
    few H/W NICs can set such flag when H/W offloading the checksum for
    an UDP encapsulated traffic, the tun driver can inject GSO packets with
    UDP encapsulation and the problematic layout can also be created via
    a veth based setup.
    
    Due to the above, in the problematic scenarios, udp4_gro_complete() uses
    the wrong network offset (inner instead of outer) to compute the outer
    UDP header pseudo checksum, leading to csum validation errors later on
    in packet processing.
    
    Address the issue always clearing the encapsulation flag at GRO completion
    time. Such flag will be set again as needed for encapsulated packets by
    udp_gro_complete().
    
    Fixes: 5ef31ea5d053 ("net: gro: fix udp bad offset in socket lookup by adding {inner_}network_offset to napi_gro_cb")
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/562638dbebb3b15424220e26a180274b387e2a88.1770032084.git.pabeni@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: liquidio: Fix off-by-one error in PF setup_nic_devices() cleanup [+ + +]
Author: Zilin Guan <zilin@seu.edu.cn>
Date:   Wed Jan 28 15:44:39 2026 +0000

    net: liquidio: Fix off-by-one error in PF setup_nic_devices() cleanup
    
    [ Upstream commit 8558aef4e8a1a83049ab906d21d391093cfa7e7f ]
    
    In setup_nic_devices(), the initialization loop jumps to the label
    setup_nic_dev_free on failure. The current cleanup loop while(i--)
    skip the failing index i, causing a memory leak.
    
    Fix this by changing the loop to iterate from the current index i
    down to 0.
    
    Also, decrement i in the devlink_alloc failure path to point to the
    last successfully allocated index.
    
    Compile tested only. Issue found using code review.
    
    Fixes: f21fb3ed364b ("Add support of Cavium Liquidio ethernet adapters")
    Suggested-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
    Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>
    Link: https://patch.msgid.link/20260128154440.278369-3-zilin@seu.edu.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: liquidio: Fix off-by-one error in VF setup_nic_devices() cleanup [+ + +]
Author: Zilin Guan <zilin@seu.edu.cn>
Date:   Wed Jan 28 15:44:40 2026 +0000

    net: liquidio: Fix off-by-one error in VF setup_nic_devices() cleanup
    
    [ Upstream commit 6cbba46934aefdfb5d171e0a95aec06c24f7ca30 ]
    
    In setup_nic_devices(), the initialization loop jumps to the label
    setup_nic_dev_free on failure. The current cleanup loop while(i--)
    skip the failing index i, causing a memory leak.
    
    Fix this by changing the loop to iterate from the current index i
    down to 0.
    
    Compile tested only. Issue found using code review.
    
    Fixes: 846b46873eeb ("liquidio CN23XX: VF offload features")
    Suggested-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
    Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>
    Link: https://patch.msgid.link/20260128154440.278369-4-zilin@seu.edu.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: liquidio: Initialize netdev pointer before queue setup [+ + +]
Author: Zilin Guan <zilin@seu.edu.cn>
Date:   Wed Jan 28 15:44:38 2026 +0000

    net: liquidio: Initialize netdev pointer before queue setup
    
    [ Upstream commit 926ede0c85e1e57c97d64d9612455267d597bb2c ]
    
    In setup_nic_devices(), the netdev is allocated using alloc_etherdev_mq().
    However, the pointer to this structure is stored in oct->props[i].netdev
    only after the calls to netif_set_real_num_rx_queues() and
    netif_set_real_num_tx_queues().
    
    If either of these functions fails, setup_nic_devices() returns an error
    without freeing the allocated netdev. Since oct->props[i].netdev is still
    NULL at this point, the cleanup function liquidio_destroy_nic_device()
    will fail to find and free the netdev, resulting in a memory leak.
    
    Fix this by initializing oct->props[i].netdev before calling the queue
    setup functions. This ensures that the netdev is properly accessible for
    cleanup in case of errors.
    
    Compile tested only. Issue found using a prototype static analysis tool
    and code review.
    
    Fixes: c33c997346c3 ("liquidio: enhanced ethtool --set-channels feature")
    Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
    Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>
    Link: https://patch.msgid.link/20260128154440.278369-2-zilin@seu.edu.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: rss: fix reporting RXH_XFRM_NO_CHANGE as input_xfrm for contexts [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Fri Jan 30 11:03:11 2026 -0800

    net: rss: fix reporting RXH_XFRM_NO_CHANGE as input_xfrm for contexts
    
    [ Upstream commit 1c172febdf065375359b2b95156e476bfee30b60 ]
    
    Initializing input_xfrm to RXH_XFRM_NO_CHANGE in RSS contexts is
    problematic. I think I did this to make it clear that the context
    does not have its own settings applied. But unlike ETH_RSS_HASH_NO_CHANGE
    which is zero, RXH_XFRM_NO_CHANGE is 0xff. We need to be careful
    when reading the value back, and remember to treat 0xff as 0.
    
    Remove the initialization and switch to storing 0. This lets us
    also remove the workaround in ethnl_rss_set(). Get side does not
    need any adjustments and context get no longer reports:
    
      RSS input transformation:
        symmetric-xor: on
        symmetric-or-xor: on
        Unknown bits in RSS input transformation: 0xfc
    
    for NICs which don't support input_xfrm.
    
    Remove the init of hfunc to ETH_RSS_HASH_NO_CHANGE while at it.
    As already mentioned this is a noop since ETH_RSS_HASH_NO_CHANGE
    is 0 and struct is zalloc'd. But as this fix exemplifies storing
    NO_CHANGE as state is fragile.
    
    This issue is implicitly caught by running our selftests because
    YNL in selftests errors out on unknown bits.
    
    Fixes: d3e2c7bab124 ("ethtool: rss: support setting input-xfrm via Netlink")
    Link: https://patch.msgid.link/20260130190311.811129-1-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: sfp: Fix quirk for Ubiquiti U-Fiber Instant SFP module [+ + +]
Author: Marek Behún <kabel@kernel.org>
Date:   Thu Jan 29 09:22:27 2026 +0100

    net: sfp: Fix quirk for Ubiquiti U-Fiber Instant SFP module
    
    [ Upstream commit adcbadfd8e05d3558c9cfaa783f17c645181165f ]
    
    Commit fd580c9830316eda ("net: sfp: augment SFP parsing with
    phy_interface_t bitmap") did not add augumentation for the interface
    bitmap in the quirk for Ubiquiti U-Fiber Instant.
    
    The subsequent commit f81fa96d8a6c7a77 ("net: phylink: use
    phy_interface_t bitmaps for optical modules") then changed phylink code
    for selection of SFP interface: instead of using link mode bitmap, the
    interface bitmap is used, and the fastest interface mode supported by
    both SFP module and MAC is chosen.
    
    Since the interface bitmap contains also modes faster than 1000base-x,
    this caused a regression wherein this module stopped working
    out-of-the-box.
    
    Fix this.
    
    Fixes: fd580c9830316eda ("net: sfp: augment SFP parsing with phy_interface_t bitmap")
    Signed-off-by: Marek Behún <kabel@kernel.org>
    Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
    Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Link: https://patch.msgid.link/20260129082227.17443-1-kabel@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: spacemit: k1-emac: fix jumbo frame support [+ + +]
Author: Tomas Hlavacek <tmshlvck@gmail.com>
Date:   Fri Jan 30 11:23:01 2026 +0100

    net: spacemit: k1-emac: fix jumbo frame support
    
    commit 3125fc17016945b11e9725c6aff30ff3326fd58f upstream.
    
    The driver never programs the MAC frame size and jabber registers,
    causing the hardware to reject frames larger than the default 1518
    bytes even when larger DMA buffers are allocated.
    
    Program MAC_MAXIMUM_FRAME_SIZE, MAC_TRANSMIT_JABBER_SIZE, and
    MAC_RECEIVE_JABBER_SIZE based on the configured MTU. Also fix the
    maximum buffer size from 4096 to 4095, since the descriptor buffer
    size field is only 12 bits. Account for double VLAN tags in frame
    size calculations.
    
    Fixes: bfec6d7f2001 ("net: spacemit: Add K1 Ethernet MAC")
    Cc: stable@vger.kernel.org
    Signed-off-by: Tomas Hlavacek <tmshlvck@gmail.com>
    Link: https://patch.msgid.link/20260130102301.477514-1-tmshlvck@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: usb: r8152: fix resume reset deadlock [+ + +]
Author: Sergey Senozhatsky <senozhatsky@chromium.org>
Date:   Thu Jan 29 12:10:30 2026 +0900

    net: usb: r8152: fix resume reset deadlock
    
    [ Upstream commit 6d06bc83a5ae8777a5f7a81c32dd75b8d9b2fe04 ]
    
    rtl8152 can trigger device reset during reset which
    potentially can result in a deadlock:
    
     **** DPM device timeout after 10 seconds; 15 seconds until panic ****
     Call Trace:
     <TASK>
     schedule+0x483/0x1370
     schedule_preempt_disabled+0x15/0x30
     __mutex_lock_common+0x1fd/0x470
     __rtl8152_set_mac_address+0x80/0x1f0
     dev_set_mac_address+0x7f/0x150
     rtl8152_post_reset+0x72/0x150
     usb_reset_device+0x1d0/0x220
     rtl8152_resume+0x99/0xc0
     usb_resume_interface+0x3e/0xc0
     usb_resume_both+0x104/0x150
     usb_resume+0x22/0x110
    
    The problem is that rtl8152 resume calls reset under
    tp->control mutex while reset basically re-enters rtl8152
    and attempts to acquire the same tp->control lock once
    again.
    
    Reset INACCESSIBLE device outside of tp->control mutex
    scope to avoid recursive mutex_lock() deadlock.
    
    Fixes: 4933b066fefb ("r8152: If inaccessible at resume time, issue a reset")
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
    Link: https://patch.msgid.link/20260129031106.3805887-1-senozhatsky@chromium.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: usb: sr9700: support devices with virtual driver CD [+ + +]
Author: Ethan Nelson-Moore <enelsonmoore@gmail.com>
Date:   Wed Dec 10 22:24:51 2025 -0800

    net: usb: sr9700: support devices with virtual driver CD
    
    [ Upstream commit bf4172bd870c3a34d3065cbb39192c22cbd7b18d ]
    
    Some SR9700 devices have an SPI flash chip containing a virtual driver
    CD, in which case they appear as a device with two interfaces and
    product ID 0x9702. Interface 0 is the driver CD and interface 1 is the
    Ethernet device.
    
    Link: https://github.com/name-kurniawan/usb-lan
    Link: https://www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?t=2185
    Signed-off-by: Ethan Nelson-Moore <enelsonmoore@gmail.com>
    Link: https://patch.msgid.link/20251211062451.139036-1-enelsonmoore@gmail.com
    [pabeni@redhat.com: fixes link tags]
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netfilter: nf_tables: fix inverted genmask check in nft_map_catchall_activate() [+ + +]
Author: Andrew Fasano <andrew.fasano@nist.gov>
Date:   Wed Feb 4 17:46:58 2026 +0100

    netfilter: nf_tables: fix inverted genmask check in nft_map_catchall_activate()
    
    [ Upstream commit f41c5d151078c5348271ffaf8e7410d96f2d82f8 ]
    
    nft_map_catchall_activate() has an inverted element activity check
    compared to its non-catchall counterpart nft_mapelem_activate() and
    compared to what is logically required.
    
    nft_map_catchall_activate() is called from the abort path to re-activate
    catchall map elements that were deactivated during a failed transaction.
    It should skip elements that are already active (they don't need
    re-activation) and process elements that are inactive (they need to be
    restored). Instead, the current code does the opposite: it skips inactive
    elements and processes active ones.
    
    Compare the non-catchall activate callback, which is correct:
    
      nft_mapelem_activate():
        if (nft_set_elem_active(ext, iter->genmask))
            return 0;   /* skip active, process inactive */
    
    With the buggy catchall version:
    
      nft_map_catchall_activate():
        if (!nft_set_elem_active(ext, genmask))
            continue;   /* skip inactive, process active */
    
    The consequence is that when a DELSET operation is aborted,
    nft_setelem_data_activate() is never called for the catchall element.
    For NFT_GOTO verdict elements, this means nft_data_hold() is never
    called to restore the chain->use reference count. Each abort cycle
    permanently decrements chain->use. Once chain->use reaches zero,
    DELCHAIN succeeds and frees the chain while catchall verdict elements
    still reference it, resulting in a use-after-free.
    
    This is exploitable for local privilege escalation from an unprivileged
    user via user namespaces + nftables on distributions that enable
    CONFIG_USER_NS and CONFIG_NF_TABLES.
    
    Fix by removing the negation so the check matches nft_mapelem_activate():
    skip active elements, process inactive ones.
    
    Fixes: 628bd3e49cba ("netfilter: nf_tables: drop map element references from preparation phase")
    Signed-off-by: Andrew Fasano <andrew.fasano@nist.gov>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: replace -EEXIST with -EBUSY [+ + +]
Author: Daniel Gomez <da.gomez@samsung.com>
Date:   Fri Dec 19 06:13:20 2025 +0100

    netfilter: replace -EEXIST with -EBUSY
    
    [ Upstream commit 2bafeb8d2f380c3a81d98bd7b78b854b564f9cd4 ]
    
    The -EEXIST error code is reserved by the module loading infrastructure
    to indicate that a module is already loaded. When a module's init
    function returns -EEXIST, userspace tools like kmod interpret this as
    "module already loaded" and treat the operation as successful, returning
    0 to the user even though the module initialization actually failed.
    
    Replace -EEXIST with -EBUSY to ensure correct error reporting in the module
    initialization path.
    
    Affected modules:
      * ebtable_broute ebtable_filter ebtable_nat arptable_filter
      * ip6table_filter ip6table_mangle ip6table_nat ip6table_raw
      * ip6table_security iptable_filter iptable_mangle iptable_nat
      * iptable_raw iptable_security
    
    Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nouveau/gsp: fix suspend/resume regression on r570 firmware [+ + +]
Author: Dave Airlie <airlied@redhat.com>
Date:   Tue Feb 3 15:21:13 2026 +1000

    nouveau/gsp: fix suspend/resume regression on r570 firmware
    
    commit 8302d0afeaec0bc57d951dd085e0cffe997d4d18 upstream.
    
    The r570 firmware with certain GPUs (at least RTX6000) needs this
    flag to reflect the suspend vs runtime PM state of the driver.
    
    This uses that info to set the correct flags to the firmware.
    
    This fixes a regression on RTX6000 and other GPUs since r570 firmware
    was enabled.
    
    Fixes: 53dac0623853 ("drm/nouveau/gsp: add support for 570.144")
    Cc: <stable@vger.kernel.org>
    Reviewed-by: Lyude Paul <lyude@redhat.com>
    Tested-by: Lyude Paul <lyude@redhat.com>
    Signed-off-by: Dave Airlie <airlied@redhat.com>
    Link: https://patch.msgid.link/20260203052431.2219998-4-airlied@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

nouveau/gsp: use rpc sequence numbers properly. [+ + +]
Author: Dave Airlie <airlied@redhat.com>
Date:   Tue Feb 3 15:21:11 2026 +1000

    nouveau/gsp: use rpc sequence numbers properly.
    
    commit 90caca3b7264cc3e92e347b2004fff4e386fc26e upstream.
    
    There are two layers of sequence numbers, one at the msg level
    and one at the rpc level.
    
    570 firmware started asserting on the sequence numbers being
    in the right order, and we would see nocat records with asserts
    in them.
    
    Add the rpc level sequence number support.
    
    Fixes: 53dac0623853 ("drm/nouveau/gsp: add support for 570.144")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Dave Airlie <airlied@redhat.com>
    Reviewed-by: Lyude Paul <lyude@redhat.com>
    Tested-by: Lyude Paul <lyude@redhat.com>
    Link: https://patch.msgid.link/20260203052431.2219998-2-airlied@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nouveau: add a third state to the fini handler. [+ + +]
Author: Dave Airlie <airlied@redhat.com>
Date:   Tue Feb 3 15:21:12 2026 +1000

    nouveau: add a third state to the fini handler.
    
    commit 8f8a4dce64013737701d13565cf6107f42b725ea upstream.
    
    This is just refactoring to allow the lower layers to distinguish
    between suspend and runtime suspend.
    
    GSP 570 needs to set a flag with the GPU is going into GCOFF,
    this flag taken from the opengpu driver is set whenever runtime
    suspend is enterning GCOFF but not for normal suspend paths.
    
    This just refactors the code, a subsequent patch use the information.
    
    Fixes: 53dac0623853 ("drm/nouveau/gsp: add support for 570.144")
    Cc: <stable@vger.kernel.org>
    Reviewed-by: Lyude Paul <lyude@redhat.com>
    Tested-by: Lyude Paul <lyude@redhat.com>
    Signed-off-by: Dave Airlie <airlied@redhat.com>
    Link: https://patch.msgid.link/20260203052431.2219998-3-airlied@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nvme-fc: release admin tagset if init fails [+ + +]
Author: Chaitanya Kulkarni <ckulkarnilinux@gmail.com>
Date:   Fri Dec 19 16:18:42 2025 -0800

    nvme-fc: release admin tagset if init fails
    
    [ Upstream commit d1877cc7270302081a315a81a0ee8331f19f95c8 ]
    
    nvme_fabrics creates an NVMe/FC controller in following path:
    
        nvmf_dev_write()
          -> nvmf_create_ctrl()
            -> nvme_fc_create_ctrl()
              -> nvme_fc_init_ctrl()
    
    nvme_fc_init_ctrl() allocates the admin blk-mq resources right after
    nvme_add_ctrl() succeeds.  If any of the subsequent steps fail (changing
    the controller state, scheduling connect work, etc.), we jump to the
    fail_ctrl path, which tears down the controller references but never
    frees the admin queue/tag set.  The leaked blk-mq allocations match the
    kmemleak report seen during blktests nvme/fc.
    
    Check ctrl->ctrl.admin_tagset in the fail_ctrl path and call
    nvme_remove_admin_tag_set() when it is set so that all admin queue
    allocations are reclaimed whenever controller setup aborts.
    
    Reported-by: Yi Zhang <yi.zhang@redhat.com>
    Reviewed-by: Justin Tee <justin.tee@broadcom.com>
    Signed-off-by: Chaitanya Kulkarni <ckulkarnilinux@gmail.com>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvme-pci: handle changing device dma map requirements [+ + +]
Author: Keith Busch <kbusch@kernel.org>
Date:   Wed Feb 4 06:29:11 2026 -0800

    nvme-pci: handle changing device dma map requirements
    
    [ Upstream commit 071be3b0b6575d45be9df9c5b612f5882bfc5e88 ]
    
    The initial state of dma_needs_unmap may be false, but change to true
    while mapping the data iterator. Enabling swiotlb is one such case that
    can change the result. The nvme driver needs to save the mapped dma
    vectors to be unmapped later, so allocate as needed during iteration
    rather than assume it was always allocated at the beginning. This fixes
    a NULL dereference from accessing an uninitialized dma_vecs when the
    device dma unmapping requirements change mid-iteration.
    
    Fixes: b8b7570a7ec8 ("nvme-pci: fix dma unmapping when using PRPs and not using the IOVA mapping")
    Link: https://lore.kernel.org/linux-nvme/20260202125738.1194899-1-pradeep.pragallapati@oss.qualcomm.com/
    Reported-by: Pradeep P V K <pradeep.pragallapati@oss.qualcomm.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvmet-tcp: add bounds checks in nvmet_tcp_build_pdu_iovec [+ + +]
Author: YunJe Shin <yjshin0438@gmail.com>
Date:   Wed Jan 28 09:41:07 2026 +0900

    nvmet-tcp: add bounds checks in nvmet_tcp_build_pdu_iovec
    
    commit 52a0a98549344ca20ad81a4176d68d28e3c05a5c upstream.
    
    nvmet_tcp_build_pdu_iovec() could walk past cmd->req.sg when a PDU
    length or offset exceeds sg_cnt and then use bogus sg->length/offset
    values, leading to _copy_to_iter() GPF/KASAN. Guard sg_idx, remaining
    entries, and sg->length/offset before building the bvec.
    
    Fixes: 872d26a391da ("nvmet-tcp: add NVMe over TCP target driver")
    Signed-off-by: YunJe Shin <ioerts@kookmin.ac.kr>
    Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
    Reviewed-by: Joonkyo Jung <joonkyoj@yonsei.ac.kr>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
nvmet-tcp: fixup hang in nvmet_tcp_listen_data_ready() [+ + +]
Author: Hannes Reinecke <hare@kernel.org>
Date:   Mon Aug 18 11:32:45 2025 +0200

    nvmet-tcp: fixup hang in nvmet_tcp_listen_data_ready()
    
    [ Upstream commit 2fa8961d3a6a1c2395d8d560ffed2c782681bade ]
    
    When the socket is closed while in TCP_LISTEN a callback is run to
    flush all outstanding packets, which in turns calls
    nvmet_tcp_listen_data_ready() with the sk_callback_lock held.
    So we need to check if we are in TCP_LISTEN before attempting
    to get the sk_callback_lock() to avoid a deadlock.
    
    Link: https://lore.kernel.org/linux-nvme/CAHj4cs-zu7eVB78yUpFjVe2UqMWFkLk8p+DaS3qj+uiGCXBAoA@mail.gmail.com/
    Tested-by:  Yi Zhang <yi.zhang@redhat.com>
    Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
    Signed-off-by: Hannes Reinecke <hare@kernel.org>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
PCI/ERR: Ensure error recoverability at all times [+ + +]
Author: Lukas Wunner <lukas@wunner.de>
Date:   Wed Nov 19 09:50:03 2025 +0100

    PCI/ERR: Ensure error recoverability at all times
    
    commit a2f1e22390ac2ca7ac8d77aa0f78c068b6dd2208 upstream.
    
    When the PCI core gained power management support in 2002, it introduced
    pci_save_state() and pci_restore_state() helpers to restore Config Space
    after a D3hot or D3cold transition, which implies a Soft or Fundamental
    Reset (PCIe r7.0 sec 5.8):
    
      https://git.kernel.org/tglx/history/c/a5287abe398b
    
    In 2006, EEH and AER were introduced to recover from errors by performing
    a reset.  Because errors can occur at any time, drivers began calling
    pci_save_state() on probe to ensure recoverability.
    
    In 2009, recoverability was foiled by commit c82f63e411f1 ("PCI: check
    saved state before restore"):  It amended pci_restore_state() to bail out
    if the "state_saved" flag has been cleared.  The flag is cleared by
    pci_restore_state() itself, hence a saved state is now allowed to be
    restored only once and is then invalidated.  That doesn't seem to make
    sense because the saved state should be good enough to be reused.
    
    Soon after, drivers began to work around this behavior by calling
    pci_save_state() immediately after pci_restore_state(), see e.g. commit
    b94f2d775a71 ("igb: call pci_save_state after pci_restore_state").
    Hilariously, two drivers even set the "saved_state" flag to true before
    invoking pci_restore_state(), see ipr_reset_restore_cfg_space() and
    e1000_io_slot_reset().
    
    Despite these workarounds, recoverability at all times is not guaranteed:
    E.g. when a PCIe port goes through a runtime suspend and resume cycle,
    the "saved_state" flag is cleared by:
    
      pci_pm_runtime_resume()
        pci_pm_default_resume_early()
          pci_restore_state()
    
    ... and hence on a subsequent AER event, the port's Config Space cannot be
    restored.  Riana reports a recovery failure of a GPU-integrated PCIe
    switch and has root-caused it to the behavior of pci_restore_state().
    Another workaround would be necessary, namely calling pci_save_state() in
    pcie_port_device_runtime_resume().
    
    The motivation of commit c82f63e411f1 was to prevent restoring state if
    pci_save_state() hasn't been called before.  But that can be achieved by
    saving state already on device addition, after Config Space has been
    initialized.  A desirable side effect is that devices become recoverable
    even if no driver gets bound.  This renders the commit unnecessary, so
    revert it.
    
    Reported-by: Riana Tauro <riana.tauro@intel.com> # off-list
    Signed-off-by: Lukas Wunner <lukas@wunner.de>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Tested-by: Riana Tauro <riana.tauro@intel.com>
    Reviewed-by: Rafael J. Wysocki (Intel) <rafael@kernel.org>
    Link: https://patch.msgid.link/9e34ce61c5404e99ffdd29205122c6fb334b38aa.1763483367.git.lukas@wunner.de
    Cc: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
PCI: qcom: Remove ASPM L0s support for MSM8996 SoC [+ + +]
Author: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
Date:   Wed Nov 26 13:47:18 2025 +0530

    PCI: qcom: Remove ASPM L0s support for MSM8996 SoC
    
    [ Upstream commit 0cc13256b60510936c34098ee7b929098eed823b ]
    
    Though I couldn't confirm ASPM L0s support with the Qcom hardware team, a
    bug report from Dmitry suggests that L0s is broken on this legacy SoC.
    Hence, remove L0s support from the Root Port Link Capabilities in this SoC.
    
    Since qcom_pcie_clear_aspm_l0s() is now used by more than one SoC config,
    call it from qcom_pcie_host_init() instead.
    
    Reported-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Closes: https://lore.kernel.org/linux-pci/4cp5pzmlkkht2ni7us6p3edidnk25l45xrp6w3fxguqcvhq2id@wjqqrdpkypkf
    Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
    Signed-off-by: Manivannan Sadhasivam <mani@kernel.org>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Tested-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
    Link: https://patch.msgid.link/20251126081718.8239-1-mani@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
platform/x86/intel/tpmi/plr: Make the file domain/status writeable [+ + +]
Author: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
Date:   Tue Jan 27 15:45:40 2026 -0800

    platform/x86/intel/tpmi/plr: Make the file domain<n>/status writeable
    
    [ Upstream commit 008bec8ffe6e7746588d1e12c5b3865fa478fc91 ]
    
    The file sys/kernel/debug/tpmi-<n>/plr/domain<n>/status has store and show
    callbacks. Make it writeable.
    
    Fixes: 811f67c51636d ("platform/x86/intel/tpmi: Add new auxiliary driver for performance limits")
    Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
    Link: https://patch.msgid.link/20260127-plr-debugfs-write-v1-1-1fffbc370b1e@linux.intel.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
platform/x86: dell-lis3lv02d: Add Latitude 5400 [+ + +]
Author: Dmytro Bagrii <dimich.dmb@gmail.com>
Date:   Fri Nov 28 18:15:23 2025 +0200

    platform/x86: dell-lis3lv02d: Add Latitude 5400
    
    [ Upstream commit a5b9fdd33c59a964a26d12c39b636ef85a25b074 ]
    
    Add accelerometer address 0x29 for Dell Latitude 5400.
    
    The address is verified as below:
    
        $ cat /sys/class/dmi/id/product_name
        Latitude 5400
    
        $ grep -H '' /sys/bus/pci/drivers/i801_smbus/0000\:00*/i2c-*/name
        /sys/bus/pci/drivers/i801_smbus/0000:00:1f.4/i2c-10/name:SMBus I801 adapter at 0000:00:1f.4
    
        $ i2cdetect 10
        WARNING! This program can confuse your I2C bus, cause data loss and worse!
        I will probe file /dev/i2c-10.
        I will probe address range 0x08-0x77.
        Continue? [Y/n] Y
             0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
        00:                         08 -- -- -- -- -- -- --
        10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
        20: -- -- -- -- -- -- -- -- -- UU -- -- -- -- -- --
        30: 30 -- -- -- -- 35 UU UU -- -- -- -- -- -- -- --
        40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- --
        50: UU -- 52 -- -- -- -- -- -- -- -- -- -- -- -- --
        60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
        70: -- -- -- -- -- -- -- --
    
        $ xargs -n1 -a /proc/cmdline | grep ^dell_lis3lv02d
        dell_lis3lv02d.probe_i2c_addr=1
    
        $ dmesg | grep lis3lv02d
        ...
        [  206.012411] i2c i2c-10: Probing for lis3lv02d on address 0x29
        [  206.013727] i2c i2c-10: Detected lis3lv02d on address 0x29, please report this upstream to platform-driver-x86@vger.kernel.org so that a quirk can be added
        [  206.240841] lis3lv02d_i2c 10-0029: supply Vdd not found, using dummy regulator
        [  206.240868] lis3lv02d_i2c 10-0029: supply Vdd_IO not found, using dummy regulator
        [  206.261258] lis3lv02d: 8 bits 3DC sensor found
        [  206.346722] input: ST LIS3LV02DL Accelerometer as /devices/faux/lis3lv02d/input/input17
    
        $ cat /sys/class/input/input17/name
        ST LIS3LV02DL Accelerometer
    
    Signed-off-by: Dmytro Bagrii <dimich.dmb@gmail.com>
    Reviewed-by: Hans de Goede <johannes.goede@oss.qualcomm.com>
    Link: https://patch.msgid.link/20251128161523.6224-1-dimich.dmb@gmail.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

platform/x86: hp-bioscfg: Skip empty attribute names [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Wed Jan 28 13:04:45 2026 -0600

    platform/x86: hp-bioscfg: Skip empty attribute names
    
    [ Upstream commit 6222883af286e2feb3c9ff2bf9fd8fdf4220c55a ]
    
    Avoid registering kobjects with empty names when a BIOS attribute
    name decodes to an empty string.
    
    Fixes: a34fc329b1895 ("platform/x86: hp-bioscfg: bioscfg")
    Reported-by: Alain Cousinie <alain.cousinie@laposte.net>
    Closes: https://lore.kernel.org/platform-driver-x86/22ed5f78-c8bf-4ab4-8c38-420cc0201e7e@laposte.net/
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Link: https://patch.msgid.link/20260128190501.2170068-1-mario.limonciello@amd.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

platform/x86: intel_telemetry: Fix PSS event register mask [+ + +]
Author: Kaushlendra Kumar <kaushlendra.kumar@intel.com>
Date:   Wed Dec 24 11:41:44 2025 +0530

    platform/x86: intel_telemetry: Fix PSS event register mask
    
    [ Upstream commit 39e9c376ac42705af4ed4ae39eec028e8bced9b4 ]
    
    The PSS telemetry info parsing incorrectly applies
    TELEM_INFO_SRAMEVTS_MASK when extracting event register
    count from firmware response. This reads bits 15-8 instead
    of the correct bits 7-0, causing misdetection of hardware
    capabilities.
    
    The IOSS path correctly uses TELEM_INFO_NENABLES_MASK for
    register count. Apply the same mask to PSS parsing for
    consistency.
    
    Fixes: 9d16b482b059 ("platform:x86: Add Intel telemetry platform driver")
    Signed-off-by: Kaushlendra Kumar <kaushlendra.kumar@intel.com>
    Link: https://patch.msgid.link/20251224061144.3925519-1-kaushlendra.kumar@intel.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

platform/x86: intel_telemetry: Fix swapped arrays in PSS output [+ + +]
Author: Kaushlendra Kumar <kaushlendra.kumar@intel.com>
Date:   Wed Dec 24 08:50:53 2025 +0530

    platform/x86: intel_telemetry: Fix swapped arrays in PSS output
    
    commit 25e9e322d2ab5c03602eff4fbf4f7c40019d8de2 upstream.
    
    The LTR blocking statistics and wakeup event counters are incorrectly
    cross-referenced during debugfs output rendering. The code populates
    pss_ltr_blkd[] with LTR blocking data and pss_s0ix_wakeup[] with wakeup
    data, but the display loops reference the wrong arrays.
    
    This causes the "LTR Blocking Status" section to print wakeup events
    and the "Wakes Status" section to print LTR blockers, misleading power
    management analysis and S0ix residency debugging.
    
    Fix by aligning array usage with the intended output section labels.
    
    Fixes: 87bee290998d ("platform:x86: Add Intel Telemetry Debugfs interfaces")
    Cc: stable@vger.kernel.org
    Signed-off-by: Kaushlendra Kumar <kaushlendra.kumar@intel.com>
    Link: https://patch.msgid.link/20251224032053.3915900-1-kaushlendra.kumar@intel.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

platform/x86: toshiba_haps: Fix memory leaks in add/remove routines [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Mon Jan 26 16:38:45 2026 +0200

    platform/x86: toshiba_haps: Fix memory leaks in add/remove routines
    
    [ Upstream commit 128497456756e1b952bd5a912cd073836465109d ]
    
    toshiba_haps_add() leaks the haps object allocated by it if it returns
    an error after allocating that object successfully.
    
    toshiba_haps_remove() does not free the object pointed to by
    toshiba_haps before clearing that pointer, so it becomes unreachable
    allocated memory.
    
    Address these memory leaks by using devm_kzalloc() for allocating
    the memory in question.
    
    Fixes: 23d0ba0c908a ("platform/x86: Toshiba HDD Active Protection Sensor")
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pmdomain: imx8m-blk-ctrl: fix out-of-range access of bc->domains [+ + +]
Author: Xu Yang <xu.yang_2@nxp.com>
Date:   Fri Jan 30 13:11:07 2026 +0800

    pmdomain: imx8m-blk-ctrl: fix out-of-range access of bc->domains
    
    commit 6bd8b4a92a901fae1a422e6f914801063c345e8d upstream.
    
    Fix out-of-range access of bc->domains in imx8m_blk_ctrl_remove().
    
    Fixes: 2684ac05a8c4 ("soc: imx: add i.MX8M blk-ctrl driver")
    Cc: stable@kernel.org
    Signed-off-by: Xu Yang <xu.yang_2@nxp.com>
    Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

pmdomain: imx8mp-blk-ctrl: Keep gpc power domain on for system wakeup [+ + +]
Author: Xu Yang <xu.yang_2@nxp.com>
Date:   Wed Feb 4 19:11:41 2026 +0800

    pmdomain: imx8mp-blk-ctrl: Keep gpc power domain on for system wakeup
    
    commit e9ab2b83893dd03cf04d98faded81190e635233f upstream.
    
    Current design will power off all dependent GPC power domains in
    imx8mp_blk_ctrl_suspend(), even though the user device has enabled
    wakeup capability. The result is that wakeup function never works
    for such device.
    
    An example will be USB wakeup on i.MX8MP. PHY device '382f0040.usb-phy'
    is attached to power domain 'hsioblk-usb-phy2' which is spawned by hsio
    block control. A virtual power domain device 'genpd:3:32f10000.blk-ctrl'
    is created to build connection with 'hsioblk-usb-phy2' and it depends on
    GPC power domain 'usb-otg2'. If device '382f0040.usb-phy' enable wakeup,
    only power domain 'hsioblk-usb-phy2' keeps on during system suspend,
    power domain 'usb-otg2' is off all the time. So the wakeup event can't
    happen.
    
    In order to further establish a connection between the power domains
    related to GPC and block control during system suspend, register a genpd
    power on/off notifier for the power_dev. This allows us to prevent the GPC
    power domain from being powered off, in case the block control power
    domain is kept on to serve system wakeup.
    
    Suggested-by: Ulf Hansson <ulf.hansson@linaro.org>
    Fixes: 556f5cf9568a ("soc: imx: add i.MX8MP HSIO blk-ctrl")
    Cc: stable@vger.kernel.org
    Signed-off-by: Xu Yang <xu.yang_2@nxp.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

pmdomain: imx8mp-blk-ctrl: Keep usb phy power domain on for system wakeup [+ + +]
Author: Xu Yang <xu.yang_2@nxp.com>
Date:   Wed Feb 4 19:11:42 2026 +0800

    pmdomain: imx8mp-blk-ctrl: Keep usb phy power domain on for system wakeup
    
    commit e2c4c5b2bbd4f688a0f9f6da26cdf6d723c53478 upstream.
    
    USB system wakeup need its PHY on, so add the GENPD_FLAG_ACTIVE_WAKEUP
    flags to USB PHY genpd configuration.
    
    Signed-off-by: Xu Yang <xu.yang_2@nxp.com>
    Fixes: 556f5cf9568a ("soc: imx: add i.MX8MP HSIO blk-ctrl")
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

pmdomain: imx: gpcv2: Fix the imx8mm gpu hang due to wrong adb400 reset [+ + +]
Author: Jacky Bai <ping.bai@nxp.com>
Date:   Fri Jan 23 10:51:26 2026 +0800

    pmdomain: imx: gpcv2: Fix the imx8mm gpu hang due to wrong adb400 reset
    
    commit ae0a24c5a8dcea20bf8e344eadf6593e6d1959c3 upstream.
    
    On i.MX8MM, the GPUMIX, GPU2D, and GPU3D blocks share a common reset
    domain. Due to this hardware limitation, powering off/on GPU2D or GPU3D
    also triggers a reset of the GPUMIX domain, including its ADB400 port.
    However, the ADB400 interface must always be placed into power‑down mode
    before being reset.
    
    Currently the GPUMIX and GPU2D/3D power domains rely on runtime PM to
    handle dependency ordering. In some corner cases, the GPUMIX power off
    sequence is skipped, leaving the ADB400 port active when GPU2D/3D reset.
    This causes the GPUMIX ADB400 port to be reset while still active,
    leading to unpredictable bus behavior and GPU hangs.
    
    To avoid this, refine the power‑domain control logic so that the GPUMIX
    ADB400 port is explicitly powered down and powered up as part of the GPU
    power domain on/off sequence. This ensures proper ordering and prevents
    incorrect ADB400 reset.
    
    Suggested-by: Lucas Stach <l.stach@pengutronix.de>
    Signed-off-by: Jacky Bai <ping.bai@nxp.com>
    Reviewed-by: Lucas Stach <l.stach@pengutronix.de>
    Tested-by: Philipp Zabel <p.zabel@pengutronix.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

pmdomain: qcom: rpmpd: fix off-by-one error in clamping to the highest state [+ + +]
Author: Gabor Juhos <j4g8y7@gmail.com>
Date:   Thu Jan 22 18:20:12 2026 +0100

    pmdomain: qcom: rpmpd: fix off-by-one error in clamping to the highest state
    
    commit 8aa6f7697f5981d336cac7af6ddd182a03c6da01 upstream.
    
    As it is indicated by the comment, the rpmpd_aggregate_corner() function
    tries to clamp the state to the highest corner/level supported by the
    given power domain, however the calculation of the highest state contains
    an off-by-one error.
    
    The 'max_state' member of the 'rpmpd' structure indicates the highest
    corner/level, and as such it does not needs to be decremented.
    
    Change the code to use the 'max_state' value directly to avoid the error.
    
    Fixes: 98c8b3efacae ("soc: qcom: rpmpd: Add sync_state")
    Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
procfs: avoid fetching build ID while holding VMA lock [+ + +]
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Thu Jan 29 13:53:40 2026 -0800

    procfs: avoid fetching build ID while holding VMA lock
    
    commit b5cbacd7f86f4f62b8813688c8e73be94e8e1951 upstream.
    
    Fix PROCMAP_QUERY to fetch optional build ID only after dropping mmap_lock
    or per-VMA lock, whichever was used to lock VMA under question, to avoid
    deadlock reported by syzbot:
    
     -> #1 (&mm->mmap_lock){++++}-{4:4}:
            __might_fault+0xed/0x170
            _copy_to_iter+0x118/0x1720
            copy_page_to_iter+0x12d/0x1e0
            filemap_read+0x720/0x10a0
            blkdev_read_iter+0x2b5/0x4e0
            vfs_read+0x7f4/0xae0
            ksys_read+0x12a/0x250
            do_syscall_64+0xcb/0xf80
            entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
     -> #0 (&sb->s_type->i_mutex_key#8){++++}-{4:4}:
            __lock_acquire+0x1509/0x26d0
            lock_acquire+0x185/0x340
            down_read+0x98/0x490
            blkdev_read_iter+0x2a7/0x4e0
            __kernel_read+0x39a/0xa90
            freader_fetch+0x1d5/0xa80
            __build_id_parse.isra.0+0xea/0x6a0
            do_procmap_query+0xd75/0x1050
            procfs_procmap_ioctl+0x7a/0xb0
            __x64_sys_ioctl+0x18e/0x210
            do_syscall_64+0xcb/0xf80
            entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
     other info that might help us debug this:
    
      Possible unsafe locking scenario:
    
            CPU0                    CPU1
            ----                    ----
       rlock(&mm->mmap_lock);
                                    lock(&sb->s_type->i_mutex_key#8);
                                    lock(&mm->mmap_lock);
       rlock(&sb->s_type->i_mutex_key#8);
    
      *** DEADLOCK ***
    
    This seems to be exacerbated (as we haven't seen these syzbot reports
    before that) by the recent:
    
            777a8560fd29 ("lib/buildid: use __kernel_read() for sleepable context")
    
    To make this safe, we need to grab file refcount while VMA is still locked, but
    other than that everything is pretty straightforward. Internal build_id_parse()
    API assumes VMA is passed, but it only needs the underlying file reference, so
    just add another variant build_id_parse_file() that expects file passed
    directly.
    
    [akpm@linux-foundation.org: fix up kerneldoc]
    Link: https://lkml.kernel.org/r/20260129215340.3742283-1-andrii@kernel.org
    Fixes: ed5d583a88a9 ("fs/procfs: implement efficient VMA querying API for /proc/<pid>/maps")
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Reported-by: <syzbot+4e70c8e0a2017b432f7a@syzkaller.appspotmail.com>
    Reviewed-by: Suren Baghdasaryan <surenb@google.com>
    Tested-by: Suren Baghdasaryan <surenb@google.com>
    Reviewed-by: Shakeel Butt <shakeel.butt@linux.dev>
    Cc: Alexei Starovoitov <ast@kernel.org>
    Cc: Daniel Borkmann <daniel@iogearbox.net>
    Cc: Eduard Zingerman <eddyz87@gmail.com>
    Cc: Hao Luo <haoluo@google.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: John Fastabend <john.fastabend@gmail.com>
    Cc: KP Singh <kpsingh@kernel.org>
    Cc: Martin KaFai Lau <martin.lau@linux.dev>
    Cc: Song Liu <song@kernel.org>
    Cc: Stanislav Fomichev <sdf@fomichev.me>
    Cc: Yonghong Song <yonghong.song@linux.dev>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rbd: check for EOD after exclusive lock is ensured to be held [+ + +]
Author: Ilya Dryomov <idryomov@gmail.com>
Date:   Wed Jan 7 22:37:55 2026 +0100

    rbd: check for EOD after exclusive lock is ensured to be held
    
    commit bd3884a204c3b507e6baa9a4091aa927f9af5404 upstream.
    
    Similar to commit 870611e4877e ("rbd: get snapshot context after
    exclusive lock is ensured to be held"), move the "beyond EOD" check
    into the image request state machine so that it's performed after
    exclusive lock is ensured to be held.  This avoids various race
    conditions which can arise when the image is shrunk under I/O (in
    practice, mostly readahead).  In one such scenario
    
        rbd_assert(objno < rbd_dev->object_map_size);
    
    can be triggered if a close-to-EOD read gets queued right before the
    shrink is initiated and the EOD check is performed against an outdated
    mapping_size.  After the resize is done on the server side and exclusive
    lock is (re)acquired bringing along the new (now shrunk) object map, the
    read starts going through the state machine and rbd_obj_may_exist() gets
    invoked on an object that is out of bounds of rbd_dev->object_map array.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Reviewed-by: Dongsheng Yang <dongsheng.yang@linux.dev>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
regmap: maple: free entry on mas_store_gfp() failure [+ + +]
Author: Kaushlendra Kumar <kaushlendra.kumar@intel.com>
Date:   Mon Jan 5 08:48:20 2026 +0530

    regmap: maple: free entry on mas_store_gfp() failure
    
    [ Upstream commit f3f380ce6b3d5c9805c7e0b3d5bc28d9ec41e2e8 ]
    
    regcache_maple_write() allocates a new block ('entry') to merge
    adjacent ranges and then stores it with mas_store_gfp().
    When mas_store_gfp() fails, the new 'entry' remains allocated and
    is never freed, leaking memory.
    
    Free 'entry' on the failure path; on success continue freeing the
    replaced neighbor blocks ('lower', 'upper').
    
    Signed-off-by: Kaushlendra Kumar <kaushlendra.kumar@intel.com>
    Link: https://patch.msgid.link/20260105031820.260119-1-kaushlendra.kumar@intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
regulator: spacemit-p1: Fix n_voltages for BUCK and LDO regulators [+ + +]
Author: Guodong Xu <guodong@riscstar.com>
Date:   Thu Jan 22 17:43:42 2026 +0800

    regulator: spacemit-p1: Fix n_voltages for BUCK and LDO regulators
    
    [ Upstream commit 41399c5d476156635c9a58de870d39318e22fa09 ]
    
    Higher voltage settings were unusable due to incorrect n_voltages values
    causing registration failures. For example, setting aldo4 to 3.3V failed
    with -EINVAL because the required selector (123) exceeded the allowed
    range (n_voltages=117).
    
    Fix by aligning n_voltages with the hardware register widths per the P1
    datasheet [1]:
    - BUCK: 255 (was 254), allows selectors 0-254, selector 255 is reserved
    - LDO: 128 (was 117), allows selectors 0-127, selectors 0-10 are for
      suspend mode, valid operational range is 11-127
    
    This enables the full voltage range supported by the hardware.
    
    Fixes: 8b84d712ad84 ("regulator: spacemit: support SpacemiT P1 regulators")
    Link: https://developer.spacemit.com/documentation [1]
    Signed-off-by: Guodong Xu <guodong@riscstar.com>
    Link: https://patch.msgid.link/20260122-spacemit-p1-v1-1-309be27fbff9@riscstar.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "drm/amd/display: pause the workload setting in dm" [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Wed Jan 21 18:10:04 2026 -0500

    Revert "drm/amd/display: pause the workload setting in dm"
    
    [ Upstream commit f377ea0561c9576cdb7e3890bcf6b8168d455464 ]
    
    This reverts commit bc6d54ac7e7436721a19443265f971f890c13cc5.
    
    The workload profile needs to be in the default state when
    the dc idle optimizaion state is entered.  However, when
    jobs come in for video or GFX or compute, the profile may
    be set to a non-default profile resulting in the dc idle
    optimizations not taking affect and resulting in higher
    power usage.  As such we need to pause the workload profile
    changes during this transition.  When this patch was originally
    committed, it caused a regression with a Dell U3224KB display,
    but no other problems were reported at the time.  When it
    was reapplied (this patch) to address increased power usage, it
    seems to have caused additional regressions.  This change seems
    to have a number of side affects (audio issues, stuttering,
    etc.).  I suspect the pause should only happen when all displays
    are off or in static screen mode, but I think this call site
    gets called more often than that which results in idle state
    entry more often than intended.  For now revert.
    
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4894
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4717
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4725
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4517
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4806
    Cc: Yang Wang <kevinyang.wang@amd.com>
    Cc: Kenneth Feng <kenneth.feng@amd.com>
    Cc: Roman Li <Roman.Li@amd.com>
    Reviewed-by: Yang Wang <kevinyang.wang@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 1412482b714358ffa30d38fd3dd0b05795163648)
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "drm/amd: Check if ASPM is enabled from PCIe subsystem" [+ + +]
Author: Bert Karwatzki <spasswolf@web.de>
Date:   Sun Feb 1 01:24:45 2026 +0100

    Revert "drm/amd: Check if ASPM is enabled from PCIe subsystem"
    
    commit 243b467dea1735fed904c2e54d248a46fa417a2d upstream.
    
    This reverts commit 7294863a6f01248d72b61d38478978d638641bee.
    
    This commit was erroneously applied again after commit 0ab5d711ec74
    ("drm/amd: Refactor `amdgpu_aspm` to be evaluated per device")
    removed it, leading to very hard to debug crashes, when used with a system with two
    AMD GPUs of which only one supports ASPM.
    
    Link: https://lore.kernel.org/linux-acpi/20251006120944.7880-1-spasswolf@web.de/
    Link: https://github.com/acpica/acpica/issues/1060
    Fixes: 0ab5d711ec74 ("drm/amd: Refactor `amdgpu_aspm` to be evaluated per device")
    Signed-off-by: Bert Karwatzki <spasswolf@web.de>
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org>
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 97a9689300eb2b393ba5efc17c8e5db835917080)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ring-buffer: Avoid softlockup in ring_buffer_resize() during memory free [+ + +]
Author: Wupeng Ma <mawupeng1@huawei.com>
Date:   Sun Dec 28 14:50:07 2025 +0800

    ring-buffer: Avoid softlockup in ring_buffer_resize() during memory free
    
    [ Upstream commit 6435ffd6c7fcba330dfa91c58dc30aed2df3d0bf ]
    
    When user resize all trace ring buffer through file 'buffer_size_kb',
    then in ring_buffer_resize(), kernel allocates buffer pages for each
    cpu in a loop.
    
    If the kernel preemption model is PREEMPT_NONE and there are many cpus
    and there are many buffer pages to be freed, it may not give up cpu
    for a long time and finally cause a softlockup.
    
    To avoid it, call cond_resched() after each cpu buffer free as Commit
    f6bd2c92488c ("ring-buffer: Avoid softlockup in ring_buffer_resize()")
    does.
    
    Detailed call trace as follow:
    
      rcu: INFO: rcu_sched self-detected stall on CPU
      rcu:  24-....: (14837 ticks this GP) idle=521c/1/0x4000000000000000 softirq=230597/230597 fqs=5329
      rcu:  (t=15004 jiffies g=26003221 q=211022 ncpus=96)
      CPU: 24 UID: 0 PID: 11253 Comm: bash Kdump: loaded Tainted: G            EL      6.18.2+ #278 NONE
      pc : arch_local_irq_restore+0x8/0x20
       arch_local_irq_restore+0x8/0x20 (P)
       free_frozen_page_commit+0x28c/0x3b0
       __free_frozen_pages+0x1c0/0x678
       ___free_pages+0xc0/0xe0
       free_pages+0x3c/0x50
       ring_buffer_resize.part.0+0x6a8/0x880
       ring_buffer_resize+0x3c/0x58
       __tracing_resize_ring_buffer.part.0+0x34/0xd8
       tracing_resize_ring_buffer+0x8c/0xd0
       tracing_entries_write+0x74/0xd8
       vfs_write+0xcc/0x288
       ksys_write+0x74/0x118
       __arm64_sys_write+0x24/0x38
    
    Cc: <mathieu.desnoyers@efficios.com>
    Link: https://patch.msgid.link/20251228065008.2396573-1-mawupeng1@huawei.com
    Signed-off-by: Wupeng Ma <mawupeng1@huawei.com>
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
riscv: Add intermediate cast to 'unsigned long' in __get_user_asm [+ + +]
Author: Nathan Chancellor <nathan@kernel.org>
Date:   Wed Jan 21 14:36:00 2026 -0700

    riscv: Add intermediate cast to 'unsigned long' in __get_user_asm
    
    commit 841e47d56cef9b96fd2314220e3d0f1d92c719f4 upstream.
    
    After commit bdce162f2e57 ("riscv: Use 64-bit variable for output in
    __get_user_asm"), there is a warning when building for 32-bit RISC-V:
    
      In file included from include/linux/uaccess.h:13,
                       from include/linux/sched/task.h:13,
                       from include/linux/sched/signal.h:9,
                       from include/linux/rcuwait.h:6,
                       from include/linux/mm.h:36,
                       from include/linux/migrate.h:5,
                       from mm/migrate.c:16:
      mm/migrate.c: In function 'do_pages_move':
      arch/riscv/include/asm/uaccess.h:115:15: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
        115 |         (x) = (__typeof__(x))__tmp;                             \
            |               ^
      arch/riscv/include/asm/uaccess.h:198:17: note: in expansion of macro '__get_user_asm'
        198 |                 __get_user_asm("lb", (x), __gu_ptr, label);     \
            |                 ^~~~~~~~~~~~~~
      arch/riscv/include/asm/uaccess.h:218:9: note: in expansion of macro '__get_user_nocheck'
        218 |         __get_user_nocheck(x, ptr, __gu_failed);                        \
            |         ^~~~~~~~~~~~~~~~~~
      arch/riscv/include/asm/uaccess.h:255:9: note: in expansion of macro '__get_user_error'
        255 |         __get_user_error(__gu_val, __gu_ptr, __gu_err);         \
            |         ^~~~~~~~~~~~~~~~
      arch/riscv/include/asm/uaccess.h:285:17: note: in expansion of macro '__get_user'
        285 |                 __get_user((x), __p) :                          \
            |                 ^~~~~~~~~~
      mm/migrate.c:2358:29: note: in expansion of macro 'get_user'
       2358 |                         if (get_user(p, pages + i))
            |                             ^~~~~~~~
    
    Add an intermediate cast to 'unsigned long', which is guaranteed to be the same
    width as a pointer, before the cast to the type of the output variable to clear
    up the warning.
    
    Fixes: bdce162f2e57 ("riscv: Use 64-bit variable for output in __get_user_asm")
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202601210526.OT45dlOZ-lkp@intel.com/
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Link: https://patch.msgid.link/20260121-riscv-fix-int-to-pointer-cast-v1-1-b83eebe57c76@kernel.org
    Signed-off-by: Paul Walmsley <pjw@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

riscv: Sanitize syscall table indexing under speculation [+ + +]
Author: Lukas Gerlach <lukas.gerlach@cispa.de>
Date:   Thu Dec 18 20:13:32 2025 +0100

    riscv: Sanitize syscall table indexing under speculation
    
    [ Upstream commit 25fd7ee7bf58ac3ec7be3c9f82ceff153451946c ]
    
    The syscall number is a user-controlled value used to index into the
    syscall table. Use array_index_nospec() to clamp this value after the
    bounds check to prevent speculative out-of-bounds access and subsequent
    data leakage via cache side channels.
    
    Signed-off-by: Lukas Gerlach <lukas.gerlach@cispa.de>
    Link: https://patch.msgid.link/20251218191332.35849-3-lukas.gerlach@cispa.de
    Signed-off-by: Paul Walmsley <pjw@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

riscv: trace: fix snapshot deadlock with sbi ecall [+ + +]
Author: Martin Kaiser <martin@kaiser.cx>
Date:   Tue Dec 23 14:50:06 2025 +0100

    riscv: trace: fix snapshot deadlock with sbi ecall
    
    [ Upstream commit b0d7f5f0c9f05f1b6d4ee7110f15bef9c11f9df0 ]
    
    If sbi_ecall.c's functions are traceable,
    
    echo "__sbi_ecall:snapshot" > /sys/kernel/tracing/set_ftrace_filter
    
    may get the kernel into a deadlock.
    
    (Functions in sbi_ecall.c are excluded from tracing if
    CONFIG_RISCV_ALTERNATIVE_EARLY is set.)
    
    __sbi_ecall triggers a snapshot of the ringbuffer. The snapshot code
    raises an IPI interrupt, which results in another call to __sbi_ecall
    and another snapshot...
    
    All it takes to get into this endless loop is one initial __sbi_ecall.
    On RISC-V systems without SSTC extension, the clock events in
    timer-riscv.c issue periodic sbi ecalls, making the problem easy to
    trigger.
    
    Always exclude the sbi_ecall.c functions from tracing to fix the
    potential deadlock.
    
    sbi ecalls can easiliy be logged via trace events, excluding ecall
    functions from function tracing is not a big limitation.
    
    Signed-off-by: Martin Kaiser <martin@kaiser.cx>
    Link: https://patch.msgid.link/20251223135043.1336524-1-martin@kaiser.cx
    Signed-off-by: Paul Walmsley <pjw@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

riscv: Use 64-bit variable for output in __get_user_asm [+ + +]
Author: Nathan Chancellor <nathan@kernel.org>
Date:   Fri Jan 16 15:44:34 2026 -0700

    riscv: Use 64-bit variable for output in __get_user_asm
    
    [ Upstream commit bdce162f2e57a969803e5e9375999a3e0546905f ]
    
    After commit f6bff7827a48 ("riscv: uaccess: use 'asm_goto_output' for
    get_user()"), which was the first commit that started using asm goto
    with outputs on RISC-V, builds of clang built with assertions enabled
    start crashing in certain files that use get_user() with:
    
      clang: llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:12743: Register FollowCopyChain(MachineRegisterInfo &, Register): Assertion `MI->getOpcode() == TargetOpcode::COPY && "start of copy chain MUST be COPY"' failed.
    
    Internally, LLVM generates an addiw instruction when the output of the
    inline asm (which may be any scalar type) needs to be sign extended for
    ABI reasons, such as a later function call, so that basic block does not
    have to do it.
    
    Use a temporary 64-bit variable as the output of the inline assembly in
    __get_user_asm() and explicitly cast it to truncate it if necessary,
    avoiding the addiw that triggers the assertion.
    
    Link: https://github.com/ClangBuiltLinux/linux/issues/2092
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Link: https://patch.msgid.link/20260116-riscv-wa-llvm-asm-goto-outputs-assertion-failure-v3-1-55b5775f989b@kernel.org
    Signed-off-by: Paul Walmsley <pjw@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rust_binder: add additional alignment checks [+ + +]
Author: Alice Ryhl <aliceryhl@google.com>
Date:   Fri Jan 23 16:23:56 2026 +0000

    rust_binder: add additional alignment checks
    
    commit d047248190d86a52164656d47bec9bfba61dc71e upstream.
    
    This adds some alignment checks to match C Binder more closely. This
    causes the driver to reject more transactions. I don't think any of the
    transactions in question are harmful, but it's still a bug because it's
    the wrong uapi to accept them.
    
    The cases where usize is changed for u64, it will affect only 32-bit
    kernels.
    
    Cc: stable@vger.kernel.org
    Fixes: eafedbc7c050 ("rust_binder: add Rust Binder driver")
    Signed-off-by: Alice Ryhl <aliceryhl@google.com>
    Acked-by: Carlos Llamas <cmllamas@google.com>
    Link: https://patch.msgid.link/20260123-binder-alignment-more-checks-v1-1-7e1cea77411d@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rust_binder: correctly handle FDA objects of length zero [+ + +]
Author: Alice Ryhl <aliceryhl@google.com>
Date:   Mon Dec 29 15:38:14 2025 +0000

    rust_binder: correctly handle FDA objects of length zero
    
    commit 8f589c9c3be539d6c2b393c82940c3783831082f upstream.
    
    Fix a bug where an empty FDA (fd array) object with 0 fds would cause an
    out-of-bounds error. The previous implementation used `skip == 0` to
    mean "this is a pointer fixup", but 0 is also the correct skip length
    for an empty FDA. If the FDA is at the end of the buffer, then this
    results in an attempt to write 8-bytes out of bounds. This is caught and
    results in an EINVAL error being returned to userspace.
    
    The pattern of using `skip == 0` as a special value originates from the
    C-implementation of Binder. As part of fixing this bug, this pattern is
    replaced with a Rust enum.
    
    I considered the alternate option of not pushing a fixup when the length
    is zero, but I think it's cleaner to just get rid of the zero-is-special
    stuff.
    
    The root cause of this bug was diagnosed by Gemini CLI on first try. I
    used the following prompt:
    
    > There appears to be a bug in @drivers/android/binder/thread.rs where
    > the Fixups oob bug is triggered with 316 304 316 324. This implies
    > that we somehow ended up with a fixup where buffer A has a pointer to
    > buffer B, but the pointer is located at an index in buffer A that is
    > out of bounds. Please investigate the code to find the bug. You may
    > compare with @drivers/android/binder.c that implements this correctly.
    
    Cc: stable@vger.kernel.org
    Reported-by: DeepChirp <DeepChirp@outlook.com>
    Closes: https://github.com/waydroid/waydroid/issues/2157
    Fixes: eafedbc7c050 ("rust_binder: add Rust Binder driver")
    Tested-by: DeepChirp <DeepChirp@outlook.com>
    Signed-off-by: Alice Ryhl <aliceryhl@google.com>
    Acked-by: Carlos Llamas <cmllamas@google.com>
    Link: https://patch.msgid.link/20251229-fda-zero-v1-1-58a41cb0e7ec@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rust_binderfs: fix ida_alloc_max() upper bound [+ + +]
Author: Carlos Llamas <cmllamas@google.com>
Date:   Tue Jan 27 23:55:10 2026 +0000

    rust_binderfs: fix ida_alloc_max() upper bound
    
    commit d6ba734814266bbf7ee01f9030436597116805f3 upstream.
    
    The 'max' argument of ida_alloc_max() takes the maximum valid ID and not
    the "count". Using an ID of BINDERFS_MAX_MINOR (1 << 20) for dev->minor
    would exceed the limits of minor numbers (20-bits). Fix this off-by-one
    error by subtracting 1 from the 'max'.
    
    Cc: stable@vger.kernel.org
    Fixes: eafedbc7c050 ("rust_binder: add Rust Binder driver")
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/r/202512181203.IOv6IChH-lkp@intel.com/
    Signed-off-by: Carlos Llamas <cmllamas@google.com>
    Reviewed-by: Alice Ryhl <aliceryhl@google.com>
    Link: https://patch.msgid.link/20260127235545.2307876-1-cmllamas@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sched/fair: Have SD_SERIALIZE affect newidle balancing [+ + +]
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Mon Nov 17 17:13:09 2025 +0100

    sched/fair: Have SD_SERIALIZE affect newidle balancing
    
    commit 522fb20fbdbe48ed98f587d628637ff38ececd2d upstream.
    
    Also serialize the possiblty much more frequent newidle balancing for
    the 'expensive' domains that have SD_BALANCE set.
    
    Initial benchmarking by K Prateek and Tim showed no negative effect.
    
    Split out from the larger patch moving sched_balance_running around
    for ease of bisect and such.
    
    Suggested-by: Shrikanth Hegde <sshegde@linux.ibm.com>
    Seconded-by: K Prateek Nayak <kprateek.nayak@amd.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/df068896-82f9-458d-8fff-5a2f654e8ffd@amd.com
    Link: https://patch.msgid.link/6fed119b723c71552943bfe5798c93851b30a361.1762800251.git.tim.c.chen@linux.intel.com
    Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

sched/fair: Skip sched_balance_running cmpxchg when balance is not due [+ + +]
Author: Tim Chen <tim.c.chen@linux.intel.com>
Date:   Mon Nov 10 10:47:35 2025 -0800

    sched/fair: Skip sched_balance_running cmpxchg when balance is not due
    
    commit 3324b2180c17b21c31c16966cc85ca41a7c93703 upstream.
    
    The NUMA sched domain sets the SD_SERIALIZE flag by default, allowing
    only one NUMA load balancing operation to run system-wide at a time.
    
    Currently, each sched group leader directly under NUMA domain attempts
    to acquire the global sched_balance_running flag via cmpxchg() before
    checking whether load balancing is due or whether it is the designated
    load balancer for that NUMA domain. On systems with a large number
    of cores, this causes significant cache contention on the shared
    sched_balance_running flag.
    
    This patch reduces unnecessary cmpxchg() operations by first checking
    that the balancer is the designated leader for a NUMA domain from
    should_we_balance(), and the balance interval has expired before
    trying to acquire sched_balance_running to load balance a NUMA
    domain.
    
    On a 2-socket Granite Rapids system with sub-NUMA clustering enabled,
    running an OLTP workload, 7.8% of total CPU cycles were previously spent
    in sched_balance_domain() contending on sched_balance_running before
    this change.
    
             : 104              static __always_inline int arch_atomic_cmpxchg(atomic_t *v, int old, int new)
             : 105              {
             : 106              return arch_cmpxchg(&v->counter, old, new);
        0.00 :   ffffffff81326e6c:       xor    %eax,%eax
        0.00 :   ffffffff81326e6e:       mov    $0x1,%ecx
        0.00 :   ffffffff81326e73:       lock cmpxchg %ecx,0x2394195(%rip)        # ffffffff836bb010 <sched_balance_running>
             : 110              sched_balance_domains():
             : 12234            if (atomic_cmpxchg_acquire(&sched_balance_running, 0, 1))
       99.39 :   ffffffff81326e7b:       test   %eax,%eax
        0.00 :   ffffffff81326e7d:       jne    ffffffff81326e99 <sched_balance_domains+0x209>
             : 12238            if (time_after_eq(jiffies, sd->last_balance + interval)) {
        0.00 :   ffffffff81326e7f:       mov    0x14e2b3a(%rip),%rax        # ffffffff828099c0 <jiffies_64>
        0.00 :   ffffffff81326e86:       sub    0x48(%r14),%rax
        0.00 :   ffffffff81326e8a:       cmp    %rdx,%rax
    
    After applying this fix, sched_balance_domain() is gone from the profile
    and there is a 5% throughput improvement.
    
    [peterz: made it so that redo retains the 'lock' and split out the
             CPU_NEWLY_IDLE change to a separate patch]
    Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Chen Yu <yu.c.chen@intel.com>
    Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
    Reviewed-by: Shrikanth Hegde <sshegde@linux.ibm.com>
    Reviewed-by: K Prateek Nayak <kprateek.nayak@amd.com>
    Reviewed-by: Srikar Dronamraju <srikar@linux.ibm.com>
    Tested-by: Mohini Narkhede <mohini.narkhede@intel.com>
    Tested-by: Shrikanth Hegde <sshegde@linux.ibm.com>
    Link: https://patch.msgid.link/6fed119b723c71552943bfe5798c93851b30a361.1762800251.git.tim.c.chen@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
scsi: target: iscsi: Fix use-after-free in iscsit_dec_conn_usage_count() [+ + +]
Author: Maurizio Lombardi <mlombard@redhat.com>
Date:   Mon Jan 12 17:53:51 2026 +0100

    scsi: target: iscsi: Fix use-after-free in iscsit_dec_conn_usage_count()
    
    [ Upstream commit 9411a89e9e7135cc459178fa77a3f1d6191ae903 ]
    
    In iscsit_dec_conn_usage_count(), the function calls complete() while
    holding the conn->conn_usage_lock. As soon as complete() is invoked, the
    waiter (such as iscsit_close_connection()) may wake up and proceed to free
    the iscsit_conn structure.
    
    If the waiter frees the memory before the current thread reaches
    spin_unlock_bh(), it results in a KASAN slab-use-after-free as the function
    attempts to release a lock within the already-freed connection structure.
    
    Fix this by releasing the spinlock before calling complete().
    
    Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
    Reported-by: Zhaojuan Guo <zguo@redhat.com>
    Reviewed-by: Mike Christie <michael.christie@oracle.com>
    Link: https://patch.msgid.link/20260112165352.138606-2-mlombard@redhat.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: target: iscsi: Fix use-after-free in iscsit_dec_session_usage_count() [+ + +]
Author: Maurizio Lombardi <mlombard@redhat.com>
Date:   Mon Jan 12 17:53:52 2026 +0100

    scsi: target: iscsi: Fix use-after-free in iscsit_dec_session_usage_count()
    
    [ Upstream commit 84dc6037390b8607c5551047d3970336cb51ba9a ]
    
    In iscsit_dec_session_usage_count(), the function calls complete() while
    holding the sess->session_usage_lock. Similar to the connection usage count
    logic, the waiter signaled by complete() (e.g., in the session release
    path) may wake up and free the iscsit_session structure immediately.
    
    This creates a race condition where the current thread may attempt to
    execute spin_unlock_bh() on a session structure that has already been
    deallocated, resulting in a KASAN slab-use-after-free.
    
    To resolve this, release the session_usage_lock before calling complete()
    to ensure all dereferences of the sess pointer are finished before the
    waiter is allowed to proceed with deallocation.
    
    Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
    Reported-by: Zhaojuan Guo <zguo@redhat.com>
    Reviewed-by: Mike Christie <michael.christie@oracle.com>
    Link: https://patch.msgid.link/20260112165352.138606-3-mlombard@redhat.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
smb/client: fix memory leak in smb2_open_file() [+ + +]
Author: ChenXiaoSong <chenxiaosong@kylinos.cn>
Date:   Mon Feb 2 08:24:07 2026 +0000

    smb/client: fix memory leak in smb2_open_file()
    
    [ Upstream commit e3a43633023e3cacaca60d4b8972d084a2b06236 ]
    
    Reproducer:
    
      1. server: directories are exported read-only
      2. client: mount -t cifs //${server_ip}/export /mnt
      3. client: dd if=/dev/zero of=/mnt/file bs=512 count=1000 oflag=direct
      4. client: umount /mnt
      5. client: sleep 1
      6. client: modprobe -r cifs
    
    The error message is as follows:
    
      =============================================================================
      BUG cifs_small_rq (Not tainted): Objects remaining on __kmem_cache_shutdown()
      -----------------------------------------------------------------------------
    
      Object 0x00000000d47521be @offset=14336
      ...
      WARNING: mm/slub.c:1251 at __kmem_cache_shutdown+0x34e/0x440, CPU#0: modprobe/1577
      ...
      Call Trace:
       <TASK>
       kmem_cache_destroy+0x94/0x190
       cifs_destroy_request_bufs+0x3e/0x50 [cifs]
       cleanup_module+0x4e/0x540 [cifs]
       __se_sys_delete_module+0x278/0x400
       __x64_sys_delete_module+0x5f/0x70
       x64_sys_call+0x2299/0x2ff0
       do_syscall_64+0x89/0x350
       entry_SYSCALL_64_after_hwframe+0x76/0x7e
      ...
      kmem_cache_destroy cifs_small_rq: Slab cache still has objects when called from cifs_destroy_request_bufs+0x3e/0x50 [cifs]
      WARNING: mm/slab_common.c:532 at kmem_cache_destroy+0x16b/0x190, CPU#0: modprobe/1577
    
    Link: https://lore.kernel.org/linux-cifs/9751f02d-d1df-4265-a7d6-b19761b21834@linux.dev/T/#mf14808c144448b715f711ce5f0477a071f08eaf6
    Fixes: e255612b5ed9 ("cifs: Add fallback for SMB2 CREATE without FILE_READ_ATTRIBUTES")
    Reported-by: Paulo Alcantara <pc@manguebit.org>
    Reviewed-by: Paulo Alcantara (Red Hat) <pc@manguebit.org>
    Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
    Reviewed-by: Pali Rohár <pali@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
smb/server: call ksmbd_session_rpc_close() on error path in create_smb2_pipe() [+ + +]
Author: ZhangGuoDong <zhangguodong@kylinos.cn>
Date:   Sun Dec 28 22:51:01 2025 +0800

    smb/server: call ksmbd_session_rpc_close() on error path in create_smb2_pipe()
    
    [ Upstream commit 7c28f8eef5ac5312794d8a52918076dcd787e53b ]
    
    When ksmbd_iov_pin_rsp() fails, we should call ksmbd_session_rpc_close().
    
    Signed-off-by: ZhangGuoDong <zhangguodong@kylinos.cn>
    Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

smb/server: fix refcount leak in parse_durable_handle_context() [+ + +]
Author: ZhangGuoDong <zhangguodong@kylinos.cn>
Date:   Mon Dec 29 10:13:29 2025 +0800

    smb/server: fix refcount leak in parse_durable_handle_context()
    
    [ Upstream commit 3296c3012a9d9a27e81e34910384e55a6ff3cff0 ]
    
    When the command is a replay operation and -ENOEXEC is returned,
    the refcount of ksmbd_file must be released.
    
    Signed-off-by: ZhangGuoDong <zhangguodong@kylinos.cn>
    Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

smb/server: fix refcount leak in smb2_open() [+ + +]
Author: ZhangGuoDong <zhangguodong@kylinos.cn>
Date:   Mon Dec 29 11:15:18 2025 +0800

    smb/server: fix refcount leak in smb2_open()
    
    [ Upstream commit f416c556997aa56ec4384c6b6efd6a0e6ac70aa7 ]
    
    When ksmbd_vfs_getattr() fails, the reference count of ksmbd_file
    must be released.
    
    Suggested-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: ZhangGuoDong <zhangguodong@kylinos.cn>
    Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
spi: hisi-kunpeng: Fixed the wrong debugfs node name in hisi_spi debugfs initialization [+ + +]
Author: Devyn Liu <liudingyuan@h-partners.com>
Date:   Thu Jan 8 15:53:23 2026 +0800

    spi: hisi-kunpeng: Fixed the wrong debugfs node name in hisi_spi debugfs initialization
    
    [ Upstream commit b062a899c997df7b9ce29c62164888baa7a85833 ]
    
    In hisi_spi_debugfs_init, spi controller pointer is calculated
    by container_of macro, and the member is hs->dev. But the host
    cannot be calculated offset directly by this. (hs->dev) points
    to (pdev->dev), and it is the (host->dev.parent) rather than
    (host->dev) points to the (pdev->dev), which is set in
    __spi_alloc_controller.
    
    In this patch, this issues is fixed by getting the spi_controller
    data from pdev->dev by dev_get_drvdata() directly. (dev->driver_data)
    points to the spi controller data in the probe stage.
    
    Signed-off-by: Devyn Liu <liudingyuan@h-partners.com>
    Reviewed-by: Yang Shen <shenyang39@huawei.com>
    Link: https://patch.msgid.link/20260108075323.3831574-1-liudingyuan@h-partners.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: intel-pci: Add support for Nova Lake SPI serial flash [+ + +]
Author: Alan Borzeszkowski <alan.borzeszkowski@linux.intel.com>
Date:   Thu Jan 15 13:03:05 2026 +0100

    spi: intel-pci: Add support for Nova Lake SPI serial flash
    
    [ Upstream commit caa329649259d0f90c0056c9860ca659d4ba3211 ]
    
    Add Intel Nova Lake PCH-S SPI serial flash PCI ID to the list of
    supported devices. This is the same controller found in previous
    generations.
    
    Signed-off-by: Alan Borzeszkowski <alan.borzeszkowski@linux.intel.com>
    Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Link: https://patch.msgid.link/20260115120305.10080-1-alan.borzeszkowski@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: tegra114: Preserve SPI mode bits in def_command1_reg [+ + +]
Author: Vishwaroop A <va@nvidia.com>
Date:   Wed Feb 4 14:12:12 2026 +0000

    spi: tegra114: Preserve SPI mode bits in def_command1_reg
    
    [ Upstream commit a0a75b40c919b9f6d3a0b6c978e6ccf344c1be5a ]
    
    The COMMAND1 register bits [29:28] set the SPI mode, which controls
    the clock idle level. When a transfer ends, tegra_spi_transfer_end()
    writes def_command1_reg back to restore the default state, but this
    register value currently lacks the mode bits. This results in the
    clock always being configured as idle low, breaking devices that
    need it high.
    
    Fix this by storing the mode bits in def_command1_reg during setup,
    to prevent this field from always being cleared.
    
    Fixes: f333a331adfa ("spi/tegra114: add spi driver")
    Signed-off-by: Vishwaroop A <va@nvidia.com>
    Link: https://patch.msgid.link/20260204141212.1540382-1-va@nvidia.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: tegra210-quad: Move curr_xfer read inside spinlock [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Mon Jan 26 09:50:27 2026 -0800

    spi: tegra210-quad: Move curr_xfer read inside spinlock
    
    [ Upstream commit ef13ba357656451d6371940d8414e3e271df97e3 ]
    
    Move the assignment of the transfer pointer from curr_xfer inside the
    spinlock critical section in both handle_cpu_based_xfer() and
    handle_dma_based_xfer().
    
    Previously, curr_xfer was read before acquiring the lock, creating a
    window where the timeout path could clear curr_xfer between reading it
    and using it. By moving the read inside the lock, the handlers are
    guaranteed to see a consistent value that cannot be modified by the
    timeout path.
    
    Fixes: 921fc1838fb0 ("spi: tegra210-quad: Add support for Tegra210 QSPI controller")
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Acked-by: Thierry Reding <treding@nvidia.com>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Jon Hunter <jonathanh@nvidia.com>
    Link: https://patch.msgid.link/20260126-tegra_xfer-v2-2-6d2115e4f387@debian.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: tegra210-quad: Protect curr_xfer assignment in tegra_qspi_setup_transfer_one [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Mon Jan 26 09:50:28 2026 -0800

    spi: tegra210-quad: Protect curr_xfer assignment in tegra_qspi_setup_transfer_one
    
    [ Upstream commit f5a4d7f5e32ba163cff893493ec1cbb0fd2fb0d5 ]
    
    When the timeout handler processes a completed transfer and signals
    completion, the transfer thread can immediately set up the next transfer
    and assign curr_xfer to point to it.
    
    If a delayed ISR from the previous transfer then runs, it checks if
    (!tqspi->curr_xfer) (currently without the lock also -- to be fixed
    soon) to detect stale interrupts, but this check passes because
    curr_xfer now points to the new transfer. The ISR then incorrectly
    processes the new transfer's context.
    
    Protect the curr_xfer assignment with the spinlock to ensure the ISR
    either sees NULL (and bails out) or sees the new value only after the
    assignment is complete.
    
    Fixes: 921fc1838fb0 ("spi: tegra210-quad: Add support for Tegra210 QSPI controller")
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Thierry Reding <treding@nvidia.com>
    Link: https://patch.msgid.link/20260126-tegra_xfer-v2-3-6d2115e4f387@debian.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: tegra210-quad: Protect curr_xfer check in IRQ handler [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Mon Jan 26 09:50:31 2026 -0800

    spi: tegra210-quad: Protect curr_xfer check in IRQ handler
    
    [ Upstream commit edf9088b6e1d6d88982db7eb5e736a0e4fbcc09e ]
    
    Now that all other accesses to curr_xfer are done under the lock,
    protect the curr_xfer NULL check in tegra_qspi_isr_thread() with the
    spinlock. Without this protection, the following race can occur:
    
      CPU0 (ISR thread)              CPU1 (timeout path)
      ----------------               -------------------
      if (!tqspi->curr_xfer)
        // sees non-NULL
                                     spin_lock()
                                     tqspi->curr_xfer = NULL
                                     spin_unlock()
      handle_*_xfer()
        spin_lock()
        t = tqspi->curr_xfer  // NULL!
        ... t->len ...        // NULL dereference!
    
    With this patch, all curr_xfer accesses are now properly synchronized.
    
    Although all accesses to curr_xfer are done under the lock, in
    tegra_qspi_isr_thread() it checks for NULL, releases the lock and
    reacquires it later in handle_cpu_based_xfer()/handle_dma_based_xfer().
    There is a potential for an update in between, which could cause a NULL
    pointer dereference.
    
    To handle this, add a NULL check inside the handlers after acquiring
    the lock. This ensures that if the timeout path has already cleared
    curr_xfer, the handler will safely return without dereferencing the
    NULL pointer.
    
    Fixes: b4e002d8a7ce ("spi: tegra210-quad: Fix timeout handling")
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Thierry Reding <treding@nvidia.com>
    Link: https://patch.msgid.link/20260126-tegra_xfer-v2-6-6d2115e4f387@debian.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: tegra210-quad: Protect curr_xfer clearing in tegra_qspi_non_combined_seq_xfer [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Mon Jan 26 09:50:30 2026 -0800

    spi: tegra210-quad: Protect curr_xfer clearing in tegra_qspi_non_combined_seq_xfer
    
    [ Upstream commit 6d7723e8161f3c3f14125557e19dd080e9d882be ]
    
    Protect the curr_xfer clearing in tegra_qspi_non_combined_seq_xfer()
    with the spinlock to prevent a race with the interrupt handler that
    reads this field to check if a transfer is in progress.
    
    Fixes: b4e002d8a7ce ("spi: tegra210-quad: Fix timeout handling")
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Thierry Reding <treding@nvidia.com>
    Link: https://patch.msgid.link/20260126-tegra_xfer-v2-5-6d2115e4f387@debian.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: tegra210-quad: Protect curr_xfer in tegra_qspi_combined_seq_xfer [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Mon Jan 26 09:50:29 2026 -0800

    spi: tegra210-quad: Protect curr_xfer in tegra_qspi_combined_seq_xfer
    
    [ Upstream commit bf4528ab28e2bf112c3a2cdef44fd13f007781cd ]
    
    The curr_xfer field is read by the IRQ handler without holding the lock
    to check if a transfer is in progress. When clearing curr_xfer in the
    combined sequence transfer loop, protect it with the spinlock to prevent
    a race with the interrupt handler.
    
    Protect the curr_xfer clearing at the exit path of
    tegra_qspi_combined_seq_xfer() with the spinlock to prevent a race
    with the interrupt handler that reads this field.
    
    Without this protection, the IRQ handler could read a partially updated
    curr_xfer value, leading to NULL pointer dereference or use-after-free.
    
    Fixes: b4e002d8a7ce ("spi: tegra210-quad: Fix timeout handling")
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Thierry Reding <treding@nvidia.com>
    Link: https://patch.msgid.link/20260126-tegra_xfer-v2-4-6d2115e4f387@debian.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: tegra210-quad: Return IRQ_HANDLED when timeout already processed transfer [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Mon Jan 26 09:50:26 2026 -0800

    spi: tegra210-quad: Return IRQ_HANDLED when timeout already processed transfer
    
    [ Upstream commit aabd8ea0aa253d40cf5f20a609fc3d6f61e38299 ]
    
    When the ISR thread wakes up late and finds that the timeout handler
    has already processed the transfer (curr_xfer is NULL), return
    IRQ_HANDLED instead of IRQ_NONE.
    
    Use a similar approach to tegra_qspi_handle_timeout() by reading
    QSPI_TRANS_STATUS and checking the QSPI_RDY bit to determine if the
    hardware actually completed the transfer. If QSPI_RDY is set, the
    interrupt was legitimate and triggered by real hardware activity.
    The fact that the timeout path handled it first doesn't make it
    spurious. Returning IRQ_NONE incorrectly suggests the interrupt
    wasn't for this device, which can cause issues with shared interrupt
    lines and interrupt accounting.
    
    Fixes: b4e002d8a7ce ("spi: tegra210-quad: Fix timeout handling")
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Signed-off-by: Usama Arif <usamaarif642@gmail.com>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Thierry Reding <treding@nvidia.com>
    Link: https://patch.msgid.link/20260126-tegra_xfer-v2-1-6d2115e4f387@debian.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: tegra: Fix a memory leak in tegra_slink_probe() [+ + +]
Author: Felix Gu <ustc.gu@gmail.com>
Date:   Mon Feb 2 23:15:09 2026 +0800

    spi: tegra: Fix a memory leak in tegra_slink_probe()
    
    [ Upstream commit 41d9a6795b95d6ea28439ac1e9ce8c95bbca20fc ]
    
    In tegra_slink_probe(), when platform_get_irq() fails, it directly
    returns from the function with an error code, which causes a memory leak.
    
    Replace it with a goto label to ensure proper cleanup.
    
    Fixes: eb9913b511f1 ("spi: tegra: Fix missing IRQ check in tegra_slink_probe()")
    Signed-off-by: Felix Gu <ustc.gu@gmail.com>
    Reviewed-by: Jon Hunter <jonathanh@nvidia.com>
    Link: https://patch.msgid.link/20260202-slink-v1-1-eac50433a6f9@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tipc: use kfree_sensitive() for session key material [+ + +]
Author: Daniel Hodges <hodgesd@meta.com>
Date:   Sat Jan 31 10:01:14 2026 -0800

    tipc: use kfree_sensitive() for session key material
    
    [ Upstream commit 74d9391e8849e70ded5309222d09b0ed0edbd039 ]
    
    The rx->skey field contains a struct tipc_aead_key with GCM-AES
    encryption keys used for TIPC cluster communication. Using plain
    kfree() leaves this sensitive key material in freed memory pages
    where it could potentially be recovered.
    
    Switch to kfree_sensitive() to ensure the key material is zeroed
    before the memory is freed.
    
    Fixes: 1ef6f7c9390f ("tipc: add automatic session key exchange")
    Signed-off-by: Daniel Hodges <hodgesd@meta.com>
    Link: https://patch.msgid.link/20260131180114.2121438-1-hodgesd@meta.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tracing: Avoid possible signed 64-bit truncation [+ + +]
Author: Ian Rogers <irogers@google.com>
Date:   Wed Jan 7 16:26:25 2026 -0800

    tracing: Avoid possible signed 64-bit truncation
    
    [ Upstream commit 00f13e28a9c3acd40f0551cde7e9d2d1a41585bf ]
    
    64-bit truncation to 32-bit can result in the sign of the truncated
    value changing. The cmp_mod_entry is used in bsearch and so the
    truncation could result in an invalid search order. This would only
    happen were the addresses more than 2GB apart and so unlikely, but
    let's fix the potentially broken compare anyway.
    
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Link: https://patch.msgid.link/20260108002625.333331-1-irogers@google.com
    Signed-off-by: Ian Rogers <irogers@google.com>
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tracing: Fix ftrace event field alignments [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Sat Feb 7 10:56:15 2026 -0500

    tracing: Fix ftrace event field alignments
    
    [ Upstream commit 033c55fe2e326bea022c3cc5178ecf3e0e459b82 ]
    
    The fields of ftrace specific events (events used to save ftrace internal
    events like function traces and trace_printk) are generated similarly to
    how normal trace event fields are generated. That is, the fields are added
    to a trace_events_fields array that saves the name, offset, size,
    alignment and signness of the field. It is used to produce the output in
    the format file in tracefs so that tooling knows how to parse the binary
    data of the trace events.
    
    The issue is that some of the ftrace event structures are packed. The
    function graph exit event structures are one of them. The 64 bit calltime
    and rettime fields end up 4 byte aligned, but the algorithm to show to
    userspace shows them as 8 byte aligned.
    
    The macros that create the ftrace events has one for embedded structure
    fields. There's two macros for theses fields:
    
      __field_desc() and __field_packed()
    
    The difference of the latter macro is that it treats the field as packed.
    
    Rename that field to __field_desc_packed() and create replace the
    __field_packed() to be a normal field that is packed and have the calltime
    and rettime use those.
    
    This showed up on 32bit architectures for function graph time fields. It
    had:
    
     ~# cat /sys/kernel/tracing/events/ftrace/funcgraph_exit/format
    [..]
            field:unsigned long func;       offset:8;       size:4; signed:0;
            field:unsigned int depth;       offset:12;      size:4; signed:0;
            field:unsigned int overrun;     offset:16;      size:4; signed:0;
            field:unsigned long long calltime;      offset:24;      size:8; signed:0;
            field:unsigned long long rettime;       offset:32;      size:8; signed:0;
    
    Notice that overrun is at offset 16 with size 4, where in the structure
    calltime is at offset 20 (16 + 4), but it shows the offset at 24. That's
    because it used the alignment of unsigned long long when used as a
    declaration and not as a member of a structure where it would be aligned
    by word size (in this case 4).
    
    By using the proper structure alignment, the format has it at the correct
    offset:
    
     ~# cat /sys/kernel/tracing/events/ftrace/funcgraph_exit/format
    [..]
            field:unsigned long func;       offset:8;       size:4; signed:0;
            field:unsigned int depth;       offset:12;      size:4; signed:0;
            field:unsigned int overrun;     offset:16;      size:4; signed:0;
            field:unsigned long long calltime;      offset:20;      size:8; signed:0;
            field:unsigned long long rettime;       offset:28;      size:8; signed:0;
    
    Cc: stable@vger.kernel.org
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Reported-by: "jempty.liang" <imntjempty@163.com>
    Link: https://patch.msgid.link/20260204113628.53faec78@gandalf.local.home
    Fixes: 04ae87a52074e ("ftrace: Rework event_create_dir()")
    Closes: https://lore.kernel.org/all/20260130015740.212343-1-imntjempty@163.com/
    Closes: https://lore.kernel.org/all/20260202123342.2544795-1-imntjempty@163.com/
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    [ Different variable types and some renames ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
treewide: Drop pci_save_state() after pci_restore_state() [+ + +]
Author: Lukas Wunner <lukas@wunner.de>
Date:   Sun Oct 12 15:25:02 2025 +0200

    treewide: Drop pci_save_state() after pci_restore_state()
    
    commit 383d89699c5028de510a6667f674ed38585f77fc upstream.
    
    In 2009, commit c82f63e411f1 ("PCI: check saved state before restore")
    changed the behavior of pci_restore_state() such that it became necessary
    to call pci_save_state() afterwards, lest recovery from subsequent PCI
    errors fails.
    
    The commit has just been reverted and so all the pci_save_state() after
    pci_restore_state() calls that have accumulated in the tree are now
    superfluous.  Drop them.
    
    Two drivers chose a different approach to achieve the same result:
    drivers/scsi/ipr.c and drivers/net/ethernet/intel/e1000e/netdev.c set the
    pci_dev's "state_saved" flag to true before calling pci_restore_state().
    Drop this as well.
    
    Signed-off-by: Lukas Wunner <lukas@wunner.de>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Acked-by: Dave Jiang <dave.jiang@intel.com>
    Acked-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>  # qat
    Link: https://patch.msgid.link/c2b28cc4defa1b743cf1dedee23c455be98b397a.1760274044.git.lukas@wunner.de
    Cc: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
wifi: cfg80211: Fix bitrate calculation overflow for HE rates [+ + +]
Author: Veerendranath Jakkam <veerendranath.jakkam@oss.qualcomm.com>
Date:   Fri Jan 9 20:30:04 2026 +0530

    wifi: cfg80211: Fix bitrate calculation overflow for HE rates
    
    [ Upstream commit a3034bf0746d88a00cceda9541534a5721445a24 ]
    
    An integer overflow occurs in cfg80211_calculate_bitrate_he() when
    calculating bitrates for high throughput HE configurations.
    For example, with 160 MHz bandwidth, HE-MCS 13, HE-NSS 4, and HE-GI 0,
    the multiplication (result * rate->nss) overflows the 32-bit 'result'
    variable before division by 8, leading to significantly underestimated
    bitrate values.
    
    The overflow occurs because the NSS multiplication operates on a 32-bit
    integer that cannot accommodate intermediate values exceeding
    4,294,967,295. When overflow happens, the value wraps around, producing
    incorrect bitrates for high MCS and NSS combinations.
    
    Fix this by utilizing the 64-bit 'tmp' variable for the NSS
    multiplication and subsequent divisions via do_div(). This approach
    preserves full precision throughout the entire calculation, with the
    final value assigned to 'result' only after completing all operations.
    
    Signed-off-by: Veerendranath Jakkam <veerendranath.jakkam@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260109-he_bitrate_overflow-v1-1-95575e466b6e@oss.qualcomm.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: iwlwifi: Implement settime64 as stub for MVM/MLD PTP [+ + +]
Author: Yao Zi <ziyao@disroot.org>
Date:   Thu Dec 4 12:32:04 2025 +0000

    wifi: iwlwifi: Implement settime64 as stub for MVM/MLD PTP
    
    [ Upstream commit 81d90d93d22ca4f61833cba921dce9a0bd82218f ]
    
    Since commit dfb073d32cac ("ptp: Return -EINVAL on ptp_clock_register if
    required ops are NULL"), PTP clock registered through ptp_clock_register
    is required to have ptp_clock_info.settime64 set, however, neither MVM
    nor MLD's PTP clock implementation sets it, resulting in warnings when
    the interface starts up, like
    
    WARNING: drivers/ptp/ptp_clock.c:325 at ptp_clock_register+0x2c8/0x6b8, CPU#1: wpa_supplicant/469
    CPU: 1 UID: 0 PID: 469 Comm: wpa_supplicant Not tainted 6.18.0+ #101 PREEMPT(full)
    ra: ffff800002732cd4 iwl_mvm_ptp_init+0x114/0x188 [iwlmvm]
    ERA: 9000000002fdc468 ptp_clock_register+0x2c8/0x6b8
    iwlwifi 0000:01:00.0: Failed to register PHC clock (-22)
    
    I don't find an appropriate firmware interface to implement settime64()
    for iwlwifi MLD/MVM, thus instead create a stub that returns
    -EOPTNOTSUPP only, suppressing the warning and allowing the PTP clock to
    be registered.
    
    Reported-by: Nathan Chancellor <nathan@kernel.org>
    Closes: https://lore.kernel.org/all/20251108044822.GA3262936@ax162/
    Signed-off-by: Yao Zi <ziyao@disroot.org>
    Tested-by: Nathan Chancellor <nathan@kernel.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    tested-by: damian Tometzki damian@riscv-rocks.de
    Tested-by: Oliver Hartkopp <socketcan@hartkopp.net>
    Acked-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
    Link: https://patch.msgid.link/20251204123204.9316-1-ziyao@disroot.org
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: iwlwifi: mld: cancel mlo_scan_start_wk [+ + +]
Author: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Date:   Thu Jan 29 21:27:09 2026 +0200

    wifi: iwlwifi: mld: cancel mlo_scan_start_wk
    
    [ Upstream commit 5ff641011ab7fb63ea101251087745d9826e8ef5 ]
    
    mlo_scan_start_wk is not canceled on disconnection. In fact, it is not
    canceled anywhere except in the restart cleanup, where we don't really
    have to.
    
    This can cause an init-after-queue issue: if, for example, the work was
    queued and then drv_change_interface got executed.
    
    This can also cause use-after-free: if the work is executed after the
    vif is freed.
    
    Fixes: 9748ad82a9d9 ("wifi: iwlwifi: defer MLO scan after link activation")
    Reviewed-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
    Link: https://patch.msgid.link/20260129212650.a36482a60719.I5bf64a108ca39dacb5ca0dcd8b7258a3ce8db74c@changeid
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: iwlwifi: mvm: pause TCM on fast resume [+ + +]
Author: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Date:   Thu Jan 29 21:27:10 2026 +0200

    wifi: iwlwifi: mvm: pause TCM on fast resume
    
    [ Upstream commit fb7f54aa2a99b07945911152c5d3d4a6eb39f797 ]
    
    Not pausing it means that we can have the TCM work queued into a
    non-freezable workqueue, which, in resume, is re-activated before the
    driver's resume is called.
    The TCM work might send commands to the FW before we resumed the device,
    leading to an assert.
    
    Closes: https://lore.kernel.org/linux-wireless/aTDoDiD55qlUZ0pn@debian.local/
    Tested-by: Chris Bainbridge <chris.bainbridge@gmail.com>
    Fixes: e8bb19c1d590 ("wifi: iwlwifi: support fast resume")
    Reviewed-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
    Link: https://patch.msgid.link/20260129212650.05621f3faedb.I44df9cf9183b5143df8078131e0d87c0fd7e1763@changeid
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: collect station statistics earlier when disconnect [+ + +]
Author: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
Date:   Mon Dec 22 10:29:07 2025 +0800

    wifi: mac80211: collect station statistics earlier when disconnect
    
    [ Upstream commit a203dbeeca15a9b924f0d51f510921f4bae96801 ]
    
    In __sta_info_destroy_part2(), station statistics are requested after the
    IEEE80211_STA_NONE -> IEEE80211_STA_NOTEXIST transition. This is
    problematic because the driver may be unable to handle the request due to
    the STA being in the NOTEXIST state (i.e. if the driver destroys the
    underlying data when transitioning to NOTEXIST).
    
    Move the statistics collection to before the state transition to avoid
    this issue.
    
    Signed-off-by: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
    Link: https://patch.msgid.link/20251222-mac80211-move-station-stats-collection-earlier-v1-1-12cd4e42c633@oss.qualcomm.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: correctly check if CSA is active [+ + +]
Author: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Date:   Sun Jan 11 19:19:30 2026 +0200

    wifi: mac80211: correctly check if CSA is active
    
    [ Upstream commit db1d0b6ab11f612ea8a327663a578c8946efeee9 ]
    
    We are not adding an interface if an existing one is doing CSA.
    But the check won't work for MLO station interfaces, since for those,
    vif->bss_conf is zeroed out.
    Fix this by checking if any link of the vif has an active CSA.
    
    Reviewed-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
    Link: https://patch.msgid.link/20260111191912.7ceff62fc561.Ia38d27f42684d1cfd82d930d232bd5dea6ab9282@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: don't increment crypto_tx_tailroom_needed_cnt twice [+ + +]
Author: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Date:   Sun Jan 18 09:28:29 2026 +0200

    wifi: mac80211: don't increment crypto_tx_tailroom_needed_cnt twice
    
    [ Upstream commit 3f3d8ff31496874a69b131866f62474eb24ed20a ]
    
    In reconfig, in case the driver asks to disconnect during the reconfig,
    all the keys of the interface are marked as tainted.
    Then ieee80211_reenable_keys will loop over all the interface keys, and
    for each one it will
    a) increment crypto_tx_tailroom_needed_cnt
    b) call ieee80211_key_enable_hw_accel, which in turn will detect that
    this key is tainted, so it will mark it as "not in hardware", which is
    paired with crypto_tx_tailroom_needed_cnt incrementation, so we get two
    incrementations for each tainted key.
    Then we get a warning in ieee80211_free_keys.
    
    To fix it, don't increment the count in ieee80211_reenable_keys for
    tainted keys
    
    Reviewed-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
    Link: https://patch.msgid.link/20260118092821.4ca111fddcda.Id6e554f4b1c83760aa02d5a9e4e3080edb197aa2@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: don't WARN for connections on invalid channels [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Tue Dec 2 10:25:11 2025 +0100

    wifi: mac80211: don't WARN for connections on invalid channels
    
    [ Upstream commit 99067b58a408a384d2a45c105eb3dce980a862ce ]
    
    It's not clear (to me) how exactly syzbot managed to hit this,
    but it seems conceivable that e.g. regulatory changed and has
    disabled a channel between scanning (channel is checked to be
    usable by cfg80211_get_ies_channel_number) and connecting on
    the channel later.
    
    With one scenario that isn't covered elsewhere described above,
    the warning isn't good, replace it with a (more informative)
    error message.
    
    Reported-by: syzbot+639af5aa411f2581ad38@syzkaller.appspotmail.com
    Link: https://patch.msgid.link/20251202102511.5a8fb5184fa3.I961ee41b8f10538a54b8565dbf03ec1696e80e03@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: ocb: skip rx_no_sta when interface is not joined [+ + +]
Author: Moon Hee Lee <moonhee.lee.ca@gmail.com>
Date:   Mon Dec 15 19:59:32 2025 -0800

    wifi: mac80211: ocb: skip rx_no_sta when interface is not joined
    
    [ Upstream commit ff4071c60018a668249dc6a2df7d16330543540e ]
    
    ieee80211_ocb_rx_no_sta() assumes a valid channel context, which is only
    present after JOIN_OCB.
    
    RX may run before JOIN_OCB is executed, in which case the OCB interface
    is not operational. Skip RX peer handling when the interface is not
    joined to avoid warnings in the RX path.
    
    Reported-by: syzbot+b364457b2d1d4e4a3054@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=b364457b2d1d4e4a3054
    Tested-by: syzbot+b364457b2d1d4e4a3054@syzkaller.appspotmail.com
    Signed-off-by: Moon Hee Lee <moonhee.lee.ca@gmail.com>
    Link: https://patch.msgid.link/20251216035932.18332-1-moonhee.lee.ca@gmail.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: wlcore: ensure skb headroom before skb_push [+ + +]
Author: Peter Åstrand <astrand@lysator.liu.se>
Date:   Wed Dec 3 08:57:08 2025 +0100

    wifi: wlcore: ensure skb headroom before skb_push
    
    [ Upstream commit e75665dd096819b1184087ba5718bd93beafff51 ]
    
    This avoids occasional skb_under_panic Oops from wl1271_tx_work. In this case, headroom is
    less than needed (typically 110 - 94 = 16 bytes).
    
    Signed-off-by: Peter Astrand <astrand@lysator.liu.se>
    Link: https://patch.msgid.link/097bd417-e1d7-acd4-be05-47b199075013@lysator.liu.se
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/kfence: fix booting on 32bit non-PAE systems [+ + +]
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Mon Jan 26 21:10:46 2026 +0000

    x86/kfence: fix booting on 32bit non-PAE systems
    
    commit 16459fe7e0ca6520a6e8f603de4ccd52b90fd765 upstream.
    
    The original patch inverted the PTE unconditionally to avoid
    L1TF-vulnerable PTEs, but Linux doesn't make this adjustment in 2-level
    paging.
    
    Adjust the logic to use the flip_protnone_guard() helper, which is a nop
    on 2-level paging but inverts the address bits in all other paging modes.
    
    This doesn't matter for the Xen aspect of the original change.  Linux no
    longer supports running 32bit PV under Xen, and Xen doesn't support
    running any 32bit PV guests without using PAE paging.
    
    Link: https://lkml.kernel.org/r/20260126211046.2096622-1-andrew.cooper3@citrix.com
    Fixes: b505f1944535 ("x86/kfence: avoid writing L1TF-vulnerable PTEs")
    Reported-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Closes: https://lore.kernel.org/lkml/CAKFNMokwjw68ubYQM9WkzOuH51wLznHpEOMSqtMoV1Rn9JV_gw@mail.gmail.com/
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Tested-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Tested-by: Borislav Petkov (AMD) <bp@alien8.de>
    Cc: Alexander Potapenko <glider@google.com>
    Cc: Marco Elver <elver@google.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Jann Horn <jannh@google.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/sev: Disable GCOV on noinstr object [+ + +]
Author: Brendan Jackman <jackmanb@google.com>
Date:   Tue Dec 16 10:16:36 2025 +0000

    x86/sev: Disable GCOV on noinstr object
    
    [ Upstream commit 9efb74f84ba82a9de81fc921baf3c5e2decf8256 ]
    
    With Debian clang version 19.1.7 (3+build5) there are calls to
    kasan_check_write() from __sev_es_nmi_complete(), which violates noinstr.  Fix
    it by disabling GCOV for the noinstr object, as has been done for previous
    such instrumentation issues.
    
    Note that this file already disables __SANITIZE_ADDRESS__ and
    __SANITIZE_THREAD__, thus calls like kasan_check_write() ought to be nops
    regardless of GCOV. This has been fixed in other patches. However, to avoid
    any other accidental instrumentation showing up, (and since, in principle GCOV
    is instrumentation and hence should be disabled for noinstr code anyway),
    disable GCOV overall as well.
    
    Signed-off-by: Brendan Jackman <jackmanb@google.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Acked-by: Marco Elver <elver@google.com>
    Link: https://patch.msgid.link/20251216-gcov-inline-noinstr-v3-3-10244d154451@google.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/vmware: Fix hypercall clobbers [+ + +]
Author: Josh Poimboeuf <jpoimboe@kernel.org>
Date:   Fri Feb 6 14:24:55 2026 -0800

    x86/vmware: Fix hypercall clobbers
    
    commit 2687c848e57820651b9f69d30c4710f4219f7dbf upstream.
    
    Fedora QA reported the following panic:
    
      BUG: unable to handle page fault for address: 0000000040003e54
      #PF: supervisor write access in kernel mode
      #PF: error_code(0x0002) - not-present page
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS edk2-20251119-3.fc43 11/19/2025
      RIP: 0010:vmware_hypercall4.constprop.0+0x52/0x90
      ..
      Call Trace:
       vmmouse_report_events+0x13e/0x1b0
       psmouse_handle_byte+0x15/0x60
       ps2_interrupt+0x8a/0xd0
       ...
    
    because the QEMU VMware mouse emulation is buggy, and clears the top 32
    bits of %rdi that the kernel kept a pointer in.
    
    The QEMU vmmouse driver saves and restores the register state in a
    "uint32_t data[6];" and as a result restores the state with the high
    bits all cleared.
    
    RDI originally contained the value of a valid kernel stack address
    (0xff5eeb3240003e54).  After the vmware hypercall it now contains
    0x40003e54, and we get a page fault as a result when it is dereferenced.
    
    The proper fix would be in QEMU, but this works around the issue in the
    kernel to keep old setups working, when old kernels had not happened to
    keep any state in %rdi over the hypercall.
    
    In theory this same issue exists for all the hypercalls in the vmmouse
    driver; in practice it has only been seen with vmware_hypercall3() and
    vmware_hypercall4().  For now, just mark RDI/RSI as clobbered for those
    two calls.  This should have a minimal effect on code generation overall
    as it should be rare for the compiler to want to make RDI/RSI live
    across hypercalls.
    
    Reported-by: Justin Forbes <jforbes@fedoraproject.org>
    Link: https://lore.kernel.org/all/99a9c69a-fc1a-43b7-8d1e-c42d6493b41f@broadcom.com/
    Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Cc: stable@kernel.org
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>