Changelog in Linux kernel 6.19.9

 
accel/amdxdna: Fix runtime suspend deadlock when there is pending job [+ + +]
Author: Lizhi Hou <lizhi.hou@amd.com>
Date:   Tue Mar 10 11:00:58 2026 -0700

    accel/amdxdna: Fix runtime suspend deadlock when there is pending job
    
    [ Upstream commit 6b13cb8f48a42ddf6dd98865b673a82e37ff238b ]
    
    The runtime suspend callback drains the running job workqueue before
    suspending the device. If a job is still executing and calls
    pm_runtime_resume_and_get(), it can deadlock with the runtime suspend
    path.
    
    Fix this by moving pm_runtime_resume_and_get() from the job execution
    routine to the job submission routine, ensuring the device is resumed
    before the job is queued and avoiding the deadlock during runtime
    suspend.
    
    Fixes: 063db451832b ("accel/amdxdna: Enhance runtime power management")
    Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org>
    Signed-off-by: Lizhi Hou <lizhi.hou@amd.com>
    Link: https://patch.msgid.link/20260310180058.336348-1-lizhi.hou@amd.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ACPI: OSI: Add DMI quirk for Acer Aspire One D255 [+ + +]
Author: Sofia Schneider <sofia@schn.dev>
Date:   Sun Feb 22 23:52:40 2026 -0300

    ACPI: OSI: Add DMI quirk for Acer Aspire One D255
    
    [ Upstream commit 5ede90206273ff156a778254f0f972a55e973c89 ]
    
    The screen backlight turns off during boot (specifically during udev device
    initialization) when returning true for _OSI("Windows 2009").
    
    Analyzing the device's DSDT reveals that the firmware takes a different
    code path when Windows 7 is reported, which leads to the backlight shutoff.
    Add a DMI quirk to invoke dmi_disable_osi_win7 for this model.
    
    Signed-off-by: Sofia Schneider <sofia@schn.dev>
    Link: https://patch.msgid.link/20260223025240.518509-1-sofia@schn.dev
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ACPI: OSL: fix __iomem type on return from acpi_os_map_generic_address() [+ + +]
Author: Ben Dooks <ben.dooks@codethink.co.uk>
Date:   Wed Mar 11 10:58:35 2026 +0000

    ACPI: OSL: fix __iomem type on return from acpi_os_map_generic_address()
    
    [ Upstream commit 393815f57651101f1590632092986d1d5a3a41bd ]
    
    The pointer returned from acpi_os_map_generic_address() is
    tagged with __iomem, so make the rv it is returned to also
    of void __iomem * type.
    
    Fixes the following sparse warning:
    
    drivers/acpi/osl.c:1686:20: warning: incorrect type in assignment (different address spaces)
    drivers/acpi/osl.c:1686:20:    expected void *rv
    drivers/acpi/osl.c:1686:20:    got void [noderef] __iomem *
    
    Fixes: 6915564dc5a8 ("ACPI: OSL: Change the type of acpi_os_map_generic_address() return value")
    Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
    [ rjw: Subject tweak, added Fixes tag ]
    Link: https://patch.msgid.link/20260311105835.463030-1-ben.dooks@codethink.co.uk
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ACPI: PM: Save NVS memory on Lenovo G70-35 [+ + +]
Author: Piotr Mazek <pmazek@outlook.com>
Date:   Thu Feb 5 23:05:02 2026 +0100

    ACPI: PM: Save NVS memory on Lenovo G70-35
    
    [ Upstream commit 023cd6d90f8aa2ef7b72d84be84a18e61ecebd64 ]
    
    [821d6f0359b0614792ab8e2fb93b503e25a65079] prevented machines
    produced later than 2012 from saving NVS region to accelerate S3.
    
    Despite being made after 2012, Lenovo G70-35 still needs NVS memory
    saving during S3. A quirk is introduced for this platform.
    
    Signed-off-by: Piotr Mazek <pmazek@outlook.com>
    [ rjw: Subject adjustment ]
    Link: https://patch.msgid.link/GV2PPF3CD5B63CC2442EE3F76F8443EAD90D499A@GV2PPF3CD5B63CC.EURP251.PROD.OUTLOOK.COM
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ALSA: hda/realtek: Fix speaker pop on Star Labs StarFighter [+ + +]
Author: Sean Rhodes <sean@starlabs.systems>
Date:   Thu Feb 19 20:14:26 2026 +0000

    ALSA: hda/realtek: Fix speaker pop on Star Labs StarFighter
    
    [ Upstream commit 1cb3c20688fc8380c9b365d03aea7e84faf6a9fd ]
    
    On Star Labs StarFighter (Realtek ALC233/235), the internal speakers can
    emit an audible pop when entering or leaving runtime suspend.
    
    Mute the speaker output paths via snd_hda_gen_shutup_speakers() in the
    Realtek shutup callback before the codec is powered down.
    
    This is enough to avoid the pop without special EAPD handling.
    
    Test results:
    - runtime PM pop fixed
    - still reaches D3 (PCI 0000:00:1f.3 power_state=D3hot)
    - does not address pops on cold boot (G3 exit) or around display manager
      start/shutdown
    
    journalctl -k (boot):
    - snd_hda_codec_alc269 hdaudioC0D0: ALC233: picked fixup for PCI SSID
      7017:2014
    - snd_hda_codec_alc269 hdaudioC0D0: autoconfig for ALC233: line_outs=1
      (0x1b/0x0/0x0/0x0/0x0) type:speaker
    
    Suggested-by: Takashi Iwai <tiwai@suse.com>
    Tested-by: Sean Rhodes <sean@starlabs.systems>
    Signed-off-by: Sean Rhodes <sean@starlabs.systems>
    Link: https://patch.msgid.link/4d5fb71b132bb283fd41c622b8413770b2065242.1771532060.git.sean@starlabs.systems
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: pcm: fix use-after-free on linked stream runtime in snd_pcm_drain() [+ + +]
Author: Mehul Rao <mehulrao@gmail.com>
Date:   Thu Mar 5 14:35:07 2026 -0500

    ALSA: pcm: fix use-after-free on linked stream runtime in snd_pcm_drain()
    
    commit 9b1dbd69ba6f8f8c69bc7b77c2ce3b9c6ed05ba6 upstream.
    
    In the drain loop, the local variable 'runtime' is reassigned to a
    linked stream's runtime (runtime = s->runtime at line 2157).  After
    releasing the stream lock at line 2169, the code accesses
    runtime->no_period_wakeup, runtime->rate, and runtime->buffer_size
    (lines 2170-2178) — all referencing the linked stream's runtime without
    any lock or refcount protecting its lifetime.
    
    A concurrent close() on the linked stream's fd triggers
    snd_pcm_release_substream() → snd_pcm_drop() → pcm_release_private()
    → snd_pcm_unlink() → snd_pcm_detach_substream() → kfree(runtime).
    No synchronization prevents kfree(runtime) from completing while the
    drain path dereferences the stale pointer.
    
    Fix by caching the needed runtime fields (no_period_wakeup, rate,
    buffer_size) into local variables while still holding the stream lock,
    and using the cached values after the lock is released.
    
    Fixes: f2b3614cefb6 ("ALSA: PCM - Don't check DMA time-out too shortly")
    Cc: stable@vger.kernel.org
    Signed-off-by: Mehul Rao <mehulrao@gmail.com>
    Link: https://patch.msgid.link/20260305193508.311096-1-mehulrao@gmail.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: usb-audio: Avoid implicit feedback mode on DIYINHK USB Audio 2.0 [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Wed Feb 25 09:52:30 2026 +0100

    ALSA: usb-audio: Avoid implicit feedback mode on DIYINHK USB Audio 2.0
    
    [ Upstream commit c5bf24c8aba1ff711226ee0f039ff01a5754692b ]
    
    Although DIYINHK USB Audio 2.0 (ID 20b1:2009) shows the implicit
    feedback source for the capture stream, this would cause several
    problems for the playback.  Namely, the device can get wMaxPackSize
    1024 for 24/32 bit format with 6 channels, and when a high sample rate
    like 352.8kHz or 384kHz is played, the packet size overflows the max
    limit.  Also, the device has another two playback altsets, and those
    aren't properly handled with the implicit feedback.
    
    Since the device has been working well even before introducing the
    implicit feedback, we can assume that it works fine in the async mode.
    This patch adds the explicit skip of the implicit fb detection to make
    the playback running in the async mode.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=221076
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Link: https://patch.msgid.link/20260225085233.316306-4-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: usb-audio: Check endpoint numbers at parsing Scarlett2 mixer interfaces [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Mon Mar 9 11:46:27 2026 +0100

    ALSA: usb-audio: Check endpoint numbers at parsing Scarlett2 mixer interfaces
    
    commit df1d8abf36ca3681c21a6809eaa9a1e01ef897a6 upstream.
    
    The Scarlett2 mixer quirk in USB-audio driver may hit a NULL
    dereference when a malformed USB descriptor is passed, since it
    assumes the presence of an endpoint in the parsed interface in
    scarlett2_find_fc_interface(), as reported by fuzzer.
    
    For avoiding the NULL dereference, just add the sanity check of
    bNumEndpoints and skip the invalid interface.
    
    Reported-by: syzbot+8f29539ef9a1c8334f42@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/69acbbe1.050a0220.310d8.0001.GAE@google.com
    Reported-by: syzbot+ae893a8901067fde2741@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/69acf72a.050a0220.310d8.0004.GAE@google.com
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20260309104632.141895-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: usb-audio: Check max frame size for implicit feedback mode, too [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Wed Feb 25 09:52:29 2026 +0100

    ALSA: usb-audio: Check max frame size for implicit feedback mode, too
    
    [ Upstream commit 7cb2a5422f5bbdf1cf32eae0eda41000485b9346 ]
    
    When the packet sizes are taken from the capture stream in the
    implicit feedback mode, the sizes might be larger than the upper
    boundary defined by the descriptor.  As already done for other
    transfer modes, we have to cap the sizes accordingly at sending,
    otherwise this would lead to an error in USB core at submission of
    URBs.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=221076
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Link: https://patch.msgid.link/20260225085233.316306-3-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: usb-audio: Improve Focusrite sample rate filtering [+ + +]
Author: Geoffrey D. Bennett <g@b4.vu>
Date:   Sat Feb 21 02:33:45 2026 +1030

    ALSA: usb-audio: Improve Focusrite sample rate filtering
    
    [ Upstream commit 24d2d3c5f94007a5a0554065ab7349bb69e28bcb ]
    
    Replace the bLength == 10 max_rate check in
    focusrite_valid_sample_rate() with filtering that also examines the
    bmControls VAL_ALT_SETTINGS bit.
    
    When VAL_ALT_SETTINGS is readable, the device uses strict
    per-altsetting rate filtering (only the highest rate pair for that
    altsetting is valid). When it is not readable, all rates up to
    max_rate are valid.
    
    For devices without the bLength == 10 Format Type descriptor extension
    but with VAL_ALT_SETTINGS readable and multiple altsettings (only seen
    in Scarlett 18i8 3rd Gen playback), fall back to the Focusrite
    convention: alt 1 = 48kHz, alt 2 = 96kHz, alt 3 = 192kHz.
    
    This produces correct rate tables for all tested Focusrite devices
    (all Scarlett 2nd, 3rd, and 4th Gen, Clarett+, and Vocaster) using
    only USB descriptors, allowing QUIRK_FLAG_VALIDATE_RATES to be removed
    for Focusrite in the next commit.
    
    Signed-off-by: Geoffrey D. Bennett <g@b4.vu>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Link: https://patch.msgid.link/7e18c1f393a6ecb6fc75dd867a2c4dbe135e3e22.1771594828.git.g@b4.vu
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
amd-xgbe: fix link status handling in xgbe_rx_adaptation [+ + +]
Author: Raju Rangoju <Raju.Rangoju@amd.com>
Date:   Fri Mar 6 16:46:27 2026 +0530

    amd-xgbe: fix link status handling in xgbe_rx_adaptation
    
    [ Upstream commit 6485cb96be5cd0f4bf39554737ba11322cc9b053 ]
    
    The link status bit is latched low to allow detection of momentary
    link drops. If the status indicates that the link is already down,
    read it again to obtain the current state.
    
    Fixes: 4f3b20bfbb75 ("amd-xgbe: add support for rx-adaptation")
    Signed-off-by: Raju Rangoju <Raju.Rangoju@amd.com>
    Link: https://patch.msgid.link/20260306111629.1515676-2-Raju.Rangoju@amd.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

amd-xgbe: prevent CRC errors during RX adaptation with AN disabled [+ + +]
Author: Raju Rangoju <Raju.Rangoju@amd.com>
Date:   Fri Mar 6 16:46:28 2026 +0530

    amd-xgbe: prevent CRC errors during RX adaptation with AN disabled
    
    [ Upstream commit 27a4dd0c702b3b2b9cf2c045d100cc2fe8720b81 ]
    
    When operating in 10GBASE-KR mode with auto-negotiation disabled and RX
    adaptation enabled, CRC errors can occur during the RX adaptation
    process. This happens because the driver continues transmitting and
    receiving packets while adaptation is in progress.
    
    Fix this by stopping TX/RX immediately when the link goes down and RX
    adaptation needs to be re-triggered, and only re-enabling TX/RX after
    adaptation completes and the link is confirmed up. Introduce a flag to
    track whether TX/RX was disabled for adaptation so it can be restored
    correctly.
    
    This prevents packets from being transmitted or received during the RX
    adaptation window and avoids CRC errors from corrupted frames.
    
    The flag tracking the data path state is synchronized with hardware
    state in xgbe_start() to prevent stale state after device restarts.
    This ensures that after a restart cycle (where xgbe_stop disables
    TX/RX and xgbe_start re-enables them), the flag correctly reflects
    that the data path is active.
    
    Fixes: 4f3b20bfbb75 ("amd-xgbe: add support for rx-adaptation")
    Signed-off-by: Raju Rangoju <Raju.Rangoju@amd.com>
    Link: https://patch.msgid.link/20260306111629.1515676-3-Raju.Rangoju@amd.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

amd-xgbe: reset PHY settings before starting PHY [+ + +]
Author: Raju Rangoju <Raju.Rangoju@amd.com>
Date:   Fri Mar 6 16:46:29 2026 +0530

    amd-xgbe: reset PHY settings before starting PHY
    
    [ Upstream commit a8ba129af46856112981c124850ec6a85a1c1ab6 ]
    
    commit f93505f35745 ("amd-xgbe: let the MAC manage PHY PM") moved
    xgbe_phy_reset() from xgbe_open() to xgbe_start(), placing it after
    phy_start(). As a result, the PHY settings were being reset after the
    PHY had already started.
    
    Reorder the calls so that the PHY settings are reset before
    phy_start() is invoked.
    
    Fixes: f93505f35745 ("amd-xgbe: let the MAC manage PHY PM")
    Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
    Signed-off-by: Raju Rangoju <Raju.Rangoju@amd.com>
    Link: https://patch.msgid.link/20260306111629.1515676-4-Raju.Rangoju@amd.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
arm64: contpte: fix set_access_flags() no-op check for SMMU/ATS faults [+ + +]
Author: Piotr Jaroszynski <pjaroszynski@nvidia.com>
Date:   Thu Mar 5 15:26:29 2026 -0800

    arm64: contpte: fix set_access_flags() no-op check for SMMU/ATS faults
    
    commit 97c5550b763171dbef61e6239cab372b9f9cd4a2 upstream.
    
    contpte_ptep_set_access_flags() compared the gathered ptep_get() value
    against the requested entry to detect no-ops. ptep_get() ORs AF/dirty
    from all sub-PTEs in the CONT block, so a dirty sibling can make the
    target appear already-dirty. When the gathered value matches entry, the
    function returns 0 even though the target sub-PTE still has PTE_RDONLY
    set in hardware.
    
    For a CPU with FEAT_HAFDBS this gathered view is fine, since hardware may
    set AF/dirty on any sub-PTE and CPU TLB behavior is effectively gathered
    across the CONT range. But page-table walkers that evaluate each
    descriptor individually (e.g. a CPU without DBM support, or an SMMU
    without HTTU, or with HA/HD disabled in CD.TCR) can keep faulting on the
    unchanged target sub-PTE, causing an infinite fault loop.
    
    Gathering can therefore cause false no-ops when only a sibling has been
    updated:
     - write faults: target still has PTE_RDONLY (needs PTE_RDONLY cleared)
     - read faults:  target still lacks PTE_AF
    
    Fix by checking each sub-PTE against the requested AF/dirty/write state
    (the same bits consumed by __ptep_set_access_flags()), using raw
    per-PTE values rather than the gathered ptep_get() view, before
    returning no-op. Keep using the raw target PTE for the write-bit unfold
    decision.
    
    Per Arm ARM (DDI 0487) D8.7.1 ("The Contiguous bit"), any sub-PTE in a CONT
    range may become the effective cached translation and software must
    maintain consistent attributes across the range.
    
    Fixes: 4602e5757bcc ("arm64/mm: wire up PTE_CONT for user mappings")
    Cc: Ryan Roberts <ryan.roberts@arm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Cc: Jason Gunthorpe <jgg@nvidia.com>
    Cc: John Hubbard <jhubbard@nvidia.com>
    Cc: Zi Yan <ziy@nvidia.com>
    Cc: Breno Leitao <leitao@debian.org>
    Cc: stable@vger.kernel.org
    Reviewed-by: Alistair Popple <apopple@nvidia.com>
    Reviewed-by: James Houghton <jthoughton@google.com>
    Reviewed-by: Ryan Roberts <ryan.roberts@arm.com>
    Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
    Tested-by: Breno Leitao <leitao@debian.org>
    Signed-off-by: Piotr Jaroszynski <pjaroszynski@nvidia.com>
    Acked-by: Balbir Singh <balbirs@nvidia.com>
    Signed-off-by: Will Deacon <will@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: gcs: Honour mprotect(PROT_NONE) on shadow stack mappings [+ + +]
Author: Catalin Marinas <catalin.marinas@arm.com>
Date:   Mon Feb 23 17:45:31 2026 +0000

    arm64: gcs: Honour mprotect(PROT_NONE) on shadow stack mappings
    
    commit 47a8aad135ac1aed04b7b0c0a8157fd208075827 upstream.
    
    vm_get_page_prot() short-circuits the protection_map[] lookup for a
    VM_SHADOW_STACK mapping since it uses a different PIE index from the
    typical read/write/exec permissions. However, the side effect is that it
    also ignores mprotect(PROT_NONE) by creating an accessible PTE.
    
    Special-case the !(vm_flags & VM_ACCESS_FLAGS) flags to use the
    protection_map[VM_NONE] permissions instead. No GCS attributes are
    required for an inaccessible PTE.
    
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Fixes: 6497b66ba694 ("arm64/mm: Map pages for guarded control stack")
    Cc: stable@vger.kernel.org
    Cc: Mark Brown <broonie@kernel.org>
    Cc: Will Deacon <will@kernel.org>
    Cc: David Hildenbrand <david@kernel.org>
    Reviewed-by: David Hildenbrand (Arm) <david@kernel.org>
    Signed-off-by: Will Deacon <will@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: mm: Add PTE_DIRTY back to PAGE_KERNEL* to fix kexec/hibernation [+ + +]
Author: Catalin Marinas <catalin.marinas@arm.com>
Date:   Fri Feb 27 18:53:06 2026 +0000

    arm64: mm: Add PTE_DIRTY back to PAGE_KERNEL* to fix kexec/hibernation
    
    commit c25c4aa3f79a488cc270507935a29c07dc6bddfc upstream.
    
    Commit 143937ca51cc ("arm64, mm: avoid always making PTE dirty in
    pte_mkwrite()") changed pte_mkwrite_novma() to only clear PTE_RDONLY
    when PTE_DIRTY is set. This was to allow writable-clean PTEs for swap
    pages that haven't actually been written.
    
    However, this broke kexec and hibernation for some platforms. Both go
    through trans_pgd_create_copy() -> _copy_pte(), which calls
    pte_mkwrite_novma() to make the temporary linear-map copy fully
    writable. With the updated pte_mkwrite_novma(), read-only kernel pages
    (without PTE_DIRTY) remain read-only in the temporary mapping.
    While such behaviour is fine for user pages where hardware DBM or
    trapping will make them writeable, subsequent in-kernel writes by the
    kexec relocation code will fault.
    
    Add PTE_DIRTY back to all _PAGE_KERNEL* protection definitions. This was
    the case prior to 5.4, commit aa57157be69f ("arm64: Ensure
    VM_WRITE|VM_SHARED ptes are clean by default"). With the kernel
    linear-map PTEs always having PTE_DIRTY set, pte_mkwrite_novma()
    correctly clears PTE_RDONLY.
    
    Fixes: 143937ca51cc ("arm64, mm: avoid always making PTE dirty in pte_mkwrite()")
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Cc: stable@vger.kernel.org
    Reported-by: Jianpeng Chang <jianpeng.chang.cn@windriver.com>
    Link: https://lore.kernel.org/r/20251204062722.3367201-1-jianpeng.chang.cn@windriver.com
    Cc: Will Deacon <will@kernel.org>
    Cc: Huang, Ying <ying.huang@linux.alibaba.com>
    Cc: Guenter Roeck <linux@roeck-us.net>
    Reviewed-by: Huang Ying <ying.huang@linux.alibaba.com>
    Signed-off-by: Will Deacon <will@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ASoC: amd: acp-mach-common: Add missing error check for clock acquisition [+ + +]
Author: Chen Ni <nichen@iscas.ac.cn>
Date:   Tue Mar 10 12:43:27 2026 +0800

    ASoC: amd: acp-mach-common: Add missing error check for clock acquisition
    
    [ Upstream commit 30c64fb9839949f085c8eb55b979cbd8a4c51f00 ]
    
    The acp_card_rt5682_init() and acp_card_rt5682s_init() functions did not
    check the return values of clk_get(). This could lead to a kernel crash
    when the invalid pointers are later dereferenced by clock core
    functions.
    
    Fix this by:
    1. Changing clk_get() to the device-managed devm_clk_get().
    2. Adding IS_ERR() checks immediately after each clock acquisition.
    
    Fixes: 8b7256266848 ("ASoC: amd: acp: Add support for RT5682-VS codec")
    Fixes: d4c750f2c7d4 ("ASoC: amd: acp: Add generic machine driver support for ACP cards")
    Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
    Link: https://patch.msgid.link/20260310044327.2582018-1-nichen@iscas.ac.cn
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: amd: acp3x-rt5682-max9836: Add missing error check for clock acquisition [+ + +]
Author: Chen Ni <nichen@iscas.ac.cn>
Date:   Tue Mar 10 10:42:46 2026 +0800

    ASoC: amd: acp3x-rt5682-max9836: Add missing error check for clock acquisition
    
    [ Upstream commit 53f3a900e9a383d47af7253076e19f510c5708d0 ]
    
    The acp3x_5682_init() function did not check the return value of
    clk_get(), which could lead to dereferencing error pointers in
    rt5682_clk_enable().
    
    Fix this by:
    1. Changing clk_get() to the device-managed devm_clk_get().
    2. Adding proper IS_ERR() checks for both clock acquisitions.
    
    Fixes: 6b8e4e7db3cd ("ASoC: amd: Add machine driver for Raven based platform")
    Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
    Link: https://patch.msgid.link/20260310024246.2153827-1-nichen@iscas.ac.cn
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: amd: yc: Add ASUS EXPERTBOOK BM1503CDA to quirk table [+ + +]
Author: Azamat Almazbek uulu <almazbek1608@gmail.com>
Date:   Sat Feb 21 12:48:13 2026 +0100

    ASoC: amd: yc: Add ASUS EXPERTBOOK BM1503CDA to quirk table
    
    [ Upstream commit 32fc4168fa56f6301d858c778a3d712774e9657e ]
    
    The ASUS ExpertBook BM1503CDA (Ryzen 5 7535U, Barcelo-R) has an
    internal DMIC connected through the AMD ACP (Audio CoProcessor)
    but is missing from the DMI quirk table, so the acp6x machine
    driver probe returns -ENODEV and no DMIC capture device is created.
    
    Add the DMI entry so the internal microphone works out of the box.
    
    Signed-off-by: Azamat Almazbek uulu <almazbek1608@gmail.com>
    Reviewed-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com>
    Link: https://patch.msgid.link/20260221114813.5610-1-almazbek1608@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: amd: yc: Add DMI quirk for ASUS EXPERTBOOK PM1503CDA [+ + +]
Author: Zhang Heng <zhangheng@kylinos.cn>
Date:   Wed Mar 4 14:32:55 2026 +0800

    ASoC: amd: yc: Add DMI quirk for ASUS EXPERTBOOK PM1503CDA
    
    commit 325291b20f8a6f14b9c82edbf5d12e4e71f6adaa upstream.
    
    Add a DMI quirk for the ASUS EXPERTBOOK PM1503CDA fixing the
    issue where the internal microphone was not detected.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=221070
    Cc: stable@vger.kernel.org
    Signed-off-by: Zhang Heng <zhangheng@kylinos.cn>
    Link: https://patch.msgid.link/20260304063255.139331-1-zhangheng@kylinos.cn
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: codecs: rt1011: Use component to get the dapm context in spk_mode_put [+ + +]
Author: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Date:   Tue Mar 10 08:53:50 2026 +0200

    ASoC: codecs: rt1011: Use component to get the dapm context in spk_mode_put
    
    [ Upstream commit 30e4b2290cc2a8d1b9ddb9dcb9c981df1f2a7399 ]
    
    The correct helper to use in rt1011_recv_spk_mode_put() to retrieve the
    DAPM context is snd_soc_component_to_dapm(), from kcontrol we will
    receive NULL pointer.
    
    Closes: https://github.com/thesofproject/linux/issues/5691
    Fixes: 5b35bb517f27 ("ASoC: codecs: rt1011: convert to snd_soc_dapm_xxx()")
    Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Link: https://patch.msgid.link/20260310065350.18921-1-peter.ujfalusi@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: cs42l43: Report insert for exotic peripherals [+ + +]
Author: Charles Keepax <ckeepax@opensource.cirrus.com>
Date:   Mon Feb 23 09:36:16 2026 +0000

    ASoC: cs42l43: Report insert for exotic peripherals
    
    [ Upstream commit 6510e1324bcdc8caf21f6d17efe27604c48f0d64 ]
    
    For some exotic peripherals the type detect can return a reserved value
    of 0x4. This will currently return an error and not report anything to
    user-space, update this to report the insert normally.
    
    Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
    Link: https://patch.msgid.link/20260223093616.3800350-1-ckeepax@opensource.cirrus.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: detect empty DMI strings [+ + +]
Author: Casey Connolly <casey.connolly@linaro.org>
Date:   Fri Mar 6 18:47:07 2026 +0100

    ASoC: detect empty DMI strings
    
    [ Upstream commit a9683730e8b1d632674f81844ed03ddfbe4821c0 ]
    
    Some bootloaders like recent versions of U-Boot may install some DMI
    properties with empty values rather than not populate them. This manages
    to make its way through the validator and cleanup resulting in a rogue
    hyphen being appended to the card longname.
    
    Fixes: 4e01e5dbba96 ("ASoC: improve the DMI long card code in asoc-core")
    Signed-off-by: Casey Connolly <casey.connolly@linaro.org>
    Link: https://patch.msgid.link/20260306174707.283071-2-casey.connolly@linaro.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: qcom: qdsp6: Fix q6apm remove ordering during ADSP stop and start [+ + +]
Author: Ravi Hothi <ravi.hothi@oss.qualcomm.com>
Date:   Fri Feb 27 20:15:34 2026 +0530

    ASoC: qcom: qdsp6: Fix q6apm remove ordering during ADSP stop and start
    
    commit d6db827b430bdcca3976cebca7bd69cca03cde2c upstream.
    
    During ADSP stop and start, the kernel crashes due to the order in which
    ASoC components are removed.
    
    On ADSP stop, the q6apm-audio .remove callback unloads topology and removes
    PCM runtimes during ASoC teardown. This deletes the RTDs that contain the
    q6apm DAI components before their removal pass runs, leaving those
    components still linked to the card and causing crashes on the next rebind.
    
    Fix this by ensuring that all dependent (child) components are removed
    first, and the q6apm component is removed last.
    
    [   48.105720] Unable to handle kernel NULL pointer dereference at virtual address 00000000000000d0
    [   48.114763] Mem abort info:
    [   48.117650]   ESR = 0x0000000096000004
    [   48.121526]   EC = 0x25: DABT (current EL), IL = 32 bits
    [   48.127010]   SET = 0, FnV = 0
    [   48.130172]   EA = 0, S1PTW = 0
    [   48.133415]   FSC = 0x04: level 0 translation fault
    [   48.138446] Data abort info:
    [   48.141422]   ISV = 0, ISS = 0x00000004, ISS2 = 0x00000000
    [   48.147079]   CM = 0, WnR = 0, TnD = 0, TagAccess = 0
    [   48.152354]   GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
    [   48.157859] user pgtable: 4k pages, 48-bit VAs, pgdp=00000001173cf000
    [   48.164517] [00000000000000d0] pgd=0000000000000000, p4d=0000000000000000
    [   48.171530] Internal error: Oops: 0000000096000004 [#1]  SMP
    [   48.177348] Modules linked in: q6prm_clocks q6apm_lpass_dais q6apm_dai snd_q6dsp_common q6prm snd_q6apm 8021q garp mrp stp llc snd_soc_hdmi_codec apr pdr_interface phy_qcom_edp fastrpc qcom_pd_mapper rpmsg_ctrl qrtr_smd rpmsg_char qcom_pdr_msg qcom_iris v4l2_mem2mem videobuf2_dma_contig ath11k_pci msm ubwc_config at24 ath11k videobuf2_memops mac80211 ocmem videobuf2_v4l2 libarc4 drm_gpuvm mhi qrtr videodev drm_exec snd_soc_sc8280xp gpu_sched videobuf2_common nvmem_qcom_spmi_sdam snd_soc_qcom_sdw drm_dp_aux_bus qcom_q6v5_pas qcom_spmi_temp_alarm snd_soc_qcom_common rtc_pm8xxx qcom_pon drm_display_helper cec qcom_pil_info qcom_stats soundwire_bus drm_client_lib mc dispcc0_sa8775p videocc_sa8775p qcom_q6v5 camcc_sa8775p snd_soc_dmic phy_qcom_sgmii_eth snd_soc_max98357a i2c_qcom_geni snd_soc_core dwmac_qcom_ethqos llcc_qcom icc_bwmon qcom_sysmon snd_compress qcom_refgen_regulator coresight_stm stmmac_platform snd_pcm_dmaengine qcom_common coresight_tmc stmmac coresight_replicator qcom_glink_smem coresight_cti stm_core
    [   48.177444]  coresight_funnel snd_pcm ufs_qcom phy_qcom_qmp_usb gpi phy_qcom_snps_femto_v2 coresight phy_qcom_qmp_ufs qcom_wdt gpucc_sa8775p pcs_xpcs mdt_loader qcom_ice icc_osm_l3 qmi_helpers snd_timer snd soundcore display_connector qcom_rng nvmem_reboot_mode drm_kms_helper phy_qcom_qmp_pcie sha256 cfg80211 rfkill socinfo fuse drm backlight ipv6
    [   48.301059] CPU: 2 UID: 0 PID: 293 Comm: kworker/u32:2 Not tainted 6.19.0-rc6-dirty #10 PREEMPT
    [   48.310081] Hardware name: Qualcomm Technologies, Inc. Lemans EVK (DT)
    [   48.316782] Workqueue: pdr_notifier_wq pdr_notifier_work [pdr_interface]
    [   48.323672] pstate: 20400005 (nzCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    [   48.330825] pc : mutex_lock+0xc/0x54
    [   48.334514] lr : soc_dapm_shutdown_dapm+0x44/0x174 [snd_soc_core]
    [   48.340794] sp : ffff800084ddb7b0
    [   48.344207] x29: ffff800084ddb7b0 x28: ffff00009cd9cf30 x27: ffff00009cd9cc00
    [   48.351544] x26: ffff000099610190 x25: ffffa31d2f19c810 x24: ffffa31d2f185098
    [   48.358869] x23: ffff800084ddb7f8 x22: 0000000000000000 x21: 00000000000000d0
    [   48.366198] x20: ffff00009ba6c338 x19: ffff00009ba6c338 x18: 00000000ffffffff
    [   48.373528] x17: 000000040044ffff x16: ffffa31d4ae6dca8 x15: 072007740775076f
    [   48.380853] x14: 0765076d07690774 x13: 00313a323a656369 x12: 767265733a637673
    [   48.388182] x11: 00000000000003f9 x10: ffffa31d4c7dea98 x9 : 0000000000000001
    [   48.395519] x8 : ffff00009a2aadc0 x7 : 0000000000000003 x6 : 0000000000000000
    [   48.402854] x5 : 0000000000000000 x4 : 0000000000000028 x3 : ffff000ef397a698
    [   48.410180] x2 : ffff00009a2aadc0 x1 : 0000000000000000 x0 : 00000000000000d0
    [   48.417506] Call trace:
    [   48.420025]  mutex_lock+0xc/0x54 (P)
    [   48.423712]  snd_soc_dapm_shutdown+0x44/0xbc [snd_soc_core]
    [   48.429447]  soc_cleanup_card_resources+0x30/0x2c0 [snd_soc_core]
    [   48.435719]  snd_soc_bind_card+0x4dc/0xcc0 [snd_soc_core]
    [   48.441278]  snd_soc_add_component+0x27c/0x2c8 [snd_soc_core]
    [   48.447192]  snd_soc_register_component+0x9c/0xf4 [snd_soc_core]
    [   48.453371]  devm_snd_soc_register_component+0x64/0xc4 [snd_soc_core]
    [   48.459994]  apm_probe+0xb4/0x110 [snd_q6apm]
    [   48.464479]  apr_device_probe+0x24/0x40 [apr]
    [   48.468964]  really_probe+0xbc/0x298
    [   48.472651]  __driver_probe_device+0x78/0x12c
    [   48.477132]  driver_probe_device+0x40/0x160
    [   48.481435]  __device_attach_driver+0xb8/0x134
    [   48.486011]  bus_for_each_drv+0x80/0xdc
    [   48.489964]  __device_attach+0xa8/0x1b0
    [   48.493916]  device_initial_probe+0x50/0x54
    [   48.498219]  bus_probe_device+0x38/0xa0
    [   48.502170]  device_add+0x590/0x760
    [   48.505761]  device_register+0x20/0x30
    [   48.509623]  of_register_apr_devices+0x1d8/0x318 [apr]
    [   48.514905]  apr_pd_status+0x2c/0x54 [apr]
    [   48.519114]  pdr_notifier_work+0x8c/0xe0 [pdr_interface]
    [   48.524570]  process_one_work+0x150/0x294
    [   48.528692]  worker_thread+0x2d8/0x3d8
    [   48.532551]  kthread+0x130/0x204
    [   48.535874]  ret_from_fork+0x10/0x20
    [   48.539559] Code: d65f03c0 d5384102 d503201f d2800001 (c8e17c02)
    [   48.545823] ---[ end trace 0000000000000000 ]---
    
    Fixes: 5477518b8a0e ("ASoC: qdsp6: audioreach: add q6apm support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Ravi Hothi <ravi.hothi@oss.qualcomm.com>
    Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260227144534.278568-1-ravi.hothi@oss.qualcomm.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: simple-card-utils: fix graph_util_is_ports0() for DT overlays [+ + +]
Author: Sen Wang <sen@ti.com>
Date:   Sun Mar 8 23:21:09 2026 -0500

    ASoC: simple-card-utils: fix graph_util_is_ports0() for DT overlays
    
    [ Upstream commit 4185b95f8a42d92d68c49289b4644546b51e252b ]
    
    graph_util_is_ports0() identifies DPCM front-end (ports@0) vs back-end
    (ports@1) by calling of_get_child_by_name() to find the first "ports"
    child and comparing pointers. This relies on child iteration order
    matching DTS source order.
    
    When the DPCM topology comes from a DT overlay, __of_attach_node()
    inserts new children at the head of the sibling list, reversing the
    order. of_get_child_by_name() then returns ports@1 instead of ports@0,
    causing all front-end links to be classified as back-ends. The card
    registers with no PCM devices.
    
    Fix this by matching the unit address directly from the node name
    instead of relying on sibling order.
    
    Fixes: 92939252458f ("ASoC: simple-card-utils: add asoc_graph_is_ports0()")
    Signed-off-by: Sen Wang <sen@ti.com>
    Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
    Link: https://patch.msgid.link/20260309042109.2576612-1-sen@ti.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: soc-core: drop delayed_work_pending() check before flush [+ + +]
Author: matteo.cotifava <cotifavamatteo@gmail.com>
Date:   Mon Mar 9 22:54:11 2026 +0100

    ASoC: soc-core: drop delayed_work_pending() check before flush
    
    [ Upstream commit 3c99c9f0ed60582c1c9852b685d78d5d3a50de63 ]
    
    The delayed_work_pending() check before flush_delayed_work() in
    soc_free_pcm_runtime() is unnecessary and racy. flush_delayed_work()
    is safe to call unconditionally - it is a no-op when no work is
    pending. Remove the check.
    
    The original check was added by commit 9c9b65203492 ("ASoC: core:
    only flush inited work during free") but delayed_work_pending()
    followed by flush_delayed_work() has a time-of-check/time-of-use
    window where work can become pending between the two calls.
    
    Fixes: 9c9b65203492 ("ASoC: core: only flush inited work during free")
    Signed-off-by: Matteo Cotifava <cotifavamatteo@gmail.com>
    Link: https://patch.msgid.link/20260309215412.545628-2-cotifavamatteo@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: soc-core: flush delayed work before removing DAIs and widgets [+ + +]
Author: matteo.cotifava <cotifavamatteo@gmail.com>
Date:   Mon Mar 9 22:54:12 2026 +0100

    ASoC: soc-core: flush delayed work before removing DAIs and widgets
    
    [ Upstream commit 95bc5c225513fc3c4ce169563fb5e3929fbb938b ]
    
    When a sound card is unbound while a PCM stream is open, a
    use-after-free can occur in snd_soc_dapm_stream_event(), called from
    the close_delayed_work workqueue handler.
    
    During unbind, snd_soc_unbind_card() flushes delayed work and then
    calls soc_cleanup_card_resources(). Inside cleanup,
    snd_card_disconnect_sync() releases all PCM file descriptors, and
    the resulting PCM close path can call snd_soc_dapm_stream_stop()
    which schedules new delayed work with a pmdown_time timer delay.
    Since this happens after the flush in snd_soc_unbind_card(), the
    new work is not caught. soc_remove_link_components() then frees
    DAPM widgets before this work fires, leading to the use-after-free.
    
    The existing flush in soc_free_pcm_runtime() also cannot help as it
    runs after soc_remove_link_components() has already freed the widgets.
    
    Add a flush in soc_cleanup_card_resources() after
    snd_card_disconnect_sync() (after which no new PCM closes can
    schedule further delayed work) and before soc_remove_link_dais()
    and soc_remove_link_components() (which tear down the structures the
    delayed work accesses).
    
    Fixes: e894efef9ac7 ("ASoC: core: add support to card rebind")
    Signed-off-by: Matteo Cotifava <cotifavamatteo@gmail.com>
    Link: https://patch.msgid.link/20260309215412.545628-3-cotifavamatteo@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ata: libata-core: Add BRIDGE_OK quirk for QEMU drives [+ + +]
Author: Pedro Falcato <pfalcato@suse.de>
Date:   Thu Mar 5 14:53:12 2026 +0000

    ata: libata-core: Add BRIDGE_OK quirk for QEMU drives
    
    commit b92b0075ee1870f78f59ab1f7da7dbfdd718ad7a upstream.
    
    Currently, whenever you boot with a QEMU drive over an AHCI interface,
    you get:
    [    1.632121] ata1.00: applying bridge limits
    
    This happens due to the kernel not believing the given drive is SATA,
    since word 93 of IDENTIFY (ATA_ID_HW_CONFIG) is non-zero. The result is
    a pretty severe limit in max_hw_sectors_kb, which limits our IO sizes.
    
    QEMU has set word 93 erroneously for SATA drives but does not, in any
    way, emulate any of these real hardware details. There is no PATA
    drive and no SATA cable.
    
    As such, add a BRIDGE_OK quirk for QEMU HARDDISK. Special care is taken
    to limit this quirk to "2.5+", to allow for fixed future versions.
    
    This results in the max_hw_sectors being limited solely by the
    controller interface's limits. Which, for AHCI controllers, takes it
    from 128KB to 32767KB.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Pedro Falcato <pfalcato@suse.de>
    Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
    Reviewed-by: Hannes Reinecke <hare@suse.de>
    Signed-off-by: Niklas Cassel <cassel@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ata: libata-core: Disable LPM on ST1000DM010-2EP102 [+ + +]
Author: Maximilian Pezzullo <maximilianpezzullo@gmail.com>
Date:   Wed Mar 4 08:22:59 2026 +0100

    ata: libata-core: Disable LPM on ST1000DM010-2EP102
    
    commit b3b1d3ae1d87bc9398fb715c945968bf4c75a09a upstream.
    
    According to a user report, the ST1000DM010-2EP102 has problems with LPM,
    causing random system freezes. The drive belongs to the same BarraCuda
    family as the ST2000DM008-2FR102 which has the same issue.
    
    Cc: stable@vger.kernel.org
    Fixes: 7627a0edef54 ("ata: ahci: Drop low power policy board type")
    Reported-by: Filippo Baiamonte <filippo.ba03@bugzilla.kernel.org>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=221163
    Signed-off-by: Maximilian Pezzullo <maximilianpezzullo@gmail.com>
    Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
    Signed-off-by: Niklas Cassel <cassel@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
batman-adv: Avoid double-rtnl_lock ELP metric worker [+ + +]
Author: Sven Eckelmann <sven@narfation.org>
Date:   Mon Feb 16 11:20:29 2026 +0100

    batman-adv: Avoid double-rtnl_lock ELP metric worker
    
    commit cfc83a3c71517b59c1047db57da31e26a9dc2f33 upstream.
    
    batadv_v_elp_get_throughput() might be called when the RTNL lock is already
    held. This could be problematic when the work queue item is cancelled via
    cancel_delayed_work_sync() in batadv_v_elp_iface_disable(). In this case,
    an rtnl_lock() would cause a deadlock.
    
    To avoid this, rtnl_trylock() was used in this function to skip the
    retrieval of the ethtool information in case the RTNL lock was already
    held.
    
    But for cfg80211 interfaces, batadv_get_real_netdev() was called - which
    also uses rtnl_lock(). The approach for __ethtool_get_link_ksettings() must
    also be used instead and the lockless version __batadv_get_real_netdev()
    has to be called.
    
    Cc: stable@vger.kernel.org
    Fixes: 8c8ecc98f5c6 ("batman-adv: Drop unmanaged ELP metric worker")
    Reported-by: Christian Schmidbauer <github@grische.xyz>
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Tested-by: Sören Skaarup <freifunk_nordm4nn@gmx.de>
    Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
bnxt_en: Fix RSS table size check when changing ethtool channels [+ + +]
Author: Pavan Chebbi <pavan.chebbi@broadcom.com>
Date:   Fri Mar 6 14:58:54 2026 -0800

    bnxt_en: Fix RSS table size check when changing ethtool channels
    
    [ Upstream commit 0d9a60a0618d255530ca56072c5f39eb58e1ed4a ]
    
    When changing channels, the current check in bnxt_set_channels()
    is not checking for non-default RSS contexts when the RSS table size
    changes. The current check for IFF_RXFH_CONFIGURED is only sufficient
    for the default RSS context. Expand the check to include the presence
    of any non-default RSS contexts.
    
    Allowing such change will result in incorrect configuration of the
    context's RSS table when the table size changes.
    
    Fixes: b3d0083caf9a ("bnxt_en: Support RSS contexts in ethtool .{get|set}_rxfh()")
    Reported-by: Björn Töpel <bjorn@kernel.org>
    Link: https://lore.kernel.org/netdev/20260303181535.2671734-1-bjorn@kernel.org/
    Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
    Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
    Signed-off-by: Michael Chan <michael.chan@broadcom.com>
    Link: https://patch.msgid.link/20260306225854.3575672-1-michael.chan@broadcom.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bonding: do not set usable_slaves for broadcast mode [+ + +]
Author: Hangbin Liu <liuhangbin@gmail.com>
Date:   Wed Mar 4 15:13:53 2026 +0800

    bonding: do not set usable_slaves for broadcast mode
    
    [ Upstream commit 45fc134bcfadde456639c1b1e206e6918d69a553 ]
    
    After commit e0caeb24f538 ("net: bonding: update the slave array for broadcast mode"),
    broadcast mode will also set all_slaves and usable_slaves during
    bond_enslave(). But if we also set updelay, during enslave, the
    slave init state will be BOND_LINK_BACK. And later
    bond_update_slave_arr() will alloc usable_slaves but add nothing.
    This will cause bond_miimon_inspect() to have ignore_updelay
    always true. So the updelay will be always ignored. e.g.
    
    [    6.498368] bond0: (slave veth2): link status definitely down, disabling slave
    [    7.536371] bond0: (slave veth2): link status up, enabling it in 0 ms
    [    7.536402] bond0: (slave veth2): link status definitely up, 10000 Mbps full duplex
    
    To fix it, we can either always call bond_update_slave_arr() on every
    place when link changes. Or, let's just not set usable_slaves for
    broadcast mode.
    
    Fixes: e0caeb24f538 ("net: bonding: update the slave array for broadcast mode")
    Reported-by: Liang Li <liali@redhat.com>
    Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
    Link: https://patch.msgid.link/20260304-b4-bond_updelay-v1-1-f72eb2e454d0@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bonding: fix type confusion in bond_setup_by_slave() [+ + +]
Author: Jiayuan Chen <jiayuan.chen@shopee.com>
Date:   Fri Mar 6 10:15:07 2026 +0800

    bonding: fix type confusion in bond_setup_by_slave()
    
    [ Upstream commit 950803f7254721c1c15858fbbfae3deaaeeecb11 ]
    
    kernel BUG at net/core/skbuff.c:2306!
    Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI
    RIP: 0010:pskb_expand_head+0xa08/0xfe0 net/core/skbuff.c:2306
    RSP: 0018:ffffc90004aff760 EFLAGS: 00010293
    RAX: 0000000000000000 RBX: ffff88807e3c8780 RCX: ffffffff89593e0e
    RDX: ffff88807b7c4900 RSI: ffffffff89594747 RDI: ffff88807b7c4900
    RBP: 0000000000000820 R08: 0000000000000005 R09: 0000000000000000
    R10: 00000000961a63e0 R11: 0000000000000000 R12: ffff88807e3c8780
    R13: 00000000961a6560 R14: dffffc0000000000 R15: 00000000961a63e0
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007fe1a0ed8df0 CR3: 000000002d816000 CR4: 00000000003526f0
    Call Trace:
     <TASK>
     ipgre_header+0xdd/0x540 net/ipv4/ip_gre.c:900
     dev_hard_header include/linux/netdevice.h:3439 [inline]
     packet_snd net/packet/af_packet.c:3028 [inline]
     packet_sendmsg+0x3ae5/0x53c0 net/packet/af_packet.c:3108
     sock_sendmsg_nosec net/socket.c:727 [inline]
     __sock_sendmsg net/socket.c:742 [inline]
     ____sys_sendmsg+0xa54/0xc30 net/socket.c:2592
     ___sys_sendmsg+0x190/0x1e0 net/socket.c:2646
     __sys_sendmsg+0x170/0x220 net/socket.c:2678
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0x106/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7fe1a0e6c1a9
    
    When a non-Ethernet device (e.g. GRE tunnel) is enslaved to a bond,
    bond_setup_by_slave() directly copies the slave's header_ops to the
    bond device:
    
        bond_dev->header_ops = slave_dev->header_ops;
    
    This causes a type confusion when dev_hard_header() is later called
    on the bond device. Functions like ipgre_header(), ip6gre_header(),all use
    netdev_priv(dev) to access their device-specific private data. When
    called with the bond device, netdev_priv() returns the bond's private
    data (struct bonding) instead of the expected type (e.g. struct
    ip_tunnel), leading to garbage values being read and kernel crashes.
    
    Fix this by introducing bond_header_ops with wrapper functions that
    delegate to the active slave's header_ops using the slave's own
    device. This ensures netdev_priv() in the slave's header functions
    always receives the correct device.
    
    The fix is placed in the bonding driver rather than individual device
    drivers, as the root cause is bond blindly inheriting header_ops from
    the slave without considering that these callbacks expect a specific
    netdev_priv() layout.
    
    The type confusion can be observed by adding a printk in
    ipgre_header() and running the following commands:
    
        ip link add dummy0 type dummy
        ip addr add 10.0.0.1/24 dev dummy0
        ip link set dummy0 up
        ip link add gre1 type gre local 10.0.0.1
        ip link add bond1 type bond mode active-backup
        ip link set gre1 master bond1
        ip link set gre1 up
        ip link set bond1 up
        ip addr add fe80::1/64 dev bond1
    
    Fixes: 1284cd3a2b74 ("bonding: two small fixes for IPoIB support")
    Suggested-by: Jay Vosburgh <jv@jvosburgh.net>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Jiayuan Chen <jiayuan.chen@shopee.com>
    Link: https://patch.msgid.link/20260306021508.222062-1-jiayuan.chen@linux.dev
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bonding: handle BOND_LINK_FAIL, BOND_LINK_BACK as valid link states [+ + +]
Author: Hangbin Liu <liuhangbin@gmail.com>
Date:   Wed Mar 4 15:13:54 2026 +0800

    bonding: handle BOND_LINK_FAIL, BOND_LINK_BACK as valid link states
    
    [ Upstream commit 3348be7978f450ede0c308a4e8416ac716cf1015 ]
    
    Before the fixed commit, we check slave->new_link during commit
    state, which values are only BOND_LINK_{NOCHANGE, UP, DOWN}. After
    the commit, we start using slave->link_new_state, which state also could
    be BOND_LINK_{FAIL, BACK}.
    
    For example, when we set updelay/downdelay, after a failover,
    the slave->link_new_state could be set to BOND_LINK_{FAIL, BACK} in
    bond_miimon_inspect(). And later in bond_miimon_commit(), it will treat
    it as invalid and print an error, which would cause confusion for users.
    
    [  106.440254] bond0: (slave veth2): link status down for interface, disabling it in 200 ms
    [  106.440265] bond0: (slave veth2): invalid new link 1 on slave
    [  106.648276] bond0: (slave veth2): link status definitely down, disabling slave
    [  107.480271] bond0: (slave veth2): link status up, enabling it in 200 ms
    [  107.480288] bond0: (slave veth2): invalid new link 3 on slave
    [  107.688302] bond0: (slave veth2): link status definitely up, 10000 Mbps full duplex
    
    Let's handle BOND_LINK_{FAIL, BACK} as valid link states.
    
    Fixes: 1899bb325149 ("bonding: fix state transition issue in link monitoring")
    Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
    Link: https://patch.msgid.link/20260304-b4-bond_updelay-v1-2-f72eb2e454d0@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf: drop kthread_exit from noreturn_deny [+ + +]
Author: Christian Loehle <christian.loehle@arm.com>
Date:   Fri Mar 6 10:49:18 2026 +0000

    bpf: drop kthread_exit from noreturn_deny
    
    commit 7fe44c4388146bdbb3c5932d81a26d9fa0fd3ec9 upstream.
    
    kthread_exit became a macro to do_exit in commit 28aaa9c39945
    ("kthread: consolidate kthread exit paths to prevent use-after-free"),
    so there is no kthread_exit function BTF ID to resolve. Remove it from
    noreturn_deny to avoid resolve_btfids unresolved symbol warnings.
    
    Signed-off-by: Christian Loehle <christian.loehle@arm.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

bpf: Fix kprobe_multi cookies access in show_fdinfo callback [+ + +]
Author: Jiri Olsa <jolsa@kernel.org>
Date:   Wed Feb 25 12:12:49 2026 +0100

    bpf: Fix kprobe_multi cookies access in show_fdinfo callback
    
    commit ad6fface76da42721c15e8fb281570aaa44a2c01 upstream.
    
    We don't check if cookies are available on the kprobe_multi link
    before accessing them in show_fdinfo callback, we should.
    
    Cc: stable@vger.kernel.org
    Fixes: da7e9c0a7fbc ("bpf: Add show_fdinfo for kprobe_multi")
    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    Link: https://lore.kernel.org/r/20260225111249.186230-1-jolsa@kernel.org
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
btrfs: abort transaction on failure to update root in the received subvol ioctl [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Fri Feb 27 00:02:33 2026 +0000

    btrfs: abort transaction on failure to update root in the received subvol ioctl
    
    commit 0f475ee0ebce5c9492b260027cd95270191675fa upstream.
    
    If we failed to update the root we don't abort the transaction, which is
    wrong since we already used the transaction to remove an item from the
    uuid tree.
    
    Fixes: dd5f9615fc5c ("Btrfs: maintain subvolume items in the UUID tree")
    CC: stable@vger.kernel.org # 3.12+
    Reviewed-by: Anand Jain <asj@kernel.org>
    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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: add missing RCU unlock in error path in try_release_subpage_extent_buffer() [+ + +]
Author: Bart Van Assche <bvanassche@acm.org>
Date:   Wed Feb 25 11:59:58 2026 -0800

    btrfs: add missing RCU unlock in error path in try_release_subpage_extent_buffer()
    
    commit b2840e33127ce0eea880504b7f133e780f567a9b upstream.
    
    Call rcu_read_lock() before exiting the loop in
    try_release_subpage_extent_buffer() because there is a rcu_read_unlock()
    call past the loop.
    
    This has been detected by the Clang thread-safety analyzer.
    
    Fixes: ad580dfa388f ("btrfs: fix subpage deadlock in try_release_subpage_extent_buffer()")
    CC: stable@vger.kernel.org # 6.18+
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: Boris Burkov <boris@bur.io>
    Signed-off-by: Bart Van Assche <bvanassche@acm.org>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: fix chunk map leak in btrfs_map_block() after btrfs_chunk_map_num_copies() [+ + +]
Author: Mark Harmstone <mark@harmstone.com>
Date:   Fri Feb 20 12:53:17 2026 +0000

    btrfs: fix chunk map leak in btrfs_map_block() after btrfs_chunk_map_num_copies()
    
    commit f15fb3d41543244d1179f423da4a4832a55bc050 upstream.
    
    Fix a chunk map leak in btrfs_map_block(): if we return early with -EINVAL,
    we're not freeing the chunk map that we've just looked up.
    
    Fixes: 0ae653fbec2b ("btrfs: reduce chunk_map lookups in btrfs_map_block()")
    CC: stable@vger.kernel.org # 6.12+
    Reviewed-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: Mark Harmstone <mark@harmstone.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: fix transaction abort on file creation due to name hash collision [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Thu Feb 26 11:05:43 2026 +0000

    btrfs: fix transaction abort on file creation due to name hash collision
    
    commit 2d1ababdedd4ba38867c2500eb7f95af5ddeeef7 upstream.
    
    If we attempt to create several files with names that result in the same
    hash, we have to pack them in same dir item and that has a limit inherent
    to the leaf size. However if we reach that limit, we trigger a transaction
    abort and turns the filesystem into RO mode. This allows for a malicious
    user to disrupt a system, without the need to have administration
    privileges/capabilities.
    
    Reproducer:
    
      $ cat exploit-hash-collisions.sh
      #!/bin/bash
    
      DEV=/dev/sdi
      MNT=/mnt/sdi
    
      # Use smallest node size to make the test faster and require fewer file
      # names that result in hash collision.
      mkfs.btrfs -f --nodesize 4K $DEV
      mount $DEV $MNT
    
      # List of names that result in the same crc32c hash for btrfs.
      declare -a names=(
       'foobar'
       '%a8tYkxfGMLWRGr55QSeQc4PBNH9PCLIvR6jZnkDtUUru1t@RouaUe_L:@xGkbO3nCwvLNYeK9vhE628gss:T$yZjZ5l-Nbd6CbC$M=hqE-ujhJICXyIxBvYrIU9-TDC'
       'AQci3EUB%shMsg-N%frgU:02ByLs=IPJU0OpgiWit5nexSyxZDncY6WB:=zKZuk5Zy0DD$Ua78%MelgBuMqaHGyKsJUFf9s=UW80PcJmKctb46KveLSiUtNmqrMiL9-Y0I_l5Fnam04CGIg=8@U:Z'
       'CvVqJpJzueKcuA$wqwePfyu7VxuWNN3ho$p0zi2H8QFYK$7YlEqOhhb%:hHgjhIjW5vnqWHKNP4'
       'ET:vk@rFU4tsvMB0$C_p=xQHaYZjvoF%-BTc%wkFW8yaDAPcCYoR%x$FH5O:'
       'HwTon%v7SGSP4FE08jBwwiu5aot2CFKXHTeEAa@38fUcNGOWvE@Mz6WBeDH_VooaZ6AgsXPkVGwy9l@@ZbNXabUU9csiWrrOp0MWUdfi$EZ3w9GkIqtz7I_eOsByOkBOO'
       'Ij%2VlFGXSuPvxJGf5UWy6O@1svxGha%b@=%wjkq:CIgE6u7eJOjmQY5qTtxE2Rjbis9@us'
       'KBkjG5%9R8K9sOG8UTnAYjxLNAvBmvV5vz3IiZaPmKuLYO03-6asI9lJ_j4@6Xo$KZicaLWJ3Pv8XEwVeUPMwbHYWwbx0pYvNlGMO9F:ZhHAwyctnGy%_eujl%WPd4U2BI7qooOSr85J-C2V$LfY'
       'NcRfDfuUQ2=zP8K3CCF5dFcpfiOm6mwenShsAb_F%n6GAGC7fT2JFFn:c35X-3aYwoq7jNX5$ZJ6hI3wnZs$7KgGi7wjulffhHNUxAT0fRRLF39vJ@NvaEMxsMO'
       'Oj42AQAEzRoTxa5OuSKIr=A_lwGMy132v4g3Pdq1GvUG9874YseIFQ6QU'
       'Ono7avN5GjC:_6dBJ_'
       'WHmN2gnmaN-9dVDy4aWo:yNGFzz8qsJyJhWEWcud7$QzN2D9R0efIWWEdu5kwWr73NZm4=@CoCDxrrZnRITr-kGtU_cfW2:%2_am'
       'WiFnuTEhAG9FEC6zopQmj-A-$LDQ0T3WULz%ox3UZAPybSV6v1Z$b4L_XBi4M4BMBtJZpz93r9xafpB77r:lbwvitWRyo$odnAUYlYMmU4RvgnNd--e=I5hiEjGLETTtaScWlQp8mYsBovZwM2k'
       'XKyH=OsOAF3p%uziGF_ZVr$ivrvhVgD@1u%5RtrV-gl_vqAwHkK@x7YwlxX3qT6WKKQ%PR56NrUBU2dOAOAdzr2=5nJuKPM-T-$ZpQfCL7phxQbUcb:BZOTPaFExc-qK-gDRCDW2'
       'd3uUR6OFEwZr%ns1XH_@tbxA@cCPmbBRLdyh7p6V45H$P2$F%w0RqrD3M0g8aGvWpoTFMiBdOTJXjD:JF7=h9a_43xBywYAP%r$SPZi%zDg%ql-KvkdUCtF9OLaQlxmd'
       'ePTpbnit%hyNm@WELlpKzNZYOzOTf8EQ$sEfkMy1VOfIUu3coyvIr13-Y7Sv5v-Ivax2Go_GQRFMU1b3362nktT9WOJf3SpT%z8sZmM3gvYQBDgmKI%%RM-G7hyrhgYflOw%z::ZRcv5O:lDCFm'
       'evqk743Y@dvZAiG5J05L_ROFV@$2%rVWJ2%3nxV72-W7$e$-SK3tuSHA2mBt$qloC5jwNx33GmQUjD%akhBPu=VJ5g$xhlZiaFtTrjeeM5x7dt4cHpX0cZkmfImndYzGmvwQG:$euFYmXn$_2rA9mKZ'
       'gkgUtnihWXsZQTEkrMAWIxir09k3t7jk_IK25t1:cy1XWN0GGqC%FrySdcmU7M8MuPO_ppkLw3=Dfr0UuBAL4%GFk2$Ma10V1jDRGJje%Xx9EV2ERaWKtjpwiZwh0gCSJsj5UL7CR8RtW5opCVFKGGy8Cky'
       'hNgsG_8lNRik3PvphqPm0yEH3P%%fYG:kQLY=6O-61Wa6nrV_WVGR6TLB09vHOv%g4VQRP8Gzx7VXUY1qvZyS'
       'isA7JVzN12xCxVPJZ_qoLm-pTBuhjjHMvV7o=F:EaClfYNyFGlsfw-Kf%uxdqW-kwk1sPl2vhbjyHU1A6$hz'
       'kiJ_fgcdZFDiOptjgH5PN9-PSyLO4fbk_:u5_2tz35lV_iXiJ6cx7pwjTtKy-XGaQ5IefmpJ4N_ZqGsqCsKuqOOBgf9LkUdffHet@Wu'
       'lvwtxyhE9:%Q3UxeHiViUyNzJsy:fm38pg_b6s25JvdhOAT=1s0$pG25x=LZ2rlHTszj=gN6M4zHZYr_qrB49i=pA--@WqWLIuX7o1S_SfS@2FSiUZN'
       'rC24cw3UBDZ=5qJBUMs9e$=S4Y94ni%Z8639vnrGp=0Hv4z3dNFL0fBLmQ40=EYIY:Z=SLc@QLMSt2zsss2ZXrP7j4='
       'uwGl2s-fFrf@GqS=DQqq2I0LJSsOmM%xzTjS:lzXguE3wChdMoHYtLRKPvfaPOZF2fER@j53evbKa7R%A7r4%YEkD=kicJe@SFiGtXHbKe4gCgPAYbnVn'
       'UG37U6KKua2bgc:IHzRs7BnB6FD:2Mt5Cc5NdlsW%$1tyvnfz7S27FvNkroXwAW:mBZLA1@qa9WnDbHCDmQmfPMC9z-Eq6QT0jhhPpqyymaD:R02ghwYo%yx7SAaaq-:x33LYpei$5g8DMl3C'
       'y2vjek0FE1PDJC0qpfnN:x8k2wCFZ9xiUF2ege=JnP98R%wxjKkdfEiLWvQzmnW'
       '8-HCSgH5B%K7P8_jaVtQhBXpBk:pE-$P7ts58U0J@iR9YZntMPl7j$s62yAJO@_9eanFPS54b=UTw$94C-t=HLxT8n6o9P=QnIxq-f1=Ne2dvhe6WbjEQtc'
       'YPPh:IFt2mtR6XWSmjHptXL_hbSYu8bMw-JP8@PNyaFkdNFsk$M=xfL6LDKCDM-mSyGA_2MBwZ8Dr4=R1D%7-mCaaKGxb990jzaagRktDTyp'
       '9hD2ApKa_t_7x-a@GCG28kY:7$M@5udI1myQ$x5udtggvagmCQcq9QXWRC5hoB0o-_zHQUqZI5rMcz_kbMgvN5jr63LeYA4Cj-c6F5Ugmx6DgVf@2Jqm%MafecpgooqreJ53P-QTS'
      )
    
      # Now create files with all those names in the same parent directory.
      # It should not fail since a 4K leaf has enough space for them.
      for name in "${names[@]}"; do
           touch $MNT/$name
      done
    
      # Now add one more file name that causes a crc32c hash collision.
      # This should fail, but it should not turn the filesystem into RO mode
      # (which could be exploited by malicious users) due to a transaction
      # abort.
      touch $MNT/'W6tIm-VK2@BGC@IBfcgg6j_p:pxp_QUqtWpGD5Ok_GmijKOJJt'
    
      # Check that we are able to create another file, with a name that does not cause
      # a crc32c hash collision.
      echo -n "hello world" > $MNT/baz
    
      # Unmount and mount again, verify file baz exists and with the right content.
      umount $MNT
      mount $DEV $MNT
      echo "File baz content: $(cat $MNT/baz)"
    
      umount $MNT
    
    When running the reproducer:
    
      $ ./exploit-hash-collisions.sh
      (...)
      touch: cannot touch '/mnt/sdi/W6tIm-VK2@BGC@IBfcgg6j_p:pxp_QUqtWpGD5Ok_GmijKOJJt': Value too large for defined data type
      ./exploit-hash-collisions.sh: line 57: /mnt/sdi/baz: Read-only file system
      cat: /mnt/sdi/baz: No such file or directory
      File baz content:
    
    And the transaction abort stack trace in dmesg/syslog:
    
      $ dmesg
      (...)
      [758240.509761] ------------[ cut here ]------------
      [758240.510668] BTRFS: Transaction aborted (error -75)
      [758240.511577] WARNING: fs/btrfs/inode.c:6854 at btrfs_create_new_inode+0x805/0xb50 [btrfs], CPU#6: touch/888644
      [758240.513513] Modules linked in: btrfs dm_zero (...)
      [758240.523221] CPU: 6 UID: 0 PID: 888644 Comm: touch Tainted: G        W           6.19.0-rc8-btrfs-next-225+ #1 PREEMPT(full)
      [758240.524621] Tainted: [W]=WARN
      [758240.525037] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.2-0-gea1b7a073390-prebuilt.qemu.org 04/01/2014
      [758240.526331] RIP: 0010:btrfs_create_new_inode+0x80b/0xb50 [btrfs]
      [758240.527093] Code: 0f 82 cf (...)
      [758240.529211] RSP: 0018:ffffce64418fbb48 EFLAGS: 00010292
      [758240.529935] RAX: 00000000ffffffd3 RBX: 0000000000000000 RCX: 00000000ffffffb5
      [758240.531040] RDX: 0000000d04f33e06 RSI: 00000000ffffffb5 RDI: ffffffffc0919dd0
      [758240.531920] RBP: ffffce64418fbc10 R08: 0000000000000000 R09: 00000000ffffffb5
      [758240.532928] R10: 0000000000000000 R11: ffff8e52c0000000 R12: ffff8e53eee7d0f0
      [758240.533818] R13: ffff8e57f70932a0 R14: ffff8e5417629568 R15: 0000000000000000
      [758240.534664] FS:  00007f1959a2a740(0000) GS:ffff8e5b27cae000(0000) knlGS:0000000000000000
      [758240.535821] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [758240.536644] CR2: 00007f1959b10ce0 CR3: 000000012a2cc005 CR4: 0000000000370ef0
      [758240.537517] Call Trace:
      [758240.537828]  <TASK>
      [758240.538099]  btrfs_create_common+0xbf/0x140 [btrfs]
      [758240.538760]  path_openat+0x111a/0x15b0
      [758240.539252]  do_filp_open+0xc2/0x170
      [758240.539699]  ? preempt_count_add+0x47/0xa0
      [758240.540200]  ? __virt_addr_valid+0xe4/0x1a0
      [758240.540800]  ? __check_object_size+0x1b3/0x230
      [758240.541661]  ? alloc_fd+0x118/0x180
      [758240.542315]  do_sys_openat2+0x70/0xd0
      [758240.543012]  __x64_sys_openat+0x50/0xa0
      [758240.543723]  do_syscall_64+0x50/0xf20
      [758240.544462]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
      [758240.545397] RIP: 0033:0x7f1959abc687
      [758240.546019] Code: 48 89 fa (...)
      [758240.548522] RSP: 002b:00007ffe16ff8690 EFLAGS: 00000202 ORIG_RAX: 0000000000000101
      [758240.566278] RAX: ffffffffffffffda RBX: 00007f1959a2a740 RCX: 00007f1959abc687
      [758240.567068] RDX: 0000000000000941 RSI: 00007ffe16ffa333 RDI: ffffffffffffff9c
      [758240.567860] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
      [758240.568707] R10: 00000000000001b6 R11: 0000000000000202 R12: 0000561eec7c4b90
      [758240.569712] R13: 0000561eec7c311f R14: 00007ffe16ffa333 R15: 0000000000000000
      [758240.570758]  </TASK>
      [758240.571040] ---[ end trace 0000000000000000 ]---
      [758240.571681] BTRFS: error (device sdi state A) in btrfs_create_new_inode:6854: errno=-75 unknown
      [758240.572899] BTRFS info (device sdi state EA): forced readonly
    
    Fix this by checking for hash collision, and if the adding a new name is
    possible, early in btrfs_create_new_inode() before we do any tree updates,
    so that we don't need to abort the transaction if we cannot add the new
    name due to the leaf size limit.
    
    A test case for fstests will be sent soon.
    
    Fixes: caae78e03234 ("btrfs: move common inode creation code into btrfs_create_new_inode()")
    CC: stable@vger.kernel.org # 6.1+
    Reviewed-by: Boris Burkov <boris@bur.io>
    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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: fix transaction abort on set received ioctl due to item overflow [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Thu Feb 26 23:41:07 2026 +0000

    btrfs: fix transaction abort on set received ioctl due to item overflow
    
    commit 87f2c46003fce4d739138aab4af1942b1afdadac upstream.
    
    If the set received ioctl fails due to an item overflow when attempting to
    add the BTRFS_UUID_KEY_RECEIVED_SUBVOL we have to abort the transaction
    since we did some metadata updates before.
    
    This means that if a user calls this ioctl with the same received UUID
    field for a lot of subvolumes, we will hit the overflow, trigger the
    transaction abort and turn the filesystem into RO mode. A malicious user
    could exploit this, and this ioctl does not even requires that a user
    has admin privileges (CAP_SYS_ADMIN), only that he/she owns the subvolume.
    
    Fix this by doing an early check for item overflow before starting a
    transaction. This is also race safe because we are holding the subvol_sem
    semaphore in exclusive (write) mode.
    
    A test case for fstests will follow soon.
    
    Fixes: dd5f9615fc5c ("Btrfs: maintain subvolume items in the UUID tree")
    CC: stable@vger.kernel.org # 3.12+
    Reviewed-by: Anand Jain <asj@kernel.org>
    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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: fix transaction abort when snapshotting received subvolumes [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Mon Feb 23 16:19:31 2026 +0000

    btrfs: fix transaction abort when snapshotting received subvolumes
    
    commit e1b18b959025e6b5dbad668f391f65d34b39595a upstream.
    
    Currently a user can trigger a transaction abort by snapshotting a
    previously received snapshot a bunch of times until we reach a
    BTRFS_UUID_KEY_RECEIVED_SUBVOL item overflow (the maximum item size we
    can store in a leaf). This is very likely not common in practice, but
    if it happens, it turns the filesystem into RO mode. The snapshot, send
    and set_received_subvol and subvol_setflags (used by receive) don't
    require CAP_SYS_ADMIN, just inode_owner_or_capable(). A malicious user
    could use this to turn a filesystem into RO mode and disrupt a system.
    
    Reproducer script:
    
      $ cat test.sh
      #!/bin/bash
    
      DEV=/dev/sdi
      MNT=/mnt/sdi
    
      # Use smallest node size to make the test faster.
      mkfs.btrfs -f --nodesize 4K $DEV
      mount $DEV $MNT
    
      # Create a subvolume and set it to RO so that it can be used for send.
      btrfs subvolume create $MNT/sv
      touch $MNT/sv/foo
      btrfs property set $MNT/sv ro true
    
      # Send and receive the subvolume into snaps/sv.
      mkdir $MNT/snaps
      btrfs send $MNT/sv | btrfs receive $MNT/snaps
    
      # Now snapshot the received subvolume, which has a received_uuid, a
      # lot of times to trigger the leaf overflow.
      total=500
      for ((i = 1; i <= $total; i++)); do
          echo -ne "\rCreating snapshot $i/$total"
          btrfs subvolume snapshot -r $MNT/snaps/sv $MNT/snaps/sv_$i > /dev/null
      done
      echo
    
      umount $MNT
    
    When running the test:
    
      $ ./test.sh
      (...)
      Create subvolume '/mnt/sdi/sv'
      At subvol /mnt/sdi/sv
      At subvol sv
      Creating snapshot 496/500ERROR: Could not create subvolume: Value too large for defined data type
      Creating snapshot 497/500ERROR: Could not create subvolume: Read-only file system
      Creating snapshot 498/500ERROR: Could not create subvolume: Read-only file system
      Creating snapshot 499/500ERROR: Could not create subvolume: Read-only file system
      Creating snapshot 500/500ERROR: Could not create subvolume: Read-only file system
    
    And in dmesg/syslog:
    
      $ dmesg
      (...)
      [251067.627338] BTRFS warning (device sdi): insert uuid item failed -75 (0x4628b21c4ac8d898, 0x2598bee2b1515c91) type 252!
      [251067.629212] ------------[ cut here ]------------
      [251067.630033] BTRFS: Transaction aborted (error -75)
      [251067.630871] WARNING: fs/btrfs/transaction.c:1907 at create_pending_snapshot.cold+0x52/0x465 [btrfs], CPU#10: btrfs/615235
      [251067.632851] Modules linked in: btrfs dm_zero (...)
      [251067.644071] CPU: 10 UID: 0 PID: 615235 Comm: btrfs Tainted: G        W           6.19.0-rc8-btrfs-next-225+ #1 PREEMPT(full)
      [251067.646165] Tainted: [W]=WARN
      [251067.646733] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.2-0-gea1b7a073390-prebuilt.qemu.org 04/01/2014
      [251067.648735] RIP: 0010:create_pending_snapshot.cold+0x55/0x465 [btrfs]
      [251067.649984] Code: f0 48 0f (...)
      [251067.653313] RSP: 0018:ffffce644908fae8 EFLAGS: 00010292
      [251067.653987] RAX: 00000000ffffff01 RBX: ffff8e5639e63a80 RCX: 00000000ffffffd3
      [251067.655042] RDX: ffff8e53faa76b00 RSI: 00000000ffffffb5 RDI: ffffffffc0919750
      [251067.656077] RBP: ffffce644908fbd8 R08: 0000000000000000 R09: ffffce644908f820
      [251067.657068] R10: ffff8e5adc1fffa8 R11: 0000000000000003 R12: ffff8e53c0431bd0
      [251067.658050] R13: ffff8e5414593600 R14: ffff8e55efafd000 R15: 00000000ffffffb5
      [251067.659019] FS:  00007f2a4944b3c0(0000) GS:ffff8e5b27dae000(0000) knlGS:0000000000000000
      [251067.660115] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [251067.660943] CR2: 00007ffc5aa57898 CR3: 00000005813a2003 CR4: 0000000000370ef0
      [251067.661972] Call Trace:
      [251067.662292]  <TASK>
      [251067.662653]  create_pending_snapshots+0x97/0xc0 [btrfs]
      [251067.663413]  btrfs_commit_transaction+0x26e/0xc00 [btrfs]
      [251067.664257]  ? btrfs_qgroup_convert_reserved_meta+0x35/0x390 [btrfs]
      [251067.665238]  ? _raw_spin_unlock+0x15/0x30
      [251067.665837]  ? record_root_in_trans+0xa2/0xd0 [btrfs]
      [251067.666531]  btrfs_mksubvol+0x330/0x580 [btrfs]
      [251067.667145]  btrfs_mksnapshot+0x74/0xa0 [btrfs]
      [251067.667827]  __btrfs_ioctl_snap_create+0x194/0x1d0 [btrfs]
      [251067.668595]  btrfs_ioctl_snap_create_v2+0x107/0x130 [btrfs]
      [251067.669479]  btrfs_ioctl+0x1580/0x2690 [btrfs]
      [251067.670093]  ? count_memcg_events+0x6d/0x180
      [251067.670849]  ? handle_mm_fault+0x1a0/0x2a0
      [251067.671652]  __x64_sys_ioctl+0x92/0xe0
      [251067.672406]  do_syscall_64+0x50/0xf20
      [251067.673129]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
      [251067.674096] RIP: 0033:0x7f2a495648db
      [251067.674812] Code: 00 48 89 (...)
      [251067.678227] RSP: 002b:00007ffc5aa57840 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
      [251067.679691] RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f2a495648db
      [251067.681145] RDX: 00007ffc5aa588b0 RSI: 0000000050009417 RDI: 0000000000000004
      [251067.682511] RBP: 0000000000000002 R08: 0000000000000000 R09: 0000000000000000
      [251067.683842] R10: 000000000000000a R11: 0000000000000246 R12: 00007ffc5aa59910
      [251067.685176] R13: 00007ffc5aa588b0 R14: 0000000000000004 R15: 0000000000000006
      [251067.686524]  </TASK>
      [251067.686972] ---[ end trace 0000000000000000 ]---
      [251067.687890] BTRFS: error (device sdi state A) in create_pending_snapshot:1907: errno=-75 unknown
      [251067.689049] BTRFS info (device sdi state EA): forced readonly
      [251067.689054] BTRFS warning (device sdi state EA): Skipping commit of aborted transaction.
      [251067.690119] BTRFS: error (device sdi state EA) in cleanup_transaction:2043: errno=-75 unknown
      [251067.702028] BTRFS info (device sdi state EA): last unmount of filesystem 46dc3975-30a2-4a69-a18f-418b859cccda
    
    Fix this by ignoring -EOVERFLOW errors from btrfs_uuid_tree_add() in the
    snapshot creation code when attempting to add the
    BTRFS_UUID_KEY_RECEIVED_SUBVOL item. This is OK because it's not critical
    and we are still able to delete the snapshot, as snapshot/subvolume
    deletion ignores if a BTRFS_UUID_KEY_RECEIVED_SUBVOL is missing (see
    inode.c:btrfs_delete_subvolume()). As for send/receive, we can still do
    send/receive operations since it always peeks the first root ID in the
    existing BTRFS_UUID_KEY_RECEIVED_SUBVOL (it could peek any since all
    snapshots have the same content), and even if the key is missing, it
    falls back to searching by BTRFS_UUID_KEY_SUBVOL key.
    
    A test case for fstests will be sent soon.
    
    Fixes: dd5f9615fc5c ("Btrfs: maintain subvolume items in the UUID tree")
    CC: stable@vger.kernel.org # 3.12+
    Reviewed-by: Boris Burkov <boris@bur.io>
    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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: hold space_info->lock when clearing periodic reclaim ready [+ + +]
Author: Sun YangKai <sunk67188@gmail.com>
Date:   Mon Feb 9 20:53:39 2026 +0800

    btrfs: hold space_info->lock when clearing periodic reclaim ready
    
    [ Upstream commit b8883b61f2fc50dcf22938cbed40fec05020552f ]
    
    btrfs_set_periodic_reclaim_ready() requires space_info->lock to be held,
    as enforced by lockdep_assert_held(). However, btrfs_reclaim_sweep() was
    calling it after do_reclaim_sweep() returns, at which point
    space_info->lock is no longer held.
    
    Fix this by explicitly acquiring space_info->lock before clearing the
    periodic reclaim ready flag in btrfs_reclaim_sweep().
    
    Reported-by: Chris Mason <clm@meta.com>
    Link: https://lore.kernel.org/linux-btrfs/20260208182556.891815-1-clm@meta.com/
    Fixes: 19eff93dc738 ("btrfs: fix periodic reclaim condition")
    Reviewed-by: Boris Burkov <boris@bur.io>
    Signed-off-by: Sun YangKai <sunk67188@gmail.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
can: dev: keep the max bitrate error at 5% [+ + +]
Author: Haibo Chen <haibo.chen@nxp.com>
Date:   Fri Mar 6 17:04:48 2026 +0800

    can: dev: keep the max bitrate error at 5%
    
    commit 1eea46908c57abb7109b1fce024f366ae6c69c4f upstream.
    
    Commit b360a13d44db ("can: dev: print bitrate error with two decimal
    digits") changed calculation of the bit rate error from on-tenth of a
    percent to on-hundredth of a percent, but forgot to adjust the scale of the
    CAN_CALC_MAX_ERROR constant.
    
    Keeping the existing logic unchanged: Only when the bitrate error exceeds
    5% should an error be returned. Otherwise, simply output a warning log.
    
    Fixes: b360a13d44db ("can: dev: print bitrate error with two decimal digits")
    Signed-off-by: Haibo Chen <haibo.chen@nxp.com>
    Link: https://patch.msgid.link/20260306-can-fix-v1-1-ac526cec6777@nxp.com
    Cc: stable@kernel.org
    [mkl: improve commit message]
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: gs_usb: gs_can_open(): always configure bitrates before starting device [+ + +]
Author: Marc Kleine-Budde <mkl@pengutronix.de>
Date:   Thu Feb 19 13:57:34 2026 +0100

    can: gs_usb: gs_can_open(): always configure bitrates before starting device
    
    commit 2df6162785f31f1bbb598cfc3b08e4efc88f80b6 upstream.
    
    So far the driver populated the struct can_priv::do_set_bittiming() and
    struct can_priv::fd::do_set_data_bittiming() callbacks.
    
    Before bringing up the interface, user space has to configure the bitrates.
    With these callbacks the configuration is directly forwarded into the CAN
    hardware. Then the interface can be brought up.
    
    An ifdown-ifup cycle (without changing the bit rates) doesn't re-configure
    the bitrates in the CAN hardware. This leads to a problem with the
    CANable-2.5 [1] firmware, which resets the configured bit rates during
    ifdown.
    
    To fix the problem remove both bit timing callbacks and always configure
    the bitrates in the struct net_device_ops::ndo_open() callback.
    
    [1] https://github.com/Elmue/CANable-2.5-firmware-Slcan-and-Candlelight
    
    Cc: stable@vger.kernel.org
    Fixes: d08e973a77d1 ("can: gs_usb: Added support for the GS_USB CAN devices")
    Link: https://patch.msgid.link/20260219-gs_usb-always-configure-bitrates-v2-1-671f8ba5b0a5@pengutronix.de
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: hi311x: hi3110_open(): add check for hi3110_power_enable() return value [+ + +]
Author: Wenyuan Li <2063309626@qq.com>
Date:   Tue Mar 10 13:08:44 2026 +0800

    can: hi311x: hi3110_open(): add check for hi3110_power_enable() return value
    
    [ Upstream commit 47bba09b14fa21712398febf36cb14fd4fc3bded ]
    
    In hi3110_open(), the return value of hi3110_power_enable() is not checked.
    If power enable fails, the device may not function correctly, while the
    driver still returns success.
    
    Add a check for the return value and propagate the error accordingly.
    
    Signed-off-by: Wenyuan Li <2063309626@qq.com>
    Link: https://patch.msgid.link/tencent_B5E2E7528BB28AA8A2A56E16C49BD58B8B07@qq.com
    Fixes: 57e83fb9b746 ("can: hi311x: Add Holt HI-311x CAN driver")
    [mkl: adjust subject, commit message and jump label]
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ceph: add a bunch of missing ceph_path_info initializers [+ + +]
Author: Max Kellermann <max.kellermann@ionos.com>
Date:   Tue Feb 24 14:10:29 2026 +0100

    ceph: add a bunch of missing ceph_path_info initializers
    
    commit 43323a5934b660afae687e8e4e95ac328615a5c4 upstream.
    
    ceph_mdsc_build_path() must be called with a zero-initialized
    ceph_path_info parameter, or else the following
    ceph_mdsc_free_path_info() may crash.
    
    Example crash (on Linux 6.18.12):
    
      virt_to_cache: Object is not a Slab page!
      WARNING: CPU: 184 PID: 2871736 at mm/slub.c:6732 kmem_cache_free+0x316/0x400
      [...]
      Call Trace:
       [...]
       ceph_open+0x13d/0x3e0
       do_dentry_open+0x134/0x480
       vfs_open+0x2a/0xe0
       path_openat+0x9a3/0x1160
      [...]
      cache_from_obj: Wrong slab cache. names_cache but object is from ceph_inode_info
      WARNING: CPU: 184 PID: 2871736 at mm/slub.c:6746 kmem_cache_free+0x2dd/0x400
      [...]
      kernel BUG at mm/slub.c:634!
      Oops: invalid opcode: 0000 [#1] SMP NOPTI
      RIP: 0010:__slab_free+0x1a4/0x350
    
    Some of the ceph_mdsc_build_path() callers had initializers, but
    others had not, even though they were all added by commit 15f519e9f883
    ("ceph: fix race condition validating r_parent before applying state").
    The ones without initializer are suspectible to random crashes.  (I can
    imagine it could even be possible to exploit this bug to elevate
    privileges.)
    
    Unfortunately, these Ceph functions are undocumented and its semantics
    can only be derived from the code.  I see that ceph_mdsc_build_path()
    initializes the structure only on success, but not on error.
    
    Calling ceph_mdsc_free_path_info() after a failed
    ceph_mdsc_build_path() call does not even make sense, but that's what
    all callers do, and for it to be safe, the structure must be
    zero-initialized.  The least intrusive approach to fix this is
    therefore to add initializers everywhere.
    
    Cc: stable@vger.kernel.org
    Fixes: 15f519e9f883 ("ceph: fix race condition validating r_parent before applying state")
    Signed-off-by: Max Kellermann <max.kellermann@ionos.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>

ceph: do not skip the first folio of the next object in writeback [+ + +]
Author: Hristo Venev <hristo@venev.name>
Date:   Wed Feb 25 19:07:56 2026 +0200

    ceph: do not skip the first folio of the next object in writeback
    
    commit 081a0b78ef30f5746cda3e92e28b4d4ae92901d1 upstream.
    
    When `ceph_process_folio_batch` encounters a folio past the end of the
    current object, it should leave it in the batch so that it is picked up
    in the next iteration.
    
    Removing the folio from the batch means that it does not get written
    back and remains dirty instead. This makes `fsync()` silently skip some
    of the data, delays capability release, and breaks coherence with
    `O_DIRECT`.
    
    The link below contains instructions for reproducing the bug.
    
    Cc: stable@vger.kernel.org
    Fixes: ce80b76dd327 ("ceph: introduce ceph_process_folio_batch() method")
    Link: https://tracker.ceph.com/issues/75156
    Signed-off-by: Hristo Venev <hristo@venev.name>
    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>

ceph: fix i_nlink underrun during async unlink [+ + +]
Author: Max Kellermann <max.kellermann@ionos.com>
Date:   Fri Sep 5 23:15:30 2025 +0200

    ceph: fix i_nlink underrun during async unlink
    
    commit ce0123cbb4a40a2f1bbb815f292b26e96088639f upstream.
    
    During async unlink, we drop the `i_nlink` counter before we receive
    the completion (that will eventually update the `i_nlink`) because "we
    assume that the unlink will succeed".  That is not a bad idea, but it
    races against deletions by other clients (or against the completion of
    our own unlink) and can lead to an underrun which emits a WARNING like
    this one:
    
     WARNING: CPU: 85 PID: 25093 at fs/inode.c:407 drop_nlink+0x50/0x68
     Modules linked in:
     CPU: 85 UID: 3221252029 PID: 25093 Comm: php-cgi8.1 Not tainted 6.14.11-cm4all1-ampere #655
     Hardware name: Supermicro ARS-110M-NR/R12SPD-A, BIOS 1.1b 10/17/2023
     pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
     pc : drop_nlink+0x50/0x68
     lr : ceph_unlink+0x6c4/0x720
     sp : ffff80012173bc90
     x29: ffff80012173bc90 x28: ffff086d0a45aaf8 x27: ffff0871d0eb5680
     x26: ffff087f2a64a718 x25: 0000020000000180 x24: 0000000061c88647
     x23: 0000000000000002 x22: ffff07ff9236d800 x21: 0000000000001203
     x20: ffff07ff9237b000 x19: ffff088b8296afc0 x18: 00000000f3c93365
     x17: 0000000000070000 x16: ffff08faffcbdfe8 x15: ffff08faffcbdfec
     x14: 0000000000000000 x13: 45445f65645f3037 x12: 34385f6369706f74
     x11: 0000a2653104bb20 x10: ffffd85f26d73290 x9 : ffffd85f25664f94
     x8 : 00000000000000c0 x7 : 0000000000000000 x6 : 0000000000000002
     x5 : 0000000000000081 x4 : 0000000000000481 x3 : 0000000000000000
     x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff08727d3f91e8
     Call trace:
      drop_nlink+0x50/0x68 (P)
      vfs_unlink+0xb0/0x2e8
      do_unlinkat+0x204/0x288
      __arm64_sys_unlinkat+0x3c/0x80
      invoke_syscall.constprop.0+0x54/0xe8
      do_el0_svc+0xa4/0xc8
      el0_svc+0x18/0x58
      el0t_64_sync_handler+0x104/0x130
      el0t_64_sync+0x154/0x158
    
    In ceph_unlink(), a call to ceph_mdsc_submit_request() submits the
    CEPH_MDS_OP_UNLINK to the MDS, but does not wait for completion.
    
    Meanwhile, between this call and the following drop_nlink() call, a
    worker thread may process a CEPH_CAP_OP_IMPORT, CEPH_CAP_OP_GRANT or
    just a CEPH_MSG_CLIENT_REPLY (the latter of which could be our own
    completion).  These will lead to a set_nlink() call, updating the
    `i_nlink` counter to the value received from the MDS.  If that new
    `i_nlink` value happens to be zero, it is illegal to decrement it
    further.  But that is exactly what ceph_unlink() will do then.
    
    The WARNING can be reproduced this way:
    
    1. Force async unlink; only the async code path is affected.  Having
       no real clue about Ceph internals, I was unable to find out why the
       MDS wouldn't give me the "Fxr" capabilities, so I patched
       get_caps_for_async_unlink() to always succeed.
    
       (Note that the WARNING dump above was found on an unpatched kernel,
       without this kludge - this is not a theoretical bug.)
    
    2. Add a sleep call after ceph_mdsc_submit_request() so the unlink
       completion gets handled by a worker thread before drop_nlink() is
       called.  This guarantees that the `i_nlink` is already zero before
       drop_nlink() runs.
    
    The solution is to skip the counter decrement when it is already zero,
    but doing so without a lock is still racy (TOCTOU).  Since
    ceph_fill_inode() and handle_cap_grant() both hold the
    `ceph_inode_info.i_ceph_lock` spinlock while set_nlink() runs, this
    seems like the proper lock to protect the `i_nlink` updates.
    
    I found prior art in NFS and SMB (using `inode.i_lock`) and AFS (using
    `afs_vnode.cb_lock`).  All three have the zero check as well.
    
    Cc: stable@vger.kernel.org
    Fixes: 2ccb45462aea ("ceph: perform asynchronous unlink if we have sufficient caps")
    Signed-off-by: Max Kellermann <max.kellermann@ionos.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>

ceph: fix memory leaks in ceph_mdsc_build_path() [+ + +]
Author: Max Kellermann <max.kellermann@ionos.com>
Date:   Tue Feb 24 14:26:57 2026 +0100

    ceph: fix memory leaks in ceph_mdsc_build_path()
    
    commit 040d159a45ded7f33201421a81df0aa2a86e5a0b upstream.
    
    Add __putname() calls to error code paths that did not free the "path"
    pointer obtained by __getname().  If ownership of this pointer is not
    passed to the caller via path_info.path, the function must free it
    before returning.
    
    Cc: stable@vger.kernel.org
    Fixes: 3fd945a79e14 ("ceph: encode encrypted name in ceph_mdsc_build_path and dentry release")
    Fixes: 550f7ca98ee0 ("ceph: give up on paths longer than PATH_MAX")
    Signed-off-by: Max Kellermann <max.kellermann@ionos.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: Don't expose dead tasks in cgroup [+ + +]
Author: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date:   Fri Mar 6 20:22:35 2026 +0100

    cgroup: Don't expose dead tasks in cgroup
    
    commit a72f73c4dd9b209c53cf8b03b6e97fcefad4262c upstream.
    
    Once a task exits it has its state set to TASK_DEAD and then it is
    removed from the cgroup it belonged to. The last step happens on the task
    gets out of its last schedule() invocation and is delayed on PREEMPT_RT
    due to locking constraints.
    
    As a result it is possible to receive a pid via waitpid() of a task
    which is still listed in cgroup.procs for the cgroup it belonged
    to. This is something that systemd does not expect and as a result it
    waits for its exit until a time out occurs.
    This can also be reproduced on !PREEMPT_RT kernel with a significant
    delay in do_exit() after exit_notify().
    
    Hide the task from the output which have PF_EXITING set which is done
    before the parent is notified. Keeping zombies with live threads
    shouldn't break anything (suggested by Tejun).
    
    Reported-by: Bert Karwatzki <spasswolf@web.de>
    Closes: https://lore.kernel.org/all/20260219164648.3014-1-spasswolf@web.de/
    Tested-by: Bert Karwatzki <spasswolf@web.de>
    Fixes: 9311e6c29b34 ("cgroup: Fix sleeping from invalid context warning on PREEMPT_RT")
    Cc: stable@vger.kernel.org # v6.19+
    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

cgroup: fix race between task migration and iteration [+ + +]
Author: Qingye Zhao <zhaoqingye@honor.com>
Date:   Wed Feb 11 09:24:04 2026 +0000

    cgroup: fix race between task migration and iteration
    
    commit 5ee01f1a7343d6a3547b6802ca2d4cdce0edacb1 upstream.
    
    When a task is migrated out of a css_set, cgroup_migrate_add_task()
    first moves it from cset->tasks to cset->mg_tasks via:
    
        list_move_tail(&task->cg_list, &cset->mg_tasks);
    
    If a css_task_iter currently has it->task_pos pointing to this task,
    css_set_move_task() calls css_task_iter_skip() to keep the iterator
    valid. However, since the task has already been moved to ->mg_tasks,
    the iterator is advanced relative to the mg_tasks list instead of the
    original tasks list. As a result, remaining tasks on cset->tasks, as
    well as tasks queued on cset->mg_tasks, can be skipped by iteration.
    
    Fix this by calling css_set_skip_task_iters() before unlinking
    task->cg_list from cset->tasks. This advances all active iterators to
    the next task on cset->tasks, so iteration continues correctly even
    when a task is concurrently being migrated.
    
    This race is hard to hit in practice without instrumentation, but it
    can be reproduced by artificially slowing down cgroup_procs_show().
    For example, on an Android device a temporary
    /sys/kernel/cgroup/cgroup_test knob can be added to inject a delay
    into cgroup_procs_show(), and then:
    
      1) Spawn three long-running tasks (PIDs 101, 102, 103).
      2) Create a test cgroup and move the tasks into it.
      3) Enable a large delay via /sys/kernel/cgroup/cgroup_test.
      4) In one shell, read cgroup.procs from the test cgroup.
      5) Within the delay window, in another shell migrate PID 102 by
         writing it to a different cgroup.procs file.
    
    Under this setup, cgroup.procs can intermittently show only PID 101
    while skipping PID 103. Once the migration completes, reading the
    file again shows all tasks as expected.
    
    Note that this change does not allow removing the existing
    css_set_skip_task_iters() call in css_set_move_task(). The new call
    in cgroup_migrate_add_task() only handles iterators that are racing
    with migration while the task is still on cset->tasks. Iterators may
    also start after the task has been moved to cset->mg_tasks. If we
    dropped css_set_skip_task_iters() from css_set_move_task(), such
    iterators could keep task_pos pointing to a migrating task, causing
    css_task_iter_advance() to malfunction on the destination css_set,
    up to and including crashes or infinite loops.
    
    The race window between migration and iteration is very small, and
    css_task_iter is not on a hot path. In the worst case, when an
    iterator is positioned on the first thread of the migrating process,
    cgroup_migrate_add_task() may have to skip multiple tasks via
    css_set_skip_task_iters(). However, this only happens when migration
    and iteration actually race, so the performance impact is negligible
    compared to the correctness fix provided here.
    
    Fixes: b636fd38dc40 ("cgroup: Implement css_task_iter_skip()")
    Cc: stable@vger.kernel.org # v5.2+
    Signed-off-by: Qingye Zhao <zhaoqingye@honor.com>
    Reviewed-by: Michal Koutný <mkoutny@suse.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
cifs: make default value of retrans as zero [+ + +]
Author: Shyam Prasad N <sprasad@microsoft.com>
Date:   Wed Mar 11 10:48:54 2026 +0530

    cifs: make default value of retrans as zero
    
    commit e3beefd3af09f8e460ddaf39063d3d7664d7ab59 upstream.
    
    When retrans mount option was introduced, the default value was set
    as 1. However, in the light of some bugs that this has exposed recently
    we should change it to 0 and retain the old behaviour before this option
    was introduced.
    
    Cc: <stable@vger.kernel.org>
    Reviewed-by: Bharath SM <bharathsm@microsoft.com>
    Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
cpufreq: intel_pstate: Fix NULL pointer dereference in update_cpu_qos_request() [+ + +]
Author: David Arcari <darcari@redhat.com>
Date:   Tue Feb 24 07:21:06 2026 -0500

    cpufreq: intel_pstate: Fix NULL pointer dereference in update_cpu_qos_request()
    
    commit ab39cc4cb8ceecdc2b61747433e7237f1ac2b789 upstream.
    
    The update_cpu_qos_request() function attempts to initialize the 'freq'
    variable by dereferencing 'cpudata' before verifying if the 'policy'
    is valid.
    
    This issue occurs on systems booted with the "nosmt" parameter, where
    all_cpu_data[cpu] is NULL for the SMT sibling threads. As a result,
    any call to update_qos_requests() will result in a NULL pointer
    dereference as the code will attempt to access pstate.turbo_freq using
    the NULL cpudata pointer.
    
    Also, pstate.turbo_freq may be updated by intel_pstate_get_hwp_cap()
    after initializing the 'freq' variable, so it is better to defer the
    'freq' until intel_pstate_get_hwp_cap() has been called.
    
    Fix this by deferring the 'freq' assignment until after the policy and
    driver_data have been validated.
    
    Fixes: ae1bdd23b99f ("cpufreq: intel_pstate: Adjust frequency percentage computations")
    Reported-by: Jirka Hladky <jhladky@redhat.com>
    Closes: https://lore.kernel.org/all/CAE4VaGDfiPvz3AzrwrwM4kWB3SCkMci25nPO8W1JmTBd=xHzZg@mail.gmail.com/
    Signed-off-by: David Arcari <darcari@redhat.com>
    Cc: 6.18+ <stable@vger.kernel.org> # 6.18+
    [ rjw: Added one paragraph to the changelog ]
    Link: https://patch.msgid.link/20260224122106.228116-1-darcari@redhat.com
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
crypto: ccp - allow callers to use HV-Fixed page API when SEV is disabled [+ + +]
Author: Ashish Kalra <ashish.kalra@amd.com>
Date:   Fri Feb 6 21:26:45 2026 +0000

    crypto: ccp - allow callers to use HV-Fixed page API when SEV is disabled
    
    commit 8168a7b72bdee3790b126f63bd30306759206b15 upstream.
    
    When SEV is disabled, the HV-Fixed page allocation call fails, which in
    turn causes SFS initialization to fail.
    
    Fix the HV-Fixed API so callers (for example, SFS) can use it even when
    SEV is disabled by performing normal page allocation and freeing.
    
    Fixes: e09701dcdd9c ("crypto: ccp - Add new HV-Fixed page allocation/free API")
    Cc: stable@vger.kernel.org
    Signed-off-by: Ashish Kalra <ashish.kalra@amd.com>
    Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
cxl/acpi: Fix CXL_ACPI and CXL_PMEM Kconfig tristate mismatch [+ + +]
Author: Keith Busch <kbusch@kernel.org>
Date:   Thu Mar 5 12:40:56 2026 -0800

    cxl/acpi: Fix CXL_ACPI and CXL_PMEM Kconfig tristate mismatch
    
    commit 93d0fcdddc9e7be9d4f42acbe57bc90dbb0fe75d upstream.
    
    Commit e7e222ad73d9 ("cxl: Move devm_cxl_add_nvdimm_bridge() to
    cxl_pmem.ko") moves devm_cxl_add_nvdimm_bridge() into the cxl_pmem file,
    which has independent config compile options for built-in or module. The
    call from cxl_acpi_probe() is guarded by IS_ENABLED(CONFIG_CXL_PMEM),
    which evaluates to true for both =y and =m.
    
    When CONFIG_CXL_PMEM=m, a built-in cxl_acpi attempts to reference a
    symbol exported by a module, which fails to link. CXL_PMEM cannot simply
    be promoted to =y in this configuration because it depends on LIBNVDIMM,
    which may itself be =m.
    
    Add a Kconfig dependency to prevent CXL_ACPI from being built-in when
    CXL_PMEM is a module. This contrains CXL_ACPI to =m when CXL_PMEM=m,
    while still allowing CXL_ACPI to be freely configured when CXL_PMEM is
    either built-in or disabled.
    
    [ dj: Fix up commit reference formatting. ]
    
    Fixes: e7e222ad73d9 ("cxl: Move devm_cxl_add_nvdimm_bridge() to cxl_pmem.ko")
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
    Reviewed-by: Dan Williams <dan.j.williams@intel.com>
    Link: https://patch.msgid.link/20260305204057.1516948-1-kbusch@meta.com
    Signed-off-by: Dave Jiang <dave.jiang@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
device property: Allow secondary lookup in fwnode_get_next_child_node() [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Tue Feb 10 14:58:22 2026 +0100

    device property: Allow secondary lookup in fwnode_get_next_child_node()
    
    commit 2692c614f8f05929d692b3dbfd3faef1f00fbaf0 upstream.
    
    When device_get_child_node_count() got split to the fwnode and device
    respective APIs, the fwnode didn't inherit the ability to traverse over
    the secondary fwnode. Hence any user, that switches from device to fwnode
    API misses this feature. In particular, this was revealed by the commit
    1490cbb9dbfd ("device property: Split fwnode_get_child_node_count()")
    that effectively broke the GPIO enumeration on Intel Galileo boards.
    Fix this by moving the secondary lookup from device to fwnode API.
    
    Note, in general no device_*() API should go into the depth of the fwnode
    implementation.
    
    Fixes: 114dbb4fa7c4 ("drivers property: When no children in primary, try secondary")
    Cc: stable@vger.kernel.org
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Reviewed-by: Rafael J. Wysocki (Intel) <rafael@kernel.org>
    Reviewed-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Link: https://patch.msgid.link/20260210135822.47335-1-andriy.shevchenko@linux.intel.com
    Signed-off-by: Danilo Krummrich <dakr@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drivers: net: ice: fix devlink parameters get without irdma [+ + +]
Author: Nikolay Aleksandrov <razor@blackwall.org>
Date:   Fri Feb 13 10:48:41 2026 +0200

    drivers: net: ice: fix devlink parameters get without irdma
    
    [ Upstream commit bd98c6204d1195973b1760fe45860863deb6200c ]
    
    If CONFIG_IRDMA isn't enabled but there are ice NICs in the system, the
    driver will prevent full devlink dev param show dump because its rdma get
    callbacks return ENODEV and stop the dump. For example:
     $ devlink dev param show
     pci/0000:82:00.0:
       name msix_vec_per_pf_max type generic
         values:
           cmode driverinit value 2
       name msix_vec_per_pf_min type generic
         values:
           cmode driverinit value 2
     kernel answers: No such device
    
    Returning EOPNOTSUPP allows the dump to continue so we can see all devices'
    devlink parameters.
    
    Fixes: c24a65b6a27c ("iidc/ice/irdma: Update IDC to support multiple consumers")
    Signed-off-by: Nikolay Aleksandrov <nikolay@nvidia.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>

 
drm/amd/display: Fallback to boot snapshot for dispclk [+ + +]
Author: Dillon Varone <Dillon.Varone@amd.com>
Date:   Wed Feb 18 14:34:28 2026 -0500

    drm/amd/display: Fallback to boot snapshot for dispclk
    
    commit 30d937f63bd19bbcaafa4b892eb251f8bbbf04ef upstream.
    
    [WHY & HOW]
    If the dentist is unavailable, fallback to reading CLKIP via the boot
    snapshot to get the current dispclk.
    
    Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
    Signed-off-by: Dillon Varone <Dillon.Varone@amd.com>
    Signed-off-by: Alex Hung <alex.hung@amd.com>
    Cc: Mario Limonciello <mario.limonciello@amd.com>
    Cc: Alex Deucher <alexander.deucher@amd.com>
    Tested-by: Dan Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 2ab77600d1e55a042c02437326d3c7563e853c6c)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amd/pm: add missing od setting PP_OD_FEATURE_ZERO_FAN_BIT for smu v13 [+ + +]
Author: Yang Wang <kevinyang.wang@amd.com>
Date:   Tue Mar 3 21:10:11 2026 -0500

    drm/amd/pm: add missing od setting PP_OD_FEATURE_ZERO_FAN_BIT for smu v13
    
    [ Upstream commit cb47c882c31334aadc13ace80781728ed22a05ee ]
    
    add missing od setting PP_OD_FEATURE_ZERO_FAN_BIT for smu v13.0.0/13.0.7
    
    Fixes: cfffd980bf21 ("drm/amd/pm: add zero RPM OD setting support for SMU13")
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/5018
    Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 576a10797b607ee9e4068218daf367b481564120)
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd/pm: add missing od setting PP_OD_FEATURE_ZERO_FAN_BIT for smu v14 [+ + +]
Author: Yang Wang <kevinyang.wang@amd.com>
Date:   Tue Mar 3 21:14:10 2026 -0500

    drm/amd/pm: add missing od setting PP_OD_FEATURE_ZERO_FAN_BIT for smu v14
    
    [ Upstream commit 9d4837a26149355ffe3a1f80de80531eafdd3353 ]
    
    add missing od setting PP_OD_FEATURE_ZERO_FAN_BIT for smu v14.0.2/14.0.3
    
    Fixes: 9710b84e2a6a ("drm/amd/pm: add overdrive support on smu v14.0.2/3")
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/5018
    Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 1b5cf07d80bb16d1593579ccdb23f08ea4262c14)
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd/pm: remove invalid gpu_metrics.energy_accumulator on smu v13.0.x [+ + +]
Author: Yang Wang <kevinyang.wang@amd.com>
Date:   Wed Feb 25 22:51:06 2026 -0500

    drm/amd/pm: remove invalid gpu_metrics.energy_accumulator on smu v13.0.x
    
    commit 68785c5e79e0fc1eacf63026fbba32be3867f410 upstream.
    
    v1:
    The metrics->EnergyAccumulator field has been deprecated on newer pmfw.
    
    v2:
    add smu 13.0.0/13.0.7/13.0.10 support.
    
    Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 8de9edb35976fa56565dc8fbb5d1310e8e10187c)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amd: Disable MES LR compute W/A [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Wed Feb 25 10:51:16 2026 -0600

    drm/amd: Disable MES LR compute W/A
    
    commit 6b0d812971370c64b837a2db4275410f478272fe upstream.
    
    A workaround was introduced in commit 1fb710793ce2 ("drm/amdgpu: Enable
    MES lr_compute_wa by default") to help with some hangs observed in gfx1151.
    
    This WA didn't fully fix the issue.  It was actually fixed by adjusting
    the VGPR size to the correct value that matched the hardware in commit
    b42f3bf9536c ("drm/amdkfd: bump minimum vgpr size for gfx1151").
    
    There are reports of instability on other products with newer GC microcode
    versions, and I believe they're caused by this workaround. As we don't
    need the workaround any more, remove it.
    
    Fixes: b42f3bf9536c ("drm/amdkfd: bump minimum vgpr size for gfx1151")
    Acked-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 9973e64bd6ee7642860a6f3b6958cbf14e89cabd)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd: Fix a few more NULL pointer dereference in device cleanup [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Thu Mar 5 09:06:11 2026 -0600

    drm/amd: Fix a few more NULL pointer dereference in device cleanup
    
    commit 72ecb1dae72775fa9fea0159d8445d620a0a2295 upstream.
    
    I found a few more paths that cleanup fails due to a NULL version pointer
    on unsupported hardware.
    
    Add NULL checks as applicable.
    
    Fixes: 39fc2bc4da00 ("drm/amdgpu: Protect GPU register accesses in powergated state in some paths")
    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 f5a05f8414fc10f307eb965f303580c7778f8dd2)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd: Fix NULL pointer dereference in device cleanup [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Wed Mar 4 14:07:40 2026 -0600

    drm/amd: Fix NULL pointer dereference in device cleanup
    
    commit 062ea905fff7756b2e87143ffccaece5cdb44267 upstream.
    
    When GPU initialization fails due to an unsupported HW block
    IP blocks may have a NULL version pointer. During cleanup in
    amdgpu_device_fini_hw, the code calls amdgpu_device_set_pg_state and
    amdgpu_device_set_cg_state which iterate over all IP blocks and access
    adev->ip_blocks[i].version without NULL checks, leading to a kernel
    NULL pointer dereference.
    
    Add NULL checks for adev->ip_blocks[i].version in both
    amdgpu_device_set_cg_state and amdgpu_device_set_pg_state to prevent
    dereferencing NULL pointers during GPU teardown when initialization has
    failed.
    
    Fixes: 39fc2bc4da00 ("drm/amdgpu: Protect GPU register accesses in powergated state in some paths")
    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 b7ac77468cda92eecae560b05f62f997a12fe2f2)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd: Set num IP blocks to 0 if discovery fails [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Tue Mar 10 11:58:22 2026 -0500

    drm/amd: Set num IP blocks to 0 if discovery fails
    
    commit 3646ff28780b4c52c5b5081443199e7a430110e5 upstream.
    
    If discovery has failed for any reason (such as no support for a block)
    then there is no need to unwind all the IP blocks in fini. In this
    condition there can actually be failures during the unwind too.
    
    Reset num_ip_blocks to zero during failure path and skip the unnecessary
    cleanup path.
    
    Suggested-by: Lijo Lazar <lijo.lazar@amd.com>
    Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit fae5984296b981c8cc3acca35b701c1f332a6cd8)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu/userq: Fix reference leak in amdgpu_userq_wait_ioctl [+ + +]
Author: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
Date:   Mon Feb 23 12:41:30 2026 +0000

    drm/amdgpu/userq: Fix reference leak in amdgpu_userq_wait_ioctl
    
    commit 49abfa812617a7f2d0132c70d23ac98b389c6ec1 upstream.
    
    Drop reference to syncobj and timeline fence when aborting the ioctl due
    output array being too small.
    
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
    Fixes: a292fdecd728 ("drm/amdgpu: Implement userqueue signal/wait IOCTL")
    Cc: Arunpravin Paneer Selvam <Arunpravin.PaneerSelvam@amd.com>
    Cc: Christian König <christian.koenig@amd.com>
    Cc: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 68951e9c3e6bb22396bc42ef2359751c8315dd27)
    Cc: <stable@vger.kernel.org> # v6.16+
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu/vcn5: Add SMU dpm interface type [+ + +]
Author: sguttula <suresh.guttula@amd.com>
Date:   Sat Feb 21 10:03:32 2026 +0530

    drm/amdgpu/vcn5: Add SMU dpm interface type
    
    [ Upstream commit a5fe1a54513196e4bc8f9170006057dc31e7155e ]
    
    This will set AMDGPU_VCN_SMU_DPM_INTERFACE_* smu_type
    based on soc type and fixing ring timeout issue seen
    for DPM enabled case.
    
    Signed-off-by: sguttula <suresh.guttula@amd.com>
    Reviewed-by: Pratik Vishwakarma <Pratik.Vishwakarma@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit f0f23c315b38c55e8ce9484cf59b65811f350630)
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amdgpu: add upper bound check on user inputs in signal ioctl [+ + +]
Author: Sunil Khatri <sunil.khatri@amd.com>
Date:   Fri Feb 20 13:47:58 2026 +0530

    drm/amdgpu: add upper bound check on user inputs in signal ioctl
    
    commit ea78f8c68f4f6211c557df49174c54d167821962 upstream.
    
    Huge input values in amdgpu_userq_signal_ioctl can lead to a OOM and
    could be exploited.
    
    So check these input value against AMDGPU_USERQ_MAX_HANDLES
    which is big enough value for genuine use cases and could
    potentially avoid OOM.
    
    Signed-off-by: Sunil Khatri <sunil.khatri@amd.com>
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit be267e15f99bc97cbe202cd556717797cdcf79a5)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdgpu: add upper bound check on user inputs in wait ioctl [+ + +]
Author: Sunil Khatri <sunil.khatri@amd.com>
Date:   Tue Feb 24 12:13:09 2026 +0530

    drm/amdgpu: add upper bound check on user inputs in wait ioctl
    
    commit 64ac7c09fc44985ec9bb6a9db740899fa40ca613 upstream.
    
    Huge input values in amdgpu_userq_wait_ioctl can lead to a OOM and
    could be exploited.
    
    So check these input value against AMDGPU_USERQ_MAX_HANDLES
    which is big enough value for genuine use cases and could
    potentially avoid OOM.
    
    v2: squash in Srini's fix
    
    Signed-off-by: Sunil Khatri <sunil.khatri@amd.com>
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit fcec012c664247531aed3e662f4280ff804d1476)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdgpu: ensure no_hw_access is visible before MMIO [+ + +]
Author: Perry Yuan <perry.yuan@amd.com>
Date:   Wed Jan 28 13:54:31 2026 +0800

    drm/amdgpu: ensure no_hw_access is visible before MMIO
    
    commit 31b153315b8702d0249aa44d83d9fbf42c5c7a79 upstream.
    
    Add a full memory barrier after clearing no_hw_access in
    amdgpu_device_mode1_reset() so subsequent PCI state restore
    access cannot observe stale state on other CPUs.
    
    Fixes: 7edb503fe4b6 ("drm/amd/pm: Disable MMIO access during SMU Mode 1 reset")
    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>
    Cc: Simon Liebold <simonlie@amazon.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdgpu: Fix kernel-doc comments for some LUT properties [+ + +]
Author: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
Date:   Thu Mar 5 13:16:36 2026 +0200

    drm/amdgpu: Fix kernel-doc comments for some LUT properties
    
    [ Upstream commit 52289ce48ef1f8a81cd39df1574098356e3c9d4c ]
    
    The following members of struct amdgpu_mode_info do not have valid
    references in the related kernel-doc sections:
    
     - plane_shaper_lut_property
     - plane_shaper_lut_size_property,
     - plane_lut3d_size_property
    
    Correct all affected comment blocks.
    
    Fixes: f545d82479b4 ("drm/amd/display: add plane shaper LUT and TF driver-specific properties")
    Fixes: 671994e3bf33 ("drm/amd/display: add plane 3D LUT driver-specific properties")
    Reviewed-by: Melissa Wen <mwen@igalia.com>
    Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit ec5708d6e547f7efe2f009073bfa98dbc4c5c2ac)
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amdgpu: Fix use-after-free race in VM acquire [+ + +]
Author: Alysa Liu <Alysa.Liu@amd.com>
Date:   Thu Feb 5 11:21:45 2026 -0500

    drm/amdgpu: Fix use-after-free race in VM acquire
    
    commit 2c1030f2e84885cc58bffef6af67d5b9d2e7098f upstream.
    
    Replace non-atomic vm->process_info assignment with cmpxchg()
    to prevent race when parent/child processes sharing a drm_file
    both try to acquire the same VM after fork().
    
    Reviewed-by: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
    Signed-off-by: Alysa Liu <Alysa.Liu@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit c7c573275ec20db05be769288a3e3bb2250ec618)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdkfd: Unreserve bo if queue update failed [+ + +]
Author: Philip Yang <Philip.Yang@amd.com>
Date:   Tue Dec 9 15:13:23 2025 -0500

    drm/amdkfd: Unreserve bo if queue update failed
    
    [ Upstream commit 2ce75a0b7e1bfddbcb9bc8aeb2e5e7fa99971acf ]
    
    Error handling path should unreserve bo then return failed.
    
    Fixes: 305cd109b761 ("drm/amdkfd: Validate user queue update")
    Signed-off-by: Philip Yang <Philip.Yang@amd.com>
    Reviewed-by: Alex Sierra <alex.sierra@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit c24afed7de9ecce341825d8ab55a43a254348b33)
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/bridge: samsung-dsim: Fix memory leak in error path [+ + +]
Author: Osama Abdelkader <osama.abdelkader@gmail.com>
Date:   Mon Feb 9 19:41:14 2026 +0100

    drm/bridge: samsung-dsim: Fix memory leak in error path
    
    commit 803ec1faf7c1823e6e3b1f2aaa81be18528c9436 upstream.
    
    In samsung_dsim_host_attach(), drm_bridge_add() is called to add the
    bridge. However, if samsung_dsim_register_te_irq() or
    pdata->host_ops->attach() fails afterwards, the function returns
    without removing the bridge, causing a memory leak.
    
    Fix this by adding proper error handling with goto labels to ensure
    drm_bridge_remove() is called in all error paths. Also ensure that
    samsung_dsim_unregister_te_irq() is called if the attach operation
    fails after the TE IRQ has been registered.
    
    samsung_dsim_unregister_te_irq() function is moved without changes
    to be before samsung_dsim_host_attach() to avoid forward declaration.
    
    Fixes: e7447128ca4a ("drm: bridge: Generalize Exynos-DSI driver into a Samsung DSIM bridge")
    Cc: stable@vger.kernel.org
    Signed-off-by: Osama Abdelkader <osama.abdelkader@gmail.com>
    Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
    Link: https://patch.msgid.link/20260209184115.10937-1-osama.abdelkader@gmail.com
    Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/bridge: ti-sn65dsi83: fix CHA_DSI_CLK_RANGE rounding [+ + +]
Author: Luca Ceresoli <luca.ceresoli@bootlin.com>
Date:   Thu Feb 26 17:16:44 2026 +0100

    drm/bridge: ti-sn65dsi83: fix CHA_DSI_CLK_RANGE rounding
    
    commit 2f22702dc0fee06a240404e0f7ead5b789b253d8 upstream.
    
    The DSI frequency must be in the range:
    
      (CHA_DSI_CLK_RANGE * 5 MHz) <= DSI freq < ((CHA_DSI_CLK_RANGE + 1) * 5 MHz)
    
    So the register value should point to the lower range value, but
    DIV_ROUND_UP() rounds the division to the higher range value, resulting in
    an excess of 1 (unless the frequency is an exact multiple of 5 MHz).
    
    For example for a 437100000 MHz clock CHA_DSI_CLK_RANGE should be 87 (0x57):
    
      (87 * 5 = 435) <= 437.1 < (88 * 5 = 440)
    
    but current code returns 88 (0x58).
    
    Fix the computation by removing the DIV_ROUND_UP().
    
    Fixes: ceb515ba29ba ("drm/bridge: ti-sn65dsi83: Add TI SN65DSI83 and SN65DSI84 driver")
    Cc: stable@vger.kernel.org
    Reviewed-by: Marek Vasut <marek.vasut@mailbox.org>
    Link: https://patch.msgid.link/20260226-ti-sn65dsi83-dual-lvds-fixes-and-test-pattern-v1-1-2e15f5a9a6a0@bootlin.com
    Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/bridge: ti-sn65dsi83: halve horizontal syncs for dual LVDS output [+ + +]
Author: Luca Ceresoli <luca.ceresoli@bootlin.com>
Date:   Thu Feb 26 17:16:45 2026 +0100

    drm/bridge: ti-sn65dsi83: halve horizontal syncs for dual LVDS output
    
    commit d0d727746944096a6681dc6adb5f123fc5aa018d upstream.
    
    Dual LVDS output (available on the SN65DSI84) requires HSYNC_PULSE_WIDTH
    and HORIZONTAL_BACK_PORCH to be divided by two with respect to the values
    used for single LVDS output.
    
    While not clearly stated in the datasheet, this is needed according to the
    DSI Tuner [0] output. It also makes sense intuitively because in dual LVDS
    output two pixels at a time are output and so the output clock is half of
    the pixel clock.
    
    Some dual-LVDS panels refuse to show any picture without this fix.
    
    Divide by two HORIZONTAL_FRONT_PORCH too, even though this register is used
    only for test pattern generation which is not currently implemented by this
    driver.
    
    [0] https://www.ti.com/tool/DSI-TUNER
    
    Fixes: ceb515ba29ba ("drm/bridge: ti-sn65dsi83: Add TI SN65DSI83 and SN65DSI84 driver")
    Cc: stable@vger.kernel.org
    Reviewed-by: Marek Vasut <marek.vasut@mailbox.org>
    Link: https://patch.msgid.link/20260226-ti-sn65dsi83-dual-lvds-fixes-and-test-pattern-v1-2-2e15f5a9a6a0@bootlin.com
    Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/bridge: ti-sn65dsi86: Enable HPD polling if IRQ is not used [+ + +]
Author: Franz Schnyder <franz.schnyder@toradex.com>
Date:   Fri Feb 6 13:37:36 2026 +0100

    drm/bridge: ti-sn65dsi86: Enable HPD polling if IRQ is not used
    
    commit 0b87d51690dd5131cbe9fbd23746b037aab89815 upstream.
    
    Fallback to polling to detect hotplug events on systems without
    interrupts.
    
    On systems where the interrupt line of the bridge is not connected,
    the bridge cannot notify hotplug events. Only add the
    DRM_BRIDGE_OP_HPD flag if an interrupt has been registered
    otherwise remain in polling mode.
    
    Fixes: 55e8ff842051 ("drm/bridge: ti-sn65dsi86: Add HPD for DisplayPort connector type")
    Cc: stable@vger.kernel.org # 6.16: 9133bc3f0564: drm/bridge: ti-sn65dsi86: Add
    Signed-off-by: Franz Schnyder <franz.schnyder@toradex.com>
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    [dianders: Adjusted Fixes/stable line based on discussion]
    Signed-off-by: Douglas Anderson <dianders@chromium.org>
    Link: https://patch.msgid.link/20260206123758.374555-1-fra.schnyder@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/i915/alpm: ALPM disable fixes [+ + +]
Author: Jouni Högander <jouni.hogander@intel.com>
Date:   Thu Feb 12 08:27:31 2026 +0200

    drm/i915/alpm: ALPM disable fixes
    
    commit eb4a7139e97374f42b7242cc754e77f1623fbcd5 upstream.
    
    PORT_ALPM_CTL is supposed to be written only before link training. Remove
    writing it from ALPM disable.
    
    Also clearing ALPM_CTL_ALPM_AUX_LESS_ENABLE and is not about disabling ALPM
    but switching to AUX-Wake ALPM. Stop touching this bit on ALPM disable.
    
    Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/7153
    Fixes: 1ccbf135862b ("drm/i915/psr: Enable ALPM on source side for eDP Panel replay")
    Cc: Animesh Manna <animesh.manna@intel.com>
    Cc: Jani Nikula <jani.nikula@linux.intel.com>
    Cc: <stable@vger.kernel.org> # v6.10+
    Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
    Reviewed-by: Michał Grzelak <michal.grzelak@intel.com>
    Link: https://patch.msgid.link/20260212062731.397801-1-jouni.hogander@intel.com
    (cherry picked from commit 008304c9ae75c772d3460040de56e12112cdf5e6)
    Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/i915/dp: Read ALPM caps after DPCD init [+ + +]
Author: Arun R Murthy <arun.r.murthy@intel.com>
Date:   Wed Mar 4 12:51:57 2026 +0530

    drm/i915/dp: Read ALPM caps after DPCD init
    
    [ Upstream commit 335b237d902c7362cb7228802e68374406b24acf ]
    
    For eDP read the ALPM DPCD caps after DPCD initalization and just before
    the PSR init.
    
    v2: Move intel_alpm_init to intel_edp_init_dpcd (Jouni)
    v3: Add Fixes with commit-id (Jouni)
    v4: Separated the alpm dpcd read caps from alpm_init and moved to
    intel_edp_init_dpcd.
    v5: Read alpm_caps always for eDP irrespective of the eDP version (Jouni)
    v6: replace drm_dp_dpcd_readb with drm_dp_dpcd_read_byte (Jouni)
    
    Fixes: 15438b325987 ("drm/i915/alpm: Add compute config for lobf")
    Signed-off-by: Arun R Murthy <arun.r.murthy@intel.com>
    Reviewed-by: Animesh Manna <animesh.manna@intel.com>
    Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
    Signed-off-by: Animesh Manna <animesh.manna@intel.com>
    Link: https://patch.msgid.link/20260304072157.1123283-1-arun.r.murthy@intel.com
    (cherry picked from commit 88442ba208dd5d3405de3f5000cf5b2c86876ae3)
    Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/i915/psr: Repeat Selective Update area alignment [+ + +]
Author: Jouni Högander <jouni.hogander@intel.com>
Date:   Wed Mar 4 13:30:08 2026 +0200

    drm/i915/psr: Repeat Selective Update area alignment
    
    commit 1be2fca84f520105413d0d89ed04bb0ff742ab16 upstream.
    
    Currently we are aligning Selective Update area to cover cursor fully if
    needed only once. It may happen that cursor is in Selective Update area
    after pipe alignment and after that covering cursor plane only
    partially. Fix this by looping alignment as long as alignment isn't needed
    anymore.
    
    v2:
      - do not unecessarily loop if cursor was already fully covered
      - rename aligned as su_area_changed
    
    Fixes: 1bff93b8bc27 ("drm/i915/psr: Extend SU area to cover cursor fully if needed")
    Cc: <stable@vger.kernel.org> # v6.9+
    Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
    Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
    Link: https://patch.msgid.link/20260304113011.626542-2-jouni.hogander@intel.com
    (cherry picked from commit 681e12440d8b110350a5709101169f319e10ccbb)
    Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/i915/vrr: Configure VRR timings after enabling TRANS_DDI_FUNC_CTL [+ + +]
Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
Date:   Tue Mar 3 11:54:14 2026 +0200

    drm/i915/vrr: Configure VRR timings after enabling TRANS_DDI_FUNC_CTL
    
    commit 237aab549676288d9255bb8dcc284738e56eaa31 upstream.
    
    Apparently ICL may hang with an MCE if we write TRANS_VRR_VMAX/FLIPLINE
    before enabling TRANS_DDI_FUNC_CTL.
    
    Personally I was only able to reproduce a hang (on an Dell XPS 7390
    2-in-1) with an external display connected via a dock using a dodgy
    type-C cable that made the link training fail. After the failed
    link training the machine would hang. TGL seemed immune to the
    problem for whatever reason.
    
    BSpec does tell us to configure VRR after enabling TRANS_DDI_FUNC_CTL
    as well. The DMC firmware also does the VRR restore in two stages:
    - first stage seems to be unconditional and includes TRANS_VRR_CTL
      and a few other VRR registers, among other things
    - second stage is conditional on the DDI being enabled,
      and includes TRANS_DDI_FUNC_CTL and TRANS_VRR_VMAX/VMIN/FLIPLINE,
      among other things
    
    So let's reorder the steps to match to avoid the hang, and
    toss in an extra WARN to make sure we don't screw this up later.
    
    BSpec: 22243
    Cc: stable@vger.kernel.org
    Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
    Reported-by: Benjamin Tissoires <bentiss@kernel.org>
    Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15777
    Tested-by: Benjamin Tissoires <bentiss@kernel.org>
    Fixes: dda7dcd9da73 ("drm/i915/vrr: Use fixed timings for platforms that support VRR")
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patch.msgid.link/20260303095414.4331-1-ville.syrjala@linux.intel.com
    Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
    (cherry picked from commit 93f3a267c3dd4d811b224bb9e179a10d81456a74)
    Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/i915: Fix potential overflow of shmem scatterlist length [+ + +]
Author: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
Date:   Tue Feb 24 10:49:06 2026 +0100

    drm/i915: Fix potential overflow of shmem scatterlist length
    
    commit 029ae067431ab9d0fca479bdabe780fa436706ea upstream.
    
    When a scatterlists table of a GEM shmem object of size 4 GB or more is
    populated with pages allocated from a folio, unsigned int .length
    attribute of a scatterlist may get overflowed if total byte length of
    pages allocated to that single scatterlist happens to reach or cross the
    4GB limit.  As a consequence, users of the object may suffer from hitting
    unexpected, premature end of the object's backing pages.
    
    [278.780187] ------------[ cut here ]------------
    [278.780377] WARNING: CPU: 1 PID: 2326 at drivers/gpu/drm/i915/i915_mm.c:55 remap_sg+0x199/0x1d0 [i915]
    ...
    [278.780654] CPU: 1 UID: 0 PID: 2326 Comm: gem_mmap_offset Tainted: G S   U              6.17.0-rc1-CI_DRM_16981-ged823aaa0607+ #1 PREEMPT(voluntary)
    [278.780656] Tainted: [S]=CPU_OUT_OF_SPEC, [U]=USER
    [278.780658] Hardware name: Intel Corporation Meteor Lake Client Platform/MTL-P LP5x T3 RVP, BIOS MTLPFWI1.R00.3471.D91.2401310918 01/31/2024
    [278.780659] RIP: 0010:remap_sg+0x199/0x1d0 [i915]
    ...
    [278.780786] Call Trace:
    [278.780787]  <TASK>
    [278.780788]  ? __apply_to_page_range+0x3e6/0x910
    [278.780795]  ? __pfx_remap_sg+0x10/0x10 [i915]
    [278.780906]  apply_to_page_range+0x14/0x30
    [278.780908]  remap_io_sg+0x14d/0x260 [i915]
    [278.781013]  vm_fault_cpu+0xd2/0x330 [i915]
    [278.781137]  __do_fault+0x3a/0x1b0
    [278.781140]  do_fault+0x322/0x640
    [278.781143]  __handle_mm_fault+0x938/0xfd0
    [278.781150]  handle_mm_fault+0x12c/0x300
    [278.781152]  ? lock_mm_and_find_vma+0x4b/0x760
    [278.781155]  do_user_addr_fault+0x2d6/0x8e0
    [278.781160]  exc_page_fault+0x96/0x2c0
    [278.781165]  asm_exc_page_fault+0x27/0x30
    ...
    
    That issue was apprehended by the author of a change that introduced it,
    and potential risk even annotated with a comment, but then never addressed.
    
    When adding folio pages to a scatterlist table, take care of byte length
    of any single scatterlist not exceeding max_segment.
    
    Fixes: 0b62af28f249b ("i915: convert shmem_sg_free_table() to use a folio_batch")
    Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14809
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: stable@vger.kernel.org # v6.5+
    Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
    Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com>
    Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com>
    Link: https://lore.kernel.org/r/20260224094944.2447913-2-janusz.krzysztofik@linux.intel.com
    (cherry picked from commit 06249b4e691a75694c014a61708c007fb5755f60)
    Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/msm/a6xx: Fix the bogus protect error on X2-85 [+ + +]
Author: Akhil P Oommen <akhilpo@oss.qualcomm.com>
Date:   Wed Feb 25 13:11:57 2026 +0530

    drm/msm/a6xx: Fix the bogus protect error on X2-85
    
    [ Upstream commit 20f644f42e3b8e729d3c3199d48e75c0b257de8f ]
    
    Update the X2-85 gpu's register protect count configuration with the
    correct count_max value to avoid blocking the entire MMIO region from the
    UMD.
    
    Protect configurations are a bit complicated on A8xx. There are 2 set of
    protect registers with different counts: Global and Pipe-specific. The
    last-span-unbound feature is available only on the Pipe-specific protect
    registers. Due to this, we cannot use the BUILD_BUG sanity check for A8x
    protect configurations, so remove the A840 entry from there.
    
    Fixes: 01ff3bf27215 ("drm/msm/a8xx: Add support for Adreno X2-85 GPU")
    Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
    Patchwork: https://patchwork.freedesktop.org/patch/706944/
    Message-ID: <20260225-glymur-protect-fix-v1-1-0deddedf9277@oss.qualcomm.com>
    Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/msm/a8xx: Fix ubwc config related to swizzling [+ + +]
Author: Akhil P Oommen <akhilpo@oss.qualcomm.com>
Date:   Thu Mar 5 23:51:16 2026 +0530

    drm/msm/a8xx: Fix ubwc config related to swizzling
    
    [ Upstream commit 7e459c41264fdd87b096ede8da796a302d569722 ]
    
    To disable l2/l3 swizzling in A8x, set the respective bits in both
    GRAS_NC_MODE_CNTL and RB_CCU_NC_MODE_CNTL registers. This is required
    for Glymur where it is recommended to keep l2/l3 swizzling disabled.
    
    Fixes: 288a93200892 ("drm/msm/adreno: Introduce A8x GPU Support")
    Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
    Message-ID: <20260305-a8xx-ubwc-fix-v1-1-d99b6da4c5a9@oss.qualcomm.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/msm/dpu: Correct the SA8775P intr_underrun/intr_underrun index [+ + +]
Author: Abhinav Kumar <quic_abhinavk@quicinc.com>
Date:   Thu Mar 5 18:17:07 2026 +0800

    drm/msm/dpu: Correct the SA8775P intr_underrun/intr_underrun index
    
    commit 4ce71cea574658f5c5c7412b1a3cc54efe4f9b50 upstream.
    
    The intr_underrun and intr_vsync indices have been swapped, just simply
    corrects them.
    
    Cc: stable@vger.kernel.org
    Fixes: b139c80d181c ("drm/msm/dpu: Add SA8775P support")
    Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Signed-off-by: Yongxing Mou <yongxing.mou@oss.qualcomm.com>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Patchwork: https://patchwork.freedesktop.org/patch/709209/
    Link: https://lore.kernel.org/r/20260305-mdss_catalog-v5-2-06678ac39ac7@oss.qualcomm.com
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/msm/dpu: Fix LM size on a number of platforms [+ + +]
Author: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Date:   Tue Jan 27 11:58:49 2026 +0100

    drm/msm/dpu: Fix LM size on a number of platforms
    
    [ Upstream commit f7bf1319739291067b2bc4b22bd56336afad8f0a ]
    
    The register space has grown with what seems to be DPU8.
    Bump up the .len to match.
    
    Fixes: e3b1f369db5a ("drm/msm/dpu: Add X1E80100 support")
    Fixes: 4a352c2fc15a ("drm/msm/dpu: Introduce SC8280XP")
    Fixes: efcd0107727c ("drm/msm/dpu: add support for SM8550")
    Fixes: 100d7ef6995d ("drm/msm/dpu: add support for SM8450")
    Fixes: 178575173472 ("drm/msm/dpu: add catalog entry for SAR2130P")
    Signed-off-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
    Reviewed-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Patchwork: https://patchwork.freedesktop.org/patch/701063/
    Link: https://lore.kernel.org/r/20260127-topic-lm_size_fix-v1-1-25f88d014dfd@oss.qualcomm.com
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/msm/dsi: fix hdisplay calculation when programming dsi registers [+ + +]
Author: Pengyu Luo <mitltlatltl@gmail.com>
Date:   Sat Feb 14 18:51:28 2026 +0800

    drm/msm/dsi: fix hdisplay calculation when programming dsi registers
    
    [ Upstream commit ac47870fd795549f03d57e0879fc730c79119f4b ]
    
    Recently, the hdisplay calculation is working for 3:1 compressed ratio
    only. If we have a video panel with DSC BPP = 8, and BPC = 10, we still
    use the default bits_per_pclk = 24, then we get the wrong hdisplay. We
    can draw the conclusion by cross-comparing the calculation with the
    calculation in dsi_adjust_pclk_for_compression().
    
    Since CMD mode does not use this, we can remove
    !(msm_host->mode_flags & MIPI_DSI_MODE_VIDEO) safely.
    
    Fixes: efcbd6f9cdeb ("drm/msm/dsi: Enable widebus for DSI")
    Signed-off-by: Pengyu Luo <mitltlatltl@gmail.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Patchwork: https://patchwork.freedesktop.org/patch/704822/
    Link: https://lore.kernel.org/r/20260214105145.105308-1-mitltlatltl@gmail.com
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/msm/dsi: fix pclk rate calculation for bonded dsi [+ + +]
Author: Pengyu Luo <mitltlatltl@gmail.com>
Date:   Sat Mar 7 00:32:38 2026 +0800

    drm/msm/dsi: fix pclk rate calculation for bonded dsi
    
    [ Upstream commit e4eb11b34d6c84f398d8f08d7cb4d6c38e739dd2 ]
    
    Recently, we round up new_hdisplay once at most, for bonded dsi, we
    may need twice, since they are independent links, we should round up
    each half separately. This also aligns with the hdisplay we program
    later in dsi_timing_setup()
    
    Example:
            full_hdisplay = 1904, dsc_bpp = 8, bpc = 8
            new_full_hdisplay = DIV_ROUND_UP(1904 * 8, 8 * 3) = 635
    
    if we use half display
            new_half_hdisplay = DIV_ROUND_UP(952 * 8, 8 * 3) = 318
            new_full_display = 636
    
    Fixes: 7c9e4a554d4a ("drm/msm/dsi: Reduce pclk rate for compression")
    Signed-off-by: Pengyu Luo <mitltlatltl@gmail.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Patchwork: https://patchwork.freedesktop.org/patch/709716/
    Link: https://lore.kernel.org/r/20260306163255.215456-1-mitltlatltl@gmail.com
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/msm: Fix dma_free_attrs() buffer size [+ + +]
Author: Thomas Fourier <fourier.thomas@gmail.com>
Date:   Thu Feb 26 10:57:11 2026 +0100

    drm/msm: Fix dma_free_attrs() buffer size
    
    commit e4eb6e4dd6348dd00e19c2275e3fbaed304ca3bd upstream.
    
    The gpummu->table buffer is alloc'd with size TABLE_SIZE + 32 in
    a2xx_gpummu_new() but freed with size TABLE_SIZE in
    a2xx_gpummu_destroy().
    
    Change the free size to match the allocation.
    
    Fixes: c2052a4e5c99 ("drm/msm: implement a2xx mmu")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Thomas Fourier <fourier.thomas@gmail.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Patchwork: https://patchwork.freedesktop.org/patch/707340/
    Message-ID: <20260226095714.12126-2-fourier.thomas@gmail.com>
    Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/sitronix/st7586: fix bad pixel data due to byte swap [+ + +]
Author: David Lechner <dlechner@baylibre.com>
Date:   Sat Feb 28 22:30:30 2026 -0600

    drm/sitronix/st7586: fix bad pixel data due to byte swap
    
    [ Upstream commit 46d8a07b4ae262e2fec6ce2aa454e06243661265 ]
    
    Correctly set dbi->write_memory_bpw for the ST7586 driver. This driver
    is for a monochrome display that has an unusual data format, so the
    default value set in mipi_dbi_spi_init() is not correct simply because
    this controller is non-standard.
    
    Previously, we were using dbi->swap_bytes to make the same sort of
    workaround, but it was removed in the same commit that added
    dbi->write_memory_bpw, so we need to use the latter now to have the
    correct behavior.
    
    This fixes every 3 columns of pixels being swapped on the display. There
    are 3 pixels per byte, so the byte swap caused this effect.
    
    Fixes: df3fb27a74a4 ("drm/mipi-dbi: Make bits per word configurable for pixel transfers")
    Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
    Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
    Signed-off-by: David Lechner <dlechner@baylibre.com>
    Link: https://patch.msgid.link/20260228-drm-mipi-dbi-fix-st7586-byte-swap-v1-1-e78f6c24cd28@baylibre.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/ttm: Fix ttm_pool_beneficial_order() return type [+ + +]
Author: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
Date:   Fri Feb 27 12:49:01 2026 +0000

    drm/ttm: Fix ttm_pool_beneficial_order() return type
    
    commit 6e3f4514e3b432871ac81717d24f56b441857f77 upstream.
    
    Fix a nasty copy and paste bug, where the incorrect boolean return type of
    the ttm_pool_beneficial_order() helper had a consequence of avoiding
    direct reclaim too eagerly for drivers which use this feature (currently
    amdgpu).
    
    Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
    Fixes: 7e9c548d3709 ("drm/ttm: Allow drivers to specify maximum beneficial TTM pool size")
    Cc: Christian König <christian.koenig@amd.com>
    Cc: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
    Cc: dri-devel@lists.freedesktop.org
    Cc: <stable@vger.kernel.org> # v6.19+
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net>
    Link: https://lore.kernel.org/r/20260227124901.3177-1-tvrtko.ursulin@igalia.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/xe/sync: Cleanup partially initialized sync on parse failure [+ + +]
Author: Shuicheng Lin <shuicheng.lin@intel.com>
Date:   Thu Feb 19 23:35:18 2026 +0000

    drm/xe/sync: Cleanup partially initialized sync on parse failure
    
    commit 1bfd7575092420ba5a0b944953c95b74a5646ff8 upstream.
    
    xe_sync_entry_parse() can allocate references (syncobj, fence, chain fence,
    or user fence) before hitting a later failure path. Several of those paths
    returned directly, leaving partially initialized state and leaking refs.
    
    Route these error paths through a common free_sync label and call
    xe_sync_entry_cleanup(sync) before returning the error.
    
    Fixes: dd08ebf6c352 ("drm/xe: Introduce a new DRM driver for Intel GPUs")
    Cc: Matthew Brost <matthew.brost@intel.com>
    Signed-off-by: Shuicheng Lin <shuicheng.lin@intel.com>
    Reviewed-by: Matthew Brost <matthew.brost@intel.com>
    Signed-off-by: Matthew Brost <matthew.brost@intel.com>
    Link: https://patch.msgid.link/20260219233516.2938172-5-shuicheng.lin@intel.com
    (cherry picked from commit f939bdd9207a5d1fc55cced5459858480686ce22)
    Cc: stable@vger.kernel.org
    Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/xe/sync: Fix user fence leak on alloc failure [+ + +]
Author: Shuicheng Lin <shuicheng.lin@intel.com>
Date:   Thu Feb 19 23:35:19 2026 +0000

    drm/xe/sync: Fix user fence leak on alloc failure
    
    commit 0879c3f04f67e2a1677c25dcc24669ce21eb6a6c upstream.
    
    When dma_fence_chain_alloc() fails, properly release the user fence
    reference to prevent a memory leak.
    
    Fixes: 0995c2fc39b0 ("drm/xe: Enforce correct user fence signaling order using")
    Cc: Matthew Brost <matthew.brost@intel.com>
    Signed-off-by: Shuicheng Lin <shuicheng.lin@intel.com>
    Reviewed-by: Matthew Brost <matthew.brost@intel.com>
    Signed-off-by: Matthew Brost <matthew.brost@intel.com>
    Link: https://patch.msgid.link/20260219233516.2938172-6-shuicheng.lin@intel.com
    (cherry picked from commit a5d5634cde48a9fcd68c8504aa07f89f175074a0)
    Cc: stable@vger.kernel.org
    Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/xe/xe2_hpg: Correct implementation of Wa_16025250150 [+ + +]
Author: Matt Roper <matthew.d.roper@intel.com>
Date:   Fri Feb 27 08:43:41 2026 -0800

    drm/xe/xe2_hpg: Correct implementation of Wa_16025250150
    
    commit 89865e6dc8487b627302bdced3f965cd0c406835 upstream.
    
    Wa_16025250150 asks us to set five register fields of the register to
    0x1 each.  However we were just OR'ing this into the existing register
    value (which has a default of 0x4 for each nibble-sized field) resulting
    in final field values of 0x5 instead of the desired 0x1.  Correct the
    RTP programming (use FIELD_SET instead of SET) to ensure each field is
    assigned to exactly the value we want.
    
    Cc: Aradhya Bhatia <aradhya.bhatia@intel.com>
    Cc: Tejas Upadhyay <tejas.upadhyay@intel.com>
    Cc: stable@vger.kernel.org # v6.16+
    Fixes: 7654d51f1fd8 ("drm/xe/xe2hpg: Add Wa_16025250150")
    Reviewed-by: Ngai-Mint Kwan <ngai-mint.kwan@linux.intel.com>
    Link: https://patch.msgid.link/20260227164341.3600098-2-matthew.d.roper@intel.com
    Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
    (cherry picked from commit d139209ef88e48af1f6731cd45440421c757b6b5)
    Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dt-bindings: display/msm: qcom,sm8750-mdss: Fix model typo [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Date:   Wed Feb 25 18:34:20 2026 +0100

    dt-bindings: display/msm: qcom,sm8750-mdss: Fix model typo
    
    [ Upstream commit 4355b13d46f696d687f42b982efed7570e03e532 ]
    
    Fix obvious model typo (SM8650->SM8750) in the description.
    
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
    Fixes: 6b93840116df ("dt-bindings: display/msm: qcom,sm8750-mdss: Add SM8750")
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Patchwork: https://patchwork.freedesktop.org/patch/707192/
    Link: https://lore.kernel.org/r/20260225173419.125565-2-krzysztof.kozlowski@oss.qualcomm.com
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

dt-bindings: display: msm: Fix reg ranges and clocks on Glymur [+ + +]
Author: Abel Vesa <abel.vesa@oss.qualcomm.com>
Date:   Tue Mar 3 11:03:11 2026 +0200

    dt-bindings: display: msm: Fix reg ranges and clocks on Glymur
    
    commit 7403e87c138475a74e5176176778f391d847f42d upstream.
    
    The Glymur platform has four DisplayPort controllers. The hardware
    supports four streams (MST) per controller. However, on Glymur the first
    three controllers only have two streams wired to the display subsystem,
    while the fourth controller operates in single-stream mode.
    
    Add a dedicated clause for the Glymur compatible to require the register
    ranges for all four stream blocks, while allowing either one pixel clock
    (for the single-stream controller) or two pixel clocks (for the remaining
    controllers).
    
    Update the Glymur MDSS schema example by adding the missing p2, p3,
    mst2link and mst3link register blocks. Without these, the bindings
    validation fails. Also replace the made-up register addresses with the
    actual addresses from the first controller to match the SoC devicetree
    description.
    
    Cc: stable@vger.kernel.org # v6.19
    Fixes: 8f63bf908213 ("dt-bindings: display: msm: Document the Glymur DiplayPort controller")
    Fixes: 1aee577bbc60 ("dt-bindings: display: msm: Document the Glymur Mobile Display SubSystem")
    Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
    Patchwork: https://patchwork.freedesktop.org/patch/708518/
    Link: https://lore.kernel.org/r/20260303-glymur-fix-dp-bindings-reg-clocks-v4-1-1ebd9c7c2cee@oss.qualcomm.com
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
e1000/e1000e: Fix leak in DMA error cleanup [+ + +]
Author: Matt Vollrath <tactii@gmail.com>
Date:   Tue Feb 24 18:28:33 2026 -0500

    e1000/e1000e: Fix leak in DMA error cleanup
    
    [ Upstream commit e94eaef11142b01f77bf8ba4d0b59720b7858109 ]
    
    If an error is encountered while mapping TX buffers, the driver should
    unmap any buffers already mapped for that skb.
    
    Because count is incremented after a successful mapping, it will always
    match the correct number of unmappings needed when dma_error is reached.
    Decrementing count before the while loop in dma_error causes an
    off-by-one error. If any mapping was successful before an unsuccessful
    mapping, exactly one DMA mapping would leak.
    
    In these commits, a faulty while condition caused an infinite loop in
    dma_error:
    Commit 03b1320dfcee ("e1000e: remove use of skb_dma_map from e1000e
    driver")
    Commit 602c0554d7b0 ("e1000: remove use of skb_dma_map from e1000 driver")
    
    Commit c1fa347f20f1 ("e1000/e1000e/igb/igbvf/ixgb/ixgbe: Fix tests of
    unsigned in *_tx_map()") fixed the infinite loop, but introduced the
    off-by-one error.
    
    This issue may still exist in the igbvf driver, but I did not address it
    in this patch.
    
    Fixes: c1fa347f20f1 ("e1000/e1000e/igb/igbvf/ixgb/ixgbe: Fix tests of unsigned in *_tx_map()")
    Assisted-by: Claude:claude-4.6-opus
    Signed-off-by: Matt Vollrath <tactii@gmail.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fgraph: Fix thresh_return clear per-task notrace [+ + +]
Author: Shengming Hu <hu.shengming@zte.com.cn>
Date:   Sat Feb 21 11:30:07 2026 +0800

    fgraph: Fix thresh_return clear per-task notrace
    
    commit 6ca8379b5d36e22b04e6315c3e49a6083377c862 upstream.
    
    When tracing_thresh is enabled, function graph tracing uses
    trace_graph_thresh_return() as the return handler. Unlike
    trace_graph_return(), it did not clear the per-task TRACE_GRAPH_NOTRACE
    flag set by the entry handler for set_graph_notrace addresses. This could
    leave the task permanently in "notrace" state and effectively disable
    function graph tracing for that task.
    
    Mirror trace_graph_return()'s per-task notrace handling by clearing
    TRACE_GRAPH_NOTRACE and returning early when set.
    
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260221113007819YgrZsMGABff4Rc-O_fZxL@zte.com.cn
    Fixes: b84214890a9bc ("function_graph: Move graph notrace bit to shadow stack global var")
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Shengming Hu <hu.shengming@zte.com.cn>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

fgraph: Fix thresh_return nosleeptime double-adjust [+ + +]
Author: Shengming Hu <hu.shengming@zte.com.cn>
Date:   Sat Feb 21 11:33:14 2026 +0800

    fgraph: Fix thresh_return nosleeptime double-adjust
    
    commit b96d0c59cdbb2a22b2545f6f3d5c6276b05761dd upstream.
    
    trace_graph_thresh_return() called handle_nosleeptime() and then delegated
    to trace_graph_return(), which calls handle_nosleeptime() again. When
    sleep-time accounting is disabled this double-adjusts calltime and can
    produce bogus durations (including underflow).
    
    Fix this by computing rettime once, applying handle_nosleeptime() only
    once, using the adjusted calltime for threshold comparison, and writing
    the return event directly via __trace_graph_return() when the threshold is
    met.
    
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260221113314048jE4VRwIyZEALiYByGK0My@zte.com.cn
    Fixes: 3c9880f3ab52b ("ftrace: Use a running sleeptime instead of saving on shadow stack")
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Shengming Hu <hu.shengming@zte.com.cn>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
firmware: cs_dsp: Fix fragmentation regression in firmware download [+ + +]
Author: Richard Fitzgerald <rf@opensource.cirrus.com>
Date:   Wed Mar 4 14:12:50 2026 +0000

    firmware: cs_dsp: Fix fragmentation regression in firmware download
    
    [ Upstream commit facfdef64d11c08e6f1e69d02a0b87cb74cee0f5 ]
    
    Use vmalloc() instead of kmalloc(..., GFP_DMA) to alloc the temporary
    buffer for firmware download blobs. This avoids the problem that a
    heavily fragmented system cannot allocate enough physically-contiguous
    memory for a large blob.
    
    The redundant alloc buffer mechanism was removed in commit 900baa6e7bb0
    ("firmware: cs_dsp: Remove redundant download buffer allocator").
    While doing that I was overly focused on the possibility of the
    underlying bus requiring DMA-safe memory. So I used GFP_DMA kmalloc()s.
    I failed to notice that the code I was removing used vmalloc().
    This creates a regression.
    
    Way back in 2014 the problem of fragmentation with kmalloc()s was fixed
    by commit cdcd7f728753 ("ASoC: wm_adsp: Use vmalloc to allocate firmware
    download buffer").
    
    Although we don't need physically-contiguous memory, we don't know if the
    bus needs some particular alignment of the buffers. Since the change in
    2014, the firmware download has always used whatever alignment vmalloc()
    returns. To avoid introducing a new problem, the temporary buffer is still
    used, to keep the same alignment of pointers passed to regmap_raw_write().
    
    Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
    Fixes: 900baa6e7bb0 ("firmware: cs_dsp: Remove redundant download buffer allocator")
    Link: https://patch.msgid.link/20260304141250.1578597-1-rf@opensource.cirrus.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

firmware: stratix10-rsu: Fix NULL pointer dereference when RSU is disabled [+ + +]
Author: Liwei Song <liwei.song@windriver.com>
Date:   Thu Feb 12 12:00:35 2026 +0800

    firmware: stratix10-rsu: Fix NULL pointer dereference when RSU is disabled
    
    commit c45f7263100cece247dd3fa5fe277bd97fdb5687 upstream.
    
    When the Remote System Update (RSU) isn't enabled in the First Stage
    Boot Loader (FSBL), the driver encounters a NULL pointer dereference when
    excute svc_normal_to_secure_thread() thread, resulting in a kernel panic:
    
    Unable to handle kernel NULL pointer dereference at virtual address 0000000000000008
    Mem abort info:
    ...
    Data abort info:
    ...
    [0000000000000008] user address but active_mm is swapper
    Internal error: Oops: 0000000096000004 [#1]  SMP
    Modules linked in:
    CPU: 0 UID: 0 PID: 79 Comm: svc_smc_hvc_thr Not tainted 6.19.0-rc8-yocto-standard+ #59 PREEMPT
    Hardware name: SoCFPGA Stratix 10 SoCDK (DT)
    pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    pc : svc_normal_to_secure_thread+0x38c/0x990
    lr : svc_normal_to_secure_thread+0x144/0x990
    ...
    Call trace:
     svc_normal_to_secure_thread+0x38c/0x990 (P)
     kthread+0x150/0x210
     ret_from_fork+0x10/0x20
    Code: 97cfc113 f9400260 aa1403e1 f9400400 (f9400402)
    ---[ end trace 0000000000000000 ]---
    
    The issue occurs because rsu_send_async_msg() fails when RSU is not enabled
    in firmware, causing the channel to be freed via stratix10_svc_free_channel().
    However, the probe function continues execution and registers
    svc_normal_to_secure_thread(), which subsequently attempts to access the
    already-freed channel, triggering the NULL pointer dereference.
    
    Fix this by properly cleaning up the async client and returning early on
    failure, preventing the thread from being used with an invalid channel.
    
    Fixes: 15847537b623 ("firmware: stratix10-rsu: Migrate RSU driver to use stratix10 asynchronous framework.")
    Cc: stable@kernel.org
    Signed-off-by: Liwei Song <liwei.song@windriver.com>
    Signed-off-by: Dinh Nguyen <dinguyen@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fs: init flags_valid before calling vfs_fileattr_get [+ + +]
Author: Edward Adam Davis <eadavis@qq.com>
Date:   Fri Feb 6 14:20:28 2026 +0800

    fs: init flags_valid before calling vfs_fileattr_get
    
    [ Upstream commit cb184dd19154fc486fa3d9e02afe70a97e54e055 ]
    
    syzbot reported a uninit-value bug in [1].
    
    Similar to the "*get" context where the kernel's internal file_kattr
    structure is initialized before calling vfs_fileattr_get(), we should
    use the same mechanism when using fa.
    
    [1]
    BUG: KMSAN: uninit-value in fuse_fileattr_get+0xeb4/0x1450 fs/fuse/ioctl.c:517
     fuse_fileattr_get+0xeb4/0x1450 fs/fuse/ioctl.c:517
     vfs_fileattr_get fs/file_attr.c:94 [inline]
     __do_sys_file_getattr fs/file_attr.c:416 [inline]
    
    Local variable fa.i created at:
     __do_sys_file_getattr fs/file_attr.c:380 [inline]
     __se_sys_file_getattr+0x8c/0xbd0 fs/file_attr.c:372
    
    Reported-by: syzbot+7c31755f2cea07838b0c@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=7c31755f2cea07838b0c
    Tested-by: syzbot+7c31755f2cea07838b0c@syzkaller.appspotmail.com
    Signed-off-by: Edward Adam Davis <eadavis@qq.com>
    Link: https://patch.msgid.link/tencent_B6C4583771D76766D71362A368696EC3B605@qq.com
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gpib: lpvo_usb: fix unintended binding of FTDI 8U232AM devices [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Thu Mar 5 16:17:28 2026 +0100

    gpib: lpvo_usb: fix unintended binding of FTDI 8U232AM devices
    
    commit 163cc462dea7d5b75be4db49ca78a2b99c55375e upstream.
    
    The LPVO USB GPIB adapter apparently uses an FTDI 8U232AM with the
    default PID, but this device id is already handled by the ftdi_sio
    serial driver.
    
    Stop binding to the default PID to avoid breaking existing setups with
    FTDI 8U232AM.
    
    Anyone using this driver should blacklist the ftdi_sio driver and add
    the device id manually through sysfs (e.g. using udev rules).
    
    Fixes: fce79512a96a ("staging: gpib: Add LPVO DIY USB GPIB driver")
    Fixes: e6ab504633e4 ("staging: gpib: Destage gpib")
    Cc: Dave Penkler <dpenkler@gmail.com>
    Cc: stable <stable@kernel.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20260305151729.10501-2-johan@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
gpiolib: normalize the return value of gc->get() on behalf of buggy drivers [+ + +]
Author: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Date:   Thu Feb 19 10:51:33 2026 +0100

    gpiolib: normalize the return value of gc->get() on behalf of buggy drivers
    
    commit ec2cceadfae72304ca19650f9cac4b2a97b8a2fc upstream.
    
    Commit 86ef402d805d ("gpiolib: sanitize the return value of
    gpio_chip::get()") started checking the return value of the .get()
    callback in struct gpio_chip. Now - almost a year later - it turns out
    that there are quite a few drivers in tree that can break with this
    change. Partially revert it: normalize the return value in GPIO core but
    also emit a warning.
    
    Cc: stable@vger.kernel.org
    Fixes: 86ef402d805d ("gpiolib: sanitize the return value of gpio_chip::get()")
    Reported-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Closes: https://lore.kernel.org/all/aZSkqGTqMp_57qC7@google.com/
    Reviewed-by: Linus Walleij <linusw@kernel.org>
    Reviewed-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Link: https://patch.msgid.link/20260219-gpiolib-set-normalize-v2-1-f84630e45796@oss.qualcomm.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hwmon: (pmbus/q54sj108a2) fix stack overflow in debugfs read [+ + +]
Author: Sanman Pradhan <psanman@juniper.net>
Date:   Wed Mar 4 15:51:17 2026 -0800

    hwmon: (pmbus/q54sj108a2) fix stack overflow in debugfs read
    
    commit 25dd70a03b1f5f3aa71e1a5091ecd9cd2a13ee43 upstream.
    
    The q54sj108a2_debugfs_read function suffers from a stack buffer overflow
    due to incorrect arguments passed to bin2hex(). The function currently
    passes 'data' as the destination and 'data_char' as the source.
    
    Because bin2hex() converts each input byte into two hex characters, a
    32-byte block read results in 64 bytes of output. Since 'data' is only
    34 bytes (I2C_SMBUS_BLOCK_MAX + 2), this writes 30 bytes past the end
    of the buffer onto the stack.
    
    Additionally, the arguments were swapped: it was reading from the
    zero-initialized 'data_char' and writing to 'data', resulting in
    all-zero output regardless of the actual I2C read.
    
    Fix this by:
    1. Expanding 'data_char' to 66 bytes to safely hold the hex output.
    2. Correcting the bin2hex() argument order and using the actual read count.
    3. Using a pointer to select the correct output buffer for the final
       simple_read_from_buffer call.
    
    Fixes: d014538aa385 ("hwmon: (pmbus) Driver for Delta power supplies Q54SJ108A2")
    Cc: stable@vger.kernel.org
    Signed-off-by: Sanman Pradhan <psanman@juniper.net>
    Link: https://lore.kernel.org/r/20260304235116.1045-1-sanman.p211993@gmail.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
i3c: dw-i3c-master: Set SIR_REJECT in DAT on device attach and reattach [+ + +]
Author: Adrian Ng Ho Yin <adrianhoyin.ng@altera.com>
Date:   Fri Feb 13 14:00:48 2026 +0800

    i3c: dw-i3c-master: Set SIR_REJECT in DAT on device attach and reattach
    
    [ Upstream commit f311a05784634febd299f03476b80f3f18489767 ]
    
    The DesignWare I3C master controller ACKs IBIs as soon as a valid
    Device Address Table (DAT) entry is present. This can create a race
    between device attachment (after DAA) and the point where the client
    driver enables IBIs via i3c_device_enable_ibi().
    
    Set DEV_ADDR_TABLE_SIR_REJECT in the DAT entry during
    attach_i3c_dev() and reattach_i3c_dev() so that IBIs are rejected
    by default. The bit is managed thereafter by the existing
    dw_i3c_master_set_sir_enabled() function, which clears it in
    enable_ibi() after ENEC is issued, and restores it in disable_ibi()
    after DISEC.
    
    Fixes: 1dd728f5d4d4 ("i3c: master: Add driver for Synopsys DesignWare IP")
    Signed-off-by: Adrian Ng Ho Yin <adrianhoyin.ng@altera.com>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Link: https://patch.msgid.link/53f5b8cbdd8af789ec38b95b02873f32f9182dd6.1770962368.git.adrianhoyin.ng@altera.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i3c: mipi-i3c-hci: Add missing TID field to no-op command descriptor [+ + +]
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Fri Mar 6 09:24:46 2026 +0200

    i3c: mipi-i3c-hci: Add missing TID field to no-op command descriptor
    
    commit ec3cfd835f7c4bbd23bc9ad909d2fdc772a578bb upstream.
    
    The internal control command descriptor used for no-op commands includes a
    Transaction ID (TID) field, but the no-op command constructed in
    hci_dma_dequeue_xfer() omitted it.  As a result, the hardware receives a
    no-op descriptor without the expected TID.
    
    This bug has gone unnoticed because the TID is currently not validated in
    the no-op completion path, but the descriptor format requires it to be
    present.
    
    Add the missing TID field when generating a no-op descriptor so that its
    layout matches the defined command structure.
    
    Fixes: 9ad9a52cce282 ("i3c/master: introduce the mipi-i3c-hci driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Link: https://patch.msgid.link/20260306072451.11131-10-adrian.hunter@intel.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i3c: mipi-i3c-hci: Consolidate spinlocks [+ + +]
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Fri Mar 6 09:24:41 2026 +0200

    i3c: mipi-i3c-hci: Consolidate spinlocks
    
    commit fa12bb903bc3ed1826e355d267fe134bde95e23c upstream.
    
    The MIPI I3C HCI driver currently uses separate spinlocks for different
    contexts (PIO vs. DMA rings).  This split is unnecessary and complicates
    upcoming fixes.  The driver does not support concurrent PIO and DMA
    operation, and it only supports a single DMA ring, so a single lock is
    sufficient for all paths.
    
    Introduce a unified spinlock in struct i3c_hci, switch both PIO and DMA
    code to use it, and remove the per-context locks.
    
    No functional change is intended in this patch.
    
    Fixes: 9ad9a52cce282 ("i3c/master: introduce the mipi-i3c-hci driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Link: https://patch.msgid.link/20260306072451.11131-5-adrian.hunter@intel.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i3c: mipi-i3c-hci: Correct RING_CTRL_ABORT handling in DMA dequeue [+ + +]
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Fri Mar 6 09:24:45 2026 +0200

    i3c: mipi-i3c-hci: Correct RING_CTRL_ABORT handling in DMA dequeue
    
    commit b795e68bf3073d67bebbb5a44d93f49efc5b8cc7 upstream.
    
    The logic used to abort the DMA ring contains several flaws:
    
     1. The driver unconditionally issues a ring abort even when the ring has
        already stopped.
     2. The completion used to wait for abort completion is never
        re-initialized, resulting in incorrect wait behavior.
     3. The abort sequence unintentionally clears RING_CTRL_ENABLE, which
        resets hardware ring pointers and disrupts the controller state.
     4. If the ring is already stopped, the abort operation should be
        considered successful without attempting further action.
    
    Fix the abort handling by checking whether the ring is running before
    issuing an abort, re-initializing the completion when needed, ensuring that
    RING_CTRL_ENABLE remains asserted during abort, and treating an already
    stopped ring as a successful condition.
    
    Fixes: 9ad9a52cce282 ("i3c/master: introduce the mipi-i3c-hci driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Link: https://patch.msgid.link/20260306072451.11131-9-adrian.hunter@intel.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i3c: mipi-i3c-hci: Factor out DMA mapping from queuing path [+ + +]
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Fri Mar 6 09:24:40 2026 +0200

    i3c: mipi-i3c-hci: Factor out DMA mapping from queuing path
    
    commit f3bcbfe1b8b0b836b772927f75f8cb6e759eb00a upstream.
    
    Prepare for fixing a race in the DMA ring enqueue path when handling
    parallel transfers.  Move all DMA mapping out of hci_dma_queue_xfer()
    and into a new helper that performs the mapping up front.
    
    This refactoring allows the upcoming fix to extend the spinlock coverage
    around the enqueue operation without performing DMA mapping under the
    spinlock.
    
    No functional change is intended in this patch.
    
    Fixes: 9ad9a52cce282 ("i3c/master: introduce the mipi-i3c-hci driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Link: https://patch.msgid.link/20260306072451.11131-4-adrian.hunter@intel.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i3c: mipi-i3c-hci: Fix race in DMA ring dequeue [+ + +]
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Fri Mar 6 09:24:43 2026 +0200

    i3c: mipi-i3c-hci: Fix race in DMA ring dequeue
    
    commit 1dca8aee80eea76d2aae21265de5dd64f6ba0f09 upstream.
    
    The HCI DMA dequeue path (hci_dma_dequeue_xfer()) may be invoked for
    multiple transfers that timeout around the same time.  However, the
    function is not serialized and can race with itself.
    
    When a timeout occurs, hci_dma_dequeue_xfer() stops the ring, processes
    incomplete transfers, and then restarts the ring.  If another timeout
    triggers a parallel call into the same function, the two instances may
    interfere with each other - stopping or restarting the ring at unexpected
    times.
    
    Add a mutex so that hci_dma_dequeue_xfer() is serialized with respect to
    itself.
    
    Fixes: 9ad9a52cce282 ("i3c/master: introduce the mipi-i3c-hci driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Link: https://patch.msgid.link/20260306072451.11131-7-adrian.hunter@intel.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i3c: mipi-i3c-hci: Restart DMA ring correctly after dequeue abort [+ + +]
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Fri Mar 6 09:24:47 2026 +0200

    i3c: mipi-i3c-hci: Restart DMA ring correctly after dequeue abort
    
    commit b6d586431ae20d5157ee468d0ef62ad26798ef13 upstream.
    
    The DMA dequeue path attempts to restart the ring after aborting an
    in-flight transfer, but the current sequence is incomplete. The controller
    must be brought out of the aborted state and the ring control registers
    must be programmed in the correct order: first clearing ABORT, then
    re-enabling the ring and asserting RUN_STOP to resume operation.
    
    Add the missing controller resume step and update the ring control writes
    so that the ring is restarted using the proper sequence.
    
    Fixes: 9ad9a52cce282 ("i3c/master: introduce the mipi-i3c-hci driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Link: https://patch.msgid.link/20260306072451.11131-11-adrian.hunter@intel.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i3c: mipi-i3c-hci: Use ETIMEDOUT instead of ETIME for timeout errors [+ + +]
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Fri Mar 6 09:24:38 2026 +0200

    i3c: mipi-i3c-hci: Use ETIMEDOUT instead of ETIME for timeout errors
    
    commit 4167b8914463132654e01e16259847d097f8a7f7 upstream.
    
    The MIPI I3C HCI driver currently returns -ETIME for various timeout
    conditions, while other I3C master drivers consistently use -ETIMEDOUT
    for the same class of errors.  Align the HCI driver with the rest of the
    subsystem by replacing all uses of -ETIME with -ETIMEDOUT.
    
    Fixes: 9ad9a52cce282 ("i3c/master: introduce the mipi-i3c-hci driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Link: https://patch.msgid.link/20260306072451.11131-2-adrian.hunter@intel.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
i40e: fix src IP mask checks and memcpy argument names in cloud filter [+ + +]
Author: Alok Tiwari <alok.a.tiwari@oracle.com>
Date:   Mon Nov 10 11:13:38 2025 -0800

    i40e: fix src IP mask checks and memcpy argument names in cloud filter
    
    [ Upstream commit e809085f492842ce7a519c9ef72d40f4bca89c13 ]
    
    Fix following issues in the IPv4 and IPv6 cloud filter handling logic in
    both the add and delete paths:
    
    - The source-IP mask check incorrectly compares mask.src_ip[0] against
      tcf.dst_ip[0]. Update it to compare against tcf.src_ip[0]. This likely
      goes unnoticed because the check is in an "else if" path that only
      executes when dst_ip is not set, most cloud filter use cases focus on
      destination-IP matching, and the buggy condition can accidentally
      evaluate true in some cases.
    
    - memcpy() for the IPv4 source address incorrectly uses
      ARRAY_SIZE(tcf.dst_ip) instead of ARRAY_SIZE(tcf.src_ip), although
      both arrays are the same size.
    
    - The IPv4 memcpy operations used ARRAY_SIZE(tcf.dst_ip) and ARRAY_SIZE
      (tcf.src_ip), Update these to use sizeof(cfilter->ip.v4.dst_ip) and
      sizeof(cfilter->ip.v4.src_ip) to ensure correct and explicit copy size.
    
    - In the IPv6 delete path, memcmp() uses sizeof(src_ip6) when comparing
      dst_ip6 fields. Replace this with sizeof(dst_ip6) to make the intent
      explicit, even though both fields are struct in6_addr.
    
    Fixes: e284fc280473 ("i40e: Add and delete cloud filter")
    Signed-off-by: Alok Tiwari <alok.a.tiwari@oracle.com>
    Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iavf: fix incorrect reset handling in callbacks [+ + +]
Author: Petr Oros <poros@redhat.com>
Date:   Wed Feb 11 20:18:55 2026 +0100

    iavf: fix incorrect reset handling in callbacks
    
    [ Upstream commit fdadbf6e84c44df8dbb85cfdd38bc10e4431501d ]
    
    Three driver callbacks schedule a reset and wait for its completion:
    ndo_change_mtu(), ethtool set_ringparam(), and ethtool set_channels().
    
    Waiting for reset in ndo_change_mtu() and set_ringparam() was added by
    commit c2ed2403f12c ("iavf: Wait for reset in callbacks which trigger
    it") to fix a race condition where adding an interface to bonding
    immediately after MTU or ring parameter change failed because the
    interface was still in __RESETTING state. The same commit also added
    waiting in iavf_set_priv_flags(), which was later removed by commit
    53844673d555 ("iavf: kill "legacy-rx" for good").
    
    Waiting in set_channels() was introduced earlier by commit 4e5e6b5d9d13
    ("iavf: Fix return of set the new channel count") to ensure the PF has
    enough time to complete the VF reset when changing channel count, and to
    return correct error codes to userspace.
    
    Commit ef490bbb2267 ("iavf: Add net_shaper_ops support") added
    net_shaper_ops to iavf, which required reset_task to use _locked NAPI
    variants (napi_enable_locked, napi_disable_locked) that need the netdev
    instance lock.
    
    Later, commit 7e4d784f5810 ("net: hold netdev instance lock during
    rtnetlink operations") and commit 2bcf4772e45a ("net: ethtool: try to
    protect all callback with netdev instance lock") started holding the
    netdev instance lock during ndo and ethtool callbacks for drivers with
    net_shaper_ops.
    
    Finally, commit 120f28a6f314 ("iavf: get rid of the crit lock")
    replaced the driver's crit_lock with netdev_lock in reset_task, causing
    incorrect behavior: the callback holds netdev_lock and waits for
    reset_task, but reset_task needs the same lock:
    
      Thread 1 (callback)               Thread 2 (reset_task)
      -------------------               ---------------------
      netdev_lock()                     [blocked on workqueue]
      ndo_change_mtu() or ethtool op
        iavf_schedule_reset()
        iavf_wait_for_reset()           iavf_reset_task()
          waiting...                      netdev_lock() <- blocked
    
    This does not strictly deadlock because iavf_wait_for_reset() uses
    wait_event_interruptible_timeout() with a 5-second timeout. The wait
    eventually times out, the callback returns an error to userspace, and
    after the lock is released reset_task completes the reset. This leads to
    incorrect behavior: userspace sees an error even though the configuration
    change silently takes effect after the timeout.
    
    Fix this by extracting the reset logic from iavf_reset_task() into a new
    iavf_reset_step() function that expects netdev_lock to be already held.
    The three callbacks now call iavf_reset_step() directly instead of
    scheduling the work and waiting, performing the reset synchronously in
    the caller's context which already holds netdev_lock. This eliminates
    both the incorrect error reporting and the need for
    iavf_wait_for_reset(), which is removed along with the now-unused
    reset_waitqueue.
    
    The workqueue-based iavf_reset_task() becomes a thin wrapper that
    acquires netdev_lock and calls iavf_reset_step(), preserving its use
    for PF-initiated resets.
    
    The callbacks may block for several seconds while iavf_reset_step()
    polls hardware registers, but this is acceptable since netdev_lock is a
    per-device mutex and only serializes operations on the same interface.
    
    v3:
    - Remove netif_running() guard from iavf_set_channels(). Unlike
      set_ringparam where descriptor counts are picked up by iavf_open()
      directly, num_req_queues is only consumed during
      iavf_reinit_interrupt_scheme() in the reset path. Skipping the reset
      on a down device would silently discard the channel count change.
    - Remove dead reset_waitqueue code (struct field, init, and all
      wake_up calls) since iavf_wait_for_reset() was the only consumer.
    
    Fixes: 120f28a6f314 ("iavf: get rid of the crit lock")
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Signed-off-by: Petr Oros <poros@redhat.com>
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Tested-by: Rafal Romanowski <rafal.romanowski@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iavf: fix PTP use-after-free during reset [+ + +]
Author: Petr Oros <poros@redhat.com>
Date:   Thu Jan 29 10:57:23 2026 +0100

    iavf: fix PTP use-after-free during reset
    
    [ Upstream commit efc54fb13d79117a825fef17364315a58682c7ec ]
    
    Commit 7c01dbfc8a1c5f ("iavf: periodically cache PHC time") introduced a
    worker to cache PHC time, but failed to stop it during reset or disable.
    
    This creates a race condition where `iavf_reset_task()` or
    `iavf_disable_vf()` free adapter resources (AQ) while the worker is still
    running. If the worker triggers `iavf_queue_ptp_cmd()` during teardown, it
    accesses freed memory/locks, leading to a crash.
    
    Fix this by calling `iavf_ptp_release()` before tearing down the adapter.
    This ensures `ptp_clock_unregister()` synchronously cancels the worker and
    cleans up the chardev before the backing resources are destroyed.
    
    Fixes: 7c01dbfc8a1c5f ("iavf: periodically cache PHC time")
    Signed-off-by: Petr Oros <poros@redhat.com>
    Reviewed-by: Ivan Vecera <ivecera@redhat.com>
    Acked-by: Jacob Keller <jacob.e.keller@intel.com>
    Reviewed-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
    Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>
    Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ice: fix retry for AQ command 0x06EE [+ + +]
Author: Jakub Staniszewski <jakub.staniszewski@linux.intel.com>
Date:   Tue Jan 13 20:38:17 2026 +0100

    ice: fix retry for AQ command 0x06EE
    
    commit fb4903b3354aed4a2301180cf991226f896c87ed upstream.
    
    Executing ethtool -m can fail reporting a netlink I/O error while firmware
    link management holds the i2c bus used to communicate with the module.
    
    According to Intel(R) Ethernet Controller E810 Datasheet Rev 2.8 [1]
    Section 3.3.10.4 Read/Write SFF EEPROM (0x06EE)
    request should to be retried upon receiving EBUSY from firmware.
    
    Commit e9c9692c8a81 ("ice: Reimplement module reads used by ethtool")
    implemented it only for part of ice_get_module_eeprom(), leaving all other
    calls to ice_aq_sff_eeprom() vulnerable to returning early on getting
    EBUSY without retrying.
    
    Remove the retry loop from ice_get_module_eeprom() and add Admin Queue
    (AQ) command with opcode 0x06EE to the list of commands that should be
    retried on receiving EBUSY from firmware.
    
    Cc: stable@vger.kernel.org
    Fixes: e9c9692c8a81 ("ice: Reimplement module reads used by ethtool")
    Signed-off-by: Jakub Staniszewski <jakub.staniszewski@linux.intel.com>
    Co-developed-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
    Signed-off-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
    Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Link: https://www.intel.com/content/www/us/en/content-details/613875/intel-ethernet-controller-e810-datasheet.html [1]
    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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ice: reintroduce retry mechanism for indirect AQ [+ + +]
Author: Jakub Staniszewski <jakub.staniszewski@linux.intel.com>
Date:   Tue Jan 13 20:38:16 2026 +0100

    ice: reintroduce retry mechanism for indirect AQ
    
    commit 326256c0a72d4877cec1d4df85357da106233128 upstream.
    
    Add retry mechanism for indirect Admin Queue (AQ) commands. To do so we
    need to keep the command buffer.
    
    This technically reverts commit 43a630e37e25
    ("ice: remove unused buffer copy code in ice_sq_send_cmd_retry()"),
    but combines it with a fix in the logic by using a kmemdup() call,
    making it more robust and less likely to break in the future due to
    programmer error.
    
    Cc: Michal Schmidt <mschmidt@redhat.com>
    Cc: stable@vger.kernel.org
    Fixes: 3056df93f7a8 ("ice: Re-send some AQ commands, as result of EBUSY AQ error")
    Signed-off-by: Jakub Staniszewski <jakub.staniszewski@linux.intel.com>
    Co-developed-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
    Signed-off-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
    Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
iio: buffer: Fix wait_queue not being removed [+ + +]
Author: Nuno Sá <nuno.sa@analog.com>
Date:   Mon Feb 16 13:24:27 2026 +0000

    iio: buffer: Fix wait_queue not being removed
    
    commit 064234044056c93a3719d6893e6e5a26a94a61b6 upstream.
    
    In the edge case where the IIO device is unregistered while we're
    buffering, we were directly returning an error without removing the wait
    queue. Instead, set 'ret' and break out of the loop.
    
    Fixes: 9eeee3b0bf19 ("iio: Add output buffer support")
    Signed-off-by: Nuno Sá <nuno.sa@analog.com>
    Reviewed-by: David Lechner <dlechner@baylibre.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: chemical: bme680: Fix measurement wait duration calculation [+ + +]
Author: Chris Spencer <spencercw@gmail.com>
Date:   Thu Feb 5 14:55:45 2026 +0000

    iio: chemical: bme680: Fix measurement wait duration calculation
    
    commit f55b9510cd9437da3a0efa08b089caeb47595ff1 upstream.
    
    This function refers to the Bosch BME680 API as the source of the
    calculation, but one of the constants does not match the Bosch
    implementation. This appears to be a simple transposition of two digits,
    resulting in a wait time that is too short. This can cause the following
    'device measurement cycle incomplete' check to occasionally fail, returning
    EBUSY to user space.
    
    Adjust the constant to match the Bosch implementation and resolve the EBUSY
    errors.
    
    Fixes: 4241665e6ea0 ("iio: chemical: bme680: Fix sensor data read operation")
    Link: https://github.com/boschsensortec/BME68x_SensorAPI/blob/v4.4.8/bme68x.c#L521
    Signed-off-by: Chris Spencer <spencercw@gmail.com>
    Acked-by: Vasileios Amoiridis <vassilisamir@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: chemical: sps30_i2c: fix buffer size in sps30_i2c_read_meas() [+ + +]
Author: Antoniu Miclaus <antoniu.miclaus@analog.com>
Date:   Thu Feb 12 14:46:07 2026 +0200

    iio: chemical: sps30_i2c: fix buffer size in sps30_i2c_read_meas()
    
    commit 216345f98cae7fcc84f49728c67478ac00321c87 upstream.
    
    sizeof(num) evaluates to sizeof(size_t) (8 bytes on 64-bit) instead
    of the intended __be32 element size (4 bytes). Use sizeof(*meas) to
    correctly match the buffer element type.
    
    Fixes: 8f3f13085278 ("iio: sps30: separate core and interface specific code")
    Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com>
    Acked-by: Tomasz Duszynski <tduszyns@gmail.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: chemical: sps30_serial: fix buffer size in sps30_serial_read_meas() [+ + +]
Author: Antoniu Miclaus <antoniu.miclaus@analog.com>
Date:   Thu Feb 12 14:46:08 2026 +0200

    iio: chemical: sps30_serial: fix buffer size in sps30_serial_read_meas()
    
    commit c3914ce1963c4db25e186112c90fa5d2361e9e0a upstream.
    
    sizeof(num) evaluates to sizeof(size_t) which is 8 bytes on 64-bit,
    but the buffer elements are only 4 bytes. The same function already
    uses sizeof(*meas) on line 312, making the mismatch evident. Use
    sizeof(*meas) consistently.
    
    Fixes: b2e171f5a5c6 ("iio: sps30: add support for serial interface")
    Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com>
    Acked-by: Tomasz Duszynski <tduszyns@gmail.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: dac: ds4424: reject -128 RAW value [+ + +]
Author: Oleksij Rempel <o.rempel@pengutronix.de>
Date:   Wed Feb 4 15:00:33 2026 +0100

    iio: dac: ds4424: reject -128 RAW value
    
    commit 5187e03b817c26c1c3bcb2645a612ea935c4be89 upstream.
    
    The DS442x DAC uses sign-magnitude encoding, so -128 cannot be represented
    in hardware (7-bit magnitude).
    
    Previously, passing -128 resulted in a truncated value that programmed
    0mA (magnitude 0) instead of the expected maximum negative current,
    effectively failing silently.
    
    Reject -128 to avoid producing the wrong current.
    
    Fixes: d632a2bd8ffc ("iio: dac: ds4422/ds4424 dac driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: frequency: adf4377: Fix duplicated soft reset mask [+ + +]
Author: SeungJu Cheon <suunj1331@gmail.com>
Date:   Sat Jan 24 04:47:58 2026 +0900

    iio: frequency: adf4377: Fix duplicated soft reset mask
    
    commit 6c8bf4b604a8a6346ca71f1c027fa01c2c2e04cb upstream.
    
    The regmap_read_poll_timeout() uses ADF4377_0000_SOFT_RESET_R_MSK
    twice instead of checking both SOFT_RESET_MSK (bit 0) and
    SOFT_RESET_R_MSK (bit 7). This causes an incomplete reset status check.
    
    The code first sets both SOFT_RESET and SOFT_RESET_R bits to 1 via
    regmap_update_bits(), then polls for them to be cleared. Since we set
    both bits before polling, we should be waiting for both to clear.
    
    Fix by using both masks as done in regmap_update_bits() above.
    
    Fixes: eda549e2e524 ("iio: frequency: adf4377: add support for ADF4377")
    Signed-off-by: SeungJu Cheon <suunj1331@gmail.com>
    Cc: Stable@vger.kernel.org
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: gyro: mpu3050-core: fix pm_runtime error handling [+ + +]
Author: Antoniu Miclaus <antoniu.miclaus@analog.com>
Date:   Mon Feb 16 11:57:56 2026 +0200

    iio: gyro: mpu3050-core: fix pm_runtime error handling
    
    commit acc3949aab3e8094641a9c7c2768de1958c88378 upstream.
    
    The return value of pm_runtime_get_sync() is not checked, allowing
    the driver to access hardware that may fail to resume. The device
    usage count is also unconditionally incremented. Use
    pm_runtime_resume_and_get() which propagates errors and avoids
    incrementing the usage count on failure.
    
    In preenable, add pm_runtime_put_autosuspend() on set_8khz_samplerate()
    failure since postdisable does not run when preenable fails.
    
    Fixes: 3904b28efb2c ("iio: gyro: Add driver for the MPU-3050 gyroscope")
    Reviewed-by: Linus Walleij <linusw@kernel.org>
    Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: gyro: mpu3050-i2c: fix pm_runtime error handling [+ + +]
Author: Antoniu Miclaus <antoniu.miclaus@analog.com>
Date:   Mon Feb 16 11:57:55 2026 +0200

    iio: gyro: mpu3050-i2c: fix pm_runtime error handling
    
    commit 91f950b4cbb1aa9ea4eb3999f1463e8044b717fb upstream.
    
    The return value of pm_runtime_get_sync() is not checked, and the
    function always returns success. This allows I2C mux operations to
    proceed even when the device fails to resume.
    
    Use pm_runtime_resume_and_get() and propagate its return value to
    properly handle resume failures.
    
    Fixes: 3904b28efb2c ("iio: gyro: Add driver for the MPU-3050 gyroscope")
    Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: imu: adis: Fix NULL pointer dereference in adis_init [+ + +]
Author: Radu Sabau <radu.sabau@analog.com>
Date:   Fri Feb 20 16:16:41 2026 +0200

    iio: imu: adis: Fix NULL pointer dereference in adis_init
    
    commit 9990cd4f8827bd1ae3fb6eb7407630d8d463c430 upstream.
    
    The adis_init() function dereferences adis->ops to check if the
    individual function pointers (write, read, reset) are NULL, but does
    not first check if adis->ops itself is NULL.
    
    Drivers like adis16480, adis16490, adis16545 and others do not set
    custom ops and rely on adis_init() assigning the defaults. Since struct
    adis is zero-initialized by devm_iio_device_alloc(), adis->ops is NULL
    when adis_init() is called, causing a NULL pointer dereference:
    
        Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000
        pc : adis_init+0xc0/0x118
        Call trace:
         adis_init+0xc0/0x118
         adis16480_probe+0xe0/0x670
    
    Fix this by checking if adis->ops is NULL before dereferencing it,
    falling through to assign the default ops in that case.
    
    Fixes: 3b29bcee8f6f ("iio: imu: adis: Add custom ops struct")
    Signed-off-by: Radu Sabau <radu.sabau@analog.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
    Reviewed-by: Antoniu Miclaus <antoniu.miclaus@analog.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: imu: inv-mpu9150: fix irq ack preventing irq storms [+ + +]
Author: Andreas Kemnade <andreas@kemnade.info>
Date:   Wed Dec 31 22:14:16 2025 +0100

    iio: imu: inv-mpu9150: fix irq ack preventing irq storms
    
    [ Upstream commit d23d763e00ace4e9c59f8d33e0713d401133ba88 ]
    
    IRQ needs to be acked. for some odd reasons, reading from irq status does
    not reliable help, enable acking from any register to be on the safe side
    and read the irq status register. Comments in the code indicate a known
    unreliability with that register.
    The blamed commit was tested with mpu6050 in lg,p895 and lg,p880 according
    to Tested-bys. But with the MPU9150 in the Epson Moverio BT-200 this leads
    to irq storms without properly acking the irq.
    
    Fixes: 0a3b517c8089 ("iio: imu: inv_mpu6050: fix interrupt status read for old buggy chips")
    Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
    Acked-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iio: imu: inv_icm42600: fix odr switch to the same value [+ + +]
Author: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
Date:   Fri Jan 30 16:38:47 2026 +0100

    iio: imu: inv_icm42600: fix odr switch to the same value
    
    commit c9f3a593137d862d424130343e77d4b5260a4f5a upstream.
    
    ODR switch is done in 2 steps when FIFO is on : change the ODR register
    value and acknowledge change when reading the FIFO ODR change flag.
    When we are switching to the same odr value, we end up waiting for a
    FIFO ODR flag that is never happening.
    
    Fix the issue by doing nothing and exiting properly when we are
    switching to the same ODR value.
    
    Fixes: ec74ae9fd37c ("iio: imu: inv_icm42600: add accurate timestamping")
    Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: imu: inv_icm42600: fix odr switch when turning buffer off [+ + +]
Author: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
Date:   Fri Jan 30 17:10:23 2026 +0100

    iio: imu: inv_icm42600: fix odr switch when turning buffer off
    
    commit ffd32db8263d2d785a2c419486a450dc80693235 upstream.
    
    ODR switch is done in 2 steps when FIFO is on : change the ODR register
    value and acknowledge change when reading the FIFO ODR change flag.
    When we are switching odr and turning buffer off just afterward, we are
    losing the FIFO ODR change flag and ODR switch is blocked.
    
    Fix the issue by force applying any waiting ODR change when turning
    buffer off.
    
    Fixes: ec74ae9fd37c ("iio: imu: inv_icm42600: add accurate timestamping")
    Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: imu: inv_icm45600: fix INT1 drive bit inverted [+ + +]
Author: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
Date:   Thu Feb 5 17:59:14 2026 +0100

    iio: imu: inv_icm45600: fix INT1 drive bit inverted
    
    commit 7ef74d961d1ad6ec72b50887ca119d7f98f07717 upstream.
    
    Drive bit must be set for open-drain mode and be cleared for push-pull
    mode.
    
    Referring to datasheet DS-000576_ICM-45605.pdf section 17.23
    INT1_CONFIG2.
    
    Fixes: 06674a72cf7a ("iio: imu: inv_icm45600: add buffer support in iio devices")
    Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
    Reviewed-by: Andy Shevchenko <andy@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: imu: inv_icm45600: fix regulator put warning when probe fails [+ + +]
Author: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
Date:   Tue Feb 17 11:44:50 2026 +0100

    iio: imu: inv_icm45600: fix regulator put warning when probe fails
    
    commit 2617595538be8a2f270ad13fccb9f56007b292d7 upstream.
    
    When the driver probe fails we encounter a regulator put warning
    because vddio regulator is not stopped before release. The issue
    comes from pm_runtime not already setup when core probe fails and
    the vddio regulator disable callback is called.
    
    Fix the issue by setting pm_runtime active early before vddio
    regulator resource cleanup. This requires to cut pm_runtime
    set_active and enable in 2 function calls.
    
    Fixes: 7ff021a3faca ("iio: imu: inv_icm45600: add new inv_icm45600 driver")
    Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: light: bh1780: fix PM runtime leak on error path [+ + +]
Author: Antoniu Miclaus <antoniu.miclaus@analog.com>
Date:   Fri Jan 30 13:30:20 2026 +0200

    iio: light: bh1780: fix PM runtime leak on error path
    
    commit dd72e6c3cdea05cad24e99710939086f7a113fb5 upstream.
    
    Move pm_runtime_put_autosuspend() before the error check to ensure
    the PM runtime reference count is always decremented after
    pm_runtime_get_sync(), regardless of whether the read operation
    succeeds or fails.
    
    Fixes: 1f0477f18306 ("iio: light: new driver for the ROHM BH1780")
    Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com>
    Reviewed-by: Linus Walleij <linusw@kernel.org>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: magnetometer: tlv493d: remove erroneous shift in X-axis data [+ + +]
Author: Antoniu Miclaus <antoniu.miclaus@analog.com>
Date:   Tue Feb 10 18:49:50 2026 +0200

    iio: magnetometer: tlv493d: remove erroneous shift in X-axis data
    
    commit 82ee91d6b15f06b6094eea2c26afe0032fe8e177 upstream.
    
    TLV493D_BX2_MAG_X_AXIS_LSB is defined as GENMASK(7, 4). FIELD_GET()
    already right-shifts bits [7:4] to [3:0], so the additional >> 4
    discards most of the X-axis low nibble. The Y and Z axes correctly
    omit this extra shift. Remove it.
    
    Fixes: 106511d280c7 ("iio: magnetometer: add support for Infineon TLV493D 3D Magentic sensor")
    Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: potentiometer: mcp4131: fix double application of wiper shift [+ + +]
Author: Lukas Schmid <lukas.schmid@netcube.li>
Date:   Mon Feb 2 21:15:35 2026 +0100

    iio: potentiometer: mcp4131: fix double application of wiper shift
    
    commit 85e4614524dca6c0a43874f475a17de2b9725648 upstream.
    
    The MCP4131 wiper address is shifted twice when preparing the SPI
    command in mcp4131_write_raw().
    
    The address is already shifted when assigned to the local variable
    "address", but is then shifted again when written to data->buf[0].
    This results in an incorrect command being sent to the device and
    breaks wiper writes to the second channel.
    
    Remove the second shift and use the pre-shifted address directly
    when composing the SPI transfer.
    
    Fixes: 22d199a53910 ("iio: potentiometer: add driver for Microchip MCP413X/414X/415X/416X/423X/424X/425X/426X")
    Signed-off-by: Lukas Schmid <lukas.schmid@netcube.li>#
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: proximity: hx9023s: fix assignment order for __counted_by [+ + +]
Author: Yasin Lee <yasin.lee.x@gmail.com>
Date:   Fri Feb 13 23:14:43 2026 +0800

    iio: proximity: hx9023s: fix assignment order for __counted_by
    
    commit 585b90c0161ab77416fe3acdbdc55b978e33e16c upstream.
    
    Initialize fw_size before copying firmware data into the flexible
    array member to match the __counted_by() annotation. This fixes the
    incorrect assignment order that triggers runtime safety checks.
    
    Fixes: e9ed97be4fcc ("iio: proximity: hx9023s: Added firmware file parsing functionality")
    Signed-off-by: Yasin Lee <yasin.lee.x@gmail.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: proximity: hx9023s: Protect against division by zero in set_samp_freq [+ + +]
Author: Yasin Lee <yasin.lee.x@gmail.com>
Date:   Fri Feb 13 23:14:44 2026 +0800

    iio: proximity: hx9023s: Protect against division by zero in set_samp_freq
    
    commit a318cfc0853706f1d6ce682dba660bc455d674ef upstream.
    
    Avoid division by zero when sampling frequency is unspecified.
    
    Fixes: 60df548277b7 ("iio: proximity: Add driver support for TYHX's HX9023S capacitive proximity sensor")
    Signed-off-by: Yasin Lee <yasin.lee.x@gmail.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
io_uring/eventfd: use ctx->rings_rcu for flags checking [+ + +]
Author: Jens Axboe <axboe@kernel.dk>
Date:   Mon Mar 9 14:35:49 2026 -0600

    io_uring/eventfd: use ctx->rings_rcu for flags checking
    
    Commit 177c69432161f6e4bab07ccacf8a1748a6898a6b upstream.
    
    Similarly to what commit e78f7b70e837 did for local task work additions,
    use ->rings_rcu under RCU rather than dereference ->rings directly. See
    that commit for more details.
    
    Cc: stable@vger.kernel.org
    Fixes: 79cfe9e59c2a ("io_uring/register: add IORING_REGISTER_RESIZE_RINGS")
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
io_uring/kbuf: check if target buffer list is still legacy on recycle [+ + +]
Author: Jens Axboe <axboe@kernel.dk>
Date:   Thu Mar 12 08:59:25 2026 -0600

    io_uring/kbuf: check if target buffer list is still legacy on recycle
    
    commit c2c185be5c85d37215397c8e8781abf0a69bec1f upstream.
    
    There's a gap between when the buffer was grabbed and when it
    potentially gets recycled, where if the list is empty, someone could've
    upgraded it to a ring provided type. This can happen if the request
    is forced via io-wq. The legacy recycling is missing checking if the
    buffer_list still exists, and if it's of the correct type. Add those
    checks.
    
    Cc: stable@vger.kernel.org
    Fixes: c7fb19428d67 ("io_uring: add support for ring mapped supplied buffers")
    Reported-by: Keenan Dong <keenanat2000@gmail.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
io_uring/net: reject SEND_VECTORIZED when unsupported [+ + +]
Author: Pavel Begunkov <asml.silence@gmail.com>
Date:   Mon Mar 2 14:32:04 2026 +0000

    io_uring/net: reject SEND_VECTORIZED when unsupported
    
    commit c36e28becd0586ac98318fd335e5e91d19cd2623 upstream.
    
    IORING_SEND_VECTORIZED with registered buffers is not implemented but
    could be. Don't silently ignore the flag in this case but reject it with
    an error. It only affects sendzc as normal sends don't support
    registered buffers.
    
    Fixes: 6f02527729bd3 ("io_uring/net: Allow to do vectorized send")
    Cc: stable@vger.kernel.org
    Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
io_uring/zcrx: use READ_ONCE with user shared RQEs [+ + +]
Author: Pavel Begunkov <asml.silence@gmail.com>
Date:   Wed Mar 4 12:37:43 2026 +0000

    io_uring/zcrx: use READ_ONCE with user shared RQEs
    
    commit 531bb98a030cc1073bd7ed9a502c0a3a781e92ee upstream.
    
    Refill queue entries are shared with the user space, use READ_ONCE when
    reading them.
    
    Fixes: 34a3e60821ab9 ("io_uring/zcrx: implement zerocopy receive pp memory provider");
    Cc: stable@vger.kernel.org
    Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
io_uring: ensure ctx->rings is stable for task work flags manipulation [+ + +]
Author: Jens Axboe <axboe@kernel.dk>
Date:   Mon Mar 9 14:21:37 2026 -0600

    io_uring: ensure ctx->rings is stable for task work flags manipulation
    
    Commit 96189080265e6bb5dde3a4afbaf947af493e3f82 upstream.
    
    If DEFER_TASKRUN | SETUP_TASKRUN is used and task work is added while
    the ring is being resized, it's possible for the OR'ing of
    IORING_SQ_TASKRUN to happen in the small window of swapping into the
    new rings and the old rings being freed.
    
    Prevent this by adding a 2nd ->rings pointer, ->rings_rcu, which is
    protected by RCU. The task work flags manipulation is inside RCU
    already, and if the resize ring freeing is done post an RCU synchronize,
    then there's no need to add locking to the fast path of task work
    additions.
    
    Note: this is only done for DEFER_TASKRUN, as that's the only setup mode
    that supports ring resizing. If this ever changes, then they too need to
    use the io_ctx_mark_taskrun() helper.
    
    Link: https://lore.kernel.org/io-uring/20260309062759.482210-1-naup96721@gmail.com/
    Cc: stable@vger.kernel.org
    Fixes: 79cfe9e59c2a ("io_uring/register: add IORING_REGISTER_RESIZE_RINGS")
    Reported-by: Hao-Yu Yang <naup96721@gmail.com>
    Suggested-by: Pavel Begunkov <asml.silence@gmail.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

io_uring: fix physical SQE bounds check for SQE_MIXED 128-byte ops [+ + +]
Author: Tom Ryan <ryan36005@gmail.com>
Date:   Mon Mar 9 22:20:02 2026 -0700

    io_uring: fix physical SQE bounds check for SQE_MIXED 128-byte ops
    
    [ Upstream commit 6f02c6b196036dbb6defb4647d8707d29b7fe95b ]
    
    When IORING_SETUP_SQE_MIXED is used without IORING_SETUP_NO_SQARRAY,
    the boundary check for 128-byte SQE operations in io_init_req()
    validated the logical SQ head position rather than the physical SQE
    index.
    
    The existing check:
    
      !(ctx->cached_sq_head & (ctx->sq_entries - 1))
    
    ensures the logical position isn't at the end of the ring, which is
    correct for NO_SQARRAY rings where physical == logical. However, when
    sq_array is present, an unprivileged user can remap any logical
    position to an arbitrary physical index via sq_array. Setting
    sq_array[N] = sq_entries - 1 places a 128-byte operation at the last
    physical SQE slot, causing the 128-byte memcpy in
    io_uring_cmd_sqe_copy() to read 64 bytes past the end of the SQE
    array.
    
    Replace the cached_sq_head alignment check with a direct validation
    of the physical SQE index, which correctly handles both sq_array and
    NO_SQARRAY cases.
    
    Fixes: 1cba30bf9fdd ("io_uring: add support for IORING_SETUP_SQE_MIXED")
    Signed-off-by: Tom Ryan <ryan36005@gmail.com>
    Link: https://patch.msgid.link/20260310052003.72871-1-ryan36005@gmail.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iomap: don't mark folio uptodate if read IO has bytes pending [+ + +]
Author: Joanne Koong <joannelkoong@gmail.com>
Date:   Tue Mar 3 15:34:20 2026 -0800

    iomap: don't mark folio uptodate if read IO has bytes pending
    
    commit debc1a492b2695d05973994fb0f796dbd9ceaae6 upstream.
    
    If a folio has ifs metadata attached to it and the folio is partially
    read in through an async IO helper with the rest of it then being read
    in through post-EOF zeroing or as inline data, and the helper
    successfully finishes the read first, then post-EOF zeroing / reading
    inline will mark the folio as uptodate in iomap_set_range_uptodate().
    
    This is a problem because when the read completion path later calls
    iomap_read_end(), it will call folio_end_read(), which sets the uptodate
    bit using XOR semantics. Calling folio_end_read() on a folio that was
    already marked uptodate clears the uptodate bit.
    
    Fix this by not marking the folio as uptodate if the read IO has bytes
    pending. The folio uptodate state will be set in the read completion
    path through iomap_end_read() -> folio_end_read().
    
    Reported-by: Wei Gao <wegao@suse.com>
    Suggested-by: Sasha Levin <sashal@kernel.org>
    Tested-by: Wei Gao <wegao@suse.com>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Cc: stable@vger.kernel.org # v6.19
    Link: https://lore.kernel.org/linux-fsdevel/aYbmy8JdgXwsGaPP@autotest-wegao.qe.prg2.suse.org/
    Fixes: b2f35ac4146d ("iomap: add caller-provided callbacks for read and readahead")
    Signed-off-by: Joanne Koong <joannelkoong@gmail.com>
    Link: https://patch.msgid.link/20260303233420.874231-2-joannelkoong@gmail.com
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iomap: reject delalloc mappings during writeback [+ + +]
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Mon Mar 2 09:30:02 2026 -0800

    iomap: reject delalloc mappings during writeback
    
    commit d320f160aa5ff36cdf83c645cca52b615e866e32 upstream.
    
    Filesystems should never provide a delayed allocation mapping to
    writeback; they're supposed to allocate the space before replying.
    This can lead to weird IO errors and crashes in the block layer if the
    filesystem is being malicious, or if it hadn't set iomap->dev because
    it's a delalloc mapping.
    
    Fix this by failing writeback on delalloc mappings.  Currently no
    filesystems actually misbehave in this manner, but we ought to be
    stricter about things like that.
    
    Cc: stable@vger.kernel.org # v5.5
    Fixes: 598ecfbaa742ac ("iomap: lift the xfs writeback code to iomap")
    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Link: https://patch.msgid.link/20260302173002.GL13829@frogsfrogsfrogs
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ipmi:si: Don: 't block module unload if the BMC is messed up [+ + +]
Author: Corey Minyard <corey@minyard.net>
Date:   Thu Feb 12 21:52:48 2026 -0600

    ipmi:si: Don't block module unload if the BMC is messed up
    
    commit f895e5df80316a308c2f7d64d13a78494630ea05 upstream.
    
    If the BMC is in a bad state, don't bother waiting for queues messages
    since there can't be any.  Otherwise the unload is blocked until the
    BMC is back in a good state.
    
    Reported-by: Rafael J. Wysocki <rafael@kernel.org>
    Fixes: bc3a9d217755 ("ipmi:si: Gracefully handle if the BMC is non-functional")
    Cc: stable@vger.kernel.org # 4.18
    Signed-off-by: Corey Minyard <corey@minyard.net>
    Reviewed-by: Rafael J. Wysocki (Intel) <rafael@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: ipmi:si: Fix check for a misbehaving BMC [+ + +]
Author: Corey Minyard <corey@minyard.net>
Date:   Fri Feb 13 00:15:04 2026 -0600

    ipmi:si: Fix check for a misbehaving BMC
    
    commit cae66f1a1dcd23e17da5a015ef9d731129f9d2dd upstream.
    
    There is a race on checking the state in the sender, it needs to be
    checked under a lock.  But you also need a check to avoid issues with
    a misbehaving BMC for run to completion mode.  So leave the check at
    the beginning for run to completion, and add a check under the lock
    to avoid the race.
    
    Reported-by: Rafael J. Wysocki <rafael@kernel.org>
    Fixes: bc3a9d217755 ("ipmi:si: Gracefully handle if the BMC is non-functional")
    Cc: stable@vger.kernel.org # 4.18
    Signed-off-by: Corey Minyard <corey@minyard.net>
    Reviewed-by: Rafael J. Wysocki (Intel) <rafael@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Linux: ipmi:si: Handle waiting messages when BMC failure detected [+ + +]
Author: Corey Minyard <corey@minyard.net>
Date:   Fri Feb 6 09:59:32 2026 -0600

    ipmi:si: Handle waiting messages when BMC failure detected
    
    commit 52c9ee202edd21d0599ac3b5a6fe1da2a2f053e5 upstream.
    
    If a BMC failure is detected, the current message is returned with an
    error.  However, if there was a waiting message, it would not be
    handled.
    
    Add a check for the waiting message after handling the current message.
    
    Suggested-by: Guenter Roeck <linux@roeck-us.net>
    Reported-by: Rafael J. Wysocki <rafael@kernel.org>
    Closes: https://lore.kernel.org/linux-acpi/CAK8fFZ58fidGUCHi5WFX0uoTPzveUUDzT=k=AAm4yWo3bAuCFg@mail.gmail.com/
    Fixes: bc3a9d217755 ("ipmi:si: Gracefully handle if the BMC is non-functional")
    Cc: stable@vger.kernel.org # 4.18
    Signed-off-by: Corey Minyard <corey@minyard.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Linux: ipmi:si: Use a long timeout when the BMC is misbehaving [+ + +]
Author: Corey Minyard <corey@minyard.net>
Date:   Fri Feb 6 10:33:52 2026 -0600

    ipmi:si: Use a long timeout when the BMC is misbehaving
    
    commit c3bb3295637cc9bf514f690941ca9a385bf30113 upstream.
    
    If the driver goes into HOSED state, don't reset the timeout to the
    short timeout in the timeout handler.
    
    Reported-by: Igor Raits <igor@gooddata.com>
    Closes: https://lore.kernel.org/linux-acpi/CAK8fFZ58fidGUCHi5WFX0uoTPzveUUDzT=k=AAm4yWo3bAuCFg@mail.gmail.com/
    Fixes: bc3a9d217755 ("ipmi:si: Gracefully handle if the BMC is non-functional")
    Cc: stable@vger.kernel.org # 4.18
    Signed-off-by: Corey Minyard <corey@minyard.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
irqchip/gic-v3-its: Limit number of per-device MSIs to the range the ITS supports [+ + +]
Author: Marc Zyngier <maz@kernel.org>
Date:   Fri Feb 6 15:48:16 2026 +0000

    irqchip/gic-v3-its: Limit number of per-device MSIs to the range the ITS supports
    
    commit ce9e40a9a5e5cff0b1b0d2fa582b3d71a8ce68e8 upstream.
    
    The ITS driver blindly assumes that EventIDs are in abundant supply, to the
    point where it never checks how many the hardware actually supports.
    
    It turns out that some pretty esoteric integrations make it so that only a
    few bits are available, all the way down to a single bit.
    
    Enforce the advertised limitation at the point of allocating the device
    structure, and hope that the endpoint driver can deal with such limitation.
    
    Fixes: 84a6a2e7fc18d ("irqchip: GICv3: ITS: device allocation and configuration")
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Signed-off-by: Thomas Gleixner <tglx@kernel.org>
    Reviewed-by: Robin Murphy <robin.murphy@arm.com>
    Reviewed-by: Zenghui Yu <zenghui.yu@linux.dev>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260206154816.3582887-1-maz@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
irqchip/riscv-aplic: Do not clear ACPI dependencies on probe failure [+ + +]
Author: Jessica Liu <liu.xuemei1@zte.com.cn>
Date:   Tue Mar 10 14:16:00 2026 +0800

    irqchip/riscv-aplic: Do not clear ACPI dependencies on probe failure
    
    [ Upstream commit 620b6ded72a7f0f77be6ec44d0462bb85729ab7a ]
    
    aplic_probe() calls acpi_dev_clear_dependencies() unconditionally at the
    end, even when the preceding setup (MSI or direct mode) has failed. This is
    incorrect because if the device failed to probe, it should not be
    considered as active and should not clear dependencies for other devices
    waiting on it.
    
    Fix this by returning immediately when the setup fails, skipping the ACPI
    dependency cleanup. Also, explicitly return 0 on success instead of relying
    on the value of 'rc' to make the success path clear.
    
    Fixes: 5122e380c23b ("irqchip/riscv-aplic: Add ACPI support")
    Signed-off-by: Jessica Liu <liu.xuemei1@zte.com.cn>
    Signed-off-by: Thomas Gleixner <tglx@kernel.org>
    Link: https://patch.msgid.link/20260310141600411Fu8H8-GXOOgKISU48Tjgx@zte.com.cn
    Signed-off-by: Sasha Levin <sashal@kernel.org>

irqchip/riscv-aplic: Preserve APLIC states across suspend/resume [+ + +]
Author: Nick Hu <nick.hu@sifive.com>
Date:   Tue Dec 2 14:07:41 2025 +0800

    irqchip/riscv-aplic: Preserve APLIC states across suspend/resume
    
    [ Upstream commit 95a8ddde36601d0a645475fb080ed118db59c8c3 ]
    
    The APLIC states might be reset when the platform enters a low power
    state, but the register states are not being preserved and restored,
    which prevents interrupt delivery after the platform resumes.
    Solve this by adding a syscore ops and a power management notifier to
    preserve and restore the APLIC states on suspend and resume.
    
    [ tglx: Folded the build fix provided by Geert ]
    
    Signed-off-by: Nick Hu <nick.hu@sifive.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Yong-Xuan Wang <yongxuan.wang@sifive.com>
    Reviewed-by: Cyan Yang <cyan.yang@sifive.com>
    Reviewed-by: Nutty Liu <liujingqi@lanxincomputing.com>
    Reviewed-by: Anup Patel <anup@brainfault.org>
    Link: https://patch.msgid.link/20251202-preserve-aplic-imsic-v3-2-1844fbf1fe92@sifive.com
    Stable-dep-of: 620b6ded72a7 ("irqchip/riscv-aplic: Do not clear ACPI dependencies on probe failure")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

irqchip/riscv-aplic: Register syscore operations only once [+ + +]
Author: Jessica Liu <liu.xuemei1@zte.com.cn>
Date:   Tue Mar 10 14:17:31 2026 +0800

    irqchip/riscv-aplic: Register syscore operations only once
    
    [ Upstream commit b330fbfd34d7624bec62b99ad88dba2614326a19 ]
    
    Since commit 95a8ddde3660 ("irqchip/riscv-aplic: Preserve APLIC
    states across suspend/resume"), when multiple NUMA nodes exist
    and AIA is not configured as "none", aplic_probe() is called
    multiple times. This leads to register_syscore(&aplic_syscore)
    being invoked repeatedly, causing the following Oops:
    
     list_add double add: new=ffffffffb91461f0, prev=ffffffffb91461f0, next=ffffffffb915c408.
     [<ffffffffb7b5c8ca>] __list_add_valid_or_report+0x60/0xc0
     [<ffffffffb7cc3236>] register_syscore+0x3e/0x70
     [<ffffffffb7b8d61c>] aplic_probe+0xc6/0x112
    
    Fix this by registering syscore operations only once, using a static
    variable aplic_syscore_registered to track registration.
    
    [ tglx: Trim backtrace properly ]
    
    Fixes: 95a8ddde3660 ("irqchip/riscv-aplic: Preserve APLIC states across suspend/resume")
    Signed-off-by: Jessica Liu <liu.xuemei1@zte.com.cn>
    Signed-off-by: Thomas Gleixner <tglx@kernel.org>
    Link: https://patch.msgid.link/20260310141731145xMwLsyvXl9Gw-m6A4VRYj@zte.com.cn
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ixgbevf: fix link setup issue [+ + +]
Author: Jedrzej Jagielski <jedrzej.jagielski@intel.com>
Date:   Wed Dec 10 12:26:51 2025 +0100

    ixgbevf: fix link setup issue
    
    commit feae40a6a178bb525a15f19288016e5778102a99 upstream.
    
    It may happen that VF spawned for E610 adapter has problem with setting
    link up. This happens when ixgbevf supporting mailbox API 1.6 cooperates
    with PF driver which doesn't support this version of API, and hence
    doesn't support new approach for getting PF link data.
    
    In that case VF asks PF to provide link data but as PF doesn't support
    it, returns -EOPNOTSUPP what leads to early bail from link configuration
    sequence.
    
    Avoid such situation by using legacy VFLINKS approach whenever negotiated
    API version is less than 1.6.
    
    To reproduce the issue just create VF and set its link up - adapter must
    be any from the E610 family, ixgbevf must support API 1.6 or higher while
    ixgbevf must not.
    
    Fixes: 53f0eb62b4d2 ("ixgbevf: fix getting link speed data for E610 devices")
    Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Reviewed-by: Piotr Kwapulinski <piotr.kwapulinski@intel.com>
    Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: Jedrzej Jagielski <jedrzej.jagielski@intel.com>
    Tested-by: Rafal Romanowski <rafal.romanowski@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
kprobes: avoid crash when rmmod/insmod after ftrace killed [+ + +]
Author: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Date:   Fri Mar 13 23:14:14 2026 +0900

    kprobes: avoid crash when rmmod/insmod after ftrace killed
    
    commit e113f0b46d19626ec15388bcb91432c9a4fd6261 upstream.
    
    After we hit ftrace is killed by some errors, the kernel crash if
    we remove modules in which kprobe probes.
    
    BUG: unable to handle page fault for address: fffffbfff805000d
    PGD 817fcc067 P4D 817fcc067 PUD 817fc8067 PMD 101555067 PTE 0
    Oops: Oops: 0000 [#1] SMP KASAN PTI
    CPU: 4 UID: 0 PID: 2012 Comm: rmmod Tainted: G        W  OE
    Tainted: [W]=WARN, [O]=OOT_MODULE, [E]=UNSIGNED_MODULE
    RIP: 0010:kprobes_module_callback+0x89/0x790
    RSP: 0018:ffff88812e157d30 EFLAGS: 00010a02
    RAX: 1ffffffff805000d RBX: dffffc0000000000 RCX: ffffffff86a8de90
    RDX: ffffed1025c2af9b RSI: 0000000000000008 RDI: ffffffffc0280068
    RBP: 0000000000000000 R08: 0000000000000001 R09: ffffed1025c2af9a
    R10: ffff88812e157cd7 R11: 205d323130325420 R12: 0000000000000002
    R13: ffffffffc0290488 R14: 0000000000000002 R15: ffffffffc0280040
    FS:  00007fbc450dd740(0000) GS:ffff888420331000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: fffffbfff805000d CR3: 000000010f624000 CR4: 00000000000006f0
    Call Trace:
     <TASK>
     notifier_call_chain+0xc6/0x280
     blocking_notifier_call_chain+0x60/0x90
     __do_sys_delete_module.constprop.0+0x32a/0x4e0
     do_syscall_64+0x5d/0xfa0
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    This is because the kprobe on ftrace does not correctly handles
    the kprobe_ftrace_disabled flag set by ftrace_kill().
    
    To prevent this error, check kprobe_ftrace_disabled in
    __disarm_kprobe_ftrace() and skip all ftrace related operations.
    
    Link: https://lore.kernel.org/all/176473947565.1727781.13110060700668331950.stgit@mhiramat.tok.corp.google.com/
    
    Reported-by: Ye Bin <yebin10@huawei.com>
    Closes: https://lore.kernel.org/all/20251125020536.2484381-1-yebin@huaweicloud.com/
    Fixes: ae6aa16fdc16 ("kprobes: introduce ftrace based optimization")
    Cc: stable@vger.kernel.org
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

kprobes: Remove unneeded warnings from __arm_kprobe_ftrace() [+ + +]
Author: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Date:   Fri Mar 13 23:04:11 2026 +0900

    kprobes: Remove unneeded warnings from __arm_kprobe_ftrace()
    
    commit 5ef268cb7a0aac55521fd9881f1939fa94a8988e upstream.
    
    Remove unneeded warnings for handled errors from __arm_kprobe_ftrace()
    because all caller handled the error correctly.
    
    Link: https://lore.kernel.org/all/177261531182.1312989.8737778408503961141.stgit@mhiramat.tok.corp.google.com/
    
    Reported-by: Zw Tang <shicenci@gmail.com>
    Closes: https://lore.kernel.org/all/CAPHJ_V+J6YDb_wX2nhXU6kh466Dt_nyDSas-1i_Y8s7tqY-Mzw@mail.gmail.com/
    Fixes: 9c89bb8e3272 ("kprobes: treewide: Cleanup the error messages for kprobes")
    Cc: stable@vger.kernel.org
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ksmbd: Don't log keys in SMB3 signing and encryption key generation [+ + +]
Author: Thorsten Blum <thorsten.blum@linux.dev>
Date:   Tue Mar 3 14:25:53 2026 +0100

    ksmbd: Don't log keys in SMB3 signing and encryption key generation
    
    commit 441336115df26b966575de56daf7107ed474faed upstream.
    
    When KSMBD_DEBUG_AUTH logging is enabled, generate_smb3signingkey() and
    generate_smb3encryptionkey() log the session, signing, encryption, and
    decryption key bytes. Remove the logs to avoid exposing credentials.
    
    Fixes: e2f34481b24d ("cifsd: add server-side procedures for SMB3")
    Cc: stable@vger.kernel.org
    Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ksmbd: fix use-after-free by using call_rcu() for oplock_info [+ + +]
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Sat Mar 7 11:32:31 2026 +0900

    ksmbd: fix use-after-free by using call_rcu() for oplock_info
    
    commit 1dfd062caa165ec9d7ee0823087930f3ab8a6294 upstream.
    
    ksmbd currently frees oplock_info immediately using kfree(), even
    though it is accessed under RCU read-side critical sections in places
    like opinfo_get() and proc_show_files().
    
    Since there is no RCU grace period delay between nullifying the pointer
    and freeing the memory, a reader can still access oplock_info
    structure after it has been freed. This can leads to a use-after-free
    especially in opinfo_get() where atomic_inc_not_zero() is called on
    already freed memory.
    
    Fix this by switching to deferred freeing using call_rcu().
    
    Fixes: 18b4fac5ef17 ("ksmbd: fix use-after-free in smb_break_all_levII_oplock()")
    Cc: stable@vger.kernel.org
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ksmbd: fix use-after-free in smb_lazy_parent_lease_break_close() [+ + +]
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Mon Mar 2 12:55:02 2026 +0900

    ksmbd: fix use-after-free in smb_lazy_parent_lease_break_close()
    
    commit eac3361e3d5dd8067b3258c69615888eb45e9f25 upstream.
    
    opinfo pointer obtained via rcu_dereference(fp->f_opinfo) is being
    accessed after rcu_read_unlock() has been called. This creates a
    race condition where the memory could be freed by a concurrent
    writer between the unlock and the subsequent pointer dereferences
    (opinfo->is_lease, etc.), leading to a use-after-free.
    
    Fixes: 5fb282ba4fef ("ksmbd: fix possible null-deref in smb_lazy_parent_lease_break_close")
    Cc: stable@vger.kernel.org
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
kthread: consolidate kthread exit paths to prevent use-after-free [+ + +]
Author: Christian Brauner <brauner@kernel.org>
Date:   Thu Feb 26 10:43:55 2026 +0100

    kthread: consolidate kthread exit paths to prevent use-after-free
    
    commit 28aaa9c39945b7925a1cc1d513c8f21ed38f5e4f upstream.
    
    Guillaume reported crashes via corrupted RCU callback function pointers
    during KUnit testing. The crash was traced back to the pidfs rhashtable
    conversion which replaced the 24-byte rb_node with an 8-byte rhash_head
    in struct pid, shrinking it from 160 to 144 bytes.
    
    struct kthread (without CONFIG_BLK_CGROUP) is also 144 bytes. With
    CONFIG_SLAB_MERGE_DEFAULT and SLAB_HWCACHE_ALIGN both round up to
    192 bytes and share the same slab cache. struct pid.rcu.func and
    struct kthread.affinity_node both sit at offset 0x78.
    
    When a kthread exits via make_task_dead() it bypasses kthread_exit() and
    misses the affinity_node cleanup. free_kthread_struct() frees the memory
    while the node is still linked into the global kthread_affinity_list. A
    subsequent list_del() by another kthread writes through dangling list
    pointers into the freed and reused memory, corrupting the pid's
    rcu.func pointer.
    
    Instead of patching free_kthread_struct() to handle the missed cleanup,
    consolidate all kthread exit paths. Turn kthread_exit() into a macro
    that calls do_exit() and add kthread_do_exit() which is called from
    do_exit() for any task with PF_KTHREAD set. This guarantees that
    kthread-specific cleanup always happens regardless of the exit path -
    make_task_dead(), direct do_exit(), or kthread_exit().
    
    Replace __to_kthread() with a new tsk_is_kthread() accessor in the
    public header. Export do_exit() since module code using the
    kthread_exit() macro now needs it directly.
    
    Reported-by: Guillaume Tucker <gtucker@gtucker.io>
    Tested-by: Guillaume Tucker <gtucker@gtucker.io>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: David Gow <davidgow@google.com>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/all/20260224-mittlerweile-besessen-2738831ae7f6@brauner
    Co-developed-by: Linus Torvalds <torvalds@linux-foundation.org>
    Fixes: 4d13f4304fa4 ("kthread: Implement preferred affinity")
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
kunit: irq: Ensure timer doesn't fire too frequently [+ + +]
Author: Eric Biggers <ebiggers@kernel.org>
Date:   Mon Feb 23 19:37:51 2026 -0800

    kunit: irq: Ensure timer doesn't fire too frequently
    
    commit 201ceb94aa1def0024a7c18ce643e5f65026be06 upstream.
    
    Fix a bug where kunit_run_irq_test() could hang if the system is too
    slow.  This was noticed with the crypto library tests in certain VMs.
    
    Specifically, if kunit_irq_test_timer_func() and the associated hrtimer
    code took over 5us to run, then the CPU would spend all its time
    executing that code in hardirq context.  As a result, the task executing
    kunit_run_irq_test() never had a chance to run, exit the loop, and
    cancel the timer.
    
    To fix it, make kunit_irq_test_timer_func() increase the timer interval
    when the other contexts aren't having a chance to run.
    
    Fixes: 950a81224e8b ("lib/crypto: tests: Add hash-test-template.h and gen-hash-testvecs.py")
    Cc: stable@vger.kernel.org
    Reviewed-by: David Gow <david@davidgow.net>
    Link: https://lore.kernel.org/r/20260224033751.97615-1-ebiggers@kernel.org
    Signed-off-by: Eric Biggers <ebiggers@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
KVM: arm64: Eagerly init vgic dist/redist on vgic creation [+ + +]
Author: Marc Zyngier <maz@kernel.org>
Date:   Mon Mar 16 15:36:40 2026 -0400

    KVM: arm64: Eagerly init vgic dist/redist on vgic creation
    
    [ Upstream commit ac6769c8f948dff33265c50e524aebf9aa6f1be0 ]
    
    If vgic_allocate_private_irqs_locked() fails for any odd reason,
    we exit kvm_vgic_create() early, leaving dist->rd_regions uninitialised.
    
    kvm_vgic_dist_destroy() then comes along and walks into the weeds
    trying to free the RDs. Got to love this stuff.
    
    Solve it by moving all the static initialisation early, and make
    sure that if we fail halfway, we're in a reasonable shape to
    perform the rest of the teardown. While at it, reset the vgic model
    on failure, just in case...
    
    Reported-by: syzbot+f6a46b038fc243ac0175@syzkaller.appspotmail.com
    Tested-by: syzbot+f6a46b038fc243ac0175@syzkaller.appspotmail.com
    Fixes: b3aa9283c0c50 ("KVM: arm64: vgic: Hoist SGI/PPI alloc from vgic_init() to kvm_create_vgic()")
    Link: https://lore.kernel.org/r/69a2d58c.050a0220.3a55be.003b.GAE@google.com
    Link: https://patch.msgid.link/20260228164559.936268-1-maz@kernel.org
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: arm64: Fix protected mode handling of pages larger than 4kB [+ + +]
Author: Marc Zyngier <maz@kernel.org>
Date:   Sun Feb 22 13:35:13 2026 +0000

    KVM: arm64: Fix protected mode handling of pages larger than 4kB
    
    commit 08f97454b7fa39bfcf82524955c771d2d693d6fe upstream.
    
    Since 3669ddd8fa8b5 ("KVM: arm64: Add a range to pkvm_mappings"),
    pKVM tracks the memory that has been mapped into a guest in a
    side data structure. Crucially, it uses it to find out whether
    a page has already been mapped, and therefore refuses to map it
    twice. So far, so good.
    
    However, this very patch completely breaks non-4kB page support,
    with guests being unable to boot. The most obvious symptom is that
    we take the same fault repeatedly, and not making forward progress.
    A quick investigation shows that this is because of the above
    rejection code.
    
    As it turns out, there are multiple issues at play:
    
    - while the HPFAR_EL2 register gives you the faulting IPA minus
      the bottom 12 bits, it will still give you the extra bits that
      are part of the page offset for anything larger than 4kB,
      even for a level-3 mapping
    
    - pkvm_pgtable_stage2_map() assumes that the address passed as
      a parameter is aligned to the size of the intended mapping
    
    - the faulting address is only aligned for a non-page mapping
    
    When the planets are suitably aligned (pun intended), the guest
    faults on a page by accessing it past the bottom 4kB, and extra bits
    get set in the HPFAR_EL2 register. If this results in a page mapping
    (which is likely with large granule sizes), nothing aligns it further
    down, and pkvm_mapping_iter_first() finds an intersection that
    doesn't really exist. We assume this is a spurious fault and return
    -EAGAIN. And again...
    
    This doesn't hit outside of the protected code, as the page table
    code always aligns the IPA down to a page boundary, hiding the issue
    for everyone else.
    
    Fix it by always forcing the alignment on vma_pagesize, irrespective
    of the value of vma_pagesize.
    
    Fixes: 3669ddd8fa8b5 ("KVM: arm64: Add a range to pkvm_mappings")
    Reviewed-by: Fuad Tabba <tabba@google.com>
    Tested-by: Fuad Tabba <tabba@google.com>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://https://patch.msgid.link/20260222141000.3084258-1-maz@kernel.org
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: arm64: gic: Set vgic_model before initing private IRQs [+ + +]
Author: Sascha Bischoff <Sascha.Bischoff@arm.com>
Date:   Mon Mar 16 15:36:39 2026 -0400

    KVM: arm64: gic: Set vgic_model before initing private IRQs
    
    [ Upstream commit 9435c1e1431003e23aa34ef8e46c30d09c3dbcb5 ]
    
    Different GIC types require the private IRQs to be initialised
    differently. GICv5 is the culprit as it supports both a different
    number of private IRQs, and all of these are PPIs (there are no
    SGIs). Moreover, as GICv5 uses the top bits of the interrupt ID to
    encode the type, the intid also needs to computed differently.
    
    Up until now, the GIC model has been set after initialising the
    private IRQs for a VCPU. Move this earlier to ensure that the GIC
    model is available when configuring the private IRQs. While we're at
    it, also move the setting of the in_kernel flag and implementation
    revision to keep them grouped together as before.
    
    Signed-off-by: Sascha Bischoff <sascha.bischoff@arm.com>
    Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
    Link: https://patch.msgid.link/20260128175919.3828384-7-sascha.bischoff@arm.com
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Stable-dep-of: ac6769c8f948 ("KVM: arm64: Eagerly init vgic dist/redist on vgic creation")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: arm64: pkvm: Don't reprobe for ICH_VTR_EL2.TDS on CPU hotplug [+ + +]
Author: Marc Zyngier <maz@kernel.org>
Date:   Tue Mar 10 08:54:33 2026 +0000

    KVM: arm64: pkvm: Don't reprobe for ICH_VTR_EL2.TDS on CPU hotplug
    
    commit a79f7b4aeb8e7562cd6dbf9c223e2c2a04b1a85f upstream.
    
    Hotplugging a CPU off and back on fails with pKVM, as we try to
    probe for ICH_VTR_EL2.TDS. In a non-VHE setup, this is achieved
    by using an EL2 stub helper. However, the stubs are out of reach
    once pKVM has deprivileged the kernel. The CPU never boots.
    
    Since pKVM doesn't allow late onlining of CPUs, we can detect
    that protected mode is enforced early on, and return the current
    state of the capability.
    
    Fixes: 2a28810cbb8b2 ("KVM: arm64: GICv3: Detect and work around the lack of ICV_DIR_EL1 trapping")
    Reported-by: Vincent Donnefort <vdonnefort@google.com>
    Tested-by: Vincent Donnefort <vdonnefort@google.com>
    Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://patch.msgid.link/20260310085433.3936742-1-maz@kernel.org
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: arm64: pkvm: Fallback to level-3 mapping on host stage-2 fault [+ + +]
Author: Marc Zyngier <maz@kernel.org>
Date:   Thu Mar 5 13:27:51 2026 +0000

    KVM: arm64: pkvm: Fallback to level-3 mapping on host stage-2 fault
    
    commit 8531d5a83d8eb8affb5c0249b466c28d94192603 upstream.
    
    If, for any odd reason, we cannot converge to mapping size that is
    completely contained in a memblock region, we fail to install a S2
    mapping and go back to the faulting instruction. Rince, repeat.
    
    This happens when faulting in regions that are smaller than a page
    or that do not have PAGE_SIZE-aligned boundaries (as witnessed on
    an O6 board that refuses to boot in protected mode).
    
    In this situation, fallback to using a PAGE_SIZE mapping anyway --
    it isn't like we can go any lower.
    
    Fixes: e728e705802fe ("KVM: arm64: Adjust range correctly during host stage-2 faults")
    Link: https://lore.kernel.org/r/86wlzr77cn.wl-maz@kernel.org
    Cc: stable@vger.kernel.org
    Cc: Quentin Perret <qperret@google.com>
    Reviewed-by: Quentin Perret <qperret@google.com>
    Link: https://patch.msgid.link/20260305132751.2928138-1-maz@kernel.org
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: arm64: vgic: Pick EOIcount deactivations from AP-list tail [+ + +]
Author: Marc Zyngier <maz@kernel.org>
Date:   Sat Mar 7 19:11:51 2026 +0000

    KVM: arm64: vgic: Pick EOIcount deactivations from AP-list tail
    
    commit 6da5e537f5afe091658e846da1949d7e557d2ade upstream.
    
    Valentine reports that their guests fail to boot correctly, losing
    interrupts, and indicates that the wrong interrupt gets deactivated.
    
    What happens here is that if the maintenance interrupt is slow enough
    to kick us out of the guest, extra interrupts can be activated from
    the LRs. We then exit and proceed to handle EOIcount deactivations,
    picking active interrupts from the AP list. But we start from the
    top of the list, potentially deactivating interrupts that were in
    the LRs, while EOIcount only denotes deactivation of interrupts that
    are not present in an LR.
    
    Solve this by tracking the last interrupt that made it in the LRs,
    and start the EOIcount deactivation walk *after* that interrupt.
    Since this only makes sense while the vcpu is loaded, stash this
    in the per-CPU host state.
    
    Huge thanks to Valentine for doing all the detective work and
    providing an initial patch.
    
    Fixes: 3cfd59f81e0f3 ("KVM: arm64: GICv3: Handle LR overflow when EOImode==0")
    Fixes: 281c6c06e2a7b ("KVM: arm64: GICv2: Handle LR overflow when EOImode==0")
    Reported-by: Valentine Burley <valentine.burley@collabora.com>
    Tested-by: Valentine Burley <valentine.burley@collabora.com>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20260307115955.369455-1-valentine.burley@collabora.com
    Link: https://patch.msgid.link/20260307191151.3781182-1-maz@kernel.org
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: SVM: Initialize AVIC VMCB fields if AVIC is enabled with in-kernel APIC [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Tue Feb 3 11:07:09 2026 -0800

    KVM: SVM: Initialize AVIC VMCB fields if AVIC is enabled with in-kernel APIC
    
    commit 3989a6d036c8ec82c0de3614bed23a1dacd45de5 upstream.
    
    Initialize all per-vCPU AVIC control fields in the VMCB if AVIC is enabled
    in KVM and the VM has an in-kernel local APIC, i.e. if it's _possible_ the
    vCPU could activate AVIC at any point in its lifecycle.  Configuring the
    VMCB if and only if AVIC is active "works" purely because of optimizations
    in kvm_create_lapic() to speculatively set apicv_active if AVIC is enabled
    *and* to defer updates until the first KVM_RUN.  In quotes because KVM
    likely won't do the right thing if kvm_apicv_activated() is false, i.e. if
    a vCPU is created while APICv is inhibited at the VM level for whatever
    reason.  E.g. if the inhibit is *removed* before KVM_REQ_APICV_UPDATE is
    handled in KVM_RUN, then __kvm_vcpu_update_apicv() will elide calls to
    vendor code due to seeing "apicv_active == activate".
    
    Cleaning up the initialization code will also allow fixing a bug where KVM
    incorrectly leaves CR8 interception enabled when AVIC is activated without
    creating a mess with respect to whether AVIC is activated or not.
    
    Cc: stable@vger.kernel.org
    Fixes: 67034bb9dd5e ("KVM: SVM: Add irqchip_split() checks before enabling AVIC")
    Fixes: 6c3e4422dd20 ("svm: Add support for dynamic APICv")
    Reviewed-by: Naveen N Rao (AMD) <naveen@kernel.org>
    Reviewed-by: Jim Mattson <jmattson@google.com>
    Link: https://patch.msgid.link/20260203190711.458413-2-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: SVM: Set/clear CR8 write interception when AVIC is (de)activated [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Tue Feb 3 11:07:10 2026 -0800

    KVM: SVM: Set/clear CR8 write interception when AVIC is (de)activated
    
    commit 87d0f901a9bd8ae6be57249c737f20ac0cace93d upstream.
    
    Explicitly set/clear CR8 write interception when AVIC is (de)activated to
    fix a bug where KVM leaves the interception enabled after AVIC is
    activated.  E.g. if KVM emulates INIT=>WFS while AVIC is deactivated, CR8
    will remain intercepted in perpetuity.
    
    On its own, the dangling CR8 intercept is "just" a performance issue, but
    combined with the TPR sync bug fixed by commit d02e48830e3f ("KVM: SVM:
    Sync TPR from LAPIC into VMCB::V_TPR even if AVIC is active"), the danging
    intercept is fatal to Windows guests as the TPR seen by hardware gets
    wildly out of sync with reality.
    
    Note, VMX isn't affected by the bug as TPR_THRESHOLD is explicitly ignored
    when Virtual Interrupt Delivery is enabled, i.e. when APICv is active in
    KVM's world.  I.e. there's no need to trigger update_cr8_intercept(), this
    is firmly an SVM implementation flaw/detail.
    
    WARN if KVM gets a CR8 write #VMEXIT while AVIC is active, as KVM should
    never enter the guest with AVIC enabled and CR8 writes intercepted.
    
    Fixes: 3bbf3565f48c ("svm: Do not intercept CR8 when enable AVIC")
    Cc: stable@vger.kernel.org
    Cc: Jim Mattson <jmattson@google.com>
    Cc: Naveen N Rao (AMD) <naveen@kernel.org>
    Cc: Maciej S. Szmigiero <maciej.szmigiero@oracle.com>
    Reviewed-by: Naveen N Rao (AMD) <naveen@kernel.org>
    Reviewed-by: Jim Mattson <jmattson@google.com>
    Link: https://patch.msgid.link/20260203190711.458413-3-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    [Squash fix to avic_deactivate_vmcb. - Paolo]
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: x86: Introduce KVM_X86_QUIRK_VMCS12_ALLOW_FREEZE_IN_SMM [+ + +]
Author: Jim Mattson <jmattson@google.com>
Date:   Thu Feb 5 15:15:26 2026 -0800

    KVM: x86: Introduce KVM_X86_QUIRK_VMCS12_ALLOW_FREEZE_IN_SMM
    
    commit e2ffe85b6d2bb7780174b87aa4468a39be17eb81 upstream.
    
    Add KVM_X86_QUIRK_VMCS12_ALLOW_FREEZE_IN_SMM to allow L1 to set
    FREEZE_IN_SMM in vmcs12's GUEST_IA32_DEBUGCTL field, as permitted
    prior to commit 6b1dd26544d0 ("KVM: VMX: Preserve host's
    DEBUGCTLMSR_FREEZE_IN_SMM while running the guest").  Enable the quirk
    by default for backwards compatibility (like all quirks); userspace
    can disable it via KVM_CAP_DISABLE_QUIRKS2 for consistency with the
    constraints on WRMSR(IA32_DEBUGCTL).
    
    Note that the quirk only bypasses the consistency check.  The vmcs02 bit is
    still owned by the host, and PMCs are not frozen during virtualized SMM.
    In particular, if a host administrator decides that PMCs should not be
    frozen during physical SMM, then L1 has no say in the matter.
    
    Fixes: 095686e6fcb4 ("KVM: nVMX: Check vmcs12->guest_ia32_debugctl on nested VM-Enter")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jim Mattson <jmattson@google.com>
    Link: https://patch.msgid.link/20260205231537.1278753-1-jmattson@google.com
    [sean: tag for stable@, clean-up and fix goofs in the comment and docs]
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    [Rename quirk. - Paolo]
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
lib/bootconfig: check bounds before writing in __xbc_open_brace() [+ + +]
Author: Josh Law <objecting@objecting.org>
Date:   Thu Mar 12 19:11:42 2026 +0000

    lib/bootconfig: check bounds before writing in __xbc_open_brace()
    
    commit 560f763baa0f2c9a44da4294c06af071405ac46f upstream.
    
    The bounds check for brace_index happens after the array write.
    While the current call pattern prevents an actual out-of-bounds
    access (the previous call would have returned an error), the
    write-before-check pattern is fragile and would become a real
    out-of-bounds write if the error return were ever not propagated.
    
    Move the bounds check before the array write so the function is
    self-contained and safe regardless of caller behavior.
    
    Link: https://lore.kernel.org/all/20260312191143.28719-3-objecting@objecting.org/
    
    Fixes: ead1e19ad905 ("lib/bootconfig: Fix a bug of breaking existing tree nodes")
    Cc: stable@vger.kernel.org
    Signed-off-by: Josh Law <objecting@objecting.org>
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

lib/bootconfig: fix off-by-one in xbc_verify_tree() unclosed brace error [+ + +]
Author: Josh Law <objecting@objecting.org>
Date:   Thu Mar 12 19:11:41 2026 +0000

    lib/bootconfig: fix off-by-one in xbc_verify_tree() unclosed brace error
    
    commit 39ebc8d7f561e1b64eca87353ef9b18e2825e591 upstream.
    
    __xbc_open_brace() pushes entries with post-increment
    (open_brace[brace_index++]), so brace_index always points one past
    the last valid entry.  xbc_verify_tree() reads open_brace[brace_index]
    to report which brace is unclosed, but this is one past the last
    pushed entry and contains stale/zero data, causing the error message
    to reference the wrong node.
    
    Use open_brace[brace_index - 1] to correctly identify the unclosed
    brace.  brace_index is known to be > 0 here since we are inside the
    if (brace_index) guard.
    
    Link: https://lore.kernel.org/all/20260312191143.28719-2-objecting@objecting.org/
    
    Fixes: ead1e19ad905 ("lib/bootconfig: Fix a bug of breaking existing tree nodes")
    Cc: stable@vger.kernel.org
    Signed-off-by: Josh Law <objecting@objecting.org>
    Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

lib/bootconfig: fix snprintf truncation check in xbc_node_compose_key_after() [+ + +]
Author: Josh Law <objecting@objecting.org>
Date:   Thu Mar 12 19:11:43 2026 +0000

    lib/bootconfig: fix snprintf truncation check in xbc_node_compose_key_after()
    
    commit 1120a36bb1e9b9e22de75ecb4ef0b998f73a97f1 upstream.
    
    snprintf() returns the number of characters that would have been
    written excluding the NUL terminator.  Output is truncated when the
    return value is >= the buffer size, not just > the buffer size.
    
    When ret == size, the current code takes the non-truncated path,
    advancing buf by ret and reducing size to 0.  This is wrong because
    the output was actually truncated (the last character was replaced by
    NUL).  Fix by using >= so the truncation path is taken correctly.
    
    Link: https://lore.kernel.org/all/20260312191143.28719-4-objecting@objecting.org/
    
    Fixes: 76db5a27a827 ("bootconfig: Add Extra Boot Config support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Josh Law <objecting@objecting.org>
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
libceph: admit message frames only in CEPH_CON_S_OPEN state [+ + +]
Author: Ilya Dryomov <idryomov@gmail.com>
Date:   Sun Mar 8 17:57:23 2026 +0100

    libceph: admit message frames only in CEPH_CON_S_OPEN state
    
    commit a5a373705081d7cc6363e16990e2361b0b362314 upstream.
    
    Similar checks are performed for all control frames, but an early check
    for message frames was missing.  process_message() is already set up to
    terminate the loop in case the state changes while con->ops->dispatch()
    handler is being executed.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Reviewed-by: Alex Markuze <amarkuze@redhat.com>
    Reviewed-by: Viacheslav Dubeyko <Slava.Dubeyko@ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

libceph: Fix potential out-of-bounds access in ceph_handle_auth_reply() [+ + +]
Author: Raphael Zimmer <raphael.zimmer@tu-ilmenau.de>
Date:   Tue Mar 10 15:28:15 2026 +0100

    libceph: Fix potential out-of-bounds access in ceph_handle_auth_reply()
    
    commit b282c43ed156ae15ea76748fc15cd5c39dc9ab72 upstream.
    
    This patch fixes an out-of-bounds access in ceph_handle_auth_reply()
    that can be triggered by a message of type CEPH_MSG_AUTH_REPLY. In
    ceph_handle_auth_reply(), the value of the payload_len field of such a
    message is stored in a variable of type int. A value greater than
    INT_MAX leads to an integer overflow and is interpreted as a negative
    value. This leads to decrementing the pointer address by this value and
    subsequently accessing it because ceph_decode_need() only checks that
    the memory access does not exceed the end address of the allocation.
    
    This patch fixes the issue by changing the data type of payload_len to
    u32. Additionally, the data type of result_msg_len is changed to u32,
    as it is also a variable holding a non-negative length.
    
    Also, an additional layer of sanity checks is introduced, ensuring that
    directly after reading it from the message, payload_len and
    result_msg_len are not greater than the overall segment length.
    
    BUG: KASAN: slab-out-of-bounds in ceph_handle_auth_reply+0x642/0x7a0 [libceph]
    Read of size 4 at addr ffff88811404df14 by task kworker/20:1/262
    
    CPU: 20 UID: 0 PID: 262 Comm: kworker/20:1 Not tainted 6.19.2 #5 PREEMPT(voluntary)
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    Workqueue: ceph-msgr ceph_con_workfn [libceph]
    Call Trace:
     <TASK>
     dump_stack_lvl+0x76/0xa0
     print_report+0xd1/0x620
     ? __pfx__raw_spin_lock_irqsave+0x10/0x10
     ? kasan_complete_mode_report_info+0x72/0x210
     kasan_report+0xe7/0x130
     ? ceph_handle_auth_reply+0x642/0x7a0 [libceph]
     ? ceph_handle_auth_reply+0x642/0x7a0 [libceph]
     __asan_report_load_n_noabort+0xf/0x20
     ceph_handle_auth_reply+0x642/0x7a0 [libceph]
     mon_dispatch+0x973/0x23d0 [libceph]
     ? apparmor_socket_recvmsg+0x6b/0xa0
     ? __pfx_mon_dispatch+0x10/0x10 [libceph]
     ? __kasan_check_write+0x14/0x30i
     ? mutex_unlock+0x7f/0xd0
     ? __pfx_mutex_unlock+0x10/0x10
     ? __pfx_do_recvmsg+0x10/0x10 [libceph]
     ceph_con_process_message+0x1f1/0x650 [libceph]
     process_message+0x1e/0x450 [libceph]
     ceph_con_v2_try_read+0x2e48/0x6c80 [libceph]
     ? __pfx_ceph_con_v2_try_read+0x10/0x10 [libceph]
     ? save_fpregs_to_fpstate+0xb0/0x230
     ? raw_spin_rq_unlock+0x17/0xa0
     ? finish_task_switch.isra.0+0x13b/0x760
     ? __switch_to+0x385/0xda0
     ? __kasan_check_write+0x14/0x30
     ? mutex_lock+0x8d/0xe0
     ? __pfx_mutex_lock+0x10/0x10
     ceph_con_workfn+0x248/0x10c0 [libceph]
     process_one_work+0x629/0xf80
     ? __kasan_check_write+0x14/0x30
     worker_thread+0x87f/0x1570
     ? __pfx__raw_spin_lock_irqsave+0x10/0x10
     ? __pfx_try_to_wake_up+0x10/0x10
     ? kasan_print_address_stack_frame+0x1f7/0x280
     ? __pfx_worker_thread+0x10/0x10
     kthread+0x396/0x830
     ? __pfx__raw_spin_lock_irq+0x10/0x10
     ? __pfx_kthread+0x10/0x10
     ? __kasan_check_write+0x14/0x30
     ? recalc_sigpending+0x180/0x210
     ? __pfx_kthread+0x10/0x10
     ret_from_fork+0x3f7/0x610
     ? __pfx_ret_from_fork+0x10/0x10
     ? __switch_to+0x385/0xda0
     ? __pfx_kthread+0x10/0x10
     ret_from_fork_asm+0x1a/0x30
     </TASK>
    
    [ idryomov: replace if statements with ceph_decode_need() for
      payload_len and result_msg_len ]
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Raphael Zimmer <raphael.zimmer@tu-ilmenau.de>
    Reviewed-by: Viacheslav Dubeyko <Slava.Dubeyko@ibm.com>
    Reviewed-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

libceph: prevent potential out-of-bounds reads in process_message_header() [+ + +]
Author: Ilya Dryomov <idryomov@gmail.com>
Date:   Sun Mar 8 17:38:00 2026 +0100

    libceph: prevent potential out-of-bounds reads in process_message_header()
    
    commit 69fb5d91bba44ecf7eb80530b85fa4fb028921d5 upstream.
    
    If the message frame is (maliciously) corrupted in a way that the
    length of the control segment ends up being less than the size of the
    message header or a different frame is made to look like a message
    frame, out-of-bounds reads may ensue in process_message_header().
    
    Perform an explicit bounds check before decoding the message header.
    
    Cc: stable@vger.kernel.org
    Reported-by: Raphael Zimmer <raphael.zimmer@tu-ilmenau.de>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Reviewed-by: Alex Markuze <amarkuze@redhat.com>
    Reviewed-by: Viacheslav Dubeyko <Slava.Dubeyko@ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

libceph: reject preamble if control segment is empty [+ + +]
Author: Ilya Dryomov <idryomov@gmail.com>
Date:   Sun Mar 8 20:01:27 2026 +0100

    libceph: reject preamble if control segment is empty
    
    commit c4c22b846eceff05b1129b8844a80310e55a7f87 upstream.
    
    While head_onwire_len() has a branch to handle ctrl_len == 0 case,
    prepare_read_control() always sets up a kvec for the CRC meaning that
    a non-empty control segment is effectively assumed.  All frames that
    clients deal with meet that assumption, so let's make it official and
    treat the preamble with an empty control segment as malformed.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Reviewed-by: Alex Markuze <amarkuze@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

libceph: Use u32 for non-negative values in ceph_monmap_decode() [+ + +]
Author: Raphael Zimmer <raphael.zimmer@tu-ilmenau.de>
Date:   Thu Feb 26 16:07:31 2026 +0100

    libceph: Use u32 for non-negative values in ceph_monmap_decode()
    
    commit 770444611f047dbfd4517ec0bc1b179d40c2f346 upstream.
    
    This patch fixes unnecessary implicit conversions that change signedness
    of blob_len and num_mon in ceph_monmap_decode().
    Currently blob_len and num_mon are (signed) int variables. They are used
    to hold values that are always non-negative and get assigned in
    ceph_decode_32_safe(), which is meant to assign u32 values. Both
    variables are subsequently used as unsigned values, and the value of
    num_mon is further assigned to monmap->num_mon, which is of type u32.
    Therefore, both variables should be of type u32. This is especially
    relevant for num_mon. If the value read from the incoming message is
    very large, it is interpreted as a negative value, and the check for
    num_mon > CEPH_MAX_MON does not catch it. This leads to the attempt to
    allocate a very large chunk of memory for monmap, which will most likely
    fail. In this case, an unnecessary attempt to allocate memory is
    performed, and -ENOMEM is returned instead of -EINVAL.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Raphael Zimmer <raphael.zimmer@tu-ilmenau.de>
    Reviewed-by: Viacheslav Dubeyko <Slava.Dubeyko@ibm.com>
    Reviewed-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 6.19.9 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Mar 19 16:15:33 2026 +0100

    Linux 6.19.9
    
    Link: https://lore.kernel.org/r/20260317163006.959177102@linuxfoundation.org
    Tested-by: Ronald Warsow <rwarsow@gmx.de>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Miguel Ojeda <ojeda@kernel.org>
    Tested-by: Shung-Hsi Yu <shung-hsi.yu@suse.com>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Luna Jernberg <droidbittin@gmail.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Tested-by: Takeshi Ogasawara <takeshi.ogasawara@futuring-girl.com>
    Link: https://lore.kernel.org/r/20260318122547.233850204@linuxfoundation.org
    Tested-by: Brett A C Sheffield <bacs@librecast.net>
    Tested-by: Ronald Warsow <rwarsow@gmx.de>
    Tested-by: Justin M. Forbes <jforbes@fedoraproject.org>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Pavel Machek (CIP) <pavel@nabladev.com>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Takeshi Ogasawara <takeshi.ogasawara@futuring-girl.com>
    Tested-by: Barry K. Nathan <barryn@pobox.com>
    Tested-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
liveupdate: luo_file: remember retrieve() status [+ + +]
Author: Pratyush Yadav (Google) <pratyush@kernel.org>
Date:   Mon Feb 16 14:22:19 2026 +0100

    liveupdate: luo_file: remember retrieve() status
    
    commit f85b1c6af5bc3872f994df0a5688c1162de07a62 upstream.
    
    LUO keeps track of successful retrieve attempts on a LUO file.  It does so
    to avoid multiple retrievals of the same file.  Multiple retrievals cause
    problems because once the file is retrieved, the serialized data
    structures are likely freed and the file is likely in a very different
    state from what the code expects.
    
    The retrieve boolean in struct luo_file keeps track of this, and is passed
    to the finish callback so it knows what work was already done and what it
    has left to do.
    
    All this works well when retrieve succeeds.  When it fails,
    luo_retrieve_file() returns the error immediately, without ever storing
    anywhere that a retrieve was attempted or what its error code was.  This
    results in an errored LIVEUPDATE_SESSION_RETRIEVE_FD ioctl to userspace,
    but nothing prevents it from trying this again.
    
    The retry is problematic for much of the same reasons listed above.  The
    file is likely in a very different state than what the retrieve logic
    normally expects, and it might even have freed some serialization data
    structures.  Attempting to access them or free them again is going to
    break things.
    
    For example, if memfd managed to restore 8 of its 10 folios, but fails on
    the 9th, a subsequent retrieve attempt will try to call
    kho_restore_folio() on the first folio again, and that will fail with a
    warning since it is an invalid operation.
    
    Apart from the retry, finish() also breaks.  Since on failure the
    retrieved bool in luo_file is never touched, the finish() call on session
    close will tell the file handler that retrieve was never attempted, and it
    will try to access or free the data structures that might not exist, much
    in the same way as the retry attempt.
    
    There is no sane way of attempting the retrieve again.  Remember the error
    retrieve returned and directly return it on a retry.  Also pass this
    status code to finish() so it can make the right decision on the work it
    needs to do.
    
    This is done by changing the bool to an integer.  A value of 0 means
    retrieve was never attempted, a positive value means it succeeded, and a
    negative value means it failed and the error code is the value.
    
    Link: https://lkml.kernel.org/r/20260216132221.987987-1-pratyush@kernel.org
    Fixes: 7c722a7f44e0 ("liveupdate: luo_file: implement file systems callbacks")
    Signed-off-by: Pratyush Yadav (Google) <pratyush@kernel.org>
    Reviewed-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
    Cc: Pasha Tatashin <pasha.tatashin@soleen.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mctp: i2c: fix skb memory leak in receive path [+ + +]
Author: Haiyue Wang <haiyuewa@163.com>
Date:   Thu Mar 5 22:32:34 2026 +0800

    mctp: i2c: fix skb memory leak in receive path
    
    [ Upstream commit e3f5e0f22cfc2371e7471c9fd5b4da78f9df7c69 ]
    
    When 'midev->allow_rx' is false, the newly allocated skb isn't consumed
    by netif_rx(), it needs to free the skb directly.
    
    Fixes: f5b8abf9fc3d ("mctp i2c: MCTP I2C binding driver")
    Signed-off-by: Haiyue Wang <haiyuewa@163.com>
    Link: https://patch.msgid.link/20260305143240.97592-1-haiyuewa@163.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mctp: route: hold key->lock in mctp_flow_prepare_output() [+ + +]
Author: Chengfeng Ye <dg573847474@gmail.com>
Date:   Fri Mar 6 03:14:02 2026 +0000

    mctp: route: hold key->lock in mctp_flow_prepare_output()
    
    [ Upstream commit 7d86aa41c073c4e7eb75fd2e674f1fd8f289728a ]
    
    mctp_flow_prepare_output() checks key->dev and may call
    mctp_dev_set_key(), but it does not hold key->lock while doing so.
    
    mctp_dev_set_key() and mctp_dev_release_key() are annotated with
    __must_hold(&key->lock), so key->dev access is intended to be
    serialized by key->lock. The mctp_sendmsg() transmit path reaches
    mctp_flow_prepare_output() via mctp_local_output() -> mctp_dst_output()
    without holding key->lock, so the check-and-set sequence is racy.
    
    Example interleaving:
    
      CPU0                                  CPU1
      ----                                  ----
      mctp_flow_prepare_output(key, devA)
        if (!key->dev)  // sees NULL
                                            mctp_flow_prepare_output(
                                                key, devB)
                                              if (!key->dev)  // still NULL
                                              mctp_dev_set_key(devB, key)
                                                mctp_dev_hold(devB)
                                                key->dev = devB
        mctp_dev_set_key(devA, key)
          mctp_dev_hold(devA)
          key->dev = devA   // overwrites devB
    
    Now both devA and devB references were acquired, but only the final
    key->dev value is tracked for release. One reference can be lost,
    causing a resource leak as mctp_dev_release_key() would only decrease
    the reference on one dev.
    
    Fix by taking key->lock around the key->dev check and
    mctp_dev_set_key() call.
    
    Fixes: 67737c457281 ("mctp: Pass flow data & flow release events to drivers")
    Signed-off-by: Chengfeng Ye <dg573847474@gmail.com>
    Link: https://patch.msgid.link/20260306031402.857224-1-dg573847474@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
media: dvb-net: fix OOB access in ULE extension header tables [+ + +]
Author: Ariel Silver <arielsilver77@gmail.com>
Date:   Sat Feb 21 15:26:00 2026 +0100

    media: dvb-net: fix OOB access in ULE extension header tables
    
    commit 24d87712727a5017ad142d63940589a36cd25647 upstream.
    
    The ule_mandatory_ext_handlers[] and ule_optional_ext_handlers[] tables
    in handle_one_ule_extension() are declared with 255 elements (valid
    indices 0-254), but the index htype is derived from network-controlled
    data as (ule_sndu_type & 0x00FF), giving a range of 0-255. When
    htype equals 255, an out-of-bounds read occurs on the function pointer
    table, and the OOB value may be called as a function pointer.
    
    Add a bounds check on htype against the array size before either table
    is accessed. Out-of-range values now cause the SNDU to be discarded.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: Ariel Silver <arielsilver77@gmail.com>
    Signed-off-by: Ariel Silver <arielsilver77@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
memcg: fix slab accounting in refill_obj_stock() trylock path [+ + +]
Author: Hao Li <hao.li@linux.dev>
Date:   Thu Feb 26 19:51:37 2026 +0800

    memcg: fix slab accounting in refill_obj_stock() trylock path
    
    commit dccd5ee2625d50239510bcd73ed78559005e00a3 upstream.
    
    In the trylock path of refill_obj_stock(), mod_objcg_mlstate() should use
    the real alloc/free bytes (i.e., nr_acct) for accounting, rather than
    nr_bytes.
    
    The user-visible impact is that the NR_SLAB_RECLAIMABLE_B and
    NR_SLAB_UNRECLAIMABLE_B stats can end up being incorrect.
    
    For example, if a user allocates a 6144-byte object, then before this
    fix efill_obj_stock() calls mod_objcg_mlstate(..., nr_bytes=2048), even
    though it should account for 6144 bytes (i.e., nr_acct).
    
    When the user later frees the same object with kfree(),
    refill_obj_stock() calls mod_objcg_mlstate(..., nr_bytes=6144).  This
    ends up adding 6144 to the stats, but it should be applying -6144
    (i.e., nr_acct) since the object is being freed.
    
    Link: https://lkml.kernel.org/r/20260226115145.62903-1-hao.li@linux.dev
    Fixes: 200577f69f29 ("memcg: objcg stock trylock without irq disabling")
    Signed-off-by: Hao Li <hao.li@linux.dev>
    Acked-by: Shakeel Butt <shakeel.butt@linux.dev>
    Acked-by: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Muchun Song <muchun.song@linux.dev>
    Cc: Roman Gushchin <roman.gushchin@linux.dev>
    Cc: Vlastimil Babka <vbabka@suse.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/damon/core: clear walk_control on inactive context in damos_walk() [+ + +]
Author: Raul Pazemecxas De Andrade <raul_pazemecxas@hotmail.com>
Date:   Mon Feb 23 17:10:59 2026 -0800

    mm/damon/core: clear walk_control on inactive context in damos_walk()
    
    commit d210fdcac9c0d1380eab448aebc93f602c1cd4e6 upstream.
    
    damos_walk() sets ctx->walk_control to the caller-provided control
    structure before checking whether the context is running.  If the context
    is inactive (damon_is_running() returns false), the function returns
    -EINVAL without clearing ctx->walk_control.  This leaves a dangling
    pointer to a stack-allocated structure that will be freed when the caller
    returns.
    
    This is structurally identical to the bug fixed in commit f9132fbc2e83
    ("mm/damon/core: remove call_control in inactive contexts") for
    damon_call(), which had the same pattern of linking a control object and
    returning an error without unlinking it.
    
    The dangling walk_control pointer can cause:
    1. Use-after-free if the context is later started and kdamond
       dereferences ctx->walk_control (e.g., in damos_walk_cancel()
       which writes to control->canceled and calls complete())
    2. Permanent -EBUSY from subsequent damos_walk() calls, since the
       stale pointer is non-NULL
    
    Nonetheless, the real user impact is quite restrictive.  The
    use-after-free is impossible because there is no damos_walk() callers who
    starts the context later.  The permanent -EBUSY can actually confuse
    users, as DAMON is not running.  But the symptom is kept only while the
    context is turned off.  Turning it on again will make DAMON internally
    uses a newly generated damon_ctx object that doesn't have the invalid
    damos_walk_control pointer, so everything will work fine again.
    
    Fix this by clearing ctx->walk_control under walk_control_lock before
    returning -EINVAL, mirroring the fix pattern from f9132fbc2e83.
    
    Link: https://lkml.kernel.org/r/20260224011102.56033-1-sj@kernel.org
    Fixes: bf0eaba0ff9c ("mm/damon/core: implement damos_walk()")
    Reported-by: Raul Pazemecxas De Andrade <raul_pazemecxas@hotmail.com>
    Closes: https://lore.kernel.org/CPUPR80MB8171025468965E583EF2490F956CA@CPUPR80MB8171.lamprd80.prod.outlook.com
    Signed-off-by: Raul Pazemecxas De Andrade <raul_pazemecxas@hotmail.com>
    Signed-off-by: SeongJae Park <sj@kernel.org>
    Reviewed-by: SeongJae Park <sj@kernel.org>
    Cc: <stable@vger.kernel.org>    [6.14+]
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm/damon/core: disallow non-power of two min_region_sz [+ + +]
Author: SeongJae Park <sj@kernel.org>
Date:   Tue Mar 17 10:43:02 2026 -0400

    mm/damon/core: disallow non-power of two min_region_sz
    
    [ Upstream commit c80f46ac228b48403866d65391ad09bdf0e8562a ]
    
    DAMON core uses min_region_sz parameter value as the DAMON region
    alignment.  The alignment is made using ALIGN() and ALIGN_DOWN(), which
    support only the power of two alignments.  But DAMON core API callers can
    set min_region_sz to an arbitrary number.  Users can also set it
    indirectly, using addr_unit.
    
    When the alignment is not properly set, DAMON behavior becomes difficult
    to expect and understand, makes it effectively broken.  It doesn't cause a
    kernel crash-like significant issue, though.
    
    Fix the issue by disallowing min_region_sz input that is not a power of
    two.  Add the check to damon_commit_ctx(), as all DAMON API callers who
    set min_region_sz uses the function.
    
    This can be a sort of behavioral change, but it does not break users, for
    the following reasons.  As the symptom is making DAMON effectively broken,
    it is not reasonable to believe there are real use cases of non-power of
    two min_region_sz.  There is no known use case or issue reports from the
    setup, either.
    
    In future, if we find real use cases of non-power of two alignments and we
    can support it with low enough overhead, we can consider moving the
    restriction.  But, for now, simply disallowing the corner case should be
    good enough as a hot fix.
    
    Link: https://lkml.kernel.org/r/20260214214124.87689-1-sj@kernel.org
    Fixes: d8f867fa0825 ("mm/damon: add damon_ctx->min_sz_region")
    Signed-off-by: SeongJae Park <sj@kernel.org>
    Cc: Quanmin Yan <yanquanmin1@huawei.com>
    Cc: <stable@vger.kernel.org>    [6.18+]
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/damon: rename DAMON_MIN_REGION to DAMON_MIN_REGION_SZ [+ + +]
Author: SeongJae Park <sj@kernel.org>
Date:   Tue Mar 17 10:43:00 2026 -0400

    mm/damon: rename DAMON_MIN_REGION to DAMON_MIN_REGION_SZ
    
    [ Upstream commit dfb1b0c9dc0d61e422905640e1e7334b3cf6f384 ]
    
    The macro is for the default minimum size of each DAMON region.  There was
    a case that a reader was confused if it is the minimum number of total
    DAMON regions, which is set on damon_attrs->min_nr_regions.  Make the name
    more explicit.
    
    Link: https://lkml.kernel.org/r/20260117175256.82826-8-sj@kernel.org
    Signed-off-by: SeongJae Park <sj@kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: c80f46ac228b ("mm/damon/core: disallow non-power of two min_region_sz")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm/damon: rename min_sz_region of damon_ctx to min_region_sz [+ + +]
Author: SeongJae Park <sj@kernel.org>
Date:   Tue Mar 17 10:43:01 2026 -0400

    mm/damon: rename min_sz_region of damon_ctx to min_region_sz
    
    [ Upstream commit cc1db8dff8e751ec3ab352483de366b7f23aefe2 ]
    
    'min_sz_region' field of 'struct damon_ctx' represents the minimum size of
    each DAMON region for the context.  'struct damos_access_pattern' has a
    field of the same name.  It confuses readers and makes 'grep' less optimal
    for them.  Rename it to 'min_region_sz'.
    
    Link: https://lkml.kernel.org/r/20260117175256.82826-9-sj@kernel.org
    Signed-off-by: SeongJae Park <sj@kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: c80f46ac228b ("mm/damon/core: disallow non-power of two min_region_sz")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/huge_memory: fix a folio_split() race condition with folio_try_get() [+ + +]
Author: Zi Yan <ziy@nvidia.com>
Date:   Mon Mar 2 15:31:59 2026 -0500

    mm/huge_memory: fix a folio_split() race condition with folio_try_get()
    
    commit 577a1f495fd78d8fb61b67ac3d3b595b01f6fcb0 upstream.
    
    During a pagecache folio split, the values in the related xarray should
    not be changed from the original folio at xarray split time until all
    after-split folios are well formed and stored in the xarray.  Current use
    of xas_try_split() in __split_unmapped_folio() lets some after-split
    folios show up at wrong indices in the xarray.  When these misplaced
    after-split folios are unfrozen, before correct folios are stored via
    __xa_store(), and grabbed by folio_try_get(), they are returned to
    userspace at wrong file indices, causing data corruption.  More detailed
    explanation is at the bottom.
    
    The reproducer is at: https://github.com/dfinity/thp-madv-remove-test
    It
    1. creates a memfd,
    2. forks,
    3. in the child process, maps the file with large folios (via shmem code
       path) and reads the mapped file continuously with 16 threads,
    4. in the parent process, uses madvise(MADV_REMOVE) to punch poles in the
       large folio.
    
    Data corruption can be observed without the fix.  Basically, data from a
    wrong page->index is returned.
    
    Fix it by using the original folio in xas_try_split() calls, so that
    folio_try_get() can get the right after-split folios after the original
    folio is unfrozen.
    
    Uniform split, split_huge_page*(), is not affected, since it uses
    xas_split_alloc() and xas_split() only once and stores the original folio
    in the xarray.  Change xas_split() used in uniform split branch to use the
    original folio to avoid confusion.
    
    Fixes below points to the commit introduces the code, but folio_split() is
    used in a later commit 7460b470a131f ("mm/truncate: use folio_split() in
    truncate operation").
    
    More details:
    
    For example, a folio f is split non-uniformly into f, f2, f3, f4 like
    below:
    +----------------+---------+----+----+
    |       f        |    f2   | f3 | f4 |
    +----------------+---------+----+----+
    but the xarray would look like below after __split_unmapped_folio() is
    done:
    +----------------+---------+----+----+
    |       f        |    f2   | f3 | f3 |
    +----------------+---------+----+----+
    
    After __split_unmapped_folio(), the code changes the xarray and unfreezes
    after-split folios:
    
    1. unfreezes f2, __xa_store(f2)
    2. unfreezes f3, __xa_store(f3)
    3. unfreezes f4, __xa_store(f4), which overwrites the second f3 to f4.
    4. unfreezes f.
    
    Meanwhile, a parallel filemap_get_entry() can read the second f3 from the
    xarray and use folio_try_get() on it at step 2 when f3 is unfrozen. Then,
    f3 is wrongly returned to user.
    
    After the fix, the xarray looks like below after __split_unmapped_folio():
    +----------------+---------+----+----+
    |       f        |    f    | f  | f  |
    +----------------+---------+----+----+
    so that the race window no longer exists.
    
    [ziy@nvidia.com: move comment, per David]
      Link: https://lkml.kernel.org/r/5C9FA053-A4C6-4615-BE05-74E47A6462B3@nvidia.com
    Link: https://lkml.kernel.org/r/20260302203159.3208341-1-ziy@nvidia.com
    Fixes: 00527733d0dc ("mm/huge_memory: add two new (not yet used) functions for folio_split()")
    Signed-off-by: Zi Yan <ziy@nvidia.com>
    Reported-by: Bas van Dijk <bas@dfinity.org>
    Closes: https://lore.kernel.org/all/CAKNNEtw5_kZomhkugedKMPOG-sxs5Q5OLumWJdiWXv+C9Yct0w@mail.gmail.com/
    Tested-by: Lance Yang <lance.yang@linux.dev>
    Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
    Reviewed-by: Wei Yang <richard.weiyang@gmail.com>
    Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
    Cc: Barry Song <baohua@kernel.org>
    Cc: David Hildenbrand <david@kernel.org>
    Cc: Dev Jain <dev.jain@arm.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Liam Howlett <liam.howlett@oracle.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Nico Pache <npache@redhat.com>
    Cc: Ryan Roberts <ryan.roberts@arm.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/kfence: disable KFENCE upon KASAN HW tags enablement [+ + +]
Author: Alexander Potapenko <glider@google.com>
Date:   Fri Feb 13 10:54:10 2026 +0100

    mm/kfence: disable KFENCE upon KASAN HW tags enablement
    
    commit 09833d99db36d74456a4d13eb29c32d56ff8f2b6 upstream.
    
    KFENCE does not currently support KASAN hardware tags.  As a result, the
    two features are incompatible when enabled simultaneously.
    
    Given that MTE provides deterministic protection and KFENCE is a
    sampling-based debugging tool, prioritize the stronger hardware
    protections.  Disable KFENCE initialization and free the pre-allocated
    pool if KASAN hardware tags are detected to ensure the system maintains
    the security guarantees provided by MTE.
    
    Link: https://lkml.kernel.org/r/20260213095410.1862978-1-glider@google.com
    Fixes: 0ce20dd84089 ("mm: add Kernel Electric-Fence infrastructure")
    Signed-off-by: Alexander Potapenko <glider@google.com>
    Suggested-by: Marco Elver <elver@google.com>
    Reviewed-by: Marco Elver <elver@google.com>
    Cc: Andrey Konovalov <andreyknvl@gmail.com>
    Cc: Andrey Ryabinin <ryabinin.a.a@gmail.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Ernesto Martinez Garcia <ernesto.martinezgarcia@tugraz.at>
    Cc: Greg KH <gregkh@linuxfoundation.org>
    Cc: Kees Cook <kees@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm/kfence: fix KASAN hardware tag faults during late enablement [+ + +]
Author: Alexander Potapenko <glider@google.com>
Date:   Fri Feb 20 15:49:40 2026 +0100

    mm/kfence: fix KASAN hardware tag faults during late enablement
    
    commit d155aab90fffa00f93cea1f107aef0a3d548b2ff upstream.
    
    When KASAN hardware tags are enabled, re-enabling KFENCE late (via
    /sys/module/kfence/parameters/sample_interval) causes KASAN faults.
    
    This happens because the KFENCE pool and metadata are allocated via the
    page allocator, which tags the memory, while KFENCE continues to access it
    using untagged pointers during initialization.
    
    Use __GFP_SKIP_KASAN for late KFENCE pool and metadata allocations to
    ensure the memory remains untagged, consistent with early allocations from
    memblock.  To support this, add __GFP_SKIP_KASAN to the allowlist in
    __alloc_contig_verify_gfp_mask().
    
    Link: https://lkml.kernel.org/r/20260220144940.2779209-1-glider@google.com
    Fixes: 0ce20dd84089 ("mm: add Kernel Electric-Fence infrastructure")
    Signed-off-by: Alexander Potapenko <glider@google.com>
    Suggested-by: Ernesto Martinez Garcia <ernesto.martinezgarcia@tugraz.at>
    Cc: Andrey Konovalov <andreyknvl@gmail.com>
    Cc: Andrey Ryabinin <ryabinin.a.a@gmail.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Greg KH <gregkh@linuxfoundation.org>
    Cc: Kees Cook <kees@kernel.org>
    Cc: Marco Elver <elver@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>

 
mm/slab: fix an incorrect check in obj_exts_alloc_size() [+ + +]
Author: Harry Yoo <harry.yoo@oracle.com>
Date:   Mon Mar 9 16:22:19 2026 +0900

    mm/slab: fix an incorrect check in obj_exts_alloc_size()
    
    commit 8dafa9f5900c4855a65dbfee51e3bd00636deee1 upstream.
    
    obj_exts_alloc_size() prevents recursive allocation of slabobj_ext
    array from the same cache, to avoid creating slabs that are never freed.
    
    There is one mistake that returns the original size when memory
    allocation profiling is disabled. The assumption was that
    memcg-triggered slabobj_ext allocation is always served from
    KMALLOC_CGROUP type. But this is wrong [1]: when the caller specifies
    both __GFP_RECLAIMABLE and __GFP_ACCOUNT with SLUB_TINY enabled, the
    allocation is served from normal kmalloc. This is because kmalloc_type()
    prioritizes __GFP_RECLAIMABLE over __GFP_ACCOUNT, and SLUB_TINY aliases
    KMALLOC_RECLAIM with KMALLOC_NORMAL.
    
    As a result, the recursion guard is bypassed and the problematic slabs
    can be created. Fix this by removing the mem_alloc_profiling_enabled()
    check entirely. The remaining is_kmalloc_normal() check is still
    sufficient to detect whether the cache is of KMALLOC_NORMAL type and
    avoid bumping the size if it's not.
    
    Without SLUB_TINY, no functional change intended.
    With SLUB_TINY, allocations with __GFP_ACCOUNT|__GFP_RECLAIMABLE
    now allocate a larger array if the sizes equal.
    
    Reported-by: Zw Tang <shicenci@gmail.com>
    Fixes: 280ea9c3154b ("mm/slab: avoid allocating slabobj_ext array from its own slab")
    Closes: https://lore.kernel.org/linux-mm/CAPHJ_VKuMKSke8b11AZQw1PTSFN4n2C0gFxC6xGOG0ZLHgPmnA@mail.gmail.com [1]
    Cc: stable@vger.kernel.org
    Signed-off-by: Harry Yoo <harry.yoo@oracle.com>
    Link: https://patch.msgid.link/20260309072219.22653-1-harry.yoo@oracle.com
    Tested-by: Zw Tang <shicenci@gmail.com>
    Signed-off-by: Vlastimil Babka (SUSE) <vbabka@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/tracing: rss_stat: ensure curr is false from kthread context [+ + +]
Author: Kalesh Singh <kaleshsingh@google.com>
Date:   Thu Feb 19 15:36:56 2026 -0800

    mm/tracing: rss_stat: ensure curr is false from kthread context
    
    commit 079c24d5690262e83ee476e2a548e416f3237511 upstream.
    
    The rss_stat trace event allows userspace tools, like Perfetto [1], to
    inspect per-process RSS metric changes over time.
    
    The curr field was introduced to rss_stat in commit e4dcad204d3a
    ("rss_stat: add support to detect RSS updates of external mm").  Its
    intent is to indicate whether the RSS update is for the mm_struct of the
    current execution context; and is set to false when operating on a remote
    mm_struct (e.g., via kswapd or a direct reclaimer).
    
    However, an issue arises when a kernel thread temporarily adopts a user
    process's mm_struct.  Kernel threads do not have their own mm_struct and
    normally have current->mm set to NULL.  To operate on user memory, they
    can "borrow" a memory context using kthread_use_mm(), which sets
    current->mm to the user process's mm.
    
    This can be observed, for example, in the USB Function Filesystem (FFS)
    driver.  The ffs_user_copy_worker() handles AIO completions and uses
    kthread_use_mm() to copy data to a user-space buffer.  If a page fault
    occurs during this copy, the fault handler executes in the kthread's
    context.
    
    At this point, current is the kthread, but current->mm points to the user
    process's mm.  Since the rss_stat event (from the page fault) is for that
    same mm, the condition current->mm == mm becomes true, causing curr to be
    incorrectly set to true when the trace event is emitted.
    
    This is misleading because it suggests the mm belongs to the kthread,
    confusing userspace tools that track per-process RSS changes and
    corrupting their mm_id-to-process association.
    
    Fix this by ensuring curr is always false when the trace event is emitted
    from a kthread context by checking for the PF_KTHREAD flag.
    
    Link: https://lkml.kernel.org/r/20260219233708.1971199-1-kaleshsingh@google.com
    Link: https://perfetto.dev/ [1]
    Fixes: e4dcad204d3a ("rss_stat: add support to detect RSS updates of external mm")
    Signed-off-by: Kalesh Singh <kaleshsingh@google.com>
    Acked-by: Zi Yan <ziy@nvidia.com>
    Acked-by: SeongJae Park <sj@kernel.org>
    Reviewed-by: Pedro Falcato <pfalcato@suse.de>
    Cc: "David Hildenbrand (Arm)" <david@kernel.org>
    Cc: Joel Fernandes <joel@joelfernandes.org>
    Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
    Cc: Minchan Kim <minchan@kernel.org>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: <stable@vger.kernel.org>    [5.10+]
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm: Fix a hmm_range_fault() livelock / starvation problem [+ + +]
Author: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Date:   Tue Feb 10 12:56:53 2026 +0100

    mm: Fix a hmm_range_fault() livelock / starvation problem
    
    commit b570f37a2ce480be26c665345c5514686a8a0274 upstream.
    
    If hmm_range_fault() fails a folio_trylock() in do_swap_page,
    trying to acquire the lock of a device-private folio for migration,
    to ram, the function will spin until it succeeds grabbing the lock.
    
    However, if the process holding the lock is depending on a work
    item to be completed, which is scheduled on the same CPU as the
    spinning hmm_range_fault(), that work item might be starved and
    we end up in a livelock / starvation situation which is never
    resolved.
    
    This can happen, for example if the process holding the
    device-private folio lock is stuck in
       migrate_device_unmap()->lru_add_drain_all()
    sinc lru_add_drain_all() requires a short work-item
    to be run on all online cpus to complete.
    
    A prerequisite for this to happen is:
    a) Both zone device and system memory folios are considered in
       migrate_device_unmap(), so that there is a reason to call
       lru_add_drain_all() for a system memory folio while a
       folio lock is held on a zone device folio.
    b) The zone device folio has an initial mapcount > 1 which causes
       at least one migration PTE entry insertion to be deferred to
       try_to_migrate(), which can happen after the call to
       lru_add_drain_all().
    c) No or voluntary only preemption.
    
    This all seems pretty unlikely to happen, but indeed is hit by
    the "xe_exec_system_allocator" igt test.
    
    Resolve this by waiting for the folio to be unlocked if the
    folio_trylock() fails in do_swap_page().
    
    Rename migration_entry_wait_on_locked() to
    softleaf_entry_wait_unlock() and update its documentation to
    indicate the new use-case.
    
    Future code improvements might consider moving
    the lru_add_drain_all() call in migrate_device_unmap() to be
    called *after* all pages have migration entries inserted.
    That would eliminate also b) above.
    
    v2:
    - Instead of a cond_resched() in hmm_range_fault(),
      eliminate the problem by waiting for the folio to be unlocked
      in do_swap_page() (Alistair Popple, Andrew Morton)
    v3:
    - Add a stub migration_entry_wait_on_locked() for the
      !CONFIG_MIGRATION case. (Kernel Test Robot)
    v4:
    - Rename migrate_entry_wait_on_locked() to
      softleaf_entry_wait_on_locked() and update docs (Alistair Popple)
    v5:
    - Add a WARN_ON_ONCE() for the !CONFIG_MIGRATION
      version of softleaf_entry_wait_on_locked().
    - Modify wording around function names in the commit message
      (Andrew Morton)
    
    Suggested-by: Alistair Popple <apopple@nvidia.com>
    Fixes: 1afaeb8293c9 ("mm/migrate: Trylock device page in do_swap_page")
    Cc: Ralph Campbell <rcampbell@nvidia.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Jason Gunthorpe <jgg@mellanox.com>
    Cc: Jason Gunthorpe <jgg@ziepe.ca>
    Cc: Leon Romanovsky <leon@kernel.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Matthew Brost <matthew.brost@intel.com>
    Cc: John Hubbard <jhubbard@nvidia.com>
    Cc: Alistair Popple <apopple@nvidia.com>
    Cc: linux-mm@kvack.org
    Cc: <dri-devel@lists.freedesktop.org>
    Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
    Cc: <stable@vger.kernel.org> # v6.15+
    Reviewed-by: John Hubbard <jhubbard@nvidia.com> #v3
    Reviewed-by: Alistair Popple <apopple@nvidia.com>
    Link: https://patch.msgid.link/20260210115653.92413-1-thomas.hellstrom@linux.intel.com
    (cherry picked from commit a69d1ab971a624c6f112cea61536569d579c3215)
    Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm: memfd_luo: always dirty all folios [+ + +]
Author: Pratyush Yadav (Google) <pratyush@kernel.org>
Date:   Mon Feb 23 18:39:29 2026 +0100

    mm: memfd_luo: always dirty all folios
    
    commit 7e04bf1f33151a30e06a65b74b5f2c19fc2be128 upstream.
    
    A dirty folio is one which has been written to.  A clean folio is its
    opposite.  Since a clean folio has no user data, it can be freed under
    memory pressure.
    
    memfd preservation with LUO saves the flag at preserve().  This is
    problematic.  The folio might get dirtied later.  Saving it at freeze()
    also doesn't work, since the dirty bit from PTE is normally synced at
    unmap and there might still be mappings of the file at freeze().
    
    To see why this is a problem, say a folio is clean at preserve, but gets
    dirtied later.  The serialized state of the folio will mark it as clean.
    After retrieve, the next kernel will see the folio as clean and might try
    to reclaim it under memory pressure.  This will result in losing user
    data.
    
    Mark all folios of the file as dirty, and always set the
    MEMFD_LUO_FOLIO_DIRTY flag.  This comes with the side effect of making all
    clean folios un-reclaimable.  This is a cost that has to be paid for
    participants of live update.  It is not expected to be a common use case
    to preserve a lot of clean folios anyway.
    
    Since the value of pfolio->flags is a constant now, drop the flags
    variable and set it directly.
    
    Link: https://lkml.kernel.org/r/20260223173931.2221759-3-pratyush@kernel.org
    Fixes: b3749f174d68 ("mm: memfd_luo: allow preserving memfd")
    Signed-off-by: Pratyush Yadav (Google) <pratyush@kernel.org>
    Reviewed-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
    Cc: Pasha Tatashin <pasha.tatashin@soleen.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: memfd_luo: always make all folios uptodate [+ + +]
Author: Pratyush Yadav (Google) <pratyush@kernel.org>
Date:   Mon Feb 23 18:39:28 2026 +0100

    mm: memfd_luo: always make all folios uptodate
    
    commit 50d7b4332f27762d24641970fc34bb68a2621926 upstream.
    
    Patch series "mm: memfd_luo: fixes for folio flag preservation".
    
    This series contains a couple fixes for flag preservation for memfd live
    update.
    
    The first patch fixes memfd preservation when fallocate() was used to
    pre-allocate some pages.  For these memfds, all the writes to fallocated
    pages touched after preserve were lost.
    
    The second patch fixes dirty flag tracking.  If the dirty flag is not
    tracked correctly, the next kernel might incorrectly reclaim some folios
    under memory pressure, losing user data.  This is a theoretical bug that I
    observed when reading the code, and haven't been able to reproduce it.
    
    
    This patch (of 2):
    
    When a folio is added to a shmem file via fallocate, it is not zeroed on
    allocation.  This is done as a performance optimization since it is
    possible the folio will never end up being used at all.  When the folio is
    used, shmem checks for the uptodate flag, and if absent, zeroes the folio
    (and sets the flag) before returning to user.
    
    With LUO, the flags of each folio are saved at preserve time.  It is
    possible to have a memfd with some folios fallocated but not uptodate.
    For those, the uptodate flag doesn't get saved.  The folios might later
    end up being used and become uptodate.  They would get passed to the next
    kernel via KHO correctly since they did get preserved.  But they won't
    have the MEMFD_LUO_FOLIO_UPTODATE flag.
    
    This means that when the memfd is retrieved, the folios will be added to
    the shmem file without the uptodate flag.  They will be zeroed before
    first use, losing the data in those folios.
    
    Since we take a big performance hit in allocating, zeroing, and pinning
    all folios at prepare time anyway, take some more and zero all
    non-uptodate ones too.
    
    Later when there is a stronger need to make prepare faster, this can be
    optimized.
    
    To avoid racing with another uptodate operation, take the folio lock.
    
    Link: https://lkml.kernel.org/r/20260223173931.2221759-2-pratyush@kernel.org
    Fixes: b3749f174d68 ("mm: memfd_luo: allow preserving memfd")
    Signed-off-by: Pratyush Yadav (Google) <pratyush@kernel.org>
    Reviewed-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
    Cc: Pasha Tatashin <pasha.tatashin@soleen.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mmc: core: Avoid bitfield RMW for claim/retune flags [+ + +]
Author: Penghe Geng <pgeng@nvidia.com>
Date:   Thu Feb 19 15:29:54 2026 -0500

    mmc: core: Avoid bitfield RMW for claim/retune flags
    
    commit 901084c51a0a8fb42a3f37d2e9c62083c495f824 upstream.
    
    Move claimed and retune control flags out of the bitfield word to
    avoid unrelated RMW side effects in asynchronous contexts.
    
    The host->claimed bit shared a word with retune flags. Writes to claimed
    in __mmc_claim_host() or retune_now in mmc_mq_queue_rq() can overwrite
    other bits when concurrent updates happen in other contexts, triggering
    spurious WARN_ON(!host->claimed). Convert claimed, can_retune,
    retune_now and retune_paused to bool to remove shared-word coupling.
    
    Fixes: 6c0cedd1ef952 ("mmc: core: Introduce host claiming by context")
    Fixes: 1e8e55b67030c ("mmc: block: Add CQE support")
    Cc: stable@vger.kernel.org
    Suggested-by: Adrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: Penghe Geng <pgeng@nvidia.com>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: dw_mmc-rockchip: Fix runtime PM support for internal phase support [+ + +]
Author: Shawn Lin <shawn.lin@rock-chips.com>
Date:   Fri Jan 16 08:55:30 2026 +0800

    mmc: dw_mmc-rockchip: Fix runtime PM support for internal phase support
    
    commit 6465a8bbb0f6ad98aeb66dc9ea19c32c193a610b upstream.
    
    RK3576 is the first platform to introduce internal phase support, and
    subsequent platforms are expected to adopt a similar design. In this
    architecture, runtime suspend powers off the attached power domain, which
    resets registers, including vendor-specific ones such as SDMMC_TIMING_CON0,
    SDMMC_TIMING_CON1, and SDMMC_MISC_CON. These registers must be saved and
    restored, a requirement that falls outside the scope of the dw_mmc core.
    
    Fixes: 59903441f5e4 ("mmc: dw_mmc-rockchip: Add internal phase support")
    Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
    Tested-by: Marco Schirrmeister <mschirrmeister@gmail.com>
    Reviewed-by: Heiko Stuebner <heiko@sntech.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: mmci: Fix device_node reference leak in of_get_dml_pipe_index() [+ + +]
Author: Felix Gu <ustc.gu@gmail.com>
Date:   Tue Jan 20 22:26:46 2026 +0800

    mmc: mmci: Fix device_node reference leak in of_get_dml_pipe_index()
    
    commit af12e64ae0661546e8b4f5d30d55c5f53a11efe7 upstream.
    
    When calling of_parse_phandle_with_args(), the caller is responsible
    to call of_node_put() to release the reference of device node.
    In of_get_dml_pipe_index(), it does not release the reference.
    
    Fixes: 9cb15142d0e3 ("mmc: mmci: Add qcom dml support to the driver.")
    Signed-off-by: Felix Gu <gu_0233@qq.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: sdhci-brcmstb: use correct register offset for V1 pin_sel restore [+ + +]
Author: Kamal Dasu <kamal.dasu@broadcom.com>
Date:   Mon Feb 16 14:15:43 2026 -0500

    mmc: sdhci-brcmstb: use correct register offset for V1 pin_sel restore
    
    commit 79ad471530e0baef0dce991816013df55e401d9c upstream.
    
    The restore path for SDIO_CFG_CORE_V1 was incorrectly using
    SDIO_CFG_SD_PIN_SEL (offset 0x44) instead of SDIO_CFG_V1_SD_PIN_SEL
    (offset 0x54), causing the wrong register to be written on resume.
    The save path already uses the correct V1-specific offset. This
    affects BCM7445 and BCM72116 platforms which use the V1 config core.
    
    Fixes: b7e614802e3f ("mmc: sdhci-brcmstb: save and restore registers during PM")
    Signed-off-by: Kamal Dasu <kamal.dasu@broadcom.com>
    Cc: stable@vger.kernel.org
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
neighbour: restore protocol != 0 check in pneigh update [+ + +]
Author: Sabrina Dubroca <sd@queasysnail.net>
Date:   Tue Mar 10 22:59:16 2026 +0100

    neighbour: restore protocol != 0 check in pneigh update
    
    [ Upstream commit cbada1048847a348797aec63a1d8056621cbe653 ]
    
    Prior to commit dc2a27e524ac ("neighbour: Update pneigh_entry in
    pneigh_create()."), a pneigh's protocol was updated only when the
    value of the NDA_PROTOCOL attribute was non-0. While moving the code,
    that check was removed. This is a small change of user-visible
    behavior, and inconsistent with the (non-proxy) neighbour behavior.
    
    Fixes: dc2a27e524ac ("neighbour: Update pneigh_entry in pneigh_create().")
    Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
    Link: https://patch.msgid.link/38c61de1bb032871a886aff9b9b52fe1cdd4cada.1772894876.git.sd@queasysnail.net
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net-shapers: don't free reply skb after genlmsg_reply() [+ + +]
Author: Paul Moses <p@1g4.org>
Date:   Mon Mar 9 17:35:10 2026 +0000

    net-shapers: don't free reply skb after genlmsg_reply()
    
    commit 57885276cc16a2e2b76282c808a4e84cbecb3aae upstream.
    
    genlmsg_reply() hands the reply skb to netlink, and
    netlink_unicast() consumes it on all return paths, whether the
    skb is queued successfully or freed on an error path.
    
    net_shaper_nl_get_doit() and net_shaper_nl_cap_get_doit()
    currently jump to free_msg after genlmsg_reply() fails and call
    nlmsg_free(msg), which can hit the same skb twice.
    
    Return the genlmsg_reply() error directly and keep free_msg
    only for pre-reply failures.
    
    Fixes: 4b623f9f0f59 ("net-shapers: implement NL get operation")
    Fixes: 553ea9f1efd6 ("net: shaper: implement introspection support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Paul Moses <p@1g4.org>
    Link: https://patch.msgid.link/20260309173450.538026-2-p@1g4.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/mana: Null service_wq on setup error to prevent double destroy [+ + +]
Author: Shiraz Saleem <shirazsaleem@microsoft.com>
Date:   Mon Mar 9 10:24:43 2026 -0700

    net/mana: Null service_wq on setup error to prevent double destroy
    
    [ Upstream commit 87c2302813abc55c46485711a678e3c312b00666 ]
    
    In mana_gd_setup() error path, set gc->service_wq to NULL after
    destroy_workqueue() to match the cleanup in mana_gd_cleanup().
    This prevents a use-after-free if the workqueue pointer is checked
    after a failed setup.
    
    Fixes: f975a0955276 ("net: mana: Fix double destroy_workqueue on service rescan PCI path")
    Signed-off-by: Shiraz Saleem <shirazsaleem@microsoft.com>
    Signed-off-by: Konstantin Taranov <kotaranov@microsoft.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20260309172443.688392-1-kotaranov@linux.microsoft.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx5: Fix crash when moving to switchdev mode [+ + +]
Author: Patrisious Haddad <phaddad@nvidia.com>
Date:   Thu Mar 5 16:26:30 2026 +0200

    net/mlx5: Fix crash when moving to switchdev mode
    
    [ Upstream commit 24b2795f9683e092dc22a68f487e7aaaf2ddafea ]
    
    When moving to switchdev mode when the device doesn't support IPsec,
    we try to clean up the IPsec resources anyway which causes the crash
    below, fix that by correctly checking for IPsec support before trying
    to clean up its resources.
    
    [27642.515799] WARNING: arch/x86/mm/fault.c:1276 at
    do_user_addr_fault+0x18a/0x680, CPU#4: devlink/6490
    [27642.517159] Modules linked in: xt_conntrack xt_MASQUERADE
    ip6table_nat ip6table_filter ip6_tables iptable_nat nf_nat xt_addrtype
    rpcsec_gss_krb5 auth_rpcgss oid_registry overlay mlx5_fwctl nfnetlink
    zram zsmalloc mlx5_ib fuse rpcrdma rdma_ucm ib_uverbs ib_iser libiscsi
    scsi_transport_iscsi ib_umad rdma_cm ib_ipoib iw_cm ib_cm mlx5_core
    ib_core
    [27642.521358] CPU: 4 UID: 0 PID: 6490 Comm: devlink Not tainted
    6.19.0-rc5_for_upstream_min_debug_2026_01_14_16_47 #1 NONE
    [27642.522923] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS
    rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014
    [27642.524528] RIP: 0010:do_user_addr_fault+0x18a/0x680
    [27642.525362] Code: ff 0f 84 75 03 00 00 48 89 ee 4c 89 e7 e8 5e b9 22
    00 49 89 c0 48 85 c0 0f 84 a8 02 00 00 f7 c3 60 80 00 00 74 22 31 c9 eb
       ae <0f> 0b 48 83 c4 10 48 89 ea 48 89 de 4c 89 f7 5b 5d 41 5c 41 5d
    41
    [27642.528166] RSP: 0018:ffff88810770f6b8 EFLAGS: 00010046
    [27642.529038] RAX: 0000000000000000 RBX: 0000000000000002 RCX:
    ffff88810b980f00
    [27642.530158] RDX: 00000000000000a0 RSI: 0000000000000002 RDI:
    ffff88810770f728
    [27642.531270] RBP: 00000000000000a0 R08: 0000000000000000 R09:
    0000000000000000
    [27642.532383] R10: 0000000000000000 R11: 0000000000000000 R12:
    ffff888103f3c4c0
    [27642.533499] R13: 0000000000000000 R14: ffff88810770f728 R15:
    0000000000000000
    [27642.534614] FS:  00007f197c741740(0000) GS:ffff88856a94c000(0000)
    knlGS:0000000000000000
    [27642.535915] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [27642.536858] CR2: 00000000000000a0 CR3: 000000011334c003 CR4:
    0000000000172eb0
    [27642.537982] Call Trace:
    [27642.538466]  <TASK>
    [27642.538907]  exc_page_fault+0x76/0x140
    [27642.539583]  asm_exc_page_fault+0x22/0x30
    [27642.540282] RIP: 0010:_raw_spin_lock_irqsave+0x10/0x30
    [27642.541134] Code: 07 85 c0 75 11 ba ff 00 00 00 f0 0f b1 17 75 06 b8
    01 00 00 00 c3 31 c0 c3 90 0f 1f 44 00 00 53 9c 5b fa 31 c0 ba 01 00 00
       00 <f0> 0f b1 17 75 05 48 89 d8 5b c3 89 c6 e8 7e 02 00 00 48 89 d8
          5b
    [27642.543936] RSP: 0018:ffff88810770f7d8 EFLAGS: 00010046
    [27642.544803] RAX: 0000000000000000 RBX: 0000000000000202 RCX:
    ffff888113ad96d8
    [27642.545916] RDX: 0000000000000001 RSI: ffff88810770f818 RDI:
    00000000000000a0
    [27642.547027] RBP: 0000000000000098 R08: 0000000000000400 R09:
    ffff88810b980f00
    [27642.548140] R10: 0000000000000001 R11: ffff888101845a80 R12:
    00000000000000a8
    [27642.549263] R13: ffffffffa02a9060 R14: 00000000000000a0 R15:
    ffff8881130d8a40
    [27642.550379]  complete_all+0x20/0x90
    [27642.551010]  mlx5e_ipsec_disable_events+0xb6/0xf0 [mlx5_core]
    [27642.552022]  mlx5e_nic_disable+0x12d/0x220 [mlx5_core]
    [27642.552929]  mlx5e_detach_netdev+0x66/0xf0 [mlx5_core]
    [27642.553822]  mlx5e_netdev_change_profile+0x5b/0x120 [mlx5_core]
    [27642.554821]  mlx5e_vport_rep_load+0x419/0x590 [mlx5_core]
    [27642.555757]  ? xa_load+0x53/0x90
    [27642.556361]  __esw_offloads_load_rep+0x54/0x70 [mlx5_core]
    [27642.557328]  mlx5_esw_offloads_rep_load+0x45/0xd0 [mlx5_core]
    [27642.558320]  esw_offloads_enable+0xb4b/0xc90 [mlx5_core]
    [27642.559247]  mlx5_eswitch_enable_locked+0x34e/0x4f0 [mlx5_core]
    [27642.560257]  ? mlx5_rescan_drivers_locked+0x222/0x2d0 [mlx5_core]
    [27642.561284]  mlx5_devlink_eswitch_mode_set+0x5ac/0x9c0 [mlx5_core]
    [27642.562334]  ? devlink_rate_set_ops_supported+0x21/0x3a0
    [27642.563220]  devlink_nl_eswitch_set_doit+0x67/0xe0
    [27642.564026]  genl_family_rcv_msg_doit+0xe0/0x130
    [27642.564816]  genl_rcv_msg+0x183/0x290
    [27642.565466]  ? __devlink_nl_pre_doit.isra.0+0x160/0x160
    [27642.566329]  ? devlink_nl_eswitch_get_doit+0x290/0x290
    [27642.567181]  ? devlink_nl_pre_doit_parent_dev_optional+0x20/0x20
    [27642.568147]  ? genl_family_rcv_msg_dumpit+0xf0/0xf0
    [27642.568966]  netlink_rcv_skb+0x4b/0xf0
    [27642.569629]  genl_rcv+0x24/0x40
    [27642.570215]  netlink_unicast+0x255/0x380
    [27642.570901]  ? __alloc_skb+0xfa/0x1e0
    [27642.571560]  netlink_sendmsg+0x1f3/0x420
    [27642.572249]  __sock_sendmsg+0x38/0x60
    [27642.572911]  __sys_sendto+0x119/0x180
    [27642.573561]  ? __sys_recvmsg+0x5c/0xb0
    [27642.574227]  __x64_sys_sendto+0x20/0x30
    [27642.574904]  do_syscall_64+0x55/0xc10
    [27642.575554]  entry_SYSCALL_64_after_hwframe+0x4b/0x53
    [27642.576391] RIP: 0033:0x7f197c85e807
    [27642.577050] Code: c7 c0 ff ff ff ff eb be 66 2e 0f 1f 84 00 00 00 00
    00 90 f3 0f 1e fa 80 3d 45 08 0d 00 00 41 89 ca 74 10 b8 2c 00 00 00 0f
       05 <48> 3d 00 f0 ff ff 77 69 c3 55 48 89 e5 53 48 83 ec 38 44 89 4d
          d0
    [27642.579846] RSP: 002b:00007ffebd4e2248 EFLAGS: 00000202 ORIG_RAX:
    000000000000002c
    [27642.581082] RAX: ffffffffffffffda RBX: 000055cfcd9cd2a0 RCX:
    00007f197c85e807
    [27642.582200] RDX: 0000000000000038 RSI: 000055cfcd9cd490 RDI:
    0000000000000003
    [27642.583320] RBP: 00007ffebd4e2290 R08: 00007f197c942200 R09:
    000000000000000c
    [27642.584437] R10: 0000000000000000 R11: 0000000000000202 R12:
    0000000000000000
    [27642.585555] R13: 000055cfcd9cd490 R14: 00007ffebd4e45d1 R15:
    000055cfcd9cd2a0
    [27642.586671]  </TASK>
    [27642.587121] ---[ end trace 0000000000000000 ]---
    [27642.587910] BUG: kernel NULL pointer dereference, address:
    00000000000000a0
    
    Fixes: 664f76be38a1 ("net/mlx5: Fix IPsec cleanup over MPV device")
    Signed-off-by: Patrisious Haddad <phaddad@nvidia.com>
    Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/20260305142634.1813208-2-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: Fix deadlock between devlink lock and esw->wq [+ + +]
Author: Cosmin Ratiu <cratiu@nvidia.com>
Date:   Thu Mar 5 10:10:19 2026 +0200

    net/mlx5: Fix deadlock between devlink lock and esw->wq
    
    [ Upstream commit aed763abf0e905b4b8d747d1ba9e172961572f57 ]
    
    esw->work_queue executes esw_functions_changed_event_handler ->
    esw_vfs_changed_event_handler and acquires the devlink lock.
    
    .eswitch_mode_set (acquires devlink lock in devlink_nl_pre_doit) ->
    mlx5_devlink_eswitch_mode_set -> mlx5_eswitch_disable_locked ->
    mlx5_eswitch_event_handler_unregister -> flush_workqueue deadlocks
    when esw_vfs_changed_event_handler executes.
    
    Fix that by no longer flushing the work to avoid the deadlock, and using
    a generation counter to keep track of work relevance. This avoids an old
    handler manipulating an esw that has undergone one or more mode changes:
    - the counter is incremented in mlx5_eswitch_event_handler_unregister.
    - the counter is read and passed to the ephemeral mlx5_host_work struct.
    - the work handler takes the devlink lock and bails out if the current
      generation is different than the one it was scheduled to operate on.
    - mlx5_eswitch_cleanup does the final draining before destroying the wq.
    
    No longer flushing the workqueue has the side effect of maybe no longer
    cancelling pending vport_change_handler work items, but that's ok since
    those are disabled elsewhere:
    - mlx5_eswitch_disable_locked disables the vport eq notifier.
    - mlx5_esw_vport_disable disarms the HW EQ notification and marks
      vport->enabled under state_lock to false to prevent pending vport
      handler from doing anything.
    - mlx5_eswitch_cleanup destroys the workqueue and makes sure all events
      are disabled/finished.
    
    Fixes: f1bc646c9a06 ("net/mlx5: Use devl_ API in mlx5_esw_offloads_devlink_port_register")
    Signed-off-by: Cosmin Ratiu <cratiu@nvidia.com>
    Reviewed-by: Moshe Shemesh <moshe@nvidia.com>
    Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/20260305081019.1811100-1-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: Fix peer miss rules host disabled checks [+ + +]
Author: Carolina Jubran <cjubran@nvidia.com>
Date:   Thu Mar 5 16:26:31 2026 +0200

    net/mlx5: Fix peer miss rules host disabled checks
    
    [ Upstream commit 76324e4041c0efb4808702b05426d7a0a7d8df5b ]
    
    The check on mlx5_esw_host_functions_enabled(esw->dev) for adding VF
    peer miss rules is incorrect. These rules match traffic from peer's VFs,
    so the local device's host function status is irrelevant. Remove this
    check to ensure peer VF traffic is properly handled regardless of local
    host configuration.
    
    Also fix the PF peer miss rule deletion to be symmetric with the add
    path, so only attempt to delete the rule if it was actually created.
    
    Fixes: 520369ef43a8 ("net/mlx5: Support disabling host PFs")
    Signed-off-by: Carolina Jubran <cjubran@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/20260305142634.1813208-3-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx5e: Fix DMA FIFO desync on error CQE SQ recovery [+ + +]
Author: Gal Pressman <gal@nvidia.com>
Date:   Thu Mar 5 16:26:32 2026 +0200

    net/mlx5e: Fix DMA FIFO desync on error CQE SQ recovery
    
    [ Upstream commit 1633111d69053512d099658d4a05fc736fab36b0 ]
    
    In case of a TX error CQE, a recovery flow is triggered,
    mlx5e_reset_txqsq_cc_pc() resets dma_fifo_cc to 0 but not dma_fifo_pc,
    desyncing the DMA FIFO producer and consumer.
    
    After recovery, the producer pushes new DMA entries at the old
    dma_fifo_pc, while the consumer reads from position 0.
    This causes us to unmap stale DMA addresses from before the recovery.
    
    The DMA FIFO is a purely software construct with no HW counterpart.
    At the point of reset, all WQEs have been flushed so dma_fifo_cc is
    already equal to dma_fifo_pc. There is no need to reset either counter,
    similar to how skb_fifo pc/cc are untouched.
    
    Remove the 'dma_fifo_cc = 0' reset.
    
    This fixes the following WARNING:
        WARNING: CPU: 0 PID: 0 at drivers/iommu/dma-iommu.c:1240 iommu_dma_unmap_page+0x79/0x90
        Modules linked in: mlx5_vdpa vringh vdpa bonding mlx5_ib mlx5_vfio_pci ipip mlx5_fwctl tunnel4 mlx5_core ib_ipoib geneve ip6_gre ip_gre gre nf_tables ip6_tunnel rdma_ucm ib_uverbs ib_umad vfio_pci vfio_pci_core act_mirred act_skbedit act_vlan vhost_net vhost tap ip6table_mangle ip6table_nat ip6table_filter ip6_tables iptable_mangle cls_matchall nfnetlink_cttimeout act_gact cls_flower sch_ingress vhost_iotlb iptable_raw tunnel6 vfio_iommu_type1 vfio openvswitch nsh rpcsec_gss_krb5 auth_rpcgss oid_registry xt_conntrack xt_MASQUERADE nf_conntrack_netlink nfnetlink iptable_nat nf_nat xt_addrtype br_netfilter overlay zram zsmalloc rpcrdma ib_iser libiscsi scsi_transport_iscsi rdma_cm iw_cm ib_cm ib_core fuse [last unloaded: nf_tables]
        CPU: 0 UID: 0 PID: 0 Comm: swapper/0 Not tainted 6.13.0-rc5_for_upstream_min_debug_2024_12_30_21_33 #1
        Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
        RIP: 0010:iommu_dma_unmap_page+0x79/0x90
        Code: 2b 4d 3b 21 72 26 4d 3b 61 08 73 20 49 89 d8 44 89 f9 5b 4c 89 f2 4c 89 e6 48 89 ef 5d 41 5c 41 5d 41 5e 41 5f e9 c7 ae 9e ff <0f> 0b 5b 5d 41 5c 41 5d 41 5e 41 5f c3 66 2e 0f 1f 84 00 00 00 00
        Call Trace:
         <IRQ>
         ? __warn+0x7d/0x110
         ? iommu_dma_unmap_page+0x79/0x90
         ? report_bug+0x16d/0x180
         ? handle_bug+0x4f/0x90
         ? exc_invalid_op+0x14/0x70
         ? asm_exc_invalid_op+0x16/0x20
         ? iommu_dma_unmap_page+0x79/0x90
         ? iommu_dma_unmap_page+0x2e/0x90
         dma_unmap_page_attrs+0x10d/0x1b0
         mlx5e_tx_wi_dma_unmap+0xbe/0x120 [mlx5_core]
         mlx5e_poll_tx_cq+0x16d/0x690 [mlx5_core]
         mlx5e_napi_poll+0x8b/0xac0 [mlx5_core]
         __napi_poll+0x24/0x190
         net_rx_action+0x32a/0x3b0
         ? mlx5_eq_comp_int+0x7e/0x270 [mlx5_core]
         ? notifier_call_chain+0x35/0xa0
         handle_softirqs+0xc9/0x270
         irq_exit_rcu+0x71/0xd0
         common_interrupt+0x7f/0xa0
         </IRQ>
         <TASK>
         asm_common_interrupt+0x22/0x40
    
    Fixes: db75373c91b0 ("net/mlx5e: Recover Send Queue (SQ) from error state")
    Signed-off-by: Gal Pressman <gal@nvidia.com>
    Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/20260305142634.1813208-4-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5e: RX, Fix XDP multi-buf frag counting for legacy RQ [+ + +]
Author: Dragos Tatulea <dtatulea@nvidia.com>
Date:   Thu Mar 5 16:26:34 2026 +0200

    net/mlx5e: RX, Fix XDP multi-buf frag counting for legacy RQ
    
    [ Upstream commit a6413e6f6c9d9bb9833324cb3753582f7bc0f2fa ]
    
    XDP multi-buf programs can modify the layout of the XDP buffer when the
    program calls bpf_xdp_pull_data() or bpf_xdp_adjust_tail(). The
    referenced commit in the fixes tag corrected the assumption in the mlx5
    driver that the XDP buffer layout doesn't change during a program
    execution. However, this fix introduced another issue: the dropped
    fragments still need to be counted on the driver side to avoid page
    fragment reference counting issues.
    
    Such issue can be observed with the
    test_xdp_native_adjst_tail_shrnk_data selftest when using a payload of
    3600 and shrinking by 256 bytes (an upcoming selftest patch): the last
    fragment gets released by the XDP code but doesn't get tracked by the
    driver. This results in a negative pp_ref_count during page release and
    the following splat:
    
      WARNING: include/net/page_pool/helpers.h:297 at mlx5e_page_release_fragmented.isra.0+0x4a/0x50 [mlx5_core], CPU#12: ip/3137
      Modules linked in: [...]
      CPU: 12 UID: 0 PID: 3137 Comm: ip Not tainted 6.19.0-rc3+ #12 NONE
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014
      RIP: 0010:mlx5e_page_release_fragmented.isra.0+0x4a/0x50 [mlx5_core]
      [...]
      Call Trace:
       <TASK>
       mlx5e_dealloc_rx_wqe+0xcb/0x1a0 [mlx5_core]
       mlx5e_free_rx_descs+0x7f/0x110 [mlx5_core]
       mlx5e_close_rq+0x50/0x60 [mlx5_core]
       mlx5e_close_queues+0x36/0x2c0 [mlx5_core]
       mlx5e_close_channel+0x1c/0x50 [mlx5_core]
       mlx5e_close_channels+0x45/0x80 [mlx5_core]
       mlx5e_safe_switch_params+0x1a5/0x230 [mlx5_core]
       mlx5e_change_mtu+0xf3/0x2f0 [mlx5_core]
       netif_set_mtu_ext+0xf1/0x230
       do_setlink.isra.0+0x219/0x1180
       rtnl_newlink+0x79f/0xb60
       rtnetlink_rcv_msg+0x213/0x3a0
       netlink_rcv_skb+0x48/0xf0
       netlink_unicast+0x24a/0x350
       netlink_sendmsg+0x1ee/0x410
       __sock_sendmsg+0x38/0x60
       ____sys_sendmsg+0x232/0x280
       ___sys_sendmsg+0x78/0xb0
       __sys_sendmsg+0x5f/0xb0
       [...]
       do_syscall_64+0x57/0xc50
    
    This patch fixes the issue by doing page frag counting on all the
    original XDP buffer fragments for all relevant XDP actions (XDP_TX ,
    XDP_REDIRECT and XDP_PASS). This is basically reverting to the original
    counting before the commit in the fixes tag.
    
    As frag_page is still pointing to the original tail, the nr_frags
    parameter to xdp_update_skb_frags_info() needs to be calculated
    in a different way to reflect the new nr_frags.
    
    Fixes: afd5ba577c10 ("net/mlx5e: RX, Fix generating skb from non-linear xdp_buff for legacy RQ")
    Signed-off-by: Dragos Tatulea <dtatulea@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Reviewed-by: Amery Hung <ameryhung@gmail.com>
    Link: https://patch.msgid.link/20260305142634.1813208-6-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5e: RX, Fix XDP multi-buf frag counting for striding RQ [+ + +]
Author: Dragos Tatulea <dtatulea@nvidia.com>
Date:   Thu Mar 5 16:26:33 2026 +0200

    net/mlx5e: RX, Fix XDP multi-buf frag counting for striding RQ
    
    [ Upstream commit db25c42c2e1f9c0d136420fff5e5700f7e771a6f ]
    
    XDP multi-buf programs can modify the layout of the XDP buffer when the
    program calls bpf_xdp_pull_data() or bpf_xdp_adjust_tail(). The
    referenced commit in the fixes tag corrected the assumption in the mlx5
    driver that the XDP buffer layout doesn't change during a program
    execution. However, this fix introduced another issue: the dropped
    fragments still need to be counted on the driver side to avoid page
    fragment reference counting issues.
    
    The issue was discovered by the drivers/net/xdp.py selftest,
    more specifically the test_xdp_native_tx_mb:
    - The mlx5 driver allocates a page_pool page and initializes it with
      a frag counter of 64 (pp_ref_count=64) and the internal frag counter
      to 0.
    - The test sends one packet with no payload.
    - On RX (mlx5e_skb_from_cqe_mpwrq_nonlinear()), mlx5 configures the XDP
      buffer with the packet data starting in the first fragment which is the
      page mentioned above.
    - The XDP program runs and calls bpf_xdp_pull_data() which moves the
      header into the linear part of the XDP buffer. As the packet doesn't
      contain more data, the program drops the tail fragment since it no
      longer contains any payload (pp_ref_count=63).
    - mlx5 device skips counting this fragment. Internal frag counter
      remains 0.
    - mlx5 releases all 64 fragments of the page but page pp_ref_count is
      63 => negative reference counting error.
    
    Resulting splat during the test:
    
      WARNING: CPU: 0 PID: 188225 at ./include/net/page_pool/helpers.h:297 mlx5e_page_release_fragmented.isra.0+0xbd/0xe0 [mlx5_core]
      Modules linked in: [...]
      CPU: 0 UID: 0 PID: 188225 Comm: ip Not tainted 6.18.0-rc7_for_upstream_min_debug_2025_12_08_11_44 #1 NONE
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
      RIP: 0010:mlx5e_page_release_fragmented.isra.0+0xbd/0xe0 [mlx5_core]
      [...]
      Call Trace:
       <TASK>
       mlx5e_free_rx_mpwqe+0x20a/0x250 [mlx5_core]
       mlx5e_dealloc_rx_mpwqe+0x37/0xb0 [mlx5_core]
       mlx5e_free_rx_descs+0x11a/0x170 [mlx5_core]
       mlx5e_close_rq+0x78/0xa0 [mlx5_core]
       mlx5e_close_queues+0x46/0x2a0 [mlx5_core]
       mlx5e_close_channel+0x24/0x90 [mlx5_core]
       mlx5e_close_channels+0x5d/0xf0 [mlx5_core]
       mlx5e_safe_switch_params+0x2ec/0x380 [mlx5_core]
       mlx5e_change_mtu+0x11d/0x490 [mlx5_core]
       mlx5e_change_nic_mtu+0x19/0x30 [mlx5_core]
       netif_set_mtu_ext+0xfc/0x240
       do_setlink.isra.0+0x226/0x1100
       rtnl_newlink+0x7a9/0xba0
       rtnetlink_rcv_msg+0x220/0x3c0
       netlink_rcv_skb+0x4b/0xf0
       netlink_unicast+0x255/0x380
       netlink_sendmsg+0x1f3/0x420
       __sock_sendmsg+0x38/0x60
       ____sys_sendmsg+0x1e8/0x240
       ___sys_sendmsg+0x7c/0xb0
       [...]
       __sys_sendmsg+0x5f/0xb0
       do_syscall_64+0x55/0xc70
    
    The problem applies for XDP_PASS as well which is handled in a different
    code path in the driver.
    
    This patch fixes the issue by doing page frag counting on all the
    original XDP buffer fragments for all relevant XDP actions (XDP_TX ,
    XDP_REDIRECT and XDP_PASS). This is basically reverting to the original
    counting before the commit in the fixes tag.
    
    As frag_page is still pointing to the original tail, the nr_frags
    parameter to xdp_update_skb_frags_info() needs to be calculated
    in a different way to reflect the new nr_frags.
    
    Fixes: 87bcef158ac1 ("net/mlx5e: RX, Fix generating skb from non-linear xdp_buff for striding RQ")
    Signed-off-by: Dragos Tatulea <dtatulea@nvidia.com>
    Cc: Amery Hung <ameryhung@gmail.com>
    Reviewed-by: Nimrod Oren <noren@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/20260305142634.1813208-5-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/sched: teql: fix NULL pointer dereference in iptunnel_xmit on TEQL slave xmit [+ + +]
Author: Weiming Shi <bestswngs@gmail.com>
Date:   Wed Mar 4 12:42:18 2026 +0800

    net/sched: teql: fix NULL pointer dereference in iptunnel_xmit on TEQL slave xmit
    
    [ Upstream commit 0cc0c2e661af418bbf7074179ea5cfffc0a5c466 ]
    
    teql_master_xmit() calls netdev_start_xmit(skb, slave) to transmit
    through slave devices, but does not update skb->dev to the slave device
    beforehand.
    
    When a gretap tunnel is a TEQL slave, the transmit path reaches
    iptunnel_xmit() which saves dev = skb->dev (still pointing to teql0
    master) and later calls iptunnel_xmit_stats(dev, pkt_len). This
    function does:
    
        get_cpu_ptr(dev->tstats)
    
    Since teql_master_setup() does not set dev->pcpu_stat_type to
    NETDEV_PCPU_STAT_TSTATS, the core network stack never allocates tstats
    for teql0, so dev->tstats is NULL. get_cpu_ptr(NULL) computes
    NULL + __per_cpu_offset[cpu], resulting in a page fault.
    
     BUG: unable to handle page fault for address: ffff8880e6659018
     #PF: supervisor write access in kernel mode
     #PF: error_code(0x0002) - not-present page
     PGD 68bc067 P4D 68bc067 PUD 0
     Oops: Oops: 0002 [#1] SMP KASAN PTI
     RIP: 0010:iptunnel_xmit (./include/net/ip_tunnels.h:664 net/ipv4/ip_tunnel_core.c:89)
     Call Trace:
      <TASK>
      ip_tunnel_xmit (net/ipv4/ip_tunnel.c:847)
      __gre_xmit (net/ipv4/ip_gre.c:478)
      gre_tap_xmit (net/ipv4/ip_gre.c:779)
      teql_master_xmit (net/sched/sch_teql.c:319)
      dev_hard_start_xmit (net/core/dev.c:3887)
      sch_direct_xmit (net/sched/sch_generic.c:347)
      __dev_queue_xmit (net/core/dev.c:4802)
      neigh_direct_output (net/core/neighbour.c:1660)
      ip_finish_output2 (net/ipv4/ip_output.c:237)
      __ip_finish_output.part.0 (net/ipv4/ip_output.c:315)
      ip_mc_output (net/ipv4/ip_output.c:369)
      ip_send_skb (net/ipv4/ip_output.c:1508)
      udp_send_skb (net/ipv4/udp.c:1195)
      udp_sendmsg (net/ipv4/udp.c:1485)
      inet_sendmsg (net/ipv4/af_inet.c:859)
      __sys_sendto (net/socket.c:2206)
    
    Fix this by setting skb->dev = slave before calling
    netdev_start_xmit(), so that tunnel xmit functions see the correct
    slave device with properly allocated tstats.
    
    Fixes: 039f50629b7f ("ip_tunnel: Move stats update to iptunnel_xmit()")
    Reported-by: Xiang Mei <xmei5@asu.edu>
    Signed-off-by: Weiming Shi <bestswngs@gmail.com>
    Link: https://patch.msgid.link/20260304044216.3517851-3-bestswngs@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/tcp-ao: Fix MAC comparison to be constant-time [+ + +]
Author: Eric Biggers <ebiggers@kernel.org>
Date:   Mon Mar 2 12:36:00 2026 -0800

    net/tcp-ao: Fix MAC comparison to be constant-time
    
    commit 67edfec516d30d3e62925c397be4a1e5185802fc upstream.
    
    To prevent timing attacks, MACs need to be compared in constant
    time.  Use the appropriate helper function for this.
    
    Fixes: 0a3a809089eb ("net/tcp: Verify inbound TCP-AO signed segments")
    Cc: stable@vger.kernel.org
    Signed-off-by: Eric Biggers <ebiggers@kernel.org>
    Reviewed-by: Dmitry Safonov <0x7f454c46@gmail.com>
    Link: https://patch.msgid.link/20260302203600.13561-1-ebiggers@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/tcp-md5: Fix MAC comparison to be constant-time [+ + +]
Author: Eric Biggers <ebiggers@kernel.org>
Date:   Mon Mar 2 12:34:09 2026 -0800

    net/tcp-md5: Fix MAC comparison to be constant-time
    
    commit 46d0d6f50dab706637f4c18a470aac20a21900d3 upstream.
    
    To prevent timing attacks, MACs need to be compared in constant
    time.  Use the appropriate helper function for this.
    
    Fixes: cfb6eeb4c860 ("[TCP]: MD5 Signature Option (RFC2385) support.")
    Fixes: 658ddaaf6694 ("tcp: md5: RST: getting md5 key from listener")
    Cc: stable@vger.kernel.org
    Signed-off-by: Eric Biggers <ebiggers@kernel.org>
    Link: https://patch.msgid.link/20260302203409.13388-1-ebiggers@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net: add xmit recursion limit to tunnel xmit functions [+ + +]
Author: Weiming Shi <bestswngs@gmail.com>
Date:   Sat Mar 7 00:01:34 2026 +0800

    net: add xmit recursion limit to tunnel xmit functions
    
    [ Upstream commit 6f1a9140ecda3baba3d945b9a6155af4268aafc4 ]
    
    Tunnel xmit functions (iptunnel_xmit, ip6tunnel_xmit) lack their own
    recursion limit. When a bond device in broadcast mode has GRE tap
    interfaces as slaves, and those GRE tunnels route back through the
    bond, multicast/broadcast traffic triggers infinite recursion between
    bond_xmit_broadcast() and ip_tunnel_xmit()/ip6_tnl_xmit(), causing
    kernel stack overflow.
    
    The existing XMIT_RECURSION_LIMIT (8) in the no-qdisc path is not
    sufficient because tunnel recursion involves route lookups and full IP
    output, consuming much more stack per level. Use a lower limit of 4
    (IP_TUNNEL_RECURSION_LIMIT) to prevent overflow.
    
    Add recursion detection using dev_xmit_recursion helpers directly in
    iptunnel_xmit() and ip6tunnel_xmit() to cover all IPv4/IPv6 tunnel
    paths including UDP encapsulated tunnels (VXLAN, Geneve, etc.).
    
    Move dev_xmit_recursion helpers from net/core/dev.h to public header
    include/linux/netdevice.h so they can be used by tunnel code.
    
     BUG: KASAN: stack-out-of-bounds in blake2s.constprop.0+0xe7/0x160
     Write of size 32 at addr ffff88810033fed0 by task kworker/0:1/11
     Workqueue: mld mld_ifc_work
     Call Trace:
      <TASK>
      __build_flow_key.constprop.0 (net/ipv4/route.c:515)
      ip_rt_update_pmtu (net/ipv4/route.c:1073)
      iptunnel_xmit (net/ipv4/ip_tunnel_core.c:84)
      ip_tunnel_xmit (net/ipv4/ip_tunnel.c:847)
      gre_tap_xmit (net/ipv4/ip_gre.c:779)
      dev_hard_start_xmit (net/core/dev.c:3887)
      sch_direct_xmit (net/sched/sch_generic.c:347)
      __dev_queue_xmit (net/core/dev.c:4802)
      bond_dev_queue_xmit (drivers/net/bonding/bond_main.c:312)
      bond_xmit_broadcast (drivers/net/bonding/bond_main.c:5279)
      bond_start_xmit (drivers/net/bonding/bond_main.c:5530)
      dev_hard_start_xmit (net/core/dev.c:3887)
      __dev_queue_xmit (net/core/dev.c:4841)
      ip_finish_output2 (net/ipv4/ip_output.c:237)
      ip_output (net/ipv4/ip_output.c:438)
      iptunnel_xmit (net/ipv4/ip_tunnel_core.c:86)
      gre_tap_xmit (net/ipv4/ip_gre.c:779)
      dev_hard_start_xmit (net/core/dev.c:3887)
      sch_direct_xmit (net/sched/sch_generic.c:347)
      __dev_queue_xmit (net/core/dev.c:4802)
      bond_dev_queue_xmit (drivers/net/bonding/bond_main.c:312)
      bond_xmit_broadcast (drivers/net/bonding/bond_main.c:5279)
      bond_start_xmit (drivers/net/bonding/bond_main.c:5530)
      dev_hard_start_xmit (net/core/dev.c:3887)
      __dev_queue_xmit (net/core/dev.c:4841)
      ip_finish_output2 (net/ipv4/ip_output.c:237)
      ip_output (net/ipv4/ip_output.c:438)
      iptunnel_xmit (net/ipv4/ip_tunnel_core.c:86)
      ip_tunnel_xmit (net/ipv4/ip_tunnel.c:847)
      gre_tap_xmit (net/ipv4/ip_gre.c:779)
      dev_hard_start_xmit (net/core/dev.c:3887)
      sch_direct_xmit (net/sched/sch_generic.c:347)
      __dev_queue_xmit (net/core/dev.c:4802)
      bond_dev_queue_xmit (drivers/net/bonding/bond_main.c:312)
      bond_xmit_broadcast (drivers/net/bonding/bond_main.c:5279)
      bond_start_xmit (drivers/net/bonding/bond_main.c:5530)
      dev_hard_start_xmit (net/core/dev.c:3887)
      __dev_queue_xmit (net/core/dev.c:4841)
      mld_sendpack
      mld_ifc_work
      process_one_work
      worker_thread
      </TASK>
    
    Fixes: 745e20f1b626 ("net: add a recursion limit in xmit path")
    Reported-by: Xiang Mei <xmei5@asu.edu>
    Signed-off-by: Weiming Shi <bestswngs@gmail.com>
    Link: https://patch.msgid.link/20260306160133.3852900-2-bestswngs@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: bcmgenet: fix broken EEE by converting to phylib-managed state [+ + +]
Author: Nicolai Buchwitz <nb@tipi-net.de>
Date:   Tue Mar 10 06:49:35 2026 +0100

    net: bcmgenet: fix broken EEE by converting to phylib-managed state
    
    [ Upstream commit 908c344d5cfac4160f49715da9efacdf5b6a28bd ]
    
    The bcmgenet EEE implementation is broken in several ways.
    phy_support_eee() is never called, so the PHY never advertises EEE
    and phylib never sets phydev->enable_tx_lpi.  bcmgenet_mac_config()
    checks priv->eee.eee_enabled to decide whether to enable the MAC
    LPI logic, but that field is never initialised to true, so the MAC
    never enters Low Power Idle even when EEE is negotiated - wasting
    the power savings EEE is designed to provide.  The only way to get
    EEE working at all is a manual 'ethtool --set-eee eth0 eee on' after
    every link-up, and even then bcmgenet_get_eee() immediately clobbers
    the reported state because phy_ethtool_get_eee() overwrites
    eee_enabled and tx_lpi_enabled with the uninitialised PHY eee_cfg
    values.  Finally, bcmgenet_mac_config() is only called on link-up,
    so EEE is never disabled in hardware on link-down.
    
    Fix all of this by removing the MAC-side EEE state tracking
    (priv->eee) and aligning with the pattern used by other non-phylink
    MAC drivers such as FEC.
    
    Call phy_support_eee() in bcmgenet_mii_probe() so the PHY advertises
    EEE link modes and phylib tracks negotiation state.  Move the EEE
    hardware control to bcmgenet_mii_setup(), which is called on every
    link event, and drive it directly from phydev->enable_tx_lpi - the
    flag phylib sets when EEE is negotiated and the user has not disabled
    it.  This enables EEE automatically once the link partner agrees and
    disables it cleanly on link-down.
    
    Make bcmgenet_get_eee() and bcmgenet_set_eee() pure passthroughs to
    phy_ethtool_get_eee() and phy_ethtool_set_eee(), with the MAC
    hardware register read/written for tx_lpi_timer.  Drop struct
    ethtool_keee eee from struct bcmgenet_priv.
    
    Fixes: fe0d4fd9285e ("net: phy: Keep track of EEE configuration")
    Link: https://lore.kernel.org/netdev/d352039f-4cbb-41e6-9aeb-0b4f3941b54c@lunn.ch/
    Suggested-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Nicolai Buchwitz <nb@tipi-net.de>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://patch.msgid.link/20260310054935.1238594-1-nb@tipi-net.de
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: bonding: Fix nd_tbl NULL dereference when IPv6 is disabled [+ + +]
Author: Ricardo B. Marlière <rbm@suse.com>
Date:   Sat Mar 7 17:50:54 2026 -0300

    net: bonding: Fix nd_tbl NULL dereference when IPv6 is disabled
    
    [ Upstream commit 30021e969d48e5819d5ae56936c2f34c0f7ce997 ]
    
    When booting with the 'ipv6.disable=1' parameter, the nd_tbl is never
    initialized because inet6_init() exits before ndisc_init() is called
    which initializes it. If bonding ARP/NS validation is enabled, an IPv6
    NS/NA packet received on a slave can reach bond_validate_na(), which
    calls bond_has_this_ip6(). That path calls ipv6_chk_addr() and can
    crash in __ipv6_chk_addr_and_flags().
    
     BUG: kernel NULL pointer dereference, address: 00000000000005d8
     Oops: Oops: 0000 [#1] SMP NOPTI
     RIP: 0010:__ipv6_chk_addr_and_flags+0x69/0x170
     Call Trace:
      <IRQ>
      ipv6_chk_addr+0x1f/0x30
      bond_validate_na+0x12e/0x1d0 [bonding]
      ? __pfx_bond_handle_frame+0x10/0x10 [bonding]
      bond_rcv_validate+0x1a0/0x450 [bonding]
      bond_handle_frame+0x5e/0x290 [bonding]
      ? srso_alias_return_thunk+0x5/0xfbef5
      __netif_receive_skb_core.constprop.0+0x3e8/0xe50
      ? srso_alias_return_thunk+0x5/0xfbef5
      ? update_cfs_rq_load_avg+0x1a/0x240
      ? srso_alias_return_thunk+0x5/0xfbef5
      ? __enqueue_entity+0x5e/0x240
      __netif_receive_skb_one_core+0x39/0xa0
      process_backlog+0x9c/0x150
      __napi_poll+0x30/0x200
      ? srso_alias_return_thunk+0x5/0xfbef5
      net_rx_action+0x338/0x3b0
      handle_softirqs+0xc9/0x2a0
      do_softirq+0x42/0x60
      </IRQ>
      <TASK>
      __local_bh_enable_ip+0x62/0x70
      __dev_queue_xmit+0x2d3/0x1000
      ? srso_alias_return_thunk+0x5/0xfbef5
      ? srso_alias_return_thunk+0x5/0xfbef5
      ? packet_parse_headers+0x10a/0x1a0
      packet_sendmsg+0x10da/0x1700
      ? kick_pool+0x5f/0x140
      ? srso_alias_return_thunk+0x5/0xfbef5
      ? __queue_work+0x12d/0x4f0
      __sys_sendto+0x1f3/0x220
      __x64_sys_sendto+0x24/0x30
      do_syscall_64+0x101/0xf80
      ? exc_page_fault+0x6e/0x170
      ? srso_alias_return_thunk+0x5/0xfbef5
      entry_SYSCALL_64_after_hwframe+0x77/0x7f
      </TASK>
    
    Fix this by checking ipv6_mod_enabled() before dispatching IPv6 packets to
    bond_na_rcv(). If IPv6 is disabled, return early from bond_rcv_validate()
    and avoid the path to ipv6_chk_addr().
    
    Suggested-by: Fernando Fernandez Mancera <fmancera@suse.de>
    Fixes: 4e24be018eb9 ("bonding: add new parameter ns_targets")
    Signed-off-by: Ricardo B. Marlière <rbm@suse.com>
    Reviewed-by: Hangbin Liu <liuhangbin@gmail.com>
    Link: https://patch.msgid.link/20260307-net-nd_tbl_fixes-v4-2-e2677e85628c@suse.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: microchip: Fix error path in PTP IRQ setup [+ + +]
Author: Bastien Curutchet (Schneider Electric) <bastien.curutchet@bootlin.com>
Date:   Mon Mar 9 14:15:43 2026 +0100

    net: dsa: microchip: Fix error path in PTP IRQ setup
    
    commit 99c8c16a4aad0b37293cae213e15957c573cf79b upstream.
    
    If request_threaded_irq() fails during the PTP message IRQ setup, the
    newly created IRQ mapping is never disposed. Indeed, the
    ksz_ptp_irq_setup()'s error path only frees the mappings that were
    successfully set up.
    
    Dispose the newly created mapping if the associated
    request_threaded_irq() fails at setup.
    
    Cc: stable@vger.kernel.org
    Fixes: d0b8fec8ae505 ("net: dsa: microchip: Fix symetry in ksz_ptp_msg_irq_{setup/free}()")
    Signed-off-by: Bastien Curutchet (Schneider Electric) <bastien.curutchet@bootlin.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
    Link: https://patch.msgid.link/20260309-ksz-ptp-irq-fix-v1-1-757b3b985955@bootlin.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: dsa: realtek: Fix LED group port bit for non-zero LED group [+ + +]
Author: Marek Behún <kabel@kernel.org>
Date:   Wed Mar 11 12:12:37 2026 +0100

    net: dsa: realtek: Fix LED group port bit for non-zero LED group
    
    [ Upstream commit e8f0dc024ce55451ebd54bad975134ba802e4fcc ]
    
    The rtl8366rb_led_group_port_mask() function always returns LED port
    bit in LED group 0; the switch statement returns the same thing in all
    non-default cases.
    
    This means that the driver does not currently support configuring LEDs
    in non-zero LED groups.
    
    Fix this.
    
    Fixes: 32d617005475a71e ("net: dsa: realtek: add LED drivers for rtl8366rb")
    Signed-off-by: Marek Behún <kabel@kernel.org>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://patch.msgid.link/20260311111237.29002-1-kabel@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: realtek: rtl8365mb: remove ifOutDiscards from rx_packets [+ + +]
Author: Mieczyslaw Nalewaj <namiltd@yahoo.com>
Date:   Tue Mar 3 17:25:12 2026 -0300

    net: dsa: realtek: rtl8365mb: remove ifOutDiscards from rx_packets
    
    [ Upstream commit f76a93241d71fbba8425e3967097b498c29264ed ]
    
    rx_packets should report the number of frames successfully received:
    unicast + multicast + broadcast. Subtracting ifOutDiscards (a TX
    counter) is incorrect and can undercount RX packets. RX drops are
    already reported via rx_dropped (e.g. etherStatsDropEvents), so
    there is no need to adjust rx_packets.
    
    This patch removes the subtraction of ifOutDiscards from rx_packets
    in rtl8365mb_stats_update().
    
    Link: https://lore.kernel.org/netdev/878777925.105015.1763423928520@mail.yahoo.com/
    Fixes: 4af2950c50c8 ("net: dsa: realtek-smi: add rtl8365mb subdriver for RTL8365MB-VC")
    Signed-off-by: Mieczyslaw Nalewaj <namiltd@yahoo.com>
    Signed-off-by: Luiz Angelo Daros de Luca <luizluca@gmail.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Acked-by: Linus Walleij <linusw@kernel.org>
    Link: https://patch.msgid.link/20260303-realtek_namiltd_fix2-v1-1-bfa433d3401e@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: enetc: do not skip setting LaBCR[MDIO_PHYAD_PRTAD] for addr 0 [+ + +]
Author: Wei Fang <wei.fang@nxp.com>
Date:   Thu Mar 5 11:12:11 2026 +0800

    net: enetc: do not skip setting LaBCR[MDIO_PHYAD_PRTAD] for addr 0
    
    [ Upstream commit dbe17e7783cb5d6451ff1217d0464865857e97e1 ]
    
    Given that some platforms may use PHY address 0 (I suppose the PHY may
    not treat address 0 as a broadcast address or default response address).
    It is possible for some boards to connect multiple PHYs to the same
    ENETC MAC, for example:
    
      - a PHY with a non-zero address connects to ENETC MAC through SGMII
        interface (selected via DTS_A)
      - a PHY with address 0 connects to ENETC MAC through RGMII interface
        (selected via DTS_B)
    
    For the case where the ENETC port MDIO is used to manage the PHY, when
    switching from DTS_A to DTS_B via soft reboot, LaBCR[MDIO_PHYAD_PRTAD]
    must be updated to 0 because the NETCMIX block is not reset during soft
    reboot. However, the current driver explicitly skips configuring address
    0, causing LaBCR[MDIO_PHYAD_PRTAD] to retain its old value.
    
    Therefore, remove the special-case skip of PHY address 0 so that valid
    configurations using address 0 are properly supported.
    
    Fixes: 6633df05f3ad ("net: enetc: set the external PHY address in IERB for port MDIO usage")
    Fixes: 50bfd9c06f0f ("net: enetc: set external PHY address in IERB for i.MX94 ENETC")
    Reviewed-by: Clark Wang <xiaoning.wang@nxp.com>
    Signed-off-by: Wei Fang <wei.fang@nxp.com>
    Link: https://patch.msgid.link/20260305031211.904812-3-wei.fang@nxp.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: enetc: fix incorrect fallback PHY address handling [+ + +]
Author: Wei Fang <wei.fang@nxp.com>
Date:   Thu Mar 5 11:12:10 2026 +0800

    net: enetc: fix incorrect fallback PHY address handling
    
    [ Upstream commit 246953f33e8cf95621d6c00332e2780ce1594082 ]
    
    The current netc_get_phy_addr() implementation falls back to PHY address
    0 when the "mdio" node or the PHY child node is missing. On i.MX95, this
    causes failures when a real PHY is actually assigned address 0 and is
    managed through the EMDIO interface. Because the bit 0 of phy_mask will
    be set, leading imx95_enetc_mdio_phyaddr_config() to return an error, and
    the netc_blk_ctrl driver probe subsequently fails. Fix this by returning
    -ENODEV when neither an "mdio" node nor any PHY node is present, it means
    that ENETC port MDIO is not used to manage the PHY, so there is no need
    to configure LaBCR[MDIO_PHYAD_PRTAD].
    
    Reported-by: Alexander Stein <alexander.stein@ew.tq-group.com>
    Closes: https://lore.kernel.org/all/7825188.GXAFRqVoOG@steina-w
    Fixes: 6633df05f3ad ("net: enetc: set the external PHY address in IERB for port MDIO usage")
    Reviewed-by: Clark Wang <xiaoning.wang@nxp.com>
    Tested-by: Alexander Stein <alexander.stein@ew.tq-group.com>
    Signed-off-by: Wei Fang <wei.fang@nxp.com>
    Link: https://patch.msgid.link/20260305031211.904812-2-wei.fang@nxp.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ethernet: arc: emac: quiesce interrupts before requesting IRQ [+ + +]
Author: Fan Wu <fanwu01@zju.edu.cn>
Date:   Mon Mar 9 13:24:09 2026 +0000

    net: ethernet: arc: emac: quiesce interrupts before requesting IRQ
    
    commit 2503d08f8a2de618e5c3a8183b250ff4a2e2d52c upstream.
    
    Normal RX/TX interrupts are enabled later, in arc_emac_open(), so probe
    should not see interrupt delivery in the usual case. However, hardware may
    still present stale or latched interrupt status left by firmware or the
    bootloader.
    
    If probe later unwinds after devm_request_irq() has installed the handler,
    such a stale interrupt can still reach arc_emac_intr() during teardown and
    race with release of the associated net_device.
    
    Avoid that window by putting the device into a known quiescent state before
    requesting the IRQ: disable all EMAC interrupt sources and clear any
    pending EMAC interrupt status bits. This keeps the change hardware-focused
    and minimal, while preventing spurious IRQ delivery from leftover state.
    
    Fixes: e4f2379db6c6 ("ethernet/arc/arc_emac - Add new driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Fan Wu <fanwu01@zju.edu.cn>
    Link: https://patch.msgid.link/20260309132409.584966-1-fanwu01@zju.edu.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: ethernet: ti: am65-cpsw-nuss: Fix rx_filter value for PTP support [+ + +]
Author: Chintan Vankar <c-vankar@ti.com>
Date:   Tue Mar 10 21:39:40 2026 +0530

    net: ethernet: ti: am65-cpsw-nuss: Fix rx_filter value for PTP support
    
    [ Upstream commit 840c9d13cb1ca96683a5307ee8e221be163a2c1e ]
    
    The "rx_filter" member of "hwtstamp_config" structure is an enum field and
    does not support bitwise OR combination of multiple filter values. It
    causes error while linuxptp application tries to match rx filter version.
    Fix this by storing the requested filter type in a new port field.
    
    Fixes: 97248adb5a3b ("net: ti: am65-cpsw: Update hw timestamping filter for PTPv1 RX packets")
    Signed-off-by: Chintan Vankar <c-vankar@ti.com>
    Link: https://patch.msgid.link/20260310160940.109822-1-c-vankar@ti.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: Fix rcu_tasks stall in threaded busypoll [+ + +]
Author: YiFei Zhu <zhuyifei@google.com>
Date:   Fri Feb 27 22:19:37 2026 +0000

    net: Fix rcu_tasks stall in threaded busypoll
    
    commit 1a86a1f7d88996085934139fa4c063b6299a2dd3 upstream.
    
    I was debugging a NIC driver when I noticed that when I enable
    threaded busypoll, bpftrace hangs when starting up. dmesg showed:
    
      rcu_tasks_wait_gp: rcu_tasks grace period number 85 (since boot) is 10658 jiffies old.
      rcu_tasks_wait_gp: rcu_tasks grace period number 85 (since boot) is 40793 jiffies old.
      rcu_tasks_wait_gp: rcu_tasks grace period number 85 (since boot) is 131273 jiffies old.
      rcu_tasks_wait_gp: rcu_tasks grace period number 85 (since boot) is 402058 jiffies old.
      INFO: rcu_tasks detected stalls on tasks:
      00000000769f52cd: .N nvcsw: 2/2 holdout: 1 idle_cpu: -1/64
      task:napi/eth2-8265  state:R  running task     stack:0     pid:48300 tgid:48300 ppid:2      task_flags:0x208040 flags:0x00004000
      Call Trace:
       <TASK>
       ? napi_threaded_poll_loop+0x27c/0x2c0
       ? __pfx_napi_threaded_poll+0x10/0x10
       ? napi_threaded_poll+0x26/0x80
       ? kthread+0xfa/0x240
       ? __pfx_kthread+0x10/0x10
       ? ret_from_fork+0x31/0x50
       ? __pfx_kthread+0x10/0x10
       ? ret_from_fork_asm+0x1a/0x30
       </TASK>
    
    The cause is that in threaded busypoll, the main loop is in
    napi_threaded_poll rather than napi_threaded_poll_loop, where the
    latter rarely iterates more than once within its loop. For
    rcu_softirq_qs_periodic inside napi_threaded_poll_loop to report its
    qs state, the last_qs must be 100ms behind, and this can't happen
    because napi_threaded_poll_loop rarely iterates in threaded busypoll,
    and each time napi_threaded_poll_loop is called last_qs is reset to
    latest jiffies.
    
    This patch changes so that in threaded busypoll, last_qs is saved
    in the outer napi_threaded_poll, and whether busy_poll_last_qs
    is NULL indicates whether napi_threaded_poll_loop is called for
    busypoll. This way last_qs would not reset to latest jiffies on
    each invocation of napi_threaded_poll_loop.
    
    Fixes: c18d4b190a46 ("net: Extend NAPI threaded polling to allow kthread based busy polling")
    Cc: stable@vger.kernel.org
    Signed-off-by: YiFei Zhu <zhuyifei@google.com>
    Reviewed-by: Samiullah Khawaja <skhawaja@google.com>
    Link: https://patch.msgid.link/20260227221937.1060857-1-zhuyifei@google.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: macb: Shuffle the tx ring before enabling tx [+ + +]
Author: Kevin Hao <haokexin@gmail.com>
Date:   Sat Mar 7 15:08:54 2026 +0800

    net: macb: Shuffle the tx ring before enabling tx
    
    commit 881a0263d502e1a93ebc13a78254e9ad19520232 upstream.
    
    Quanyang observed that when using an NFS rootfs on an AMD ZynqMp board,
    the rootfs may take an extended time to recover after a suspend.
    Upon investigation, it was determined that the issue originates from a
    problem in the macb driver.
    
    According to the Zynq UltraScale TRM [1], when transmit is disabled,
    the transmit buffer queue pointer resets to point to the address
    specified by the transmit buffer queue base address register.
    
    In the current implementation, the code merely resets `queue->tx_head`
    and `queue->tx_tail` to '0'. This approach presents several issues:
    
    - Packets already queued in the tx ring are silently lost,
      leading to memory leaks since the associated skbs cannot be released.
    
    - Concurrent write access to `queue->tx_head` and `queue->tx_tail` may
      occur from `macb_tx_poll()` or `macb_start_xmit()` when these values
      are reset to '0'.
    
    - The transmission may become stuck on a packet that has already been sent
      out, with its 'TX_USED' bit set, but has not yet been processed. However,
      due to the manipulation of 'queue->tx_head' and 'queue->tx_tail',
      `macb_tx_poll()` incorrectly assumes there are no packets to handle
      because `queue->tx_head == queue->tx_tail`. This issue is only resolved
      when a new packet is placed at this position. This is the root cause of
      the prolonged recovery time observed for the NFS root filesystem.
    
    To resolve this issue, shuffle the tx ring and tx skb array so that
    the first unsent packet is positioned at the start of the tx ring.
    Additionally, ensure that updates to `queue->tx_head` and
    `queue->tx_tail` are properly protected with the appropriate lock.
    
    [1] https://docs.amd.com/v/u/en-US/ug1085-zynq-ultrascale-trm
    
    Fixes: bf9cf80cab81 ("net: macb: Fix tx/rx malfunction after phy link down and up")
    Reported-by: Quanyang Wang <quanyang.wang@windriver.com>
    Signed-off-by: Kevin Hao <haokexin@gmail.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20260307-zynqmp-v2-1-6ef98a70e1d0@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: mana: Ring doorbell at 4 CQ wraparounds [+ + +]
Author: Long Li <longli@microsoft.com>
Date:   Thu Feb 26 11:28:33 2026 -0800

    net: mana: Ring doorbell at 4 CQ wraparounds
    
    commit dabffd08545ffa1d7183bc45e387860984025291 upstream.
    
    MANA hardware requires at least one doorbell ring every 8 wraparounds
    of the CQ. The driver rings the doorbell as a form of flow control to
    inform hardware that CQEs have been consumed.
    
    The NAPI poll functions mana_poll_tx_cq() and mana_poll_rx_cq() can
    poll up to CQE_POLLING_BUFFER (512) completions per call. If the CQ
    has fewer than 512 entries, a single poll call can process more than
    4 wraparounds without ringing the doorbell. The doorbell threshold
    check also uses ">" instead of ">=", delaying the ring by one extra
    CQE beyond 4 wraparounds. Combined, these issues can cause the driver
    to exceed the 8-wraparound hardware limit, leading to missed
    completions and stalled queues.
    
    Fix this by capping the number of CQEs polled per call to 4 wraparounds
    of the CQ in both TX and RX paths. Also change the doorbell threshold
    from ">" to ">=" so the doorbell is rung as soon as 4 wraparounds are
    reached.
    
    Cc: stable@vger.kernel.org
    Fixes: 58a63729c957 ("net: mana: Fix doorbell out of order violation and avoid unnecessary doorbell rings")
    Signed-off-by: Long Li <longli@microsoft.com>
    Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
    Reviewed-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
    Link: https://patch.msgid.link/20260226192833.1050807-1-longli@microsoft.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: mctp: fix device leak on probe failure [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Thu Mar 5 11:45:49 2026 +0100

    net: mctp: fix device leak on probe failure
    
    commit 224a0d284c3caf1951302d1744a714784febed71 upstream.
    
    Driver core holds a reference to the USB interface and its parent USB
    device while the interface is bound to a driver and there is no need to
    take additional references unless the structures are needed after
    disconnect.
    
    This driver takes a reference to the USB device during probe but does
    not to release it on probe failures.
    
    Drop the redundant device reference to fix the leak, reduce cargo
    culting, make it easier to spot drivers where an extra reference is
    needed, and reduce the risk of further memory leaks.
    
    Fixes: 0791c0327a6e ("net: mctp: Add MCTP USB transport driver")
    Cc: stable@vger.kernel.org      # 6.15
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Acked-by: Jeremy Kerr <jk@codeconstruct.com.au>
    Link: https://patch.msgid.link/20260305104549.16110-1-johan@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: ncsi: fix skb leak in error paths [+ + +]
Author: Jian Zhang <zhangjian.3032@bytedance.com>
Date:   Thu Mar 5 14:06:55 2026 +0800

    net: ncsi: fix skb leak in error paths
    
    commit 5c3398a54266541610c8d0a7082e654e9ff3e259 upstream.
    
    Early return paths in NCSI RX and AEN handlers fail to release
    the received skb, resulting in a memory leak.
    
    Specifically, ncsi_aen_handler() returns on invalid AEN packets
    without consuming the skb. Similarly, ncsi_rcv_rsp() exits early
    when failing to resolve the NCSI device, response handler, or
    request, leaving the skb unfreed.
    
    CC: stable@vger.kernel.org
    Fixes: 7a82ecf4cfb8 ("net/ncsi: NCSI AEN packet handler")
    Fixes: 138635cc27c9 ("net/ncsi: NCSI response packet handler")
    Signed-off-by: Jian Zhang <zhangjian.3032@bytedance.com>
    Link: https://patch.msgid.link/20260305060656.3357250-1-zhangjian.3032@bytedance.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: nexthop: fix percpu use-after-free in remove_nh_grp_entry [+ + +]
Author: Mehul Rao <mehulrao@gmail.com>
Date:   Fri Mar 6 18:38:20 2026 -0500

    net: nexthop: fix percpu use-after-free in remove_nh_grp_entry
    
    commit b2662e7593e94ae09b1cf7ee5f09160a3612bcb2 upstream.
    
    When removing a nexthop from a group, remove_nh_grp_entry() publishes
    the new group via rcu_assign_pointer() then immediately frees the
    removed entry's percpu stats with free_percpu(). However, the
    synchronize_net() grace period in the caller remove_nexthop_from_groups()
    runs after the free. RCU readers that entered before the publish still
    see the old group and can dereference the freed stats via
    nh_grp_entry_stats_inc() -> get_cpu_ptr(nhge->stats), causing a
    use-after-free on percpu memory.
    
    Fix by deferring the free_percpu() until after synchronize_net() in the
    caller. Removed entries are chained via nh_list onto a local deferred
    free list. After the grace period completes and all RCU readers have
    finished, the percpu stats are safely freed.
    
    Fixes: f4676ea74b85 ("net: nexthop: Add nexthop group entry stats")
    Cc: stable@vger.kernel.org
    Signed-off-by: Mehul Rao <mehulrao@gmail.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/20260306233821.196789-1-mehulrao@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: prevent NULL deref in ip[6]tunnel_xmit() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Mar 12 04:39:08 2026 +0000

    net: prevent NULL deref in ip[6]tunnel_xmit()
    
    [ Upstream commit c38b8f5f791ecce13ab77e2257f8fd2444ba80f6 ]
    
    Blamed commit missed that both functions can be called with dev == NULL.
    
    Also add unlikely() hints for these conditions that only fuzzers can hit.
    
    Fixes: 6f1a9140ecda ("net: add xmit recursion limit to tunnel xmit functions")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    CC: Weiming Shi <bestswngs@gmail.com>
    Link: https://patch.msgid.link/20260312043908.2790803-1-edumazet@google.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: sfp: improve Huawei MA5671a fixup [+ + +]
Author: Álvaro Fernández Rojas <noltari@gmail.com>
Date:   Fri Mar 6 13:29:55 2026 +0100

    net: sfp: improve Huawei MA5671a fixup
    
    [ Upstream commit 87d126852158467ab87d5cbc36ccfd3f15464a6c ]
    
    With the current sfp_fixup_ignore_tx_fault() fixup we ignore the TX_FAULT
    signal, but we also need to apply sfp_fixup_ignore_los() in order to be
    able to communicate with the module even if the fiber isn't connected for
    configuration purposes.
    This is needed for all the MA5671a firmwares, excluding the FS modded
    firmware.
    
    Fixes: 2069624dac19 ("net: sfp: Add tx-fault workaround for Huawei MA5671A SFP ONT")
    Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://patch.msgid.link/20260306125139.213637-1-noltari@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: spacemit: Fix error handling in emac_alloc_rx_desc_buffers() [+ + +]
Author: Vivian Wang <wangruikang@iscas.ac.cn>
Date:   Thu Mar 5 14:39:38 2026 +0800

    net: spacemit: Fix error handling in emac_alloc_rx_desc_buffers()
    
    [ Upstream commit 3aa1417803c1833cbd5bacb7e6a6489a196f2519 ]
    
    Even if we get a dma_mapping_error() while mapping an RX buffer, we
    should still update rx_ring->head to ensure that the buffers we were
    able to allocate and map are used. Fix this by breaking out to the
    existing code after the loop, analogous to the existing handling for skb
    allocation failure.
    
    Fixes: bfec6d7f2001 ("net: spacemit: Add K1 Ethernet MAC")
    Signed-off-by: Vivian Wang <wangruikang@iscas.ac.cn>
    Link: https://patch.msgid.link/20260305-k1-ethernet-more-fixes-v2-1-e4e434d65055@iscas.ac.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: spacemit: Fix error handling in emac_tx_mem_map() [+ + +]
Author: Vivian Wang <wangruikang@iscas.ac.cn>
Date:   Thu Mar 5 14:39:39 2026 +0800

    net: spacemit: Fix error handling in emac_tx_mem_map()
    
    [ Upstream commit 86292155bea578ebab0ca3b65d4d87ecd8a0e9ea ]
    
    The DMA mappings were leaked on mapping error. Free them with the
    existing emac_free_tx_buf() function.
    
    Fixes: bfec6d7f2001 ("net: spacemit: Add K1 Ethernet MAC")
    Signed-off-by: Vivian Wang <wangruikang@iscas.ac.cn>
    Link: https://patch.msgid.link/20260305-k1-ethernet-more-fixes-v2-2-e4e434d65055@iscas.ac.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: usb: lan78xx: fix silent drop of packets with checksum errors [+ + +]
Author: Oleksij Rempel <o.rempel@pengutronix.de>
Date:   Thu Mar 5 15:34:26 2026 +0100

    net: usb: lan78xx: fix silent drop of packets with checksum errors
    
    commit e4f774a0cc955ce762aec91c66915a6e15087ab7 upstream.
    
    Do not drop packets with checksum errors at the USB driver level;
    pass them to the network stack.
    
    Previously, the driver dropped all packets where the 'Receive Error
    Detected' (RED) bit was set, regardless of the specific error type. This
    caused packets with only IP or TCP/UDP checksum errors to be dropped
    before reaching the kernel, preventing the network stack from accounting
    for them or performing software fallback.
    
    Add a mask for hard hardware errors to safely drop genuinely corrupt
    frames, while allowing checksum-errored frames to pass with their
    ip_summed field explicitly set to CHECKSUM_NONE.
    
    Fixes: 55d7de9de6c3 ("Microchip's LAN7800 family USB 2/3 to 10/100/1000 Ethernet device driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Link: https://patch.msgid.link/20260305143429.530909-2-o.rempel@pengutronix.de
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: usb: lan78xx: fix TX byte statistics for small packets [+ + +]
Author: Oleksij Rempel <o.rempel@pengutronix.de>
Date:   Thu Mar 5 15:34:27 2026 +0100

    net: usb: lan78xx: fix TX byte statistics for small packets
    
    commit 50988747c30df47b73b787f234f746027cb7ec6c upstream.
    
    Account for hardware auto-padding in TX byte counters to reflect actual
    wire traffic.
    
    The LAN7850 hardware automatically pads undersized frames to the minimum
    Ethernet frame length (ETH_ZLEN, 60 bytes). However, the driver tracks
    the network statistics based on the unpadded socket buffer length. This
    results in the tx_bytes counter under-reporting the actual physical
    bytes placed on the Ethernet wire for small packets (like short ARP or
    ICMP requests).
    
    Use max_t() to ensure the transmission statistics accurately account for
    the hardware-generated padding.
    
    Fixes: d383216a7efe ("lan78xx: Introduce Tx URB processing improvements")
    Cc: stable@vger.kernel.org
    Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Link: https://patch.msgid.link/20260305143429.530909-3-o.rempel@pengutronix.de
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: usb: lan78xx: fix WARN in __netif_napi_del_locked on disconnect [+ + +]
Author: Oleksij Rempel <o.rempel@pengutronix.de>
Date:   Thu Mar 5 15:34:29 2026 +0100

    net: usb: lan78xx: fix WARN in __netif_napi_del_locked on disconnect
    
    commit 312c816c6bc30342bc30dca0d6db617ab4d3ae4e upstream.
    
    Remove redundant netif_napi_del() call from disconnect path.
    
    A WARN may be triggered in __netif_napi_del_locked() during USB device
    disconnect:
    
      WARNING: CPU: 0 PID: 11 at net/core/dev.c:7417 __netif_napi_del_locked+0x2b4/0x350
    
    This happens because netif_napi_del() is called in the disconnect path while
    NAPI is still enabled. However, it is not necessary to call netif_napi_del()
    explicitly, since unregister_netdev() will handle NAPI teardown automatically
    and safely. Removing the redundant call avoids triggering the warning.
    
    Full trace:
     lan78xx 1-1:1.0 enu1: Failed to read register index 0x000000c4. ret = -ENODEV
     lan78xx 1-1:1.0 enu1: Failed to set MAC down with error -ENODEV
     lan78xx 1-1:1.0 enu1: Link is Down
     lan78xx 1-1:1.0 enu1: Failed to read register index 0x00000120. ret = -ENODEV
     ------------[ cut here ]------------
     WARNING: CPU: 0 PID: 11 at net/core/dev.c:7417 __netif_napi_del_locked+0x2b4/0x350
     Modules linked in: flexcan can_dev fuse
     CPU: 0 UID: 0 PID: 11 Comm: kworker/0:1 Not tainted 6.16.0-rc2-00624-ge926949dab03 #9 PREEMPT
     Hardware name: SKOV IMX8MP CPU revC - bd500 (DT)
     Workqueue: usb_hub_wq hub_event
     pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
     pc : __netif_napi_del_locked+0x2b4/0x350
     lr : __netif_napi_del_locked+0x7c/0x350
     sp : ffffffc085b673c0
     x29: ffffffc085b673c0 x28: ffffff800b7f2000 x27: ffffff800b7f20d8
     x26: ffffff80110bcf58 x25: ffffff80110bd978 x24: 1ffffff0022179eb
     x23: ffffff80110bc000 x22: ffffff800b7f5000 x21: ffffff80110bc000
     x20: ffffff80110bcf38 x19: ffffff80110bcf28 x18: dfffffc000000000
     x17: ffffffc081578940 x16: ffffffc08284cee0 x15: 0000000000000028
     x14: 0000000000000006 x13: 0000000000040000 x12: ffffffb0022179e8
     x11: 1ffffff0022179e7 x10: ffffffb0022179e7 x9 : dfffffc000000000
     x8 : 0000004ffdde8619 x7 : ffffff80110bcf3f x6 : 0000000000000001
     x5 : ffffff80110bcf38 x4 : ffffff80110bcf38 x3 : 0000000000000000
     x2 : 0000000000000000 x1 : 1ffffff0022179e7 x0 : 0000000000000000
     Call trace:
      __netif_napi_del_locked+0x2b4/0x350 (P)
      lan78xx_disconnect+0xf4/0x360
      usb_unbind_interface+0x158/0x718
      device_remove+0x100/0x150
      device_release_driver_internal+0x308/0x478
      device_release_driver+0x1c/0x30
      bus_remove_device+0x1a8/0x368
      device_del+0x2e0/0x7b0
      usb_disable_device+0x244/0x540
      usb_disconnect+0x220/0x758
      hub_event+0x105c/0x35e0
      process_one_work+0x760/0x17b0
      worker_thread+0x768/0xce8
      kthread+0x3bc/0x690
      ret_from_fork+0x10/0x20
     irq event stamp: 211604
     hardirqs last  enabled at (211603): [<ffffffc0828cc9ec>] _raw_spin_unlock_irqrestore+0x84/0x98
     hardirqs last disabled at (211604): [<ffffffc0828a9a84>] el1_dbg+0x24/0x80
     softirqs last  enabled at (211296): [<ffffffc080095f10>] handle_softirqs+0x820/0xbc8
     softirqs last disabled at (210993): [<ffffffc080010288>] __do_softirq+0x18/0x20
     ---[ end trace 0000000000000000 ]---
     lan78xx 1-1:1.0 enu1: failed to kill vid 0081/0
    
    Fixes: e110bc825897 ("net: usb: lan78xx: Convert to PHYLINK for improved PHY and MAC management")
    Cc: stable@vger.kernel.org
    Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Link: https://patch.msgid.link/20260305143429.530909-5-o.rempel@pengutronix.de
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: usb: lan78xx: skip LTM configuration for LAN7850 [+ + +]
Author: Oleksij Rempel <o.rempel@pengutronix.de>
Date:   Thu Mar 5 15:34:28 2026 +0100

    net: usb: lan78xx: skip LTM configuration for LAN7850
    
    commit d9cc0e440f0664f6f3e2c26e39ab9dd5f3badba7 upstream.
    
    Do not configure Latency Tolerance Messaging (LTM) on USB 2.0 hardware.
    
    The LAN7850 is a High-Speed (USB 2.0) only device and does not support
    SuperSpeed features like LTM. Currently, the driver unconditionally
    attempts to configure LTM registers during initialization. On the
    LAN7850, these registers do not exist, resulting in writes to invalid
    or undocumented memory space.
    
    This issue was identified during a port to the regmap API with strict
    register validation enabled. While no functional issues or crashes have
    been observed from these invalid writes, bypassing LTM initialization
    on the LAN7850 ensures the driver strictly adheres to the hardware's
    valid register map.
    
    Fixes: 55d7de9de6c3 ("Microchip's LAN7800 family USB 2/3 to 10/100/1000 Ethernet device driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Link: https://patch.msgid.link/20260305143429.530909-4-o.rempel@pengutronix.de
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
netfilter: nf_tables: always walk all pending catchall elements [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Mar 5 21:32:00 2026 +0100

    netfilter: nf_tables: always walk all pending catchall elements
    
    [ Upstream commit 7cb9a23d7ae40a702577d3d8bacb7026f04ac2a9 ]
    
    During transaction processing we might have more than one catchall element:
    1 live catchall element and 1 pending element that is coming as part of the
    new batch.
    
    If the map holding the catchall elements is also going away, its
    required to toggle all catchall elements and not just the first viable
    candidate.
    
    Otherwise, we get:
     WARNING: ./include/net/netfilter/nf_tables.h:1281 at nft_data_release+0xb7/0xe0 [nf_tables], CPU#2: nft/1404
     RIP: 0010:nft_data_release+0xb7/0xe0 [nf_tables]
     [..]
     __nft_set_elem_destroy+0x106/0x380 [nf_tables]
     nf_tables_abort_release+0x348/0x8d0 [nf_tables]
     nf_tables_abort+0xcf2/0x3ac0 [nf_tables]
     nfnetlink_rcv_batch+0x9c9/0x20e0 [..]
    
    Fixes: 628bd3e49cba ("netfilter: nf_tables: drop map element references from preparation phase")
    Reported-by: Yiming Qian <yimingqian591@gmail.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: Fix for duplicate device in netdev hooks [+ + +]
Author: Phil Sutter <phil@nwl.cc>
Date:   Thu Mar 5 13:01:44 2026 +0100

    netfilter: nf_tables: Fix for duplicate device in netdev hooks
    
    [ Upstream commit b7cdc5a97d02c943f4bdde4d5767ad0c13cad92b ]
    
    When handling NETDEV_REGISTER notification, duplicate device
    registration must be avoided since the device may have been added by
    nft_netdev_hook_alloc() already when creating the hook.
    
    Suggested-by: Florian Westphal <fw@strlen.de>
    Reported-by: syzbot+bb9127e278fa198e110c@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=bb9127e278fa198e110c
    Fixes: a331b78a5525 ("netfilter: nf_tables: Respect NETDEV_REGISTER events")
    Tested-by: Helen Koike <koike@igalia.com>
    Signed-off-by: Phil Sutter <phil@nwl.cc>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nfnetlink_cthelper: fix OOB read in nfnl_cthelper_dump_table() [+ + +]
Author: Hyunwoo Kim <imv4bel@gmail.com>
Date:   Sun Mar 8 02:23:34 2026 +0900

    netfilter: nfnetlink_cthelper: fix OOB read in nfnl_cthelper_dump_table()
    
    [ Upstream commit 6dcee8496d53165b2d8a5909b3050b62ae71fe89 ]
    
    nfnl_cthelper_dump_table() has a 'goto restart' that jumps to a label
    inside the for loop body.  When the "last" helper saved in cb->args[1]
    is deleted between dump rounds, every entry fails the (cur != last)
    check, so cb->args[1] is never cleared.  The for loop finishes with
    cb->args[0] == nf_ct_helper_hsize, and the 'goto restart' jumps back
    into the loop body bypassing the bounds check, causing an 8-byte
    out-of-bounds read on nf_ct_helper_hash[nf_ct_helper_hsize].
    
    The 'goto restart' block was meant to re-traverse the current bucket
    when "last" is no longer found, but it was placed after the for loop
    instead of inside it.  Move the block into the for loop body so that
    the restart only occurs while cb->args[0] is still within bounds.
    
     BUG: KASAN: slab-out-of-bounds in nfnl_cthelper_dump_table+0x9f/0x1b0
     Read of size 8 at addr ffff888104ca3000 by task poc_cthelper/131
     Call Trace:
      nfnl_cthelper_dump_table+0x9f/0x1b0
      netlink_dump+0x333/0x880
      netlink_recvmsg+0x3e2/0x4b0
      sock_recvmsg+0xde/0xf0
      __sys_recvfrom+0x150/0x200
      __x64_sys_recvfrom+0x76/0x90
      do_syscall_64+0xc3/0x6e0
    
     Allocated by task 1:
      __kvmalloc_node_noprof+0x21b/0x700
      nf_ct_alloc_hashtable+0x65/0xd0
      nf_conntrack_helper_init+0x21/0x60
      nf_conntrack_init_start+0x18d/0x300
      nf_conntrack_standalone_init+0x12/0xc0
    
    Fixes: 12f7a505331e ("netfilter: add user-space connection tracking helper infrastructure")
    Signed-off-by: Hyunwoo Kim <imv4bel@gmail.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nfnetlink_queue: fix entry leak in bridge verdict error path [+ + +]
Author: Hyunwoo Kim <imv4bel@gmail.com>
Date:   Sun Mar 8 02:24:06 2026 +0900

    netfilter: nfnetlink_queue: fix entry leak in bridge verdict error path
    
    [ Upstream commit f1ba83755d81c6fc66ac7acd723d238f974091e9 ]
    
    nfqnl_recv_verdict() calls find_dequeue_entry() to remove the queue
    entry from the queue data structures, taking ownership of the entry.
    For PF_BRIDGE packets, it then calls nfqa_parse_bridge() to parse VLAN
    attributes.  If nfqa_parse_bridge() returns an error (e.g. NFQA_VLAN
    present but NFQA_VLAN_TCI missing), the function returns immediately
    without freeing the dequeued entry or its sk_buff.
    
    This leaks the nf_queue_entry, its associated sk_buff, and all held
    references (net_device refcounts, struct net refcount).  Repeated
    triggering exhausts kernel memory.
    
    Fix this by dropping the entry via nfqnl_reinject() with NF_DROP verdict
    on the error path, consistent with other error handling in this file.
    
    Fixes: 8d45ff22f1b4 ("netfilter: bridge: nf queue verdict to use NFQA_VLAN and NFQA_L2HDR")
    Reviewed-by: David Dull <monderasdor@gmail.com>
    Signed-off-by: Hyunwoo Kim <imv4bel@gmail.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_set_pipapo: fix stack out-of-bounds read in pipapo_drop() [+ + +]
Author: Jenny Guanni Qu <qguanni@gmail.com>
Date:   Fri Mar 6 19:12:38 2026 +0000

    netfilter: nft_set_pipapo: fix stack out-of-bounds read in pipapo_drop()
    
    [ Upstream commit d6d8cd2db236a9dd13dbc2d05843b3445cc964b5 ]
    
    pipapo_drop() passes rulemap[i + 1].n to pipapo_unmap() as the
    to_offset argument on every iteration, including the last one where
    i == m->field_count - 1. This reads one element past the end of the
    stack-allocated rulemap array (declared as rulemap[NFT_PIPAPO_MAX_FIELDS]
    with NFT_PIPAPO_MAX_FIELDS == 16).
    
    Although pipapo_unmap() returns early when is_last is true without
    using the to_offset value, the argument is evaluated at the call site
    before the function body executes, making this a genuine out-of-bounds
    stack read confirmed by KASAN:
    
      BUG: KASAN: stack-out-of-bounds in pipapo_drop+0x50c/0x57c [nf_tables]
      Read of size 4 at addr ffff8000810e71a4
    
      This frame has 1 object:
       [32, 160) 'rulemap'
    
      The buggy address is at offset 164 -- exactly 4 bytes past the end
      of the rulemap array.
    
    Pass 0 instead of rulemap[i + 1].n on the last iteration to avoid
    the out-of-bounds read.
    
    Fixes: 3c4287f62044 ("nf_tables: Add set type for arbitrary concatenation of ranges")
    Signed-off-by: Jenny Guanni Qu <qguanni@gmail.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: x_tables: guard option walkers against 1-byte tail reads [+ + +]
Author: David Dull <monderasdor@gmail.com>
Date:   Sat Mar 7 20:26:21 2026 +0200

    netfilter: x_tables: guard option walkers against 1-byte tail reads
    
    [ Upstream commit cfe770220ac2dbd3e104c6b45094037455da81d4 ]
    
    When the last byte of options is a non-single-byte option kind, walkers
    that advance with i += op[i + 1] ? : 1 can read op[i + 1] past the end
    of the option area.
    
    Add an explicit i == optlen - 1 check before dereferencing op[i + 1]
    in xt_tcpudp and xt_dccp option walkers.
    
    Fixes: 2e4e6a17af35 ("[NETFILTER] x_tables: Abstraction layer for {ip,ip6,arp}_tables")
    Signed-off-by: David Dull <monderasdor@gmail.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: xt_IDLETIMER: reject rev0 reuse of ALARM timer labels [+ + +]
Author: Yuan Tan <tanyuan98@outlook.com>
Date:   Mon Mar 9 03:41:46 2026 -0700

    netfilter: xt_IDLETIMER: reject rev0 reuse of ALARM timer labels
    
    [ Upstream commit 329f0b9b48ee6ab59d1ab72fef55fe8c6463a6cf ]
    
    IDLETIMER revision 0 rules reuse existing timers by label and always call
    mod_timer() on timer->timer.
    
    If the label was created first by revision 1 with XT_IDLETIMER_ALARM,
    the object uses alarm timer semantics and timer->timer is never initialized.
    Reusing that object from revision 0 causes mod_timer() on an uninitialized
    timer_list, triggering debugobjects warnings and possible panic when
    panic_on_warn=1.
    
    Fix this by rejecting revision 0 rule insertion when an existing timer with
    the same label is of ALARM type.
    
    Fixes: 68983a354a65 ("netfilter: xtables: Add snapshot of hardidletimer target")
    Co-developed-by: Yifan Wu <yifanwucs@gmail.com>
    Signed-off-by: Yifan Wu <yifanwucs@gmail.com>
    Co-developed-by: Juefei Pu <tomapufckgml@gmail.com>
    Signed-off-by: Juefei Pu <tomapufckgml@gmail.com>
    Signed-off-by: Yuan Tan <tanyuan98@outlook.com>
    Signed-off-by: Xin Liu <dstsmallbird@foxmail.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfs: return EISDIR on nfs3_proc_create if d_alias is a dir [+ + +]
Author: Roberto Bergantinos Corpas <rbergant@redhat.com>
Date:   Thu Feb 19 13:04:40 2026 +0100

    nfs: return EISDIR on nfs3_proc_create if d_alias is a dir
    
    [ Upstream commit 410666a298c34ebd57256fde6b24c96bd23059a2 ]
    
    If we found an alias through nfs3_do_create/nfs_add_or_obtain
    /d_splice_alias which happens to be a dir dentry, we don't return
    any error, and simply forget about this alias, but the original
    dentry we were adding and passed as parameter remains negative.
    
    This later causes an oops on nfs_atomic_open_v23/finish_open since we
    supply a negative dentry to do_dentry_open.
    
    This has been observed running lustre-racer, where dirs and files are
    created/removed concurrently with the same name and O_EXCL is not
    used to open files (frequent file redirection).
    
    While d_splice_alias typically returns a directory alias or NULL, we
    explicitly check d_is_dir() to ensure that we don't attempt to perform
    file operations (like finish_open) on a directory inode, which triggers
    the observed oops.
    
    Fixes: 7c6c5249f061 ("NFS: add atomic_open for NFSv3 to handle O_TRUNC correctly.")
    Reviewed-by: Olga Kornievskaia <okorniev@redhat.com>
    Reviewed-by: Scott Mayhew <smayhew@redhat.com>
    Signed-off-by: Roberto Bergantinos Corpas <rbergant@redhat.com>
    Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfsd: Fix cred ref leak in nfsd_nl_listener_set_doit(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@google.com>
Date:   Sat Jan 24 04:18:41 2026 +0000

    nfsd: Fix cred ref leak in nfsd_nl_listener_set_doit().
    
    commit 92978c83bb4eef55d02a6c990c01c423131eefa7 upstream.
    
    nfsd_nl_listener_set_doit() uses get_current_cred() without
    put_cred().
    
    As we can see from other callers, svc_xprt_create_from_sa()
    does not require the extra refcount.
    
    nfsd_nl_listener_set_doit() is always in the process context,
    sendmsg(), and current->cred does not go away.
    
    Let's use current_cred() in nfsd_nl_listener_set_doit().
    
    Fixes: 16a471177496 ("NFSD: add listener-{set,get} netlink command")
    Cc: stable@vger.kernel.org
    Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nouveau/dpcd: return EBUSY for aux xfer if the device is asleep [+ + +]
Author: Dave Airlie <airlied@redhat.com>
Date:   Tue Feb 24 13:17:50 2026 +1000

    nouveau/dpcd: return EBUSY for aux xfer if the device is asleep
    
    commit 8f3c6f08ababad2e3bdd239728cf66a9949446b4 upstream.
    
    If we have runtime suspended, and userspace wants to use /dev/drm_dp_*
    then just tell it the device is busy instead of crashing in the GSP
    code.
    
    WARNING: CPU: 2 PID: 565741 at drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/rpc.c:164 r535_gsp_msgq_wait+0x9a/0xb0 [nouveau]
    CPU: 2 UID: 0 PID: 565741 Comm: fwupd Not tainted 6.18.10-200.fc43.x86_64 #1 PREEMPT(lazy)
    Hardware name: LENOVO 20QTS0PQ00/20QTS0PQ00, BIOS N2OET65W (1.52 ) 08/05/2024
    RIP: 0010:r535_gsp_msgq_wait+0x9a/0xb0 [nouveau]
    
    This is a simple fix to get backported. We should probably engineer a
    proper power domain solution to wake up devices and keep them awake
    while fw updates are happening.
    
    Cc: stable@vger.kernel.org
    Fixes: 8894f4919bc4 ("drm/nouveau: register a drm_dp_aux channel for each dp connector")
    Reviewed-by: Lyude Paul <lyude@redhat.com>
    Signed-off-by: Dave Airlie <airlied@redhat.com>
    Link: https://patch.msgid.link/20260224031750.791621-1-airlied@gmail.com
    Signed-off-by: Danilo Krummrich <dakr@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nouveau/gsp: drop WARN_ON in ACPI probes [+ + +]
Author: Dave Airlie <airlied@redhat.com>
Date:   Thu Nov 21 11:46:01 2024 +1000

    nouveau/gsp: drop WARN_ON in ACPI probes
    
    commit 9478c166c46934160135e197b049b5a05753f2ad upstream.
    
    These WARN_ONs seem to trigger a lot, and we don't seem to have a
    plan to fix them, so just drop them, as they are most likely
    harmless.
    
    Cc: stable@vger.kernel.org
    Fixes: 176fdcbddfd2 ("drm/nouveau/gsp/r535: add support for booting GSP-RM")
    Signed-off-by: Dave Airlie <airlied@redhat.com>
    Link: https://patch.msgid.link/20241121014601.229391-1-airlied@gmail.com
    Signed-off-by: Danilo Krummrich <dakr@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nsfs: tighten permission checks for handle opening [+ + +]
Author: Christian Brauner <brauner@kernel.org>
Date:   Thu Feb 26 14:50:10 2026 +0100

    nsfs: tighten permission checks for handle opening
    
    commit d2324a9317f00013facb0ba00b00440e19d2af5e upstream.
    
    Even privileged services should not necessarily be able to see other
    privileged service's namespaces so they can't leak information to each
    other. Use may_see_all_namespaces() helper that centralizes this policy
    until the nstree adapts.
    
    Link: https://patch.msgid.link/20260226-work-visibility-fixes-v1-2-d2c2853313bd@kernel.org
    Fixes: 5222470b2fbb ("nsfs: support file handles")
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Cc: stable@kernel.org # v6.18+
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

nsfs: tighten permission checks for ns iteration ioctls [+ + +]
Author: Christian Brauner <brauner@kernel.org>
Date:   Thu Feb 26 14:50:09 2026 +0100

    nsfs: tighten permission checks for ns iteration ioctls
    
    commit e6b899f08066e744f89df16ceb782e06868bd148 upstream.
    
    Even privileged services should not necessarily be able to see other
    privileged service's namespaces so they can't leak information to each
    other. Use may_see_all_namespaces() helper that centralizes this policy
    until the nstree adapts.
    
    Link: https://patch.msgid.link/20260226-work-visibility-fixes-v1-1-d2c2853313bd@kernel.org
    Fixes: a1d220d9dafa ("nsfs: iterate through mount namespaces")
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Cc: stable@kernel.org # v6.12+
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nstree: tighten permission checks for listing [+ + +]
Author: Christian Brauner <brauner@kernel.org>
Date:   Thu Feb 26 14:50:11 2026 +0100

    nstree: tighten permission checks for listing
    
    commit 8d76afe84fa2babf604b3c173730d4d2b067e361 upstream.
    
    Even privileged services should not necessarily be able to see other
    privileged service's namespaces so they can't leak information to each
    other. Use may_see_all_namespaces() helper that centralizes this policy
    until the nstree adapts.
    
    Link: https://patch.msgid.link/20260226-work-visibility-fixes-v1-3-d2c2853313bd@kernel.org
    Fixes: 76b6f5dfb3fd ("nstree: add listns()")
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Cc: stable@kernel.org # v6.19+
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nvme-pci: Fix race bug in nvme_poll_irqdisable() [+ + +]
Author: Sungwoo Kim <iam@sung-woo.kim>
Date:   Sat Mar 7 14:46:36 2026 -0500

    nvme-pci: Fix race bug in nvme_poll_irqdisable()
    
    [ Upstream commit fc71f409b22ca831a9f87a2712eaa09ef2bb4a5e ]
    
    In the following scenario, pdev can be disabled between (1) and (3) by
    (2). This sets pdev->msix_enabled = 0. Then, pci_irq_vector() will
    return MSI-X IRQ(>15) for (1) whereas return INTx IRQ(<=15) for (2).
    This causes IRQ warning because it tries to enable INTx IRQ that has
    never been disabled before.
    
    To fix this, save IRQ number into a local variable and ensure
    disable_irq() and enable_irq() operate on the same IRQ number.  Even if
    pci_free_irq_vectors() frees the IRQ concurrently, disable_irq() and
    enable_irq() on a stale IRQ number is still valid and safe, and the
    depth accounting reamins balanced.
    
    task 1:
    nvme_poll_irqdisable()
      disable_irq(pci_irq_vector(pdev, nvmeq->cq_vector)) ...(1)
      enable_irq(pci_irq_vector(pdev, nvmeq->cq_vector))  ...(3)
    
    task 2:
    nvme_reset_work()
      nvme_dev_disable()
        pdev->msix_enable = 0;  ...(2)
    
    crash log:
    
    ------------[ cut here ]------------
    Unbalanced enable for IRQ 10
    WARNING: kernel/irq/manage.c:753 at __enable_irq+0x102/0x190 kernel/irq/manage.c:753, CPU#1: kworker/1:0H/26
    Modules linked in:
    CPU: 1 UID: 0 PID: 26 Comm: kworker/1:0H Not tainted 6.19.0-dirty #9 PREEMPT(voluntary)
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014
    Workqueue: kblockd blk_mq_timeout_work
    RIP: 0010:__enable_irq+0x107/0x190 kernel/irq/manage.c:753
    Code: ff df 48 89 fa 48 c1 ea 03 0f b6 14 02 48 89 f8 83 e0 07 83 c0 03 38 d0 7c 04 84 d2 75 79 48 8d 3d 2e 7a 3f 05 41 8b 74 24 2c <67> 48 0f b9 3a e8 ef b9 21 00 5b 41 5c 5d e9 46 54 66 03 e8 e1 b9
    RSP: 0018:ffffc900001bf550 EFLAGS: 00010046
    RAX: 0000000000000007 RBX: 0000000000000000 RCX: ffffffffb20c0e90
    RDX: 0000000000000000 RSI: 000000000000000a RDI: ffffffffb74b88f0
    RBP: ffffc900001bf560 R08: ffff88800197cf00 R09: 0000000000000001
    R10: 0000000000000003 R11: 0000000000000003 R12: ffff8880012a6000
    R13: 1ffff92000037eae R14: 000000000000000a R15: 0000000000000293
    FS:  0000000000000000(0000) GS:ffff8880b49f7000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000555da4a25fa8 CR3: 00000000208e8000 CR4: 00000000000006f0
    Call Trace:
     <TASK>
     enable_irq+0x121/0x1e0 kernel/irq/manage.c:797
     nvme_poll_irqdisable+0x162/0x1c0 drivers/nvme/host/pci.c:1494
     nvme_timeout+0x965/0x14b0 drivers/nvme/host/pci.c:1744
     blk_mq_rq_timed_out block/blk-mq.c:1653 [inline]
     blk_mq_handle_expired+0x227/0x2d0 block/blk-mq.c:1721
     bt_iter+0x2fc/0x3a0 block/blk-mq-tag.c:292
     __sbitmap_for_each_set include/linux/sbitmap.h:269 [inline]
     sbitmap_for_each_set include/linux/sbitmap.h:290 [inline]
     bt_for_each block/blk-mq-tag.c:324 [inline]
     blk_mq_queue_tag_busy_iter+0x969/0x1e80 block/blk-mq-tag.c:536
     blk_mq_timeout_work+0x627/0x870 block/blk-mq.c:1763
     process_one_work+0x956/0x1aa0 kernel/workqueue.c:3257
     process_scheduled_works kernel/workqueue.c:3340 [inline]
     worker_thread+0x65c/0xe60 kernel/workqueue.c:3421
     kthread+0x41a/0x930 kernel/kthread.c:463
     ret_from_fork+0x6f8/0x8c0 arch/x86/kernel/process.c:158
     ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:246
     </TASK>
    irq event stamp: 74478
    hardirqs last  enabled at (74477): [<ffffffffb5720a9c>] __raw_spin_unlock_irq include/linux/spinlock_api_smp.h:159 [inline]
    hardirqs last  enabled at (74477): [<ffffffffb5720a9c>] _raw_spin_unlock_irq+0x2c/0x60 kernel/locking/spinlock.c:202
    hardirqs last disabled at (74478): [<ffffffffb57207b5>] __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:108 [inline]
    hardirqs last disabled at (74478): [<ffffffffb57207b5>] _raw_spin_lock_irqsave+0x85/0xa0 kernel/locking/spinlock.c:162
    softirqs last  enabled at (74304): [<ffffffffb1e9466c>] __do_softirq kernel/softirq.c:656 [inline]
    softirqs last  enabled at (74304): [<ffffffffb1e9466c>] invoke_softirq kernel/softirq.c:496 [inline]
    softirqs last  enabled at (74304): [<ffffffffb1e9466c>] __irq_exit_rcu+0xdc/0x120 kernel/softirq.c:723
    softirqs last disabled at (74287): [<ffffffffb1e9466c>] __do_softirq kernel/softirq.c:656 [inline]
    softirqs last disabled at (74287): [<ffffffffb1e9466c>] invoke_softirq kernel/softirq.c:496 [inline]
    softirqs last disabled at (74287): [<ffffffffb1e9466c>] __irq_exit_rcu+0xdc/0x120 kernel/softirq.c:723
    ---[ end trace 0000000000000000 ]---
    
    Fixes: fa059b856a59 (nvme-pci: Simplify nvme_poll_irqdisable)
    Acked-by: Chao Shi <cshi008@fiu.edu>
    Acked-by: Weidong Zhu <weizhu@fiu.edu>
    Acked-by: Dave Tian <daveti@purdue.edu>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Sungwoo Kim <iam@sung-woo.kim>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nvme-pci: Fix slab-out-of-bounds in nvme_dbbuf_set [+ + +]
Author: Sungwoo Kim <iam@sung-woo.kim>
Date:   Sun Mar 8 14:20:59 2026 -0400

    nvme-pci: Fix slab-out-of-bounds in nvme_dbbuf_set
    
    [ Upstream commit b4e78f1427c7d6859229ae9616df54e1fc05a516 ]
    
    dev->online_queues is a count incremented in nvme_init_queue. Thus,
    valid indices are 0 through dev->online_queues − 1.
    
    This patch fixes the loop condition to ensure the index stays within the
    valid range. Index 0 is excluded because it is the admin queue.
    
    KASAN splat:
    
    ==================================================================
    BUG: KASAN: slab-out-of-bounds in nvme_dbbuf_free drivers/nvme/host/pci.c:377 [inline]
    BUG: KASAN: slab-out-of-bounds in nvme_dbbuf_set+0x39c/0x400 drivers/nvme/host/pci.c:404
    Read of size 2 at addr ffff88800592a574 by task kworker/u8:5/74
    
    CPU: 0 UID: 0 PID: 74 Comm: kworker/u8:5 Not tainted 6.19.0-dirty #10 PREEMPT(voluntary)
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014
    Workqueue: nvme-reset-wq nvme_reset_work
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:94 [inline]
     dump_stack_lvl+0xea/0x150 lib/dump_stack.c:120
     print_address_description mm/kasan/report.c:378 [inline]
     print_report+0xce/0x5d0 mm/kasan/report.c:482
     kasan_report+0xdc/0x110 mm/kasan/report.c:595
     __asan_report_load2_noabort+0x18/0x20 mm/kasan/report_generic.c:379
     nvme_dbbuf_free drivers/nvme/host/pci.c:377 [inline]
     nvme_dbbuf_set+0x39c/0x400 drivers/nvme/host/pci.c:404
     nvme_reset_work+0x36b/0x8c0 drivers/nvme/host/pci.c:3252
     process_one_work+0x956/0x1aa0 kernel/workqueue.c:3257
     process_scheduled_works kernel/workqueue.c:3340 [inline]
     worker_thread+0x65c/0xe60 kernel/workqueue.c:3421
     kthread+0x41a/0x930 kernel/kthread.c:463
     ret_from_fork+0x6f8/0x8c0 arch/x86/kernel/process.c:158
     ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:246
     </TASK>
    
    Allocated by task 34 on cpu 1 at 4.241550s:
     kasan_save_stack+0x2c/0x60 mm/kasan/common.c:57
     kasan_save_track+0x1c/0x70 mm/kasan/common.c:78
     kasan_save_alloc_info+0x3c/0x50 mm/kasan/generic.c:570
     poison_kmalloc_redzone mm/kasan/common.c:398 [inline]
     __kasan_kmalloc+0xb5/0xc0 mm/kasan/common.c:415
     kasan_kmalloc include/linux/kasan.h:263 [inline]
     __do_kmalloc_node mm/slub.c:5657 [inline]
     __kmalloc_node_noprof+0x2bf/0x8d0 mm/slub.c:5663
     kmalloc_array_node_noprof include/linux/slab.h:1075 [inline]
     nvme_pci_alloc_dev drivers/nvme/host/pci.c:3479 [inline]
     nvme_probe+0x2f1/0x1820 drivers/nvme/host/pci.c:3534
     local_pci_probe+0xef/0x1c0 drivers/pci/pci-driver.c:324
     pci_call_probe drivers/pci/pci-driver.c:392 [inline]
     __pci_device_probe drivers/pci/pci-driver.c:417 [inline]
     pci_device_probe+0x743/0x920 drivers/pci/pci-driver.c:451
     call_driver_probe drivers/base/dd.c:583 [inline]
     really_probe+0x29b/0xb70 drivers/base/dd.c:661
     __driver_probe_device+0x3b0/0x4a0 drivers/base/dd.c:803
     driver_probe_device+0x56/0x1f0 drivers/base/dd.c:833
     __driver_attach_async_helper+0x155/0x340 drivers/base/dd.c:1159
     async_run_entry_fn+0xa6/0x4b0 kernel/async.c:129
     process_one_work+0x956/0x1aa0 kernel/workqueue.c:3257
     process_scheduled_works kernel/workqueue.c:3340 [inline]
     worker_thread+0x65c/0xe60 kernel/workqueue.c:3421
     kthread+0x41a/0x930 kernel/kthread.c:463
     ret_from_fork+0x6f8/0x8c0 arch/x86/kernel/process.c:158
     ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:246
    
    The buggy address belongs to the object at ffff88800592a000
     which belongs to the cache kmalloc-2k of size 2048
    The buggy address is located 244 bytes to the right of
     allocated 1152-byte region [ffff88800592a000, ffff88800592a480)
    
    The buggy address belongs to the physical page:
    page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x5928
    head: order:3 mapcount:0 entire_mapcount:0 nr_pages_mapped:0 pincount:0
    anon flags: 0xfffffc0000040(head|node=0|zone=1|lastcpupid=0x1fffff)
    page_type: f5(slab)
    raw: 000fffffc0000040 ffff888001042000 0000000000000000 dead000000000001
    raw: 0000000000000000 0000000000080008 00000000f5000000 0000000000000000
    head: 000fffffc0000040 ffff888001042000 0000000000000000 dead000000000001
    head: 0000000000000000 0000000000080008 00000000f5000000 0000000000000000
    head: 000fffffc0000003 ffffea0000164a01 00000000ffffffff 00000000ffffffff
    head: ffffffffffffffff 0000000000000000 00000000ffffffff 0000000000000008
    page dumped because: kasan: bad access detected
    
    Memory state around the buggy address:
     ffff88800592a400: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     ffff88800592a480: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    >ffff88800592a500: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
                                                                 ^
     ffff88800592a580: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
     ffff88800592a600: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    ==================================================================
    
    Fixes: 0f0d2c876c96 (nvme: free sq/cq dbbuf pointers when dbbuf set fails)
    Acked-by: Chao Shi <cshi008@fiu.edu>
    Acked-by: Weidong Zhu <weizhu@fiu.edu>
    Acked-by: Dave Tian <daveti@purdue.edu>
    Signed-off-by: Sungwoo Kim <iam@sung-woo.kim>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
objtool/klp: Fix detection of corrupt static branch/call entries [+ + +]
Author: Josh Poimboeuf <jpoimboe@kernel.org>
Date:   Tue Feb 10 13:50:09 2026 -0800

    objtool/klp: Fix detection of corrupt static branch/call entries
    
    [ Upstream commit f9fb44b0ecefc1f218db56661ed66d4e8d67317d ]
    
    Patching a function which references a static key living in a kernel
    module is unsupported due to ordering issues inherent to late module
    patching:
    
      1) Load a livepatch module which has a __jump_table entry which needs
         a klp reloc to reference static key K which lives in module M.
    
      2) The __jump_table klp reloc does *not* get resolved because module M
         is not yet loaded.
    
      3) jump_label_add_module() corrupts memory (or causes a panic) when
         dereferencing the uninitialized pointer to key K.
    
    validate_special_section_klp_reloc() intends to prevent that from ever
    happening by catching it at build time.  However, it incorrectly assumes
    the special section entry's reloc symbol references have already been
    converted from section symbols to object symbols, causing the validation
    to miss corruption in extracted static branch/call table entries.
    
    Make sure the references have been properly converted before doing the
    validation.
    
    Fixes: dd590d4d57eb ("objtool/klp: Introduce klp diff subcommand for diffing object files")
    Reported-by: Song Liu <song@kernel.org>
    Reviewed-and-tested-by: Song Liu <song@kernel.org>
    Link: https://patch.msgid.link/124ad747b751df0df1725eff89de8332e3fb26d6.1770759954.git.jpoimboe@kernel.org
    Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
objtool: Fix another stack overflow in validate_branch() [+ + +]
Author: Josh Poimboeuf <jpoimboe@kernel.org>
Date:   Fri Mar 6 10:28:14 2026 -0800

    objtool: Fix another stack overflow in validate_branch()
    
    [ Upstream commit 9a73f085dc91980ab7fcc5e9716f4449424b3b59 ]
    
    The insn state is getting saved on the stack twice for each recursive
    iteration.  No need for that, once is enough.
    
    Fixes the following reported stack overflow:
    
      drivers/scsi/qla2xxx/qla_dbg.o: error: SIGSEGV: objtool stack overflow!
      Segmentation fault
    
    Fixes: 70589843b36f ("objtool: Add option to trace function validation")
    Reported-by: Arnd Bergmann <arnd@arndb.de>
    Closes: https://lore.kernel.org/90956545-2066-46e3-b547-10c884582eb0@app.fastmail.com
    Link: https://patch.msgid.link/8b97f62d083457f3b0a29a424275f7957dd3372f.1772821683.git.jpoimboe@kernel.org
    Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

objtool: Fix data alignment in elf_add_data() [+ + +]
Author: Josh Poimboeuf <jpoimboe@kernel.org>
Date:   Wed Mar 4 19:31:20 2026 -0800

    objtool: Fix data alignment in elf_add_data()
    
    [ Upstream commit 356e4b2f5b80f757965f3f4d0219c81fca91b6f2 ]
    
    Any data added to a section needs to be aligned in accordance with the
    section's sh_addralign value.  Particularly strings added to a .str1.8
    section.  Otherwise you may get some funky strings.
    
    Fixes: dd590d4d57eb ("objtool/klp: Introduce klp diff subcommand for diffing object files")
    Link: https://patch.msgid.link/d962fc0ca24fa0825cca8dad71932dccdd9312a9.1772681234.git.jpoimboe@kernel.org
    Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
octeontx2-af: devlink: fix NIX RAS reporter recovery condition [+ + +]
Author: Alok Tiwari <alok.a.tiwari@oracle.com>
Date:   Tue Mar 10 11:48:16 2026 -0700

    octeontx2-af: devlink: fix NIX RAS reporter recovery condition
    
    [ Upstream commit dc26ca99b835e21e76a58b1463b84adb0ca34f58 ]
    
    The NIX RAS health reporter recovery routine checks nix_af_rvu_int to
    decide whether to re-enable NIX_AF_RAS interrupts. This is the RVU
    interrupt status field and is unrelated to RAS events, so the recovery
    flow may incorrectly skip re-enabling NIX_AF_RAS interrupts.
    
    Check nix_af_rvu_ras instead before writing NIX_AF_RAS_ENA_W1S.
    
    Fixes: 5ed66306eab6 ("octeontx2-af: Add devlink health reporters for NIX")
    Signed-off-by: Alok Tiwari <alok.a.tiwari@oracle.com>
    Link: https://patch.msgid.link/20260310184824.1183651-1-alok.a.tiwari@oracle.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

octeontx2-af: devlink: fix NIX RAS reporter to use RAS interrupt status [+ + +]
Author: Alok Tiwari <alok.a.tiwari@oracle.com>
Date:   Tue Mar 10 11:48:17 2026 -0700

    octeontx2-af: devlink: fix NIX RAS reporter to use RAS interrupt status
    
    [ Upstream commit 87f7dff3ec75b91def0024ebaaf732457f47a63b ]
    
    The NIX RAS health report path uses nix_af_rvu_err when handling the
    NIX_AF_RVU_RAS case, so the report prints the ERR interrupt status rather
    than the RAS interrupt status.
    
    Use nix_af_rvu_ras for the NIX_AF_RVU_RAS report.
    
    Fixes: 5ed66306eab6 ("octeontx2-af: Add devlink health reporters for NIX")
    Signed-off-by: Alok Tiwari <alok.a.tiwari@oracle.com>
    Link: https://patch.msgid.link/20260310184824.1183651-2-alok.a.tiwari@oracle.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
page_pool: store detach_time as ktime_t to avoid false-negatives [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Mon Mar 9 17:39:07 2026 -0700

    page_pool: store detach_time as ktime_t to avoid false-negatives
    
    [ Upstream commit 28b225282d44e2ef40e7f46cfdbd5d1b20b8874f ]
    
    While testing other changes in vng I noticed that
    nl_netdev.page_pool_check flakes. This never happens in real CI.
    
    Turns out vng may boot and get to that test in less than a second.
    page_pool_detached() records the detach time in seconds, so if
    vng is fast enough detach time is set to 0. Other code treats
    0 as "not detached". detach_time is only used to report the state
    to the user, so it's not a huge deal in practice but let's fix it.
    Store the raw ktime_t (nanoseconds) instead. A nanosecond value
    of 0 is practically impossible.
    
    Acked-by: Jesper Dangaard Brouer <hawk@kernel.org>
    Fixes: 69cb4952b6f6 ("net: page_pool: report when page pool was destroyed")
    Link: https://patch.msgid.link/20260310003907.3540019-1-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
parisc: Check kernel mapping earlier at bootup [+ + +]
Author: Helge Deller <deller@gmx.de>
Date:   Tue Mar 3 23:36:11 2026 +0100

    parisc: Check kernel mapping earlier at bootup
    
    commit 17c144f1104bfc29a3ce3f7d0931a1bfb7a3558c upstream.
    
    The check if the initial mapping is sufficient needs to happen much
    earlier during bootup. Move this test directly to the start_parisc()
    function and use native PDC iodc functions to print the warning, because
    panic() and printk() are not functional yet.
    
    This fixes boot when enabling various KALLSYSMS options which need
    much more space.
    
    Signed-off-by: Helge Deller <deller@gmx.de>
    Cc: <stable@vger.kernel.org> # v6.0+
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

parisc: Fix initial page table creation for boot [+ + +]
Author: Helge Deller <deller@gmx.de>
Date:   Wed Mar 4 22:24:18 2026 +0100

    parisc: Fix initial page table creation for boot
    
    commit 8475d8fe21ec9c7eb2faca555fbc5b68cf0d2597 upstream.
    
    The KERNEL_INITIAL_ORDER value defines the initial size (usually 32 or
    64 MB) of the page table during bootup. Up until now the whole area was
    initialized with PTE entries, but there was no check if we filled too
    many entries.  Change the code to fill up with so many entries that the
    "_end" symbol can be reached by the kernel, but not more entries than
    actually fit into the initial PTE tables.
    
    Signed-off-by: Helge Deller <deller@gmx.de>
    Cc: <stable@vger.kernel.org> # v6.0+
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

parisc: Increase initial mapping to 64 MB with KALLSYMS [+ + +]
Author: Helge Deller <deller@gmx.de>
Date:   Tue Mar 3 23:36:10 2026 +0100

    parisc: Increase initial mapping to 64 MB with KALLSYMS
    
    commit 8e732934fb81282be41602550e7e07baf265e972 upstream.
    
    The 32MB initial kernel mapping can become too small when CONFIG_KALLSYMS
    is used. Increase the mapping to 64 MB in this case.
    
    Signed-off-by: Helge Deller <deller@gmx.de>
    Cc: <stable@vger.kernel.org> # v6.0+
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
perf annotate: Fix hashmap__new() error checking [+ + +]
Author: Chen Ni <nichen@iscas.ac.cn>
Date:   Fri Mar 6 11:56:48 2026 +0800

    perf annotate: Fix hashmap__new() error checking
    
    [ Upstream commit bf29cb3641b80bac759c3332b02e0b270e16bf94 ]
    
    The hashmap__new() function never returns NULL, it returns error
    pointers. Fix the error checking to match.
    
    Additionally, set src->samples to NULL to prevent any later code from
    accidentally using the error pointer.
    
    Fixes: d3e7cad6f36d9e80 ("perf annotate: Add a hashmap for symbol histogram")
    Reviewed-by: Ian Rogers <irogers@google.com>
    Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: James Clark <james.clark@linaro.org>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Tianyou Li <tianyou.li@intel.com>
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf disasm: Fix off-by-one bug in outside check [+ + +]
Author: Peter Collingbourne <pcc@google.com>
Date:   Wed Mar 4 11:06:12 2026 -0800

    perf disasm: Fix off-by-one bug in outside check
    
    [ Upstream commit b3ce769203a99d6f3c6d6269ec09232a8c5da422 ]
    
    If a branch target points to one past the end of a function, the branch
    should be treated as a branch to another function.
    
    This can happen e.g. with a tail call to a function that is laid out
    immediately after the caller.
    
    Fixes: 751b1783da784299 ("perf annotate: Mark jumps to outher functions with the call arrow")
    Reviewed-by: Ian Rogers <irogers@google.com>
    Signed-off-by: Peter Collingbourne <pcc@google.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Bill Wendling <morbo@google.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: James Clark <james.clark@linaro.org>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Justin Stitt <justinstitt@google.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Nathan Chancellor <nathan@kernel.org>
    Cc: Nick Desaulniers <nick.desaulniers+lkml@gmail.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: https://linux-review.googlesource.com/id/Ide471112e82d68177e0faf08ca411d9fcf0a7bdf
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf ftrace: Fix hashmap__new() error checking [+ + +]
Author: Chen Ni <nichen@iscas.ac.cn>
Date:   Fri Mar 6 12:10:52 2026 +0800

    perf ftrace: Fix hashmap__new() error checking
    
    [ Upstream commit be34705aa527872e5ce83927b7bc9307ba8095ca ]
    
    The hashmap__new() function never returns NULL, it returns error
    pointers. Fix the error checking to match.
    
    Additionally, set ftrace->profile_hash to NULL on error, and return the
    exact error code from hashmap__new().
    
    Fixes: 0f223813edd051a5 ("perf ftrace: Add 'profile' command")
    Suggested-by: Ian Rogers <irogers@google.com>
    Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: James Clark <james.clark@linaro.org>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf synthetic-events: Fix stale build ID in module MMAP2 records [+ + +]
Author: Chuck Lever <chuck.lever@oracle.com>
Date:   Tue Mar 10 13:59:51 2026 -0400

    perf synthetic-events: Fix stale build ID in module MMAP2 records
    
    [ Upstream commit 35b16a7a2c4fc458304447128b86514ce9f70f3c ]
    
    perf_event__synthesize_modules() allocates a single union perf_event and
    reuses it across every kernel module callback.
    
    After the first module is processed, perf_record_mmap2__read_build_id()
    sets PERF_RECORD_MISC_MMAP_BUILD_ID in header.misc and writes that
    module's build ID into the event.
    
    On subsequent iterations the callback overwrites start, len, pid, and
    filename for the next module but never clears the stale build ID fields
    or the MMAP_BUILD_ID flag.
    
    When perf_record_mmap2__read_build_id() runs for the second module it
    sees the flag, reads the stale build ID into a dso_id, and
    __dso__improve_id() permanently poisons the DSO with the wrong build ID.
    
    Every module after the first therefore receives the first module's build
    ID in its MMAP2 record.
    
    On a system with the sunrpc and nfsd modules loaded, this causes perf
    script and perf report to show [unknown] for all module symbols.
    
    The latent bug has existed since commit d9f2ecbc5e47fca7 ("perf dso:
    Move build_id to dso_id") introduced the PERF_RECORD_MISC_MMAP_BUILD_ID
    check in perf_record_mmap2__read_build_id().
    
    Commit 53b00ff358dc75b1 ("perf record: Make --buildid-mmap the default")
    then exposed it to all users by making the MMAP2-with-build-ID path the
    default.  Both commits were merged in the same series.
    
    Clear the MMAP_BUILD_ID flag and zero the build_id union before each
    call to perf_record_mmap2__read_build_id() so that every module starts
    with a clean slate.
    
    Fixes: d9f2ecbc5e47fca7 ("perf dso: Move build_id to dso_id")
    Reviewed-by: Ian Rogers <irogers@google.com>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: James Clark <james.clark@linaro.org>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pinctrl: cy8c95x0: Don't miss reading the last bank registers [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Mon Feb 23 19:06:51 2026 +0100

    pinctrl: cy8c95x0: Don't miss reading the last bank registers
    
    commit b6c3af46c26f2d07c10a1452adc34b821719327e upstream.
    
    When code had been changed to use for_each_set_clump8(), it mistakenly
    switched from chip->nport to chip->tpin since the cy8c9540 and cy8c9560
    have a 4-pin gap. This, in particular, led to the missed read of
    the last bank interrupt status register and hence missing interrupts
    on those pins. Restore the upper limit in for_each_set_clump8() to take
    into consideration that gap.
    
    Fixes: 83e29a7a1fdf ("pinctrl: cy8c95x0; Switch to use for_each_set_clump8()")
    Cc: stable@vger.kernel.org
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Linus Walleij <linusw@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
pmdomain: bcm: bcm2835-power: Fix broken reset status read [+ + +]
Author: Maíra Canal <mcanal@igalia.com>
Date:   Thu Feb 12 11:49:44 2026 -0300

    pmdomain: bcm: bcm2835-power: Fix broken reset status read
    
    commit 550bae2c0931dbb664a61b08c21cf156f0a5362a upstream.
    
    bcm2835_reset_status() has a misplaced parenthesis on every PM_READ()
    call. Since PM_READ(reg) expands to readl(power->base + (reg)), the
    expression:
    
        PM_READ(PM_GRAFX & PM_V3DRSTN)
    
    computes the bitwise AND of the register offset PM_GRAFX with the
    bitmask PM_V3DRSTN before using the result as a register offset, reading
    from the wrong MMIO address instead of the intended PM_GRAFX register.
    The same issue affects the PM_IMAGE cases.
    
    Fix by moving the closing parenthesis so PM_READ() receives only the
    register offset, and the bitmask is applied to the value returned by
    the read.
    
    Fixes: 670c672608a1 ("soc: bcm: bcm2835-pm: Add support for power domains under a new binding.")
    Signed-off-by: Maíra Canal <mcanal@igalia.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Stefan Wahren <wahrenst@gmx.net>
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

pmdomain: rockchip: Fix PD_VCODEC for RK3588 [+ + +]
Author: Shawn Lin <shawn.lin@rock-chips.com>
Date:   Wed Feb 25 10:55:01 2026 +0800

    pmdomain: rockchip: Fix PD_VCODEC for RK3588
    
    commit 0fb59eaca18f1254ecdce34354eec3cb1b3b5e10 upstream.
    
    >From the RK3588 TRM Table 7-1 RK3588 Voltage Domain and Power Domain Summary,
    PD_RKVDEC0/1 and PD_VENC0/1 rely on VD_VCODEC which require extra voltages to
    be applied, otherwise it breaks RK3588-evb1-v10 board after vdec support landed[1].
    The panic looks like below:
    
      rockchip-pm-domain fd8d8000.power-management:power-controller: failed to set domain 'rkvdec0' on, val=0
      rockchip-pm-domain fd8d8000.power-management:power-controller: failed to set domain 'rkvdec1' on, val=0
      ...
      Hardware name: Rockchip RK3588S EVB1 V10 Board (DT)
      Workqueue: pm genpd_power_off_work_fn
      Call trace:
      show_stack+0x18/0x24 (C)
      dump_stack_lvl+0x40/0x84
      dump_stack+0x18/0x24
      vpanic+0x1ec/0x4fc
      vpanic+0x0/0x4fc
      check_panic_on_warn+0x0/0x94
      arm64_serror_panic+0x6c/0x78
      do_serror+0xc4/0xcc
      el1h_64_error_handler+0x3c/0x5c
      el1h_64_error+0x6c/0x70
      regmap_mmio_read32le+0x18/0x24 (P)
      regmap_bus_reg_read+0xfc/0x130
      regmap_read+0x188/0x1ac
      regmap_read+0x54/0x78
      rockchip_pd_power+0xcc/0x5f0
      rockchip_pd_power_off+0x1c/0x4c
      genpd_power_off+0x84/0x120
      genpd_power_off+0x1b4/0x260
      genpd_power_off_work_fn+0x38/0x58
      process_scheduled_works+0x194/0x2c4
      worker_thread+0x2ac/0x3d8
      kthread+0x104/0x124
      ret_from_fork+0x10/0x20
      SMP: stopping secondary CPUs
      Kernel Offset: disabled
      CPU features: 0x3000000,000e0005,40230521,0400720b
      Memory Limit: none
      ---[ end Kernel panic - not syncing: Asynchronous SError Interrupt ]---
    
    Chaoyi pointed out the PD_VCODEC is the parent of PD_RKVDEC0/1 and PD_VENC0/1, so checking
    the PD_VCODEC is enough.
    
    [1] https://lore.kernel.org/linux-rockchip/20251020212009.8852-2-detlev.casanova@collabora.com/
    
    Fixes: db6df2e3fc16 ("pmdomain: rockchip: add regulator support")
    Cc: stable@vger.kernel.org
    Suggested-by: Chaoyi Chen <chaoyi.chen@rock-chips.com>
    Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
    Reviewed-by: Chaoyi Chen <chaoyi.chen@rock-chips.com>
    Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
powerpc, perf: Check that current->mm is alive before getting user callchain [+ + +]
Author: Viktor Malik <vmalik@redhat.com>
Date:   Mon Mar 9 15:40:45 2026 +0100

    powerpc, perf: Check that current->mm is alive before getting user callchain
    
    [ Upstream commit e9bbfb4bfa86c6b5515b868d6982ac60505d7e39 ]
    
    It may happen that mm is already released, which leads to kernel panic.
    This adds the NULL check for current->mm, similarly to
    commit 20afc60f892d ("x86, perf: Check that current->mm is alive before getting user callchain").
    
    I was getting this panic when running a profiling BPF program
    (profile.py from bcc-tools):
    
        [26215.051935] Kernel attempted to read user page (588) - exploit attempt? (uid: 0)
        [26215.051950] BUG: Kernel NULL pointer dereference on read at 0x00000588
        [26215.051952] Faulting instruction address: 0xc00000000020fac0
        [26215.051957] Oops: Kernel access of bad area, sig: 11 [#1]
        [...]
        [26215.052049] Call Trace:
        [26215.052050] [c000000061da6d30] [c00000000020fc10] perf_callchain_user_64+0x2d0/0x490 (unreliable)
        [26215.052054] [c000000061da6dc0] [c00000000020f92c] perf_callchain_user+0x1c/0x30
        [26215.052057] [c000000061da6de0] [c0000000005ab2a0] get_perf_callchain+0x100/0x360
        [26215.052063] [c000000061da6e70] [c000000000573bc8] bpf_get_stackid+0x88/0xf0
        [26215.052067] [c000000061da6ea0] [c008000000042258] bpf_prog_16d4ab9ab662f669_do_perf_event+0xf8/0x274
        [...]
    
    In addition, move storing the top-level stack entry to generic
    perf_callchain_user to make sure the top-evel entry is always captured,
    even if current->mm is NULL.
    
    Fixes: 20002ded4d93 ("perf_counter: powerpc: Add callchain support")
    Signed-off-by: Viktor Malik <vmalik@redhat.com>
    Tested-by: Qiao Zhao <qzhao@redhat.com>
    Tested-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com>
    Reviewed-by: Saket Kumar Bhaskar <skb99@linux.ibm.com>
    [Maddy: fixed message to avoid checkpatch format style error]
    Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
    Link: https://patch.msgid.link/20260309144045.169427-1-vmalik@redhat.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/crash: adjust the elfcorehdr size [+ + +]
Author: Sourabh Jain <sourabhjain@linux.ibm.com>
Date:   Fri Feb 27 22:48:01 2026 +0530

    powerpc/crash: adjust the elfcorehdr size
    
    [ Upstream commit 04e707cb77c272cb0bb2e2e3c5c7f844d804a089 ]
    
    With crash hotplug support enabled, additional memory is allocated to
    the elfcorehdr kexec segment to accommodate resources added during
    memory hotplug events. However, the kdump FDT is not updated with the
    same size, which can result in elfcorehdr corruption in the kdump
    kernel.
    
    Update elf_headers_sz (the kimage member representing the size of the
    elfcorehdr kexec segment) to reflect the total memory allocated for the
    elfcorehdr segment instead of the elfcorehdr buffer size at the time of
    kdump load. This allows of_kexec_alloc_and_setup_fdt() to reserve the
    full elfcorehdr memory in the kdump FDT and prevents elfcorehdr
    corruption.
    
    Fixes: 849599b702ef8 ("powerpc/crash: add crash memory hotplug support")
    Reviewed-by: Hari Bathini <hbathini@linux.ibm.com>
    Signed-off-by: Sourabh Jain <sourabhjain@linux.ibm.com>
    Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
    Link: https://patch.msgid.link/20260227171801.2238847-1-sourabhjain@linux.ibm.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/kexec/core: use big-endian types for crash variables [+ + +]
Author: Sourabh Jain <sourabhjain@linux.ibm.com>
Date:   Wed Dec 24 20:42:57 2025 +0530

    powerpc/kexec/core: use big-endian types for crash variables
    
    [ Upstream commit 20197b967a6a29dab81495f25a988515bda84cfe ]
    
    Use explicit word-sized big-endian types for kexec and crash related
    variables. This makes the endianness unambiguous and avoids type
    mismatches that trigger sparse warnings.
    
    The change addresses sparse warnings like below (seen on both 32-bit
    and 64-bit builds):
    
    CHECK   ../arch/powerpc/kexec/core.c
    sparse:    expected unsigned int static [addressable] [toplevel] [usertype] crashk_base
    sparse:    got restricted __be32 [usertype]
    sparse: warning: incorrect type in assignment (different base types)
    sparse:    expected unsigned int static [addressable] [toplevel] [usertype] crashk_size
    sparse:    got restricted __be32 [usertype]
    sparse: warning: incorrect type in assignment (different base types)
    sparse:    expected unsigned long long static [addressable] [toplevel] mem_limit
    sparse:    got restricted __be32 [usertype]
    sparse: warning: incorrect type in assignment (different base types)
    sparse:    expected unsigned int static [addressable] [toplevel] [usertype] kernel_end
    sparse:    got restricted __be32 [usertype]
    
    No functional change intended.
    
    Fixes: ea961a828fe7 ("powerpc: Fix endian issues in kexec and crash dump code")
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202512221405.VHPKPjnp-lkp@intel.com/
    Signed-off-by: Sourabh Jain <sourabhjain@linux.ibm.com>
    Tested-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com>
    Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
    Link: https://patch.msgid.link/20251224151257.28672-1-sourabhjain@linux.ibm.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/pseries: Correct MSI allocation tracking [+ + +]
Author: Nam Cao <namcao@linutronix.de>
Date:   Mon Mar 2 01:39:48 2026 +0100

    powerpc/pseries: Correct MSI allocation tracking
    
    commit 35e4f2a17eb40288f9bcdb09549fa04a63a96279 upstream.
    
    The per-device MSI allocation calculation in pseries_irq_domain_alloc()
    is clearly wrong. It can still happen to work when nr_irqs is 1.
    
    Correct it.
    
    Fixes: c0215e2d72de ("powerpc/pseries: Fix MSI-X allocation failure when quota is exceeded")
    Cc: stable@vger.kernel.org
    Signed-off-by: Nam Cao <namcao@linutronix.de>
    Reviewed-by: Mahesh Salgaonkar <mahesh@linux.ibm.com>
    Reviewed-by: Nilay Shroff <nilay@linux.ibm.com>
    [maddy: Fixed Nilay's reviewed-by tag]
    Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
    Link: https://patch.msgid.link/20260302003948.1452016-1-namcao@linutronix.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
powerpc/uaccess: Fix inline assembly for clang build on PPC32 [+ + +]
Author: Christophe Leroy (CS GROUP) <chleroy@kernel.org>
Date:   Tue Feb 3 08:30:41 2026 +0100

    powerpc/uaccess: Fix inline assembly for clang build on PPC32
    
    [ Upstream commit 0ee95a1d458630272d0415d0ffa9424fcb606c90 ]
    
    Test robot reports the following error with clang-16.0.6:
    
       In file included from kernel/rseq.c:75:
       include/linux/rseq_entry.h:141:3: error: invalid operand for instruction
                       unsafe_get_user(offset, &ucs->post_commit_offset, efault);
                       ^
       include/linux/uaccess.h:608:2: note: expanded from macro 'unsafe_get_user'
               arch_unsafe_get_user(x, ptr, local_label);      \
               ^
       arch/powerpc/include/asm/uaccess.h:518:2: note: expanded from macro 'arch_unsafe_get_user'
               __get_user_size_goto(__gu_val, __gu_addr, sizeof(*(p)), e); \
               ^
       arch/powerpc/include/asm/uaccess.h:284:2: note: expanded from macro '__get_user_size_goto'
               __get_user_size_allowed(x, ptr, size, __gus_retval);    \
               ^
       arch/powerpc/include/asm/uaccess.h:275:10: note: expanded from macro '__get_user_size_allowed'
               case 8: __get_user_asm2(x, (u64 __user *)ptr, retval);  break;  \
                       ^
       arch/powerpc/include/asm/uaccess.h:258:4: note: expanded from macro '__get_user_asm2'
                       "       li %1+1,0\n"                    \
                        ^
       <inline asm>:7:5: note: instantiated into assembly here
               li 31+1,0
                  ^
       1 error generated.
    
    On PPC32, for 64 bits vars a pair of registers is used. Usually the
    lower register in the pair is the high part and the higher register is
    the low part. GCC uses r3/r4 ... r11/r12 ... r14/r15 ... r30/r31
    
    In older kernel code inline assembly was using %1 and %1+1 to represent
    64 bits values. However here it looks like clang uses r31 as high part,
    allthough r32 doesn't exist hence the error.
    
    Allthoug %1+1 should work, most places now use %L1 instead of %1+1, so
    let's do the same here.
    
    With that change, the build doesn't fail anymore and a disassembly shows
    clang uses r17/r18 and r31/r14 pair when GCC would have used r16/r17 and
    r30/r31:
    
            Disassembly of section .fixup:
    
            00000000 <.fixup>:
               0:   38 a0 ff f2     li      r5,-14
               4:   3a 20 00 00     li      r17,0
               8:   3a 40 00 00     li      r18,0
               c:   48 00 00 00     b       c <.fixup+0xc>
                                    c: R_PPC_REL24  .text+0xbc
              10:   38 a0 ff f2     li      r5,-14
              14:   3b e0 00 00     li      r31,0
              18:   39 c0 00 00     li      r14,0
              1c:   48 00 00 00     b       1c <.fixup+0x1c>
                                    1c: R_PPC_REL24 .text+0x144
    
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202602021825.otcItxGi-lkp@intel.com/
    Fixes: c20beffeec3c ("powerpc/uaccess: Use flexible addressing with __put_user()/__get_user()")
    Signed-off-by: Christophe Leroy (CS GROUP) <chleroy@kernel.org>
    Acked-by: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
    Link: https://patch.msgid.link/8ca3a657a650e497a96bfe7acde2f637dadab344.1770103646.git.chleroy@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc64/bpf: fix kfunc call support [+ + +]
Author: Hari Bathini <hbathini@linux.ibm.com>
Date:   Tue Mar 3 23:40:30 2026 +0530

    powerpc64/bpf: fix kfunc call support
    
    commit 01b6ac72729610ae732ca2a66e3a642e23f6cd60 upstream.
    
    Commit 61688a82e047 ("powerpc/bpf: enable kfunc call") inadvertently
    enabled kfunc call support for 32-bit powerpc but that support will
    not be possible until ABI mismatch between 32-bit powerpc and eBPF is
    handled in 32-bit powerpc JIT code. Till then, advertise support only
    for 64-bit powerpc. Also, in powerpc ABI, caller needs to extend the
    arguments properly based on signedness. The JIT code is responsible
    for handling this explicitly for kfunc calls as verifier can't handle
    this for each architecture-specific ABI needs. But this was not taken
    care of while kfunc call support was enabled for powerpc. Fix it by
    handling this with bpf_jit_find_kfunc_model() and using zero_extend()
    & sign_extend() helper functions.
    
    Fixes: 61688a82e047 ("powerpc/bpf: enable kfunc call")
    Cc: stable@vger.kernel.org
    Signed-off-by: Hari Bathini <hbathini@linux.ibm.com>
    Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
    Link: https://patch.msgid.link/20260303181031.390073-7-hbathini@linux.ibm.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

powerpc64/bpf: fix the address returned by bpf_get_func_ip [+ + +]
Author: Hari Bathini <hbathini@linux.ibm.com>
Date:   Tue Mar 3 23:40:26 2026 +0530

    powerpc64/bpf: fix the address returned by bpf_get_func_ip
    
    commit 157820264ac3dadfafffad63184b883eb28f9ae0 upstream.
    
    bpf_get_func_ip() helper function returns the address of the traced
    function. It relies on the IP address stored at ctx - 16 by the bpf
    trampoline. On 64-bit powerpc, this address is recovered from LR
    accounting for OOL trampoline. But the address stored here was off
    by 4-bytes. Ensure the address is the actual start of the traced
    function.
    
    Reported-by: Abhishek Dubey <adubey@linux.ibm.com>
    Fixes: d243b62b7bd3 ("powerpc64/bpf: Add support for bpf trampolines")
    Cc: stable@vger.kernel.org
    Tested-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com>
    Signed-off-by: Hari Bathini <hbathini@linux.ibm.com>
    Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
    Link: https://patch.msgid.link/20260303181031.390073-3-hbathini@linux.ibm.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
powerpc: 83xx: km83xx: Fix keymile vendor prefix [+ + +]
Author: J. Neuschäfer <j.ne@posteo.net>
Date:   Tue Mar 3 16:31:42 2026 +0100

    powerpc: 83xx: km83xx: Fix keymile vendor prefix
    
    [ Upstream commit 691417ffe7821721e0a28bd25ad8c0dc0d4ae4ad ]
    
    When kmeter.c was refactored into km83xx.c in 2011, the "keymile" vendor
    prefix was changed to upper-case "Keymile". The devicetree at
    arch/powerpc/boot/dts/kmeter1.dts never underwent the same change,
    suggesting that this was simply a mistake.
    
    Fixes: 93e2b95c81042d ("powerpc/83xx: rename and update kmeter1")
    Signed-off-by: J. Neuschäfer <j.ne@posteo.net>
    Reviewed-by: Heiko Schocher <hs@nabladev.com>
    Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
    Link: https://patch.msgid.link/20260303-keymile-v1-1-463a11e71702@posteo.net
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
qmi_wwan: allow max_mtu above hard_mtu to control rx_urb_size [+ + +]
Author: Laurent Vivier <lvivier@redhat.com>
Date:   Wed Mar 4 14:43:38 2026 +0100

    qmi_wwan: allow max_mtu above hard_mtu to control rx_urb_size
    
    commit 55f854dd5bdd8e19b936a00ef1f8d776ac32c7b0 upstream.
    
    Commit c7159e960f14 ("usbnet: limit max_mtu based on device's hard_mtu")
    capped net->max_mtu to the device's hard_mtu in usbnet_probe(). While
    this correctly prevents oversized packets on standard USB network
    devices, it breaks the qmi_wwan driver.
    
    qmi_wwan relies on userspace (e.g. ModemManager) setting a large MTU on
    the wwan0 interface to configure rx_urb_size via usbnet_change_mtu().
    QMI modems negotiate USB transfer sizes of 16,383 or 32,767 bytes, and
    the USB receive buffers must be sized accordingly. With max_mtu capped
    to hard_mtu (~1500 bytes), userspace can no longer raise the MTU, the
    receive buffers remain small, and download speeds drop from >300 Mbps
    to ~0.8 Mbps.
    
    Introduce a FLAG_NOMAXMTU driver flag that allows individual usbnet
    drivers to opt out of the max_mtu cap. Set this flag in qmi_wwan's
    driver_info structures to restore the previous behavior for QMI devices,
    while keeping the safety fix in place for all other usbnet drivers.
    
    Fixes: c7159e960f14 ("usbnet: limit max_mtu based on device's hard_mtu")
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/lkml/CAPh3n803k8JcBPV5qEzUB-oKzWkAs-D5CU7z=Vd_nLRCr5ZqQg@mail.gmail.com/
    Reported-by: Koen Vandeputte <koen.vandeputte@citymesh.com>
    Tested-by: Daniele Palmas <dnlplm@gmail.com>
    Signed-off-by: Laurent Vivier <lvivier@redhat.com>
    Link: https://patch.msgid.link/20260304134338.1785002-1-lvivier@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
regulator: pca9450: Correct interrupt type [+ + +]
Author: Peng Fan <peng.fan@nxp.com>
Date:   Tue Mar 10 12:25:52 2026 +0800

    regulator: pca9450: Correct interrupt type
    
    [ Upstream commit 5d0efaf47ee90ac60efae790acee3a3ed99ebf80 ]
    
    Kernel warning on i.MX8MP-EVK when doing module test:
    irq: type mismatch, failed to map hwirq-3 for gpio@30200000!
    
    Per PCA945[X] specification: The IRQ_B pin is pulled low when any unmasked
    interrupt bit status is changed and it is released high once application
    processor read INT1 register.
    
    So the interrupt should be configured as IRQF_TRIGGER_LOW, not
    IRQF_TRIGGER_FALLING.
    
    Fixes: 0935ff5f1f0a4 ("regulator: pca9450: add pca9450 pmic driver")
    Signed-off-by: Peng Fan <peng.fan@nxp.com>
    Link: https://patch.msgid.link/20260310-pca9450-irq-v1-1-36adf52c2c55@nxp.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

regulator: pca9450: Correct probed name for PCA9452 [+ + +]
Author: Peng Fan <peng.fan@nxp.com>
Date:   Tue Mar 10 12:25:53 2026 +0800

    regulator: pca9450: Correct probed name for PCA9452
    
    [ Upstream commit 21b3fb7dc19caa488d285e3c47999f7f1a179334 ]
    
    An incorrect device name was logged for PCA9452 because the dev_info()
    ternary omitted PCA9452 and fell through to "pca9450bc". Introduce a
    type_name and set it per device type so the probed message matches the
    actual PMIC. While here, make the PCA9451A case explicit.
    
    No functional changes.
    
    Fixes: 017b76fb8e5b6 ("regulator: pca9450: Add PMIC pca9452 support")
    Signed-off-by: Peng Fan <peng.fan@nxp.com>
    Link: https://patch.msgid.link/20260310-pca9450-irq-v1-2-36adf52c2c55@nxp.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

regulator: pf9453: Respect IRQ trigger settings from firmware [+ + +]
Author: Franz Schnyder <franz.schnyder@toradex.com>
Date:   Wed Feb 18 11:25:14 2026 +0100

    regulator: pf9453: Respect IRQ trigger settings from firmware
    
    commit 2d85ecd6fb0eb2fee0ffa040ec1ddea57b09bc38 upstream.
    
    The datasheet specifies, that the IRQ_B pin is pulled low when any
    unmasked interrupt bit status is changed, and it is released high once
    the application processor reads the INT1 register. As it specifies a
    level-low behavior, it should not force a falling-edge interrupt.
    
    Remove the IRQF_TRIGGER_FALLING to not force the falling-edge interrupt
    and instead rely on the flag from the device tree.
    
    Fixes: 0959b6706325 ("regulator: pf9453: add PMIC PF9453 support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Franz Schnyder <franz.schnyder@toradex.com>
    Link: https://patch.msgid.link/20260218102518.238943-2-fra.schnyder@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
remoteproc: mediatek: Unprepare SCP clock during system suspend [+ + +]
Author: Tzung-Bi Shih <tzungbi@kernel.org>
Date:   Fri Feb 6 03:30:33 2026 +0000

    remoteproc: mediatek: Unprepare SCP clock during system suspend
    
    [ Upstream commit 35c3f72a2d55dbf52f28f4ecae51c76be1acf545 ]
    
    Prior to commit d935187cfb27 ("remoteproc: mediatek: Break lock
    dependency to prepare_lock"), `scp->clk` was prepared and enabled only
    when it needs to communicate with the SCP.  The commit d935187cfb27
    moved the prepare operation to remoteproc's prepare(), keeping the clock
    prepared as long as the SCP is running.
    
    The power consumption due to the prolonged clock preparation can be
    negligible when the system is running, as SCP is designed to be a very
    power efficient processor.
    
    However, the clock remains prepared even when the system enters system
    suspend.  This prevents the underlying clock controller (and potentially
    the parent PLLs) from shutting down, which increases power consumption
    and may block the system from entering deep sleep states.
    
    Add suspend and resume callbacks.  Unprepare the clock in suspend() if
    it was active and re-prepare it in resume() to ensure the clock is
    properly disabled during system suspend, while maintaining the "always
    prepared" semantics while the system is active.  The driver doesn't
    implement .attach() callback, hence it only checks for RPROC_RUNNING.
    
    Fixes: d935187cfb27 ("remoteproc: mediatek: Break lock dependency to prepare_lock")
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
    Link: https://lore.kernel.org/r/20260206033034.3031781-1-tzungbi@kernel.org
    Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

remoteproc: qcom_wcnss: Fix reserved region mapping failure [+ + +]
Author: Rob Herring (Arm) <robh@kernel.org>
Date:   Wed Jan 28 16:02:42 2026 -0600

    remoteproc: qcom_wcnss: Fix reserved region mapping failure
    
    [ Upstream commit f9b888599418951b8229bbb28851ed4da50c58e9 ]
    
    Commit c70b9d5fdcd7 ("remoteproc: qcom: Use of_reserved_mem_region_*
    functions for "memory-region"") switched from devm_ioremap_wc() to
    devm_ioremap_resource_wc(). The difference is devm_ioremap_resource_wc()
    also requests the resource which fails. Testing of both fixed and
    dynamic reserved regions indicates that requesting the resource should
    work, so I'm not sure why it doesn't work in this case. Fix the issue by
    reverting back to devm_ioremap_wc().
    
    Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Reported-by: André Apitzsch <git@apitzsch.eu>
    Fixes: c70b9d5fdcd7 ("remoteproc: qcom: Use of_reserved_mem_region_* functions for "memory-region"")
    Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
    Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Tested-by: André Apitzsch <git@apitzsch.eu> # on BQ Aquaris M5
    Link: https://lore.kernel.org/r/20260128220243.3018526-1-robh@kernel.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
remoteproc: sysmon: Correct subsys_name_len type in QMI request [+ + +]
Author: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
Date:   Fri Feb 20 15:11:48 2026 -0600

    remoteproc: sysmon: Correct subsys_name_len type in QMI request
    
    [ Upstream commit da994db94e60f9a9411108ddf4d1836147ad4c9c ]
    
    The QMI message encoder has up until recently read a single byte (as
    elem_size == 1), but with the introduction of big endian support it's
    become apparent that this field is expected to be a full u32 -
    regardless of the size of the length in the encoded message (which is
    what elem_size specifies).
    
    The result is that the encoder now reads past the length byte and
    rejects the unreasonably large length formed when including the
    following 3 bytes from the subsys_name array.
    
    Fix this by changing to the expected type.
    
    Fixes: 1fb82ee806d1 ("remoteproc: qcom: Introduce sysmon")
    Signed-off-by: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
    Reviewed-by: Chris Lew <christopher.lew@oss.qualcomm.com>
    Link: https://lore.kernel.org/r/20260220-qmi-encode-invalid-length-v2-1-5674be35ab29@oss.qualcomm.com
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "ptdesc: remove references to folios from __pagetable_ctor() and pagetable_dtor()" [+ + +]
Author: Axel Rasmussen <axelrasmussen@google.com>
Date:   Tue Feb 24 16:24:34 2026 -0800

    Revert "ptdesc: remove references to folios from __pagetable_ctor() and pagetable_dtor()"
    
    commit 2d28ed588f8d7d0d41b0a4fad7f0d05e4bbf1797 upstream.
    
    This change swapped out mod_node_page_state for lruvec_stat_add_folio.
    But, these two APIs are not interchangeable: the lruvec version also
    increments memcg stats, in addition to "global" pgdat stats.
    
    So after this change, the "pagetables" memcg stat in memory.stat always
    yields "0", which is a userspace visible regression.
    
    I tried to look for a refactor where we add a variant of
    lruvec_stat_mod_folio which takes a pgdat and a memcg instead of a folio,
    to try to adhere to the spirit of the original patch.  But at the end of
    the day this just means we have to call folio_memcg(ptdesc_folio(ptdesc))
    anyway, which doesn't really accomplish much.
    
    This regression is visible in master as well as 6.18 stable, so CC stable
    too.
    
    Link: https://lkml.kernel.org/r/20260225002434.2953895-1-axelrasmussen@google.com
    Fixes: f0c92726e89f ("ptdesc: remove references to folios from __pagetable_ctor() and pagetable_dtor()")
    Signed-off-by: Axel Rasmussen <axelrasmussen@google.com>
    Acked-by: Shakeel Butt <shakeel.butt@linux.dev>
    Acked-by: Johannes Weiner <hannes@cmpxchg.org>
    Reviewed-by: Vishal Moola (Oracle) <vishal.moola@gmail.com>
    Cc: David Hildenbrand <david@kernel.org>
    Cc: Liam Howlett <liam.howlett@oracle.com>
    Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Mike Rapoport <rppt@kernel.org>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Roman Gushchin <roman.gushchin@linux.dev>
    Cc: Muchun Song <muchun.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>

 
Revert "tcpm: allow looking for role_sw device in the main node" [+ + +]
Author: Xu Yang <xu.yang_2@nxp.com>
Date:   Mon Mar 9 15:43:12 2026 +0800

    Revert "tcpm: allow looking for role_sw device in the main node"
    
    commit 6b275bfaa16be3fb1689fa6794e445ecd127a1b4 upstream.
    
    This reverts commit 1366cd228b0c67b60a2c0c26ef37fe9f7cfedb7f.
    
    The fwnode_usb_role_switch_get() returns NULL only if no connection is
    found, returns ERR_PTR(-EPROBE_DEFER) if connection is found but deferred
    probe is needed, or a valid pointer of usb_role_switch.
    
    When switching from a NULL check to IS_ERR_OR_NULL(), usb_role_switch_get()
    returns NULL and overwrites the ERR_PTR(-EPROBE_DEFER) returned by
    fwnode_usb_role_switch_get(). This causes the deferred probe indication to
    be lost, preventing the USB role switch from ever being retrieved.
    
    Fixes: 1366cd228b0c ("tcpm: allow looking for role_sw device in the main node")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Xu Yang <xu.yang_2@nxp.com>
    Tested-by: Arnaud Ferraris <arnaud.ferraris@collabora.com>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Link: https://patch.msgid.link/20260309074313.2809867-2-xu.yang_2@nxp.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "usb: gadget: f_ncm: align net_device lifecycle with bind/unbind" [+ + +]
Author: Kuen-Han Tsai <khtsai@google.com>
Date:   Mon Mar 9 20:04:48 2026 +0800

    Revert "usb: gadget: f_ncm: align net_device lifecycle with bind/unbind"
    
    commit 37893bc5de2460c543ec1aa8250c37a305234054 upstream.
    
    This reverts commit 56a512a9b4107079f68701e7d55da8507eb963d9.
    
    This commit is being reverted as part of a series-wide revert.
    
    By deferring the net_device allocation to the bind() phase, a single
    function instance will spawn multiple network devices if it is symlinked
    to multiple USB configurations.
    
    This causes regressions for userspace tools (like the postmarketOS DHCP
    daemon) that rely on reading the interface name (e.g., "usb0") from
    configfs. Currently, configfs returns the template "usb%d", causing the
    userspace network setup to fail.
    
    Crucially, because this patch breaks the 1:1 mapping between the
    function instance and the network device, this naming issue cannot
    simply be patched. Configfs only exposes a single 'ifname' attribute per
    instance, making it impossible to accurately report the actual interface
    name when multiple underlying network devices can exist for that single
    instance.
    
    All configurations tied to the same function instance are meant to share
    a single network device. Revert this change to restore the 1:1 mapping
    by allocating the network device at the instance level (alloc_inst).
    
    Reported-by: David Heidelberg <david@ixit.cz>
    Closes: https://lore.kernel.org/linux-usb/70b558ea-a12e-4170-9b8e-c951131249af@ixit.cz/
    Fixes: 56a512a9b410 ("usb: gadget: f_ncm: align net_device lifecycle with bind/unbind")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Kuen-Han Tsai <khtsai@google.com>
    Link: https://patch.msgid.link/20260309-f-ncm-revert-v2-3-ea2afbc7d9b2@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Revert "usb: gadget: f_ncm: Fix atomic context locking issue" [+ + +]
Author: Kuen-Han Tsai <khtsai@google.com>
Date:   Mon Mar 9 20:04:46 2026 +0800

    Revert "usb: gadget: f_ncm: Fix atomic context locking issue"
    
    commit 11199720fac2debbe718aec11e026ab3330dc80d upstream.
    
    This reverts commit 0d6c8144ca4d93253de952a5ea0028c19ed7ab68.
    
    This commit is being reverted as part of a series-wide revert.
    
    By deferring the net_device allocation to the bind() phase, a single
    function instance will spawn multiple network devices if it is symlinked
    to multiple USB configurations.
    
    This causes regressions for userspace tools (like the postmarketOS DHCP
    daemon) that rely on reading the interface name (e.g., "usb0") from
    configfs. Currently, configfs returns the template "usb%d", causing the
    userspace network setup to fail.
    
    Crucially, because this patch breaks the 1:1 mapping between the
    function instance and the network device, this naming issue cannot
    simply be patched. Configfs only exposes a single 'ifname' attribute per
    instance, making it impossible to accurately report the actual interface
    name when multiple underlying network devices can exist for that single
    instance.
    
    All configurations tied to the same function instance are meant to share
    a single network device. Revert this change to restore the 1:1 mapping
    by allocating the network device at the instance level (alloc_inst).
    
    Reported-by: David Heidelberg <david@ixit.cz>
    Closes: https://lore.kernel.org/linux-usb/70b558ea-a12e-4170-9b8e-c951131249af@ixit.cz/
    Fixes: 56a512a9b410 ("usb: gadget: f_ncm: align net_device lifecycle with bind/unbind")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Kuen-Han Tsai <khtsai@google.com>
    Link: https://patch.msgid.link/20260309-f-ncm-revert-v2-1-ea2afbc7d9b2@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Revert "usb: gadget: u_ether: Add auto-cleanup helper for freeing net_device" [+ + +]
Author: Kuen-Han Tsai <khtsai@google.com>
Date:   Mon Mar 9 20:04:49 2026 +0800

    Revert "usb: gadget: u_ether: Add auto-cleanup helper for freeing net_device"
    
    commit 46662d3a1ad40282ba9f753cccc6f909ec4468cc upstream.
    
    This reverts commit 0c0981126b99288ed354d3d414c8a5fd42ac9e25.
    
    This commit is being reverted as part of a series-wide revert.
    
    By deferring the net_device allocation to the bind() phase, a single
    function instance will spawn multiple network devices if it is symlinked
    to multiple USB configurations.
    
    This causes regressions for userspace tools (like the postmarketOS DHCP
    daemon) that rely on reading the interface name (e.g., "usb0") from
    configfs. Currently, configfs returns the template "usb%d", causing the
    userspace network setup to fail.
    
    Crucially, because this patch breaks the 1:1 mapping between the
    function instance and the network device, this naming issue cannot
    simply be patched. Configfs only exposes a single 'ifname' attribute per
    instance, making it impossible to accurately report the actual interface
    name when multiple underlying network devices can exist for that single
    instance.
    
    All configurations tied to the same function instance are meant to share
    a single network device. Revert this change to restore the 1:1 mapping
    by allocating the network device at the instance level (alloc_inst).
    
    Reported-by: David Heidelberg <david@ixit.cz>
    Closes: https://lore.kernel.org/linux-usb/70b558ea-a12e-4170-9b8e-c951131249af@ixit.cz/
    Fixes: 56a512a9b410 ("usb: gadget: f_ncm: align net_device lifecycle with bind/unbind")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Kuen-Han Tsai <khtsai@google.com>
    Link: https://patch.msgid.link/20260309-f-ncm-revert-v2-4-ea2afbc7d9b2@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Revert "usb: gadget: u_ether: add gether_opts for config caching" [+ + +]
Author: Kuen-Han Tsai <khtsai@google.com>
Date:   Mon Mar 9 20:04:51 2026 +0800

    Revert "usb: gadget: u_ether: add gether_opts for config caching"
    
    commit 3131c1aff7cdffb96239f06f98e16188cbc2083f upstream.
    
    This reverts commit e065c6a7e46c2ee9c677fdbf50035323d2de1215.
    
    This commit is being reverted as part of a series-wide revert.
    
    By deferring the net_device allocation to the bind() phase, a single
    function instance will spawn multiple network devices if it is symlinked
    to multiple USB configurations.
    
    This causes regressions for userspace tools (like the postmarketOS DHCP
    daemon) that rely on reading the interface name (e.g., "usb0") from
    configfs. Currently, configfs returns the template "usb%d", causing the
    userspace network setup to fail.
    
    Crucially, because this patch breaks the 1:1 mapping between the
    function instance and the network device, this naming issue cannot
    simply be patched. Configfs only exposes a single 'ifname' attribute per
    instance, making it impossible to accurately report the actual interface
    name when multiple underlying network devices can exist for that single
    instance.
    
    All configurations tied to the same function instance are meant to share
    a single network device. Revert this change to restore the 1:1 mapping
    by allocating the network device at the instance level (alloc_inst).
    
    Reported-by: David Heidelberg <david@ixit.cz>
    Closes: https://lore.kernel.org/linux-usb/70b558ea-a12e-4170-9b8e-c951131249af@ixit.cz/
    Fixes: 56a512a9b410 ("usb: gadget: f_ncm: align net_device lifecycle with bind/unbind")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Kuen-Han Tsai <khtsai@google.com>
    Link: https://patch.msgid.link/20260309-f-ncm-revert-v2-6-ea2afbc7d9b2@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Revert "usb: legacy: ncm: Fix NPE in gncm_bind" [+ + +]
Author: Kuen-Han Tsai <khtsai@google.com>
Date:   Mon Mar 9 20:04:47 2026 +0800

    Revert "usb: legacy: ncm: Fix NPE in gncm_bind"
    
    commit f2524c0e6ff0a5f72f1e1a32441c69d3b56430c4 upstream.
    
    This reverts commit fde0634ad9856b3943a2d1a8cc8de174a63ac840.
    
    This commit is being reverted as part of a series-wide revert.
    
    By deferring the net_device allocation to the bind() phase, a single
    function instance will spawn multiple network devices if it is symlinked
    to multiple USB configurations.
    
    This causes regressions for userspace tools (like the postmarketOS DHCP
    daemon) that rely on reading the interface name (e.g., "usb0") from
    configfs. Currently, configfs returns the template "usb%d", causing the
    userspace network setup to fail.
    
    Crucially, because this patch breaks the 1:1 mapping between the
    function instance and the network device, this naming issue cannot
    simply be patched. Configfs only exposes a single 'ifname' attribute per
    instance, making it impossible to accurately report the actual interface
    name when multiple underlying network devices can exist for that single
    instance.
    
    All configurations tied to the same function instance are meant to share
    a single network device. Revert this change to restore the 1:1 mapping
    by allocating the network device at the instance level (alloc_inst).
    
    Reported-by: David Heidelberg <david@ixit.cz>
    Closes: https://lore.kernel.org/linux-usb/70b558ea-a12e-4170-9b8e-c951131249af@ixit.cz/
    Fixes: 56a512a9b410 ("usb: gadget: f_ncm: align net_device lifecycle with bind/unbind")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Kuen-Han Tsai <khtsai@google.com>
    Link: https://patch.msgid.link/20260309-f-ncm-revert-v2-2-ea2afbc7d9b2@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rust: kbuild: allow `unused_features` [+ + +]
Author: Miguel Ojeda <ojeda@kernel.org>
Date:   Thu Mar 12 12:10:14 2026 +0100

    rust: kbuild: allow `unused_features`
    
    commit 592c61f3bfceaa29f8275696bd67c3dfad7ef72e upstream.
    
    Starting with the upcoming Rust 1.96.0 (to be released 2026-05-28),
    `rustc` introduces the new lint `unused_features` [1], which warns [2]:
    
        warning: feature `used_with_arg` is declared but not used
         --> <crate attribute>:1:93
          |
        1 | #![feature(asm_const,asm_goto,arbitrary_self_types,lint_reasons,offset_of_nested,raw_ref_op,used_with_arg)]
          |                                                                                             ^^^^^^^^^^^^^
          |
          = note: `#[warn(unused_features)]` (part of `#[warn(unused)]`) on by default
    
    The original goal of using `-Zcrate-attr` automatically was that there
    is a consistent set of features enabled and managed globally for all
    Rust kernel code (modulo exceptions like the `rust/` crated).
    
    While we could require crates to enable features manually (even if we
    still keep the `-Zallow-features=` list, i.e. removing the `-Zcrate-attr`
    list), it is not really worth making all developers worry about it just
    for a new lint.
    
    The features are expected to eventually become stable anyway (most already
    did), and thus having to remove features in every file that may use them
    is not worth it either.
    
    Thus just allow the new lint globally.
    
    The lint actually existed for a long time, which is why `rustc` does
    not complain about an unknown lint in the stable versions we support,
    but it was "disabled" years ago [3], and now it was made to work again.
    
    For extra context, the new implementation of the lint has already been
    improved to avoid linting about features that became stable thanks to
    Benno's report and the ensuing discussion [4] [5], but while that helps,
    it is still the case that we may have features enabled that are not used
    for one reason or another in a particular crate.
    
    Cc: stable@vger.kernel.org # Needed in 6.12.y and later (Rust is pinned in older LTSs).
    Link: https://github.com/rust-lang/rust/pull/152164 [1]
    Link: https://github.com/Rust-for-Linux/pin-init/pull/114 [2]
    Link: https://github.com/rust-lang/rust/issues/44232 [3]
    Link: https://github.com/rust-lang/rust/issues/153523 [4]
    Link: https://github.com/rust-lang/rust/pull/153610 [5]
    Reviewed-by: Benno Lossin <lossin@kernel.org>
    Reviewed-by: Gary Guo <gary@garyguo.net>
    Link: https://patch.msgid.link/20260312111014.74198-1-ojeda@kernel.org
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rust: kbuild: emit dep-info into $(depfile) directly [+ + +]
Author: Gary Guo <gary@garyguo.net>
Date:   Tue Feb 24 15:29:56 2026 +0800

    rust: kbuild: emit dep-info into $(depfile) directly
    
    commit e174dd14bf0beac811a5201e370ab26ce8c67f23 upstream.
    
    After commit 295d8398c67e ("kbuild: specify output names separately for
    each emission type from rustc"), the preferred pattern is to ask rustc to
    emit dependency information into $(depfile) directly, and after commit
    2185242faddd ("kbuild: remove sed commands after rustc rules"), the
    post-processing to remove comments is no longer necessary as fixdep can
    handle comments directly. Thus, emit dep-info into $(depfile) directly and
    remove the mv and sed invocation.
    
    This fixes the issue where a non-ignored .d file is emitted during
    compilation and removed shortly afterwards.
    
    [ Like Gary mentioned in Zulip, this likely happened due to rebasing
      the builds part of the old `syn` work I had. - Miguel ]
    
    Reported-by: Onur Özkan <work@onurozkan.dev>
    Closes: https://rust-for-linux.zulipchat.com/#narrow/channel/288089-General/topic/syn.20artifact.20being.20tracked.20by.20git/with/575467879
    Fixes: 7dbe46c0b11d ("rust: kbuild: add proc macro library support")
    Signed-off-by: Gary Guo <gary@garyguo.net>
    Tested-by: Onur Özkan <work@onurozkan.dev>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260224072957.214979-1-gary@garyguo.net
    [ Reworded for a couple of typos. - Miguel ]
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rust: str: make NullTerminatedFormatter public [+ + +]
Author: Alexandre Courbot <acourbot@nvidia.com>
Date:   Tue Feb 24 11:25:34 2026 +0900

    rust: str: make NullTerminatedFormatter public
    
    commit 3ac88a9948792b092a4b11323e2abd1ecbe0cc68 upstream.
    
    If `CONFIG_BLOCK` is disabled, the following warnings are displayed
    during build:
    
      warning: struct `NullTerminatedFormatter` is never constructed
        --> ../rust/kernel/str.rs:667:19
          |
      667 | pub(crate) struct NullTerminatedFormatter<'a> {
          |                   ^^^^^^^^^^^^^^^^^^^^^^^
          |
          = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
    
      warning: associated function `new` is never used
        --> ../rust/kernel/str.rs:673:19
          |
      671 | impl<'a> NullTerminatedFormatter<'a> {
          | ------------------------------------ associated function in this implementation
      672 |     /// Create a new [`Self`] instance.
      673 |     pub(crate) fn new(buffer: &'a mut [u8]) -> Option<NullTerminatedFormatter<'a>> {
    
    Fix them by making `NullTerminatedFormatter` public, as it could be
    useful for drivers anyway.
    
    Fixes: cdde7a1951ff ("rust: str: introduce `NullTerminatedFormatter`")
    Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
    Reviewed-by: Alice Ryhl <aliceryhl@google.com>
    Reviewed-by: Andreas Hindborg <a.hindborg@kernel.org>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260224-nullterminatedformatter-v1-1-5bef7b9b3d4c@nvidia.com
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rust_binder: avoid reading the written value in offsets array [+ + +]
Author: Alice Ryhl <aliceryhl@google.com>
Date:   Wed Feb 18 11:53:27 2026 +0000

    rust_binder: avoid reading the written value in offsets array
    
    commit 4cb9e13fec0de7c942f5f927469beb8e48ddd20f upstream.
    
    When sending a transaction, its offsets array is first copied into the
    target proc's vma, and then the values are read back from there. This is
    normally fine because the vma is a read-only mapping, so the target
    process cannot change the value under us.
    
    However, if the target process somehow gains the ability to write to its
    own vma, it could change the offset before it's read back, causing the
    kernel to misinterpret what the sender meant. If the sender happens to
    send a payload with a specific shape, this could in the worst case lead
    to the receiver being able to privilege escalate into the sender.
    
    The intent is that gaining the ability to change the read-only vma of
    your own process should not be exploitable, so remove this TOCTOU read
    even though it's unexploitable without another Binder bug.
    
    Cc: stable <stable@kernel.org>
    Fixes: eafedbc7c050 ("rust_binder: add Rust Binder driver")
    Reported-by: Jann Horn <jannh@google.com>
    Reviewed-by: Jann Horn <jannh@google.com>
    Signed-off-by: Alice Ryhl <aliceryhl@google.com>
    Acked-by: Liam R. Howlett <Liam.Howlett@oracle.com>
    Link: https://patch.msgid.link/20260218-binder-vma-check-v2-2-60f9d695a990@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rust_binder: call set_notification_done() without proc lock [+ + +]
Author: Alice Ryhl <aliceryhl@google.com>
Date:   Tue Feb 24 18:16:39 2026 +0000

    rust_binder: call set_notification_done() without proc lock
    
    commit 2e303f0febb65a434040774b793ba8356698802b upstream.
    
    Consider the following sequence of events on a death listener:
    1. The remote process dies and sends a BR_DEAD_BINDER message.
    2. The local process invokes the BC_CLEAR_DEATH_NOTIFICATION command.
    3. The local process then invokes the BC_DEAD_BINDER_DONE.
    Then, the kernel will reply to the BC_DEAD_BINDER_DONE command with a
    BR_CLEAR_DEATH_NOTIFICATION_DONE reply using push_work_if_looper().
    
    However, this can result in a deadlock if the current thread is not a
    looper. This is because dead_binder_done() still holds the proc lock
    during set_notification_done(), which called push_work_if_looper().
    Normally, push_work_if_looper() takes the thread lock, which is fine to
    take under the proc lock. But if the current thread is not a looper,
    then it falls back to delivering the reply to the process work queue,
    which involves taking the proc lock. Since the proc lock is already
    held, this is a deadlock.
    
    Fix this by releasing the proc lock during set_notification_done(). It
    was not intentional that it was held during that function to begin with.
    
    I don't think this ever happens in Android because BC_DEAD_BINDER_DONE
    is only invoked in response to BR_DEAD_BINDER messages, and the kernel
    always delivers BR_DEAD_BINDER to a looper. So there's no scenario where
    Android userspace will call BC_DEAD_BINDER_DONE on a non-looper thread.
    
    Cc: stable <stable@kernel.org>
    Fixes: eafedbc7c050 ("rust_binder: add Rust Binder driver")
    Reported-by: syzbot+c8287e65a57a89e7fb72@syzkaller.appspotmail.com
    Tested-by: syzbot+c8287e65a57a89e7fb72@syzkaller.appspotmail.com
    Signed-off-by: Alice Ryhl <aliceryhl@google.com>
    Reviewed-by: Gary Guo <gary@garyguo.net>
    Reviewed-by: Andreas Hindborg <a.hindborg@kernel.org>
    Link: https://patch.msgid.link/20260224-binder-dead-binder-done-proc-lock-v1-1-bbe1b8a6e74a@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rust_binder: check ownership before using vma [+ + +]
Author: Alice Ryhl <aliceryhl@google.com>
Date:   Wed Feb 18 11:53:26 2026 +0000

    rust_binder: check ownership before using vma
    
    commit 8ef2c15aeae07647f530d30f6daaf79eb801bcd1 upstream.
    
    When installing missing pages (or zapping them), Rust Binder will look
    up the vma in the mm by address, and then call vm_insert_page (or
    zap_page_range_single). However, if the vma is closed and replaced with
    a different vma at the same address, this can lead to Rust Binder
    installing pages into the wrong vma.
    
    By installing the page into a writable vma, it becomes possible to write
    to your own binder pages, which are normally read-only. Although you're
    not supposed to be able to write to those pages, the intent behind the
    design of Rust Binder is that even if you get that ability, it should not
    lead to anything bad. Unfortunately, due to another bug, that is not the
    case.
    
    To fix this, store a pointer in vm_private_data and check that the vma
    returned by vma_lookup() has the right vm_ops and vm_private_data before
    trying to use the vma. This should ensure that Rust Binder will refuse
    to interact with any other VMA. The plan is to introduce more vma
    abstractions to avoid this unsafe access to vm_ops and vm_private_data,
    but for now let's start with the simplest possible fix.
    
    C Binder performs the same check in a slightly different way: it
    provides a vm_ops->close that sets a boolean to true, then checks that
    boolean after calling vma_lookup(), but this is more fragile
    than the solution in this patch. (We probably still want to do both, but
    the vm_ops->close callback will be added later as part of the follow-up
    vma API changes.)
    
    It's still possible to remap the vma so that pages appear in the right
    vma, but at the wrong offset, but this is a separate issue and will be
    fixed when Rust Binder gets a vm_ops->close callback.
    
    Cc: stable <stable@kernel.org>
    Fixes: eafedbc7c050 ("rust_binder: add Rust Binder driver")
    Reported-by: Jann Horn <jannh@google.com>
    Reviewed-by: Jann Horn <jannh@google.com>
    Signed-off-by: Alice Ryhl <aliceryhl@google.com>
    Acked-by: Danilo Krummrich <dakr@kernel.org>
    Acked-by: Liam R. Howlett <Liam.Howlett@oracle.com>
    Link: https://patch.msgid.link/20260218-binder-vma-check-v2-1-60f9d695a990@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rust_binder: fix oneway spam detection [+ + +]
Author: Carlos Llamas <cmllamas@google.com>
Date:   Tue Feb 10 23:28:20 2026 +0000

    rust_binder: fix oneway spam detection
    
    commit 4fc87c240b8f30e22b7ebaae29d57105589e1c0b upstream.
    
    The spam detection logic in TreeRange was executed before the current
    request was inserted into the tree. So the new request was not being
    factored in the spam calculation. Fix this by moving the logic after
    the new range has been inserted.
    
    Also, the detection logic for ArrayRange was missing altogether which
    meant large spamming transactions could get away without being detected.
    Fix this by implementing an equivalent low_oneway_space() in ArrayRange.
    
    Note that I looked into centralizing this logic in RangeAllocator but
    iterating through 'state' and 'size' got a bit too complicated (for me)
    and I abandoned this effort.
    
    Cc: stable <stable@kernel.org>
    Cc: Alice Ryhl <aliceryhl@google.com>
    Fixes: eafedbc7c050 ("rust_binder: add Rust Binder driver")
    Signed-off-by: Carlos Llamas <cmllamas@google.com>
    Reviewed-by: Alice Ryhl <aliceryhl@google.com>
    Link: https://patch.msgid.link/20260210232949.3770644-1-cmllamas@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rxrpc, afs: Fix missing error pointer check after rxrpc_kernel_lookup_peer() [+ + +]
Author: Miaoqian Lin <linmq006@gmail.com>
Date:   Thu Mar 5 12:31:01 2026 +0000

    rxrpc, afs: Fix missing error pointer check after rxrpc_kernel_lookup_peer()
    
    [ Upstream commit 4245a79003adf30e67f8e9060915bd05cb31d142 ]
    
    rxrpc_kernel_lookup_peer() can also return error pointers in addition to
    NULL, so just checking for NULL is not sufficient.
    
    Fix this by:
    
     (1) Changing rxrpc_kernel_lookup_peer() to return -ENOMEM rather than NULL
         on allocation failure.
    
     (2) Making the callers in afs use IS_ERR() and PTR_ERR() to pass on the
         error code returned.
    
    Fixes: 72904d7b9bfb ("rxrpc, afs: Allow afs to pin rxrpc_peer objects")
    Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
    Co-developed-by: David Howells <dhowells@redhat.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: Simon Horman <horms@kernel.org>
    cc: linux-afs@lists.infradead.org
    Link: https://patch.msgid.link/368272.1772713861@warthog.procyon.org.uk
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/dasd: Copy detected format information to secondary device [+ + +]
Author: Stefan Haberland <sth@linux.ibm.com>
Date:   Tue Mar 10 15:23:30 2026 +0100

    s390/dasd: Copy detected format information to secondary device
    
    commit 4c527c7e030672efd788d0806d7a68972a7ba3c1 upstream.
    
    During online processing for a DASD device an IO operation is started to
    determine the format of the device. CDL format contains specifically
    sized blocks at the beginning of the disk.
    
    For a PPRC secondary device no real IO operation is possible therefore
    this IO request can not be started and this step is skipped for online
    processing of secondary devices. This is generally fine since the
    secondary is a copy of the primary device.
    
    In case of an additional partition detection that is run after a swap
    operation the format information is needed to properly drive partition
    detection IO.
    
    Currently the information is not passed leading to IO errors during
    partition detection and a wrongly detected partition table which in turn
    might lead to data corruption on the disk with the wrong partition table.
    
    Fix by passing the format information from primary to secondary device.
    
    Fixes: 413862caad6f ("s390/dasd: add copy pair swap capability")
    Cc: stable@vger.kernel.org #6.1
    Reviewed-by: Jan Hoeppner <hoeppner@linux.ibm.com>
    Acked-by: Eduard Shishkin <edward6@linux.ibm.com>
    Signed-off-by: Stefan Haberland <sth@linux.ibm.com>
    Link: https://patch.msgid.link/20260310142330.4080106-3-sth@linux.ibm.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

s390/dasd: Move quiesce state with pprc swap [+ + +]
Author: Stefan Haberland <sth@linux.ibm.com>
Date:   Tue Mar 10 15:23:29 2026 +0100

    s390/dasd: Move quiesce state with pprc swap
    
    commit 40e9cd4ae8ec43b107ed2bff422a8fa39dcf4e4b upstream.
    
    Quiesce and resume is a mechanism to suspend operations on DASD devices.
    In the context of a controlled copy pair swap operation, the quiesce
    operation is usually issued before the actual swap and a resume
    afterwards.
    
    During the swap operation, the underlying device is exchanged. Therefore,
    the quiesce flag must be moved to the secondary device to ensure a
    consistent quiesce state after the swap.
    
    The secondary device itself cannot be suspended separately because there
    is no separate block device representation for it.
    
    Fixes: 413862caad6f ("s390/dasd: add copy pair swap capability")
    Cc: stable@vger.kernel.org #6.1
    Reviewed-by: Jan Hoeppner <hoeppner@linux.ibm.com>
    Signed-off-by: Stefan Haberland <sth@linux.ibm.com>
    Link: https://patch.msgid.link/20260310142330.4080106-2-sth@linux.ibm.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
s390/pfault: Fix virtual vs physical address confusion [+ + +]
Author: Alexander Gordeev <agordeev@linux.ibm.com>
Date:   Tue Feb 24 07:41:07 2026 +0100

    s390/pfault: Fix virtual vs physical address confusion
    
    commit d879ac6756b662a085a743e76023c768c3241579 upstream.
    
    When Linux is running as guest, runs a user space process and the
    user space process accesses a page that the host has paged out,
    the guest gets a pfault interrupt and schedules a different process.
    Without this mechanism the host would have to suspend the whole
    virtual CPU until the page has been paged in.
    
    To setup the pfault interrupt the real address of parameter list
    should be passed to DIAGNOSE 0x258, but a virtual address is passed
    instead.
    
    That has a performance impact, since the pfault setup never succeeds,
    the interrupt is never delivered to a guest and the whole virtual CPU
    is suspended as result.
    
    Cc: stable@vger.kernel.org
    Fixes: c98d2ecae08f ("s390/mm: Uncouple physical vs virtual address spaces")
    Reported-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
    Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
    Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
s390/stackleak: Fix __stackleak_poison() inline assembly constraint [+ + +]
Author: Heiko Carstens <hca@linux.ibm.com>
Date:   Mon Mar 2 14:35:00 2026 +0100

    s390/stackleak: Fix __stackleak_poison() inline assembly constraint
    
    commit 674c5ff0f440a051ebf299d29a4c013133d81a65 upstream.
    
    The __stackleak_poison() inline assembly comes with a "count" operand where
    the "d" constraint is used. "count" is used with the exrl instruction and
    "d" means that the compiler may allocate any register from 0 to 15.
    
    If the compiler would allocate register 0 then the exrl instruction would
    not or the value of "count" into the executed instruction - resulting in a
    stackframe which is only partially poisoned.
    
    Use the correct "a" constraint, which excludes register 0 from register
    allocation.
    
    Fixes: 2a405f6bb3a5 ("s390/stackleak: provide fast __stackleak_poison() implementation")
    Cc: stable@vger.kernel.org
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Reviewed-by: Vasily Gorbik <gor@linux.ibm.com>
    Link: https://lore.kernel.org/r/20260302133500.1560531-4-hca@linux.ibm.com
    Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
s390/xor: Fix xor_xc_2() inline assembly constraints [+ + +]
Author: Heiko Carstens <hca@linux.ibm.com>
Date:   Mon Mar 2 14:34:58 2026 +0100

    s390/xor: Fix xor_xc_2() inline assembly constraints
    
    commit f775276edc0c505dc0f782773796c189f31a1123 upstream.
    
    The inline assembly constraints for xor_xc_2() are incorrect. "bytes",
    "p1", and "p2" are input operands, while all three of them are modified
    within the inline assembly. Given that the function consists only of this
    inline assembly it seems unlikely that this may cause any problems, however
    fix this in any case.
    
    Fixes: 2cfc5f9ce7f5 ("s390/xor: optimized xor routing using the XC instruction")
    Cc: stable@vger.kernel.org
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Reviewed-by: Vasily Gorbik <gor@linux.ibm.com>
    Link: https://lore.kernel.org/r/20260302133500.1560531-2-hca@linux.ibm.com
    Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

s390/xor: Fix xor_xc_5() inline assembly [+ + +]
Author: Vasily Gorbik <gor@linux.ibm.com>
Date:   Mon Mar 2 19:03:34 2026 +0100

    s390/xor: Fix xor_xc_5() inline assembly
    
    commit 5f25805303e201f3afaff0a90f7c7ce257468704 upstream.
    
    xor_xc_5() contains a larl 1,2f that is not used by the asm and is not
    declared as a clobber. This can corrupt a compiler-allocated value in %r1
    and lead to miscompilation. Remove the instruction.
    
    Fixes: 745600ed6965 ("s390/lib: Use exrl instead of ex in xor functions")
    Cc: stable@vger.kernel.org
    Reviewed-by: Juergen Christ <jchrist@linux.ibm.com>
    Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
    Reviewed-by: Sven Schnelle <svens@linux.ibm.com>
    Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
s390/zcrypt: Enable AUTOSEL_DOM for CCA serialnr sysfs attribute [+ + +]
Author: Harald Freudenberger <freude@linux.ibm.com>
Date:   Fri Feb 27 14:30:51 2026 +0100

    s390/zcrypt: Enable AUTOSEL_DOM for CCA serialnr sysfs attribute
    
    commit 598bbefa8032cc58b564a81d1ad68bd815c8dc0f upstream.
    
    The serialnr sysfs attribute for CCA cards when queried always
    used the default domain for sending the request down to the card.
    If for any reason exactly this default domain is disabled then
    the attribute code fails to retrieve the CCA info and the sysfs
    entry shows an empty string. Works as designed but the serial
    number is a card attribute and thus it does not matter which
    domain is used for the query. So if there are other domains on
    this card available, these could be used.
    
    So extend the code to use AUTOSEL_DOM for the domain value to
    address any online domain within the card for querying the cca
    info and thus show the serialnr as long as there is one domain
    usable regardless of the default domain setting.
    
    Fixes: 8f291ebf3270 ("s390/zcrypt: enable card/domain autoselect on ep11 cprbs")
    Suggested-by: Ingo Franzki <ifranzki@linux.ibm.com>
    Signed-off-by: Harald Freudenberger <freude@linux.ibm.com>
    Reviewed-by: Ingo Franzki <ifranzki@linux.ibm.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sched/mmcid: Avoid full tasklist walks [+ + +]
Author: Thomas Gleixner <tglx@kernel.org>
Date:   Tue Mar 10 21:29:09 2026 +0100

    sched/mmcid: Avoid full tasklist walks
    
    [ Upstream commit 192d852129b1b7c4f0ddbab95d0de1efd5ee1405 ]
    
    Chasing vfork()'ed tasks on a CID ownership mode switch requires a full
    task list walk, which is obviously expensive on large systems.
    
    Avoid that by keeping a list of tasks using a mm MMCID entity in mm::mm_cid
    and walk this list instead. This removes the proven to be flaky counting
    logic and avoids a full task list walk in the case of vfork()'ed tasks.
    
    Fixes: fbd0e71dc370 ("sched/mmcid: Provide CID ownership mode fixup functions")
    Signed-off-by: Thomas Gleixner <tglx@kernel.org>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Tested-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260310202526.183824481@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sched/mmcid: Handle vfork()/CLONE_VM correctly [+ + +]
Author: Thomas Gleixner <tglx@kernel.org>
Date:   Tue Mar 10 21:28:58 2026 +0100

    sched/mmcid: Handle vfork()/CLONE_VM correctly
    
    [ Upstream commit 28b5a1395036d6c7a6c8034d85ad3d7d365f192c ]
    
    Matthieu and Jiri reported stalls where a task endlessly loops in
    mm_get_cid() when scheduling in.
    
    It turned out that the logic which handles vfork()'ed tasks is broken. It
    is invoked when the number of tasks associated to a process is smaller than
    the number of MMCID users. It then walks the task list to find the
    vfork()'ed task, but accounts all the already processed tasks as well.
    
    If that double processing brings the number of to be handled tasks to 0,
    the walk stops and the vfork()'ed task's CID is not fixed up. As a
    consequence a subsequent schedule in fails to acquire a (transitional) CID
    and the machine stalls.
    
    Cure this by removing the accounting condition and make the fixup always
    walk the full task list if it could not find the exact number of users in
    the process' thread list.
    
    Fixes: fbd0e71dc370 ("sched/mmcid: Provide CID ownership mode fixup functions")
    Closes: https://lore.kernel.org/b24ffcb3-09d5-4e48-9070-0b69bc654281@kernel.org
    Reported-by: Matthieu Baerts <matttbe@kernel.org>
    Reported-by: Jiri Slaby <jirislaby@kernel.org>
    Signed-off-by: Thomas Gleixner <tglx@kernel.org>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Tested-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260310202526.048657665@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sched/mmcid: Prevent CID stalls due to concurrent forks [+ + +]
Author: Thomas Gleixner <tglx@kernel.org>
Date:   Tue Mar 10 21:28:53 2026 +0100

    sched/mmcid: Prevent CID stalls due to concurrent forks
    
    [ Upstream commit b2e48c429ec54715d16fefa719dd2fbded2e65be ]
    
    A newly forked task is accounted as MMCID user before the task is visible
    in the process' thread list and the global task list. This creates the
    following problem:
    
     CPU1                   CPU2
     fork()
       sched_mm_cid_fork(tnew1)
         tnew1->mm.mm_cid_users++;
         tnew1->mm_cid.cid = getcid()
    -> preemption
                            fork()
                              sched_mm_cid_fork(tnew2)
                                tnew2->mm.mm_cid_users++;
                                // Reaches the per CPU threshold
                                mm_cid_fixup_tasks_to_cpus()
                                for_each_other(current, p)
                                     ....
    
    As tnew1 is not visible yet, this fails to fix up the already allocated CID
    of tnew1. As a consequence a subsequent schedule in might fail to acquire a
    (transitional) CID and the machine stalls.
    
    Move the invocation of sched_mm_cid_fork() after the new task becomes
    visible in the thread and the task list to prevent this.
    
    This also makes it symmetrical vs. exit() where the task is removed as CID
    user before the task is removed from the thread and task lists.
    
    Fixes: fbd0e71dc370 ("sched/mmcid: Provide CID ownership mode fixup functions")
    Signed-off-by: Thomas Gleixner <tglx@kernel.org>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Tested-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260310202525.969061974@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sched/mmcid: Remove pointless preempt guard [+ + +]
Author: Thomas Gleixner <tglx@kernel.org>
Date:   Tue Mar 10 21:29:04 2026 +0100

    sched/mmcid: Remove pointless preempt guard
    
    [ Upstream commit 7574ac6e49789ddee1b1be9b2afb42b4a1b4b1f4 ]
    
    This is a leftover from the early versions of this function where it could
    be invoked without mm::mm_cid::lock held.
    
    Remove it and add lockdep asserts instead.
    
    Fixes: 653fda7ae73d ("sched/mmcid: Switch over to the new mechanism")
    Signed-off-by: Thomas Gleixner <tglx@kernel.org>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Tested-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260310202526.116363613@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched: idle: Make skipping governor callbacks more consistent [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Sat Mar 7 17:12:05 2026 +0100

    sched: idle: Make skipping governor callbacks more consistent
    
    [ Upstream commit d557640e4ce589a24dca5ca7ce3b9680f471325f ]
    
    If the cpuidle governor .select() callback is skipped because there
    is only one idle state in the cpuidle driver, the .reflect() callback
    should be skipped as well, at least for consistency (if not for
    correctness), so do it.
    
    Fixes: e5c9ffc6ae1b ("cpuidle: Skip governor when only one idle state is available")
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Reviewed-by: Christian Loehle <christian.loehle@arm.com>
    Reviewed-by: Aboorva Devarajan <aboorvad@linux.ibm.com>
    Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
    Link: https://patch.msgid.link/12857700.O9o76ZdvQC@rafael.j.wysocki
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched_ext: Disable preemption between scx_claim_exit() and kicking helper work [+ + +]
Author: Tejun Heo <tj@kernel.org>
Date:   Tue Feb 24 21:39:58 2026 -1000

    sched_ext: Disable preemption between scx_claim_exit() and kicking helper work
    
    commit 83236b2e43dba00bee5b82eb5758816b1a674f6a upstream.
    
    scx_claim_exit() atomically sets exit_kind, which prevents scx_error() from
    triggering further error handling. After claiming exit, the caller must kick
    the helper kthread work which initiates bypass mode and teardown.
    
    If the calling task gets preempted between claiming exit and kicking the
    helper work, and the BPF scheduler fails to schedule it back (since error
    handling is now disabled), the helper work is never queued, bypass mode
    never activates, tasks stop being dispatched, and the system wedges.
    
    Disable preemption across scx_claim_exit() and the subsequent work kicking
    in all callers - scx_disable() and scx_vexit(). Add
    lockdep_assert_preemption_disabled() to scx_claim_exit() to enforce the
    requirement.
    
    Fixes: f0e1a0643a59 ("sched_ext: Implement BPF extensible scheduler class")
    Cc: stable@vger.kernel.org # v6.12+
    Reviewed-by: Andrea Righi <arighi@nvidia.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

sched_ext: Fix enqueue_task_scx() truncation of upper enqueue flags [+ + +]
Author: Tejun Heo <tj@kernel.org>
Date:   Sat Mar 7 04:53:32 2026 -1000

    sched_ext: Fix enqueue_task_scx() truncation of upper enqueue flags
    
    commit 57ccf5ccdc56954f2a91a7f66684fd31c566bde5 upstream.
    
    enqueue_task_scx() takes int enq_flags from the sched_class interface.
    SCX enqueue flags starting at bit 32 (SCX_ENQ_PREEMPT and above) are
    silently truncated when passed through activate_task(). extra_enq_flags
    was added as a workaround - storing high bits in rq->scx.extra_enq_flags
    and OR-ing them back in enqueue_task_scx(). However, the OR target is
    still the int parameter, so the high bits are lost anyway.
    
    The current impact is limited as the only affected flag is SCX_ENQ_PREEMPT
    which is informational to the BPF scheduler - its loss means the scheduler
    doesn't know about preemption but doesn't cause incorrect behavior.
    
    Fix by renaming the int parameter to core_enq_flags and introducing a
    u64 enq_flags local that merges both sources. All downstream functions
    already take u64 enq_flags.
    
    Fixes: f0e1a0643a59 ("sched_ext: Implement BPF extensible scheduler class")
    Cc: stable@vger.kernel.org # v6.12+
    Acked-by: Andrea Righi <arighi@nvidia.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

sched_ext: Fix starvation of scx_enable() under fair-class saturation [+ + +]
Author: Tejun Heo <tj@kernel.org>
Date:   Tue Mar 3 01:01:15 2026 -1000

    sched_ext: Fix starvation of scx_enable() under fair-class saturation
    
    commit b06ccbabe2506fd70b9167a644978b049150224a upstream.
    
    During scx_enable(), the READY -> ENABLED task switching loop changes the
    calling thread's sched_class from fair to ext. Since fair has higher
    priority than ext, saturating fair-class workloads can indefinitely starve
    the enable thread, hanging the system. This was introduced when the enable
    path switched from preempt_disable() to scx_bypass() which doesn't protect
    against fair-class starvation. Note that the original preempt_disable()
    protection wasn't complete either - in partial switch modes, the calling
    thread could still be starved after preempt_enable() as it may have been
    switched to ext class.
    
    Fix it by offloading the enable body to a dedicated system-wide RT
    (SCHED_FIFO) kthread which cannot be starved by either fair or ext class
    tasks. scx_enable() lazily creates the kthread on first use and passes the
    ops pointer through a struct scx_enable_cmd containing the kthread_work,
    then synchronously waits for completion.
    
    The workfn runs on a different kthread from sch->helper (which runs
    disable_work), so it can safely flush disable_work on the error path
    without deadlock.
    
    Fixes: 8c2090c504e9 ("sched_ext: Initialize in bypass mode")
    Cc: stable@vger.kernel.org # v6.12+
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

sched_ext: Remove redundant css_put() in scx_cgroup_init() [+ + +]
Author: Cheng-Yang Chou <yphbchou0911@gmail.com>
Date:   Tue Mar 3 22:35:30 2026 +0800

    sched_ext: Remove redundant css_put() in scx_cgroup_init()
    
    commit 1336b579f6079fb8520be03624fcd9ba443c930b upstream.
    
    The iterator css_for_each_descendant_pre() walks the cgroup hierarchy
    under cgroup_lock(). It does not increment the reference counts on
    yielded css structs.
    
    According to the cgroup documentation, css_put() should only be used
    to release a reference obtained via css_get() or css_tryget_online().
    Since the iterator does not use either of these to acquire a reference,
    calling css_put() in the error path of scx_cgroup_init() causes a
    refcount underflow.
    
    Remove the unbalanced css_put() to prevent a potential Use-After-Free
    (UAF) vulnerability.
    
    Fixes: 819513666966 ("sched_ext: Add cgroup support")
    Cc: stable@vger.kernel.org # v6.12+
    Signed-off-by: Cheng-Yang Chou <yphbchou0911@gmail.com>
    Reviewed-by: Andrea Righi <arighi@nvidia.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

sched_ext: Use WRITE_ONCE() for the write side of scx_enable helper pointer [+ + +]
Author: zhidao su <suzhidao@xiaomi.com>
Date:   Mon Mar 9 10:46:12 2026 +0800

    sched_ext: Use WRITE_ONCE() for the write side of scx_enable helper pointer
    
    commit 2fcfe5951eb2e8440fc5e1dd6ea977336ff83a1d upstream.
    
    scx_enable() uses double-checked locking to lazily initialize a static
    kthread_worker pointer. The fast path reads helper locklessly:
    
        if (!READ_ONCE(helper)) {          // lockless read -- no helper_mutex
    
    The write side initializes helper under helper_mutex, but previously
    used a plain assignment:
    
            helper = kthread_run_worker(0, "scx_enable_helper");
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                     plain write -- KCSAN data race with READ_ONCE() above
    
    Since READ_ONCE() on the fast path and the plain write on the
    initialization path access the same variable without a common lock,
    they constitute a data race. KCSAN requires that all sides of a
    lock-free access use READ_ONCE()/WRITE_ONCE() consistently.
    
    Use a temporary variable to stage the result of kthread_run_worker(),
    and only WRITE_ONCE() into helper after confirming the pointer is
    valid. This avoids a window where a concurrent caller on the fast path
    could observe an ERR pointer via READ_ONCE(helper) before the error
    check completes.
    
    Fixes: b06ccbabe250 ("sched_ext: Fix starvation of scx_enable() under fair-class saturation")
    Signed-off-by: zhidao su <suzhidao@xiaomi.com>
    Acked-by: Andrea Righi <arighi@nvidia.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
scsi: core: Fix error handling for scsi_alloc_sdev() [+ + +]
Author: Junxiao Bi <junxiao.bi@oracle.com>
Date:   Wed Mar 4 08:46:03 2026 -0800

    scsi: core: Fix error handling for scsi_alloc_sdev()
    
    commit 4ce7ada40c008fa21b7e52ab9d04e8746e2e9325 upstream.
    
    After scsi_sysfs_device_initialize() was called, error paths must call
    __scsi_remove_device().
    
    Fixes: 1ac22c8eae81 ("scsi: core: Fix refcount leak for tagset_refcnt")
    Cc: stable@vger.kernel.org
    Signed-off-by: Junxiao Bi <junxiao.bi@oracle.com>
    Reviewed-by: John Garry <john.g.garry@oracle.com>
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Link: https://patch.msgid.link/20260304164603.51528-1-junxiao.bi@oracle.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: hisi_sas: Fix NULL pointer exception during user_scan() [+ + +]
Author: Xingui Yang <yangxingui@huawei.com>
Date:   Thu Mar 5 14:40:39 2026 +0800

    scsi: hisi_sas: Fix NULL pointer exception during user_scan()
    
    [ Upstream commit 8ddc0c26916574395447ebf4cff684314f6873a9 ]
    
    user_scan() invokes updated sas_user_scan() for channel 0, and if
    successful, iteratively scans remaining channels (1 to shost->max_channel)
    via scsi_scan_host_selected() in commit 37c4e72b0651 ("scsi: Fix
    sas_user_scan() to handle wildcard and multi-channel scans"). However,
    hisi_sas supports only one channel, and the current value of max_channel is
    1. sas_user_scan() for channel 1 will trigger the following NULL pointer
    exception:
    
    [  441.554662] Unable to handle kernel NULL pointer dereference at virtual address 00000000000008b0
    [  441.554699] Mem abort info:
    [  441.554710]   ESR = 0x0000000096000004
    [  441.554718]   EC = 0x25: DABT (current EL), IL = 32 bits
    [  441.554723]   SET = 0, FnV = 0
    [  441.554726]   EA = 0, S1PTW = 0
    [  441.554730]   FSC = 0x04: level 0 translation fault
    [  441.554735] Data abort info:
    [  441.554737]   ISV = 0, ISS = 0x00000004, ISS2 = 0x00000000
    [  441.554742]   CM = 0, WnR = 0, TnD = 0, TagAccess = 0
    [  441.554747]   GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
    [  441.554752] user pgtable: 4k pages, 48-bit VAs, pgdp=00000828377a6000
    [  441.554757] [00000000000008b0] pgd=0000000000000000, p4d=0000000000000000
    [  441.554769] Internal error: Oops: 0000000096000004 [#1]  SMP
    [  441.629589] Modules linked in: arm_spe_pmu arm_smmuv3_pmu tpm_tis_spi hisi_uncore_sllc_pmu hisi_uncore_pa_pmu hisi_uncore_l3c_pmu hisi_uncore_hha_pmu hisi_uncore_ddrc_pmu hisi_uncore_cpa_pmu hns3_pmu hisi_ptt hisi_pcie_pmu tpm_tis_core spidev spi_hisi_sfc_v3xx hisi_uncore_pmu spi_dw_mmio fuse hclge hclge_common hisi_sec2 hisi_hpre hisi_zip hisi_qm hns3 hisi_sas_v3_hw sm3_ce sbsa_gwdt hnae3 hisi_sas_main uacce hisi_dma i2c_hisi dm_mirror dm_region_hash dm_log dm_mod
    [  441.670819] CPU: 46 UID: 0 PID: 6994 Comm: bash Kdump: loaded Not tainted 7.0.0-rc2+ #84 PREEMPT
    [  441.691327] pstate: 81400009 (Nzcv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--)
    [  441.698277] pc : sas_find_dev_by_rphy+0x44/0x118
    [  441.702896] lr : sas_find_dev_by_rphy+0x3c/0x118
    [  441.707502] sp : ffff80009abbba40
    [  441.710805] x29: ffff80009abbba40 x28: ffff082819a40008 x27: ffff082810c37c08
    [  441.717930] x26: ffff082810c37c28 x25: ffff082819a40290 x24: ffff082810c37c00
    [  441.725054] x23: 0000000000000000 x22: 0000000000000001 x21: ffff082819a40000
    [  441.732179] x20: ffff082819a40290 x19: 0000000000000000 x18: 0000000000000020
    [  441.739304] x17: 0000000000000000 x16: ffffb5dad6bda690 x15: 00000000ffffffff
    [  441.746428] x14: ffff082814c3b26c x13: 00000000ffffffff x12: ffff082814c3b26a
    [  441.753553] x11: 00000000000000c0 x10: 000000000000003a x9 : ffffb5dad5ea94f4
    [  441.760678] x8 : 000000000000003a x7 : ffff80009abbbab0 x6 : 0000000000000030
    [  441.767802] x5 : 0000000000000000 x4 : 0000000000000000 x3 : 0000000000000000
    [  441.774926] x2 : ffff08280f35a300 x1 : ffffb5dad7127180 x0 : 0000000000000000
    [  441.782053] Call trace:
    [  441.784488]  sas_find_dev_by_rphy+0x44/0x118 (P)
    [  441.789095]  sas_target_alloc+0x24/0xb0
    [  441.792920]  scsi_alloc_target+0x290/0x330
    [  441.797010]  __scsi_scan_target+0x88/0x258
    [  441.801096]  scsi_scan_channel+0x74/0xb8
    [  441.805008]  scsi_scan_host_selected+0x170/0x188
    [  441.809615]  sas_user_scan+0xfc/0x148
    [  441.813267]  store_scan+0x10c/0x180
    [  441.816743]  dev_attr_store+0x20/0x40
    [  441.820398]  sysfs_kf_write+0x84/0xa8
    [  441.824054]  kernfs_fop_write_iter+0x130/0x1c8
    [  441.828487]  vfs_write+0x2c0/0x370
    [  441.831880]  ksys_write+0x74/0x118
    [  441.835271]  __arm64_sys_write+0x24/0x38
    [  441.839182]  invoke_syscall+0x50/0x120
    [  441.842919]  el0_svc_common.constprop.0+0xc8/0xf0
    [  441.847611]  do_el0_svc+0x24/0x38
    [  441.850913]  el0_svc+0x38/0x158
    [  441.854043]  el0t_64_sync_handler+0xa0/0xe8
    [  441.858214]  el0t_64_sync+0x1ac/0x1b0
    [  441.861865] Code: aa1303e0 97ff70a8 34ffff80 d10a4273 (f9445a75)
    [  441.867946] ---[ end trace 0000000000000000 ]---
    
    Therefore, set max_channel to 0.
    
    Fixes: e21fe3a52692 ("scsi: hisi_sas: add initialisation for v3 pci-based controller")
    Signed-off-by: Xingui Yang <yangxingui@huawei.com>
    Signed-off-by: Yihang Li <liyihang9@huawei.com>
    Link: https://patch.msgid.link/20260305064039.4096775-1-liyihang9@huawei.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: mpi3mr: Add NULL checks when resetting request and reply queues [+ + +]
Author: Ranjan Kumar <ranjan.kumar@broadcom.com>
Date:   Thu Feb 12 12:30:26 2026 +0530

    scsi: mpi3mr: Add NULL checks when resetting request and reply queues
    
    [ Upstream commit fa96392ebebc8fade2b878acb14cce0f71016503 ]
    
    The driver encountered a crash during resource cleanup when the reply and
    request queues were NULL due to freed memory.  This issue occurred when the
    creation of reply or request queues failed, and the driver freed the memory
    first, but attempted to mem set the content of the freed memory, leading to
    a system crash.
    
    Add NULL pointer checks for reply and request queues before accessing the
    reply/request memory during cleanup
    
    Signed-off-by: Ranjan Kumar <ranjan.kumar@broadcom.com>
    Link: https://patch.msgid.link/20260212070026.30263-1-ranjan.kumar@broadcom.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: qla2xxx: Completely fix fcport double free [+ + +]
Author: Vladimir Riabchun <ferr.lambarginio@gmail.com>
Date:   Tue Feb 10 11:08:22 2026 +0100

    scsi: qla2xxx: Completely fix fcport double free
    
    [ Upstream commit c0b7da13a04bd70ef6070bfb9ea85f582294560a ]
    
    In qla24xx_els_dcmd_iocb() sp->free is set to qla2x00_els_dcmd_sp_free().
    When an error happens, this function is called by qla2x00_sp_release(),
    when kref_put() releases the first and the last reference.
    
    qla2x00_els_dcmd_sp_free() frees fcport by calling qla2x00_free_fcport().
    Doing it one more time after kref_put() is a bad idea.
    
    Fixes: 82f522ae0d97 ("scsi: qla2xxx: Fix double free of fcport")
    Fixes: 4895009c4bb7 ("scsi: qla2xxx: Prevent command send on chip reset")
    Signed-off-by: Vladimir Riabchun <ferr.lambarginio@gmail.com>
    Signed-off-by: Farhat Abbas <fabbas@cloudlinux.com>
    Link: https://patch.msgid.link/aYsDln9NFQQsPDgg@vova-pc
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: ses: Fix devices attaching to different hosts [+ + +]
Author: Tomas Henzl <thenzl@redhat.com>
Date:   Tue Feb 10 20:18:50 2026 +0100

    scsi: ses: Fix devices attaching to different hosts
    
    [ Upstream commit 70ca8caa96ce473647054f5c7b9dab5423902402 ]
    
    On a multipath SAS system some devices don't end up with correct symlinks
    from the SCSI device to its enclosure. Some devices even have enclosure
    links pointing to enclosures attached to different SCSI hosts.
    
    ses_match_to_enclosure() calls enclosure_for_each_device() which iterates
    over all enclosures on the system, not just enclosures attached to the
    current SCSI host.
    
    Replace the iteration with a direct call to ses_enclosure_find_by_addr().
    
    Reviewed-by: David Jeffery <djeffery@redhat.com>
    Signed-off-by: Tomas Henzl <thenzl@redhat.com>
    Link: https://patch.msgid.link/20260210191850.36784-1-thenzl@redhat.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: storvsc: Fix scheduling while atomic on PREEMPT_RT [+ + +]
Author: Jan Kiszka <jan.kiszka@siemens.com>
Date:   Thu Jan 29 15:30:39 2026 +0100

    scsi: storvsc: Fix scheduling while atomic on PREEMPT_RT
    
    [ Upstream commit 57297736c08233987e5d29ce6584c6ca2a831b12 ]
    
    This resolves the follow splat and lock-up when running with PREEMPT_RT
    enabled on Hyper-V:
    
    [  415.140818] BUG: scheduling while atomic: stress-ng-iomix/1048/0x00000002
    [  415.140822] INFO: lockdep is turned off.
    [  415.140823] Modules linked in: intel_rapl_msr intel_rapl_common intel_uncore_frequency_common intel_pmc_core pmt_telemetry pmt_discovery pmt_class intel_pmc_ssram_telemetry intel_vsec ghash_clmulni_intel aesni_intel rapl binfmt_misc nls_ascii nls_cp437 vfat fat snd_pcm hyperv_drm snd_timer drm_client_lib drm_shmem_helper snd sg soundcore drm_kms_helper pcspkr hv_balloon hv_utils evdev joydev drm configfs efi_pstore nfnetlink vsock_loopback vmw_vsock_virtio_transport_common hv_sock vmw_vsock_vmci_transport vsock vmw_vmci efivarfs autofs4 ext4 crc16 mbcache jbd2 sr_mod sd_mod cdrom hv_storvsc serio_raw hid_generic scsi_transport_fc hid_hyperv scsi_mod hid hv_netvsc hyperv_keyboard scsi_common
    [  415.140846] Preemption disabled at:
    [  415.140847] [<ffffffffc0656171>] storvsc_queuecommand+0x2e1/0xbe0 [hv_storvsc]
    [  415.140854] CPU: 8 UID: 0 PID: 1048 Comm: stress-ng-iomix Not tainted 6.19.0-rc7 #30 PREEMPT_{RT,(full)}
    [  415.140856] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS Hyper-V UEFI Release v4.1 09/04/2024
    [  415.140857] Call Trace:
    [  415.140861]  <TASK>
    [  415.140861]  ? storvsc_queuecommand+0x2e1/0xbe0 [hv_storvsc]
    [  415.140863]  dump_stack_lvl+0x91/0xb0
    [  415.140870]  __schedule_bug+0x9c/0xc0
    [  415.140875]  __schedule+0xdf6/0x1300
    [  415.140877]  ? rtlock_slowlock_locked+0x56c/0x1980
    [  415.140879]  ? rcu_is_watching+0x12/0x60
    [  415.140883]  schedule_rtlock+0x21/0x40
    [  415.140885]  rtlock_slowlock_locked+0x502/0x1980
    [  415.140891]  rt_spin_lock+0x89/0x1e0
    [  415.140893]  hv_ringbuffer_write+0x87/0x2a0
    [  415.140899]  vmbus_sendpacket_mpb_desc+0xb6/0xe0
    [  415.140900]  ? rcu_is_watching+0x12/0x60
    [  415.140902]  storvsc_queuecommand+0x669/0xbe0 [hv_storvsc]
    [  415.140904]  ? HARDIRQ_verbose+0x10/0x10
    [  415.140908]  ? __rq_qos_issue+0x28/0x40
    [  415.140911]  scsi_queue_rq+0x760/0xd80 [scsi_mod]
    [  415.140926]  __blk_mq_issue_directly+0x4a/0xc0
    [  415.140928]  blk_mq_issue_direct+0x87/0x2b0
    [  415.140931]  blk_mq_dispatch_queue_requests+0x120/0x440
    [  415.140933]  blk_mq_flush_plug_list+0x7a/0x1a0
    [  415.140935]  __blk_flush_plug+0xf4/0x150
    [  415.140940]  __submit_bio+0x2b2/0x5c0
    [  415.140944]  ? submit_bio_noacct_nocheck+0x272/0x360
    [  415.140946]  submit_bio_noacct_nocheck+0x272/0x360
    [  415.140951]  ext4_read_bh_lock+0x3e/0x60 [ext4]
    [  415.140995]  ext4_block_write_begin+0x396/0x650 [ext4]
    [  415.141018]  ? __pfx_ext4_da_get_block_prep+0x10/0x10 [ext4]
    [  415.141038]  ext4_da_write_begin+0x1c4/0x350 [ext4]
    [  415.141060]  generic_perform_write+0x14e/0x2c0
    [  415.141065]  ext4_buffered_write_iter+0x6b/0x120 [ext4]
    [  415.141083]  vfs_write+0x2ca/0x570
    [  415.141087]  ksys_write+0x76/0xf0
    [  415.141089]  do_syscall_64+0x99/0x1490
    [  415.141093]  ? rcu_is_watching+0x12/0x60
    [  415.141095]  ? finish_task_switch.isra.0+0xdf/0x3d0
    [  415.141097]  ? rcu_is_watching+0x12/0x60
    [  415.141098]  ? lock_release+0x1f0/0x2a0
    [  415.141100]  ? rcu_is_watching+0x12/0x60
    [  415.141101]  ? finish_task_switch.isra.0+0xe4/0x3d0
    [  415.141103]  ? rcu_is_watching+0x12/0x60
    [  415.141104]  ? __schedule+0xb34/0x1300
    [  415.141106]  ? hrtimer_try_to_cancel+0x1d/0x170
    [  415.141109]  ? do_nanosleep+0x8b/0x160
    [  415.141111]  ? hrtimer_nanosleep+0x89/0x100
    [  415.141114]  ? __pfx_hrtimer_wakeup+0x10/0x10
    [  415.141116]  ? xfd_validate_state+0x26/0x90
    [  415.141118]  ? rcu_is_watching+0x12/0x60
    [  415.141120]  ? do_syscall_64+0x1e0/0x1490
    [  415.141121]  ? do_syscall_64+0x1e0/0x1490
    [  415.141123]  ? rcu_is_watching+0x12/0x60
    [  415.141124]  ? do_syscall_64+0x1e0/0x1490
    [  415.141125]  ? do_syscall_64+0x1e0/0x1490
    [  415.141127]  ? irqentry_exit+0x140/0x7e0
    [  415.141129]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    get_cpu() disables preemption while the spinlock hv_ringbuffer_write is
    using is converted to an rt-mutex under PREEMPT_RT.
    
    Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
    Tested-by: Florian Bezdeka <florian.bezdeka@siemens.com>
    Reviewed-by: Michael Kelley <mhklinux@outlook.com>
    Tested-by: Michael Kelley <mhklinux@outlook.com>
    Link: https://patch.msgid.link/0c7fb5cd-fb21-4760-8593-e04bade84744@siemens.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: ufs: core: Fix possible NULL pointer dereference in ufshcd_add_command_trace() [+ + +]
Author: Peter Wang <peter.wang@mediatek.com>
Date:   Mon Feb 23 14:56:09 2026 +0800

    scsi: ufs: core: Fix possible NULL pointer dereference in ufshcd_add_command_trace()
    
    [ Upstream commit 30df81f2228d65bddf492db3929d9fcaffd38fc5 ]
    
    The kernel log indicates a crash in ufshcd_add_command_trace, due to a NULL
    pointer dereference when accessing hwq->id.  This can happen if
    ufshcd_mcq_req_to_hwq() returns NULL.
    
    This patch adds a NULL check for hwq before accessing its id field to
    prevent a kernel crash.
    
    Kernel log excerpt:
    [<ffffffd5d192dc4c>] notify_die+0x4c/0x8c
    [<ffffffd5d1814e58>] __die+0x60/0xb0
    [<ffffffd5d1814d64>] die+0x4c/0xe0
    [<ffffffd5d181575c>] die_kernel_fault+0x74/0x88
    [<ffffffd5d1864db4>] __do_kernel_fault+0x314/0x318
    [<ffffffd5d2a3cdf8>] do_page_fault+0xa4/0x5f8
    [<ffffffd5d2a3cd34>] do_translation_fault+0x34/0x54
    [<ffffffd5d1864524>] do_mem_abort+0x50/0xa8
    [<ffffffd5d2a297dc>] el1_abort+0x3c/0x64
    [<ffffffd5d2a29718>] el1h_64_sync_handler+0x44/0xcc
    [<ffffffd5d181133c>] el1h_64_sync+0x80/0x88
    [<ffffffd5d255c1dc>] ufshcd_add_command_trace+0x23c/0x320
    [<ffffffd5d255bad8>] ufshcd_compl_one_cqe+0xa4/0x404
    [<ffffffd5d2572968>] ufshcd_mcq_poll_cqe_lock+0xac/0x104
    [<ffffffd5d11c7460>] ufs_mtk_mcq_intr+0x54/0x74 [ufs_mediatek_mod]
    [<ffffffd5d19ab92c>] __handle_irq_event_percpu+0xc8/0x348
    [<ffffffd5d19abca8>] handle_irq_event+0x3c/0xa8
    [<ffffffd5d19b1f0c>] handle_fasteoi_irq+0xf8/0x294
    [<ffffffd5d19aa778>] generic_handle_domain_irq+0x54/0x80
    [<ffffffd5d18102bc>] gic_handle_irq+0x1d4/0x330
    [<ffffffd5d1838210>] call_on_irq_stack+0x44/0x68
    [<ffffffd5d183af30>] do_interrupt_handler+0x78/0xd8
    [<ffffffd5d2a29c00>] el1_interrupt+0x48/0xa8
    [<ffffffd5d2a29ba8>] el1h_64_irq_handler+0x14/0x24
    [<ffffffd5d18113c4>] el1h_64_irq+0x80/0x88
    [<ffffffd5d2527fb4>] arch_local_irq_enable+0x4/0x1c
    [<ffffffd5d25282e4>] cpuidle_enter+0x34/0x54
    [<ffffffd5d195a678>] do_idle+0x1dc/0x2f8
    [<ffffffd5d195a7c4>] cpu_startup_entry+0x30/0x3c
    [<ffffffd5d18155c4>] secondary_start_kernel+0x134/0x1ac
    [<ffffffd5d18640bc>] __secondary_switched+0xc4/0xcc
    
    Signed-off-by: Peter Wang <peter.wang@mediatek.com>
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Link: https://patch.msgid.link/20260223065657.2432447-1-peter.wang@mediatek.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: ufs: core: Fix SError in ufshcd_rtc_work() during UFS suspend [+ + +]
Author: Wang Shuaiwei <wangshuaiwei1@xiaomi.com>
Date:   Sat Mar 7 11:51:28 2026 +0800

    scsi: ufs: core: Fix SError in ufshcd_rtc_work() during UFS suspend
    
    [ Upstream commit b0bd84c39289ef6a6c3827dd52c875659291970a ]
    
    In __ufshcd_wl_suspend(), cancel_delayed_work_sync() is called to cancel
    the UFS RTC work, but it is placed after ufshcd_vops_suspend(hba, pm_op,
    POST_CHANGE). This creates a race condition where ufshcd_rtc_work() can
    still be running while ufshcd_vops_suspend() is executing. When
    UFSHCD_CAP_CLK_GATING is not supported, the condition
    !hba->clk_gating.active_reqs is always true, causing ufshcd_update_rtc()
    to be executed. Since ufshcd_vops_suspend() typically performs clock
    gating operations, executing ufshcd_update_rtc() at that moment triggers
    an SError. The kernel panic trace is as follows:
    
    Kernel panic - not syncing: Asynchronous SError Interrupt
    Call trace:
     dump_backtrace+0xec/0x128
     show_stack+0x18/0x28
     dump_stack_lvl+0x40/0xa0
     dump_stack+0x18/0x24
     panic+0x148/0x374
     nmi_panic+0x3c/0x8c
     arm64_serror_panic+0x64/0x8c
     do_serror+0xc4/0xc8
     el1h_64_error_handler+0x34/0x4c
     el1h_64_error+0x68/0x6c
     el1_interrupt+0x20/0x58
     el1h_64_irq_handler+0x18/0x24
     el1h_64_irq+0x68/0x6c
     ktime_get+0xc4/0x12c
     ufshcd_mcq_sq_stop+0x4c/0xec
     ufshcd_mcq_sq_cleanup+0x64/0x1dc
     ufshcd_clear_cmd+0x38/0x134
     ufshcd_issue_dev_cmd+0x298/0x4d0
     ufshcd_exec_dev_cmd+0x1a4/0x1c4
     ufshcd_query_attr+0xbc/0x19c
     ufshcd_rtc_work+0x10c/0x1c8
     process_scheduled_works+0x1c4/0x45c
     worker_thread+0x32c/0x3e8
     kthread+0x120/0x1d8
     ret_from_fork+0x10/0x20
    
    Fix this by moving cancel_delayed_work_sync() before the call to
    ufshcd_vops_suspend(hba, pm_op, PRE_CHANGE), ensuring the UFS RTC work is
    fully completed or cancelled at that point.
    
    Cc: Bean Huo <beanhuo@iokpp.de>
    Fixes: 6bf999e0eb41 ("scsi: ufs: core: Add UFS RTC support")
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Signed-off-by: Wang Shuaiwei <wangshuaiwei1@xiaomi.com>
    Link: https://patch.msgid.link/20260307035128.3419687-1-wangshuaiwei1@xiaomi.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: ufs: core: Fix shift out of bounds when MAXQ=32 [+ + +]
Author: wangshuaiwei <wangshuaiwei1@xiaomi.com>
Date:   Tue Feb 24 14:32:28 2026 +0800

    scsi: ufs: core: Fix shift out of bounds when MAXQ=32
    
    [ Upstream commit 2f38fd99c0004676d835ae96ac4f3b54edc02c82 ]
    
    According to JESD223F, the maximum number of queues (MAXQ) is 32. When MCQ
    is enabled and ESI is disabled, nr_hw_queues=32 causes a shift overflow
    problem.
    
    Fix this by using 64-bit intermediate values to handle the nr_hw_queues=32
    case safely.
    
    Signed-off-by: wangshuaiwei <wangshuaiwei1@xiaomi.com>
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Link: https://patch.msgid.link/20260224063228.50112-1-wangshuaiwei1@xiaomi.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: ufs: core: Reset urgent_bkops_lvl to allow runtime PM power mode [+ + +]
Author: Won Jung <wone.jung@samsung.com>
Date:   Wed Feb 11 15:01:05 2026 +0900

    scsi: ufs: core: Reset urgent_bkops_lvl to allow runtime PM power mode
    
    [ Upstream commit 5b313760059c9df7d60aba7832279bcb81b4aec0 ]
    
    Ensures that UFS Runtime PM can achieve power saving after System PM
    suspend by resetting hba->urgent_bkops_lvl. Also modify the
    ufshcd_bkops_exception_event_handler to avoid setting urgent_bkops_lvl when
    status is 0, which helps maintain optimal power management.
    
    On UFS devices supporting UFSHCD_CAP_AUTO_BKOPS_SUSPEND, a BKOPS exception
    event can lead to a situation where UFS Runtime PM can't enter low-power
    mode states even after the BKOPS exception has been resolved.
    
    BKOPS exception with bkops status 0 occurs, the driver logs:
    
     "ufshcd_bkops_exception_event_handler: device raised urgent BKOPS exception for bkops status 0"
    
    When a BKOPS exception occurs, ufshcd_bkops_exception_event_handler() reads
    the BKOPS status and sets hba->urgent_bkops_lvl to BKOPS_STATUS_NO_OP(0).
    This allows the device to perform Runtime PM without changing the UFS power
    mode.  (__ufshcd_wl_suspend(hba, UFS_RUNTIME_PM))
    
    During system PM suspend, ufshcd_disable_auto_bkops() is called, disabling
    auto bkops. After UFS System PM Resume, when runtime PM attempts to suspend
    again, ufshcd_urgent_bkops() is invoked. Since hba->urgent_bkops_lvl
    remains at BKOPS_STATUS_NO_OP(0), ufshcd_enable_auto_bkops() is triggered.
    
    However, in ufshcd_bkops_ctrl(), the driver compares the current BKOPS
    status with hba->urgent_bkops_lvl, and only enables auto bkops if
    curr_status >= hba->urgent_bkops_lvl.  Since both values are 0, the
    condition is met
    
    As a result, __ufshcd_wl_suspend(hba, UFS_RUNTIME_PM) skips power mode
    transitions and remains in an active state, preventing power saving even
    though no urgent BKOPS condition exists.
    
    Signed-off-by: Won Jung <wone.jung@samsung.com>
    Reviewed-by: Peter Wang <peter.wang@mediatek.com>
    Link: https://patch.msgid.link/1891546521.01770806581968.JavaMail.epsvc@epcpadp2new
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests: fix mntns iteration selftests [+ + +]
Author: Christian Brauner <brauner@kernel.org>
Date:   Thu Feb 26 14:50:12 2026 +0100

    selftests: fix mntns iteration selftests
    
    commit 4c7b2ec23cc5d880e3ffe35e8c2aad686b67723a upstream.
    
    Now that we changed permission checking make sure that we reflect that
    in the selftests.
    
    Link: https://patch.msgid.link/20260226-work-visibility-fixes-v1-4-d2c2853313bd@kernel.org
    Fixes: 9d87b1067382 ("selftests: add tests for mntns iteration")
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Cc: stable@kernel.org # v6.14+
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
serial: caif: hold tty->link reference in ldisc_open and ser_release [+ + +]
Author: Shuangpeng Bai <shuangpeng.kernel@gmail.com>
Date:   Thu Mar 5 22:40:06 2026 -0500

    serial: caif: hold tty->link reference in ldisc_open and ser_release
    
    [ Upstream commit 288598d80a068a0e9281de35bcb4ce495f189e2a ]
    
    A reproducer triggers a KASAN slab-use-after-free in pty_write_room()
    when caif_serial's TX path calls tty_write_room(). The faulting access
    is on tty->link->port.
    
    Hold an extra kref on tty->link for the lifetime of the caif_serial line
    discipline: get it in ldisc_open() and drop it in ser_release(), and
    also drop it on the ldisc_open() error path.
    
    With this change applied, the reproducer no longer triggers the UAF in
    my testing.
    
    Link: https://gist.github.com/shuangpengbai/c898debad6bdf170a84be7e6b3d8707f
    Link: https://lore.kernel.org/netdev/20260301220525.1546355-1-shuangpeng.kernel@gmail.com
    Fixes: e31d5a05948e ("caif: tty's are kref objects so take a reference")
    Signed-off-by: Shuangpeng Bai <shuangpeng.kernel@gmail.com>
    Reviewed-by: Jiayuan Chen <jiayuan.chen@linux.dev>
    Link: https://patch.msgid.link/20260306034006.3395740-1-shuangpeng.kernel@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
slab: distinguish lock and trylock for sheaf_flush_main() [+ + +]
Author: Vlastimil Babka <vbabka@kernel.org>
Date:   Wed Feb 11 10:42:30 2026 +0100

    slab: distinguish lock and trylock for sheaf_flush_main()
    
    commit 48647d3f9a644d1e81af6558102d43cdb260597b upstream.
    
    sheaf_flush_main() can be called from __pcs_replace_full_main() where
    it's fine if the trylock fails, and pcs_flush_all() where it's not
    expected to and for some flush callers (when destroying the cache or
    memory hotremove) it would be actually a problem if it failed and left
    the main sheaf not flushed. The flush callers can however safely use
    local_lock() instead of trylock.
    
    The trylock failure should not happen in practice on !PREEMPT_RT, but
    can happen on PREEMPT_RT. The impact is limited in practice because when
    a trylock fails in the kmem_cache_destroy() path, it means someone is
    using the cache while destroying it, which is a bug on its own. The memory
    hotremove path is unlikely to be employed in a production RT config, but
    it's possible.
    
    To fix this, split the function into sheaf_flush_main() (using
    local_lock()) and sheaf_try_flush_main() (using local_trylock()) where
    both call __sheaf_flush_main_batch() to flush a single batch of objects.
    This will also allow lockdep to verify our context assumptions.
    
    The problem was raised in an off-list question by Marcelo.
    
    Fixes: 2d517aa09bbc ("slab: add opt-in caching layer of percpu sheaves")
    Cc: stable@vger.kernel.org
    Reported-by: Marcelo Tosatti <mtosatti@redhat.com>
    Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
    Reviewed-by: Harry Yoo <harry.yoo@oracle.com>
    Reviewed-by: Hao Li <hao.li@linux.dev>
    Link: https://patch.msgid.link/20260211-b4-sheaf-flush-v1-1-4e7f492f0055@suse.cz
    Signed-off-by: Vlastimil Babka (SUSE) <vbabka@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
smb/server: Fix another refcount leak in smb2_open() [+ + +]
Author: Guenter Roeck <linux@roeck-us.net>
Date:   Thu Feb 26 21:54:21 2026 -0800

    smb/server: Fix another refcount leak in smb2_open()
    
    [ Upstream commit c15e7c62feb3751cbdd458555819df1d70374890 ]
    
    If ksmbd_override_fsids() fails, we jump to err_out2. At that point, fp is
    NULL because it hasn't been assigned dh_info.fp yet, so ksmbd_fd_put(work,
    fp) will not be called. However, dh_info.fp was already inserted into the
    session file table by ksmbd_reopen_durable_fd(), so it will leak in the
    session file table until the session is closed.
    
    Move fp = dh_info.fp; ahead of the ksmbd_override_fsids() check to fix the
    problem.
    
    Found by an experimental AI code review agent at Google.
    
    Fixes: c8efcc786146a ("ksmbd: add support for durable handles v1/v2")
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Reviewed-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: client: fix atomic open with O_DIRECT & O_SYNC [+ + +]
Author: Paulo Alcantara <pc@manguebit.org>
Date:   Sat Mar 7 18:20:16 2026 -0300

    smb: client: fix atomic open with O_DIRECT & O_SYNC
    
    commit 4a7d2729dc99437dbb880a64c47828c0d191b308 upstream.
    
    When user application requests O_DIRECT|O_SYNC along with O_CREAT on
    open(2), CREATE_NO_BUFFER and CREATE_WRITE_THROUGH bits were missed in
    CREATE request when performing an atomic open, thus leading to
    potentially data integrity issues.
    
    Fix this by setting those missing bits in CREATE request when
    O_DIRECT|O_SYNC has been specified in cifs_do_create().
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Paulo Alcantara (Red Hat) <pc@manguebit.org>
    Reviewed-by: David Howells <dhowells@redhat.com>
    Acked-by: Henrique Carvalho <henrique.carvalho@suse.com>
    Cc: Tom Talpey <tom@talpey.com>
    Cc: linux-cifs@vger.kernel.org
    Cc: stable@vger.kernel.org
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

smb: client: fix iface port assignment in parse_server_interfaces [+ + +]
Author: Henrique Carvalho <henrique.carvalho@suse.com>
Date:   Wed Mar 11 20:17:23 2026 -0300

    smb: client: fix iface port assignment in parse_server_interfaces
    
    commit d4c7210d2f3ea481a6481f03040a64d9077a6172 upstream.
    
    parse_server_interfaces() initializes interface socket addresses with
    CIFS_PORT. When the mount uses a non-default port this overwrites the
    configured destination port.
    
    Later, cifs_chan_update_iface() copies this sockaddr into server->dstaddr,
    causing reconnect attempts to use the wrong port after server interface
    updates.
    
    Use the existing port from server->dstaddr instead.
    
    Cc: stable@vger.kernel.org
    Fixes: fe856be475f7 ("CIFS: parse and store info on iface queries")
    Tested-by: Dr. Thomas Orgis <thomas.orgis@uni-hamburg.de>
    Reviewed-by: Enzo Matsumiya <ematsumiya@suse.de>
    Signed-off-by: Henrique Carvalho <henrique.carvalho@suse.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

smb: client: fix in-place encryption corruption in SMB2_write() [+ + +]
Author: Bharath SM <bharathsm@microsoft.com>
Date:   Mon Mar 9 16:00:49 2026 +0530

    smb: client: fix in-place encryption corruption in SMB2_write()
    
    commit d78840a6a38d312dc1a51a65317bb67e46f0b929 upstream.
    
    SMB2_write() places write payload in iov[1..n] as part of rq_iov.
    smb3_init_transform_rq() pointer-shares rq_iov, so crypt_message()
    encrypts iov[1] in-place, replacing the original plaintext with
    ciphertext. On a replayable error, the retry sends the same iov[1]
    which now contains ciphertext instead of the original data,
    resulting in corruption.
    
    The corruption is most likely to be observed when connections are
    unstable, as reconnects trigger write retries that re-send the
    already-encrypted data.
    
    This affects SFU mknod, MF symlinks, etc. On kernels before
    6.10 (prior to the netfs conversion), sync writes also used
    this path and were similarly affected. The async write path
    wasn't unaffected as it uses rq_iter which gets deep-copied.
    
    Fix by moving the write payload into rq_iter via iov_iter_kvec(),
    so smb3_init_transform_rq() deep-copies it before encryption.
    
    Cc: stable@vger.kernel.org #6.3+
    Acked-by: Henrique Carvalho <henrique.carvalho@suse.com>
    Acked-by: Shyam Prasad N <sprasad@microsoft.com>
    Acked-by: Paulo Alcantara (Red Hat) <pc@manguebit.org>
    Signed-off-by: Bharath SM <bharathsm@microsoft.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

smb: server: fix use-after-free in smb2_open() [+ + +]
Author: Marios Makassikis <mmakassikis@freebox.fr>
Date:   Tue Mar 3 11:14:32 2026 +0100

    smb: server: fix use-after-free in smb2_open()
    
    commit 1e689a56173827669a35da7cb2a3c78ed5c53680 upstream.
    
    The opinfo pointer obtained via rcu_dereference(fp->f_opinfo) is
    dereferenced after rcu_read_unlock(), creating a use-after-free
    window.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Marios Makassikis <mmakassikis@freebox.fr>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
spi: amlogic: spifc-a4: Fix DMA mapping error handling [+ + +]
Author: Felix Gu <ustc.gu@gmail.com>
Date:   Fri Mar 6 01:24:32 2026 +0800

    spi: amlogic: spifc-a4: Fix DMA mapping error handling
    
    [ Upstream commit b20b437666e1cb26a7c499d1664e8f2a0ac67000 ]
    
    Fix three bugs in aml_sfc_dma_buffer_setup() error paths:
    1. Unnecessary goto: When the first DMA mapping (sfc->daddr) fails,
       nothing needs cleanup. Use direct return instead of goto.
    2. Double-unmap bug: When info DMA mapping failed, the code would
       unmap sfc->daddr inline, then fall through to out_map_data which
       would unmap it again, causing a double-unmap.
    3. Wrong unmap size: The out_map_info label used datalen instead of
       infolen when unmapping sfc->iaddr, which could lead to incorrect
       DMA sync behavior.
    
    Fixes: 4670db6f32e9 ("spi: amlogic: add driver for Amlogic SPI Flash Controller")
    Signed-off-by: Felix Gu <ustc.gu@gmail.com>
    Link: https://patch.msgid.link/20260306-spifc-a4-v1-1-f22c9965f64a@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: rockchip-sfc: Fix double-free in remove() callback [+ + +]
Author: Felix Gu <ustc.gu@gmail.com>
Date:   Tue Mar 10 02:01:34 2026 +0800

    spi: rockchip-sfc: Fix double-free in remove() callback
    
    [ Upstream commit 111e2863372c322e836e0c896f6dd9cf4ee08c71 ]
    
    The driver uses devm_spi_register_controller() for registration, which
    automatically unregisters the controller via devm cleanup when the
    device is removed. The manual call to spi_unregister_controller() in
    the remove() callback can lead to a double-free.
    
    And to make sure controller is unregistered before DMA buffer is
    unmapped, switch to use spi_register_controller() in probe().
    
    Fixes: 8011709906d0 ("spi: rockchip-sfc: Support pm ops")
    Signed-off-by: Felix Gu <ustc.gu@gmail.com>
    Link: https://patch.msgid.link/20260310-sfc-v2-1-67fab04b097f@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
staging: rtl8723bs: fix potential out-of-bounds read in rtw_restruct_wmm_ie [+ + +]
Author: Luka Gejak <luka.gejak@linux.dev>
Date:   Tue Feb 24 14:26:47 2026 +0100

    staging: rtl8723bs: fix potential out-of-bounds read in rtw_restruct_wmm_ie
    
    commit a75281626fc8fa6dc6c9cc314ee423e8bc45203b upstream.
    
    The current code checks 'i + 5 < in_len' at the end of the if statement.
    However, it accesses 'in_ie[i + 5]' before that check, which can lead
    to an out-of-bounds read. Move the length check to the beginning of the
    conditional to ensure the index is within bounds before accessing the
    array.
    
    Fixes: 554c0a3abf21 ("staging: Add rtl8723bs sdio wifi driver")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Luka Gejak <luka.gejak@linux.dev>
    Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
    Link: https://patch.msgid.link/20260224132647.11642-2-luka.gejak@linux.dev
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

staging: rtl8723bs: properly validate the data in rtw_get_ie_ex() [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Feb 23 14:31:35 2026 +0100

    staging: rtl8723bs: properly validate the data in rtw_get_ie_ex()
    
    commit f0109b9d3e1e455429279d602f6276e34689750a upstream.
    
    Just like in commit 154828bf9559 ("staging: rtl8723bs: fix out-of-bounds
    read in rtw_get_ie() parser"), we don't trust the data in the frame so
    we should check the length better before acting on it
    
    Cc: stable <stable@kernel.org>
    Assisted-by: gkh_clanker_2000
    Tested-by: Navaneeth K <knavaneeth786@gmail.com>
    Reviewed-by: Navaneeth K <knavaneeth786@gmail.com>
    Link: https://patch.msgid.link/2026022336-arrange-footwork-6e54@gregkh
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

staging: sm750fb: add missing pci_release_region on error and removal [+ + +]
Author: Artem Lytkin <iprintercanon@gmail.com>
Date:   Mon Feb 16 20:20:38 2026 +0000

    staging: sm750fb: add missing pci_release_region on error and removal
    
    commit 8225489ddb900656cc21573b4e1b00c9181fd777 upstream.
    
    hw_sm750_map() calls pci_request_region() but never releases the
    region on error paths or in lynxfb_pci_remove(). This causes a
    resource leak that prevents the PCI region from being mapped again
    after driver removal or a failed probe. A TODO comment in the code
    acknowledges this missing cleanup.
    
    Restructure the error handling in hw_sm750_map() to properly release
    the PCI region on ioremap failures, and add pci_release_region() to
    lynxfb_pci_remove().
    
    Signed-off-by: Artem Lytkin <iprintercanon@gmail.com>
    Cc: stable <stable@kernel.org>
    Link: https://patch.msgid.link/20260216202038.1828-1-iprintercanon@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
time/jiffies: Mark jiffies_64_to_clock_t() notrace [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Fri Mar 6 21:24:03 2026 -0500

    time/jiffies: Mark jiffies_64_to_clock_t() notrace
    
    [ Upstream commit 755a648e78f12574482d4698d877375793867fa1 ]
    
    The trace_clock_jiffies() function that handles the "uptime" clock for
    tracing calls jiffies_64_to_clock_t(). This causes the function tracer to
    constantly recurse when the tracing clock is set to "uptime". Mark it
    notrace to prevent unnecessary recursion when using the "uptime" clock.
    
    Fixes: 58d4e21e50ff3 ("tracing: Fix wraparound problems in "uptime" trace clock")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Thomas Gleixner <tglx@kernel.org>
    Link: https://patch.msgid.link/20260306212403.72270bb2@robin
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tipc: fix divide-by-zero in tipc_sk_filter_connect() [+ + +]
Author: Mehul Rao <mehulrao@gmail.com>
Date:   Tue Mar 10 13:07:30 2026 -0400

    tipc: fix divide-by-zero in tipc_sk_filter_connect()
    
    commit 6c5a9baa15de240e747263aba435a0951da8d8d2 upstream.
    
    A user can set conn_timeout to any value via
    setsockopt(TIPC_CONN_TIMEOUT), including values less than 4.  When a
    SYN is rejected with TIPC_ERR_OVERLOAD and the retry path in
    tipc_sk_filter_connect() executes:
    
        delay %= (tsk->conn_timeout / 4);
    
    If conn_timeout is in the range [0, 3], the integer division yields 0,
    and the modulo operation triggers a divide-by-zero exception, causing a
    kernel oops/panic.
    
    Fix this by clamping conn_timeout to a minimum of 4 at the point of use
    in tipc_sk_filter_connect().
    
    Oops: divide error: 0000 [#1] SMP KASAN NOPTI
    CPU: 0 UID: 0 PID: 119 Comm: poc-F144 Not tainted 7.0.0-rc2+
    RIP: 0010:tipc_sk_filter_rcv (net/tipc/socket.c:2236 net/tipc/socket.c:2362)
    Call Trace:
     tipc_sk_backlog_rcv (include/linux/instrumented.h:82 include/linux/atomic/atomic-instrumented.h:32 include/net/sock.h:2357 net/tipc/socket.c:2406)
     __release_sock (include/net/sock.h:1185 net/core/sock.c:3213)
     release_sock (net/core/sock.c:3797)
     tipc_connect (net/tipc/socket.c:2570)
     __sys_connect (include/linux/file.h:62 include/linux/file.h:83 net/socket.c:2098)
    
    Fixes: 6787927475e5 ("tipc: buffer overflow handling in listener socket")
    Cc: stable@vger.kernel.org
    Signed-off-by: Mehul Rao <mehulrao@gmail.com>
    Reviewed-by: Tung Nguyen <tung.quang.nguyen@est.tech>
    Link: https://patch.msgid.link/20260310170730.28841-1-mehulrao@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tracing: Fix enabling multiple events on the kernel command line and bootconfig [+ + +]
Author: Andrei-Alexandru Tachici <andrei-alexandru.tachici@oss.qualcomm.com>
Date:   Mon Mar 2 11:27:34 2026 +0100

    tracing: Fix enabling multiple events on the kernel command line and bootconfig
    
    commit 3b1679e086bb869ca02722f6bd29b3573a6a0e7e upstream.
    
    Multiple events can be enabled on the kernel command line via a comma
    separator. But if the are specified one at a time, then only the last
    event is enabled. This is because the event names are saved in a temporary
    buffer, and each call by the init cmdline code will reset that buffer.
    
    This also affects names in the boot config file, as it may call the
    callback multiple times with an example of:
    
      kernel.trace_event = ":mod:rproc_qcom_common", ":mod:qrtr", ":mod:qcom_aoss"
    
    Change the cmdline callback function to append a comma and the next value
    if the temporary buffer already has content.
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Link: https://patch.msgid.link/20260302-trace-events-allow-multiple-modules-v1-1-ce4436e37fb8@oss.qualcomm.com
    Signed-off-by: Andrei-Alexandru Tachici <andrei-alexandru.tachici@oss.qualcomm.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tracing: Fix syscall events activation by ensuring refcount hits zero [+ + +]
Author: Huiwen He <hehuiwen@kylinos.cn>
Date:   Tue Feb 24 10:35:44 2026 +0800

    tracing: Fix syscall events activation by ensuring refcount hits zero
    
    commit 0a663b764dbdf135a126284f454c9f01f95a87d4 upstream.
    
    When multiple syscall events are specified in the kernel command line
    (e.g., trace_event=syscalls:sys_enter_openat,syscalls:sys_enter_close),
    they are often not captured after boot, even though they appear enabled
    in the tracing/set_event file.
    
    The issue stems from how syscall events are initialized. Syscall
    tracepoints require the global reference count (sys_tracepoint_refcount)
    to transition from 0 to 1 to trigger the registration of the syscall
    work (TIF_SYSCALL_TRACEPOINT) for tasks, including the init process (pid 1).
    
    The current implementation of early_enable_events() with disable_first=true
    used an interleaved sequence of "Disable A -> Enable A -> Disable B -> Enable B".
    If multiple syscalls are enabled, the refcount never drops to zero,
    preventing the 0->1 transition that triggers actual registration.
    
    Fix this by splitting early_enable_events() into two distinct phases:
    1. Disable all events specified in the buffer.
    2. Enable all events specified in the buffer.
    
    This ensures the refcount hits zero before re-enabling, allowing syscall
    events to be properly activated during early boot.
    
    The code is also refactored to use a helper function to avoid logic
    duplication between the disable and enable phases.
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Link: https://patch.msgid.link/20260224023544.1250787-1-hehuiwen@kylinos.cn
    Fixes: ce1039bd3a89 ("tracing: Fix enabling of syscall events on the command line")
    Signed-off-by: Huiwen He <hehuiwen@kylinos.cn>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tracing: Fix trace_buf_size= cmdline parameter with sizes >= 2G [+ + +]
Author: Calvin Owens <calvin@wbinvd.org>
Date:   Fri Mar 6 19:19:25 2026 -0800

    tracing: Fix trace_buf_size= cmdline parameter with sizes >= 2G
    
    commit d008ba8be8984760e36d7dcd4adbd5a41a645708 upstream.
    
    Some of the sizing logic through tracer_alloc_buffers() uses int
    internally, causing unexpected behavior if the user passes a value that
    does not fit in an int (on my x86 machine, the result is uselessly tiny
    buffers).
    
    Fix by plumbing the parameter's real type (unsigned long) through to the
    ring buffer allocation functions, which already use unsigned long.
    
    It has always been possible to create larger ring buffers via the sysfs
    interface: this only affects the cmdline parameter.
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Link: https://patch.msgid.link/bff42a4288aada08bdf74da3f5b67a2c28b761f8.1772852067.git.calvin@wbinvd.org
    Fixes: 73c5162aa362 ("tracing: keep ring buffer to minimum size till used")
    Signed-off-by: Calvin Owens <calvin@wbinvd.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ublk: fix NULL pointer dereference in ublk_ctrl_set_size() [+ + +]
Author: Mehul Rao <mehulrao@gmail.com>
Date:   Thu Mar 5 14:31:46 2026 -0500

    ublk: fix NULL pointer dereference in ublk_ctrl_set_size()
    
    commit 25966fc097691e5c925ad080f64a2f19c5fd940a upstream.
    
    ublk_ctrl_set_size() unconditionally dereferences ub->ub_disk via
    set_capacity_and_notify() without checking if it is NULL.
    
    ub->ub_disk is NULL before UBLK_CMD_START_DEV completes (it is only
    assigned in ublk_ctrl_start_dev()) and after UBLK_CMD_STOP_DEV runs
    (ublk_detach_disk() sets it to NULL). Since the UBLK_CMD_UPDATE_SIZE
    handler performs no state validation, a user can trigger a NULL pointer
    dereference by sending UPDATE_SIZE to a device that has been added but
    not yet started, or one that has been stopped.
    
    Fix this by checking ub->ub_disk under ub->mutex before dereferencing
    it, and returning -ENODEV if the disk is not available.
    
    Fixes: 98b995660bff ("ublk: Add UBLK_U_CMD_UPDATE_SIZE")
    Cc: stable@vger.kernel.org
    Signed-off-by: Mehul Rao <mehulrao@gmail.com>
    Reviewed-by: Ming Lei <ming.lei@redhat.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
unshare: fix unshare_fs() handling [+ + +]
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sat Feb 7 08:25:24 2026 +0000

    unshare: fix unshare_fs() handling
    
    [ Upstream commit 6c4b2243cb6c0755159bd567130d5e12e7b10d9f ]
    
    There's an unpleasant corner case in unshare(2), when we have a
    CLONE_NEWNS in flags and current->fs hadn't been shared at all; in that
    case copy_mnt_ns() gets passed current->fs instead of a private copy,
    which causes interesting warts in proof of correctness]
    
    > I guess if private means fs->users == 1, the condition could still be true.
    
    Unfortunately, it's worse than just a convoluted proof of correctness.
    Consider the case when we have CLONE_NEWCGROUP in addition to CLONE_NEWNS
    (and current->fs->users == 1).
    
    We pass current->fs to copy_mnt_ns(), all right.  Suppose it succeeds and
    flips current->fs->{pwd,root} to corresponding locations in the new namespace.
    Now we proceed to copy_cgroup_ns(), which fails (e.g. with -ENOMEM).
    We call put_mnt_ns() on the namespace created by copy_mnt_ns(), it's
    destroyed and its mount tree is dissolved, but...  current->fs->root and
    current->fs->pwd are both left pointing to now detached mounts.
    
    They are pinning those, so it's not a UAF, but it leaves the calling
    process with unshare(2) failing with -ENOMEM _and_ leaving it with
    pwd and root on detached isolated mounts.  The last part is clearly a bug.
    
    There is other fun related to that mess (races with pivot_root(), including
    the one between pivot_root() and fork(), of all things), but this one
    is easy to isolate and fix - treat CLONE_NEWNS as "allocate a new
    fs_struct even if it hadn't been shared in the first place".  Sure, we could
    go for something like "if both CLONE_NEWNS *and* one of the things that might
    end up failing after copy_mnt_ns() call in create_new_namespaces() are set,
    force allocation of new fs_struct", but let's keep it simple - the cost
    of copy_fs_struct() is trivial.
    
    Another benefit is that copy_mnt_ns() with CLONE_NEWNS *always* gets
    a freshly allocated fs_struct, yet to be attached to anything.  That
    seriously simplifies the analysis...
    
    FWIW, that bug had been there since the introduction of unshare(2) ;-/
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Link: https://patch.msgid.link/20260207082524.GE3183987@ZenIV
    Tested-by: Waiman Long <longman@redhat.com>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
usb/core/quirks: Add Huawei ME906S-device to wakeup quirk [+ + +]
Author: Christoffer Sandberg <cs@tuxedo.de>
Date:   Fri Mar 6 18:28:14 2026 +0100

    usb/core/quirks: Add Huawei ME906S-device to wakeup quirk
    
    commit 0326ff28d56b4fa202de36ffc8462a354f383a64 upstream.
    
    Similar to other Huawei LTE modules using this quirk, this version with
    another vid/pid suffers from spurious wakeups.
    
    Setting the quirk fixes the issue for this device as well.
    
    Cc: stable <stable@kernel.org>
    Signed-off-by: Christoffer Sandberg <cs@tuxedo.de>
    Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
    Link: https://patch.msgid.link/20260306172817.2098898-1-wse@tuxedocomputers.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: add QUIRK_NO_BOS for video capture several devices [+ + +]
Author: A1RM4X <dev@a1rm4x.com>
Date:   Wed Feb 4 14:26:48 2026 -0500

    USB: add QUIRK_NO_BOS for video capture several devices
    
    commit 93cd0d664661f58f7e7bed7373714ab2ace41734 upstream.
    
    Several USB capture devices also need the USB_QUIRK_NO_BOS set for them
    to work properly, odds are they are all the same chip inside, just
    different vendor/product ids.
    
    This fixes up:
      - ASUS TUF 4K PRO
      - Avermedia Live Gamer Ultra 2.1 (GC553G2)
      - UGREEN 35871
    to now run at full speed (10 Gbps/4K 60 fps mode.)
    
    Link: https://lore.kernel.org/r/CACy+XB-f-51xGpNQFCSm5pE_momTQLu=BaZggHYU1DiDmFX=ug@mail.gmail.com
    Cc: stable <stable@kernel.org>
    Signed-off-by: A1RM4X <dev@a1rm4x.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: cdc-acm: Restore CAP_BRK functionnality to CH343 [+ + +]
Author: Marc Zyngier <maz@kernel.org>
Date:   Sun Mar 1 12:44:40 2026 +0000

    usb: cdc-acm: Restore CAP_BRK functionnality to CH343
    
    commit 14ae24cba291bddfdc296bbcbfd00cd09d0498ef upstream.
    
    The CH343 USB/serial adapter is as buggy as it is popular (very).
    One of its quirks is that despite being capable of signalling a
    BREAK condition, it doesn't advertise it.
    
    This used to work nonetheless until 66aad7d8d3ec5 ("usb: cdc-acm:
    return correct error code on unsupported break") applied some
    reasonable restrictions, preventing breaks from being emitted on
    devices that do not advertise CAP_BRK.
    
    Add a quirk for this particular device, so that breaks can still
    be produced on some of my machines attached to my console server.
    
    Fixes: 66aad7d8d3ec5 ("usb: cdc-acm: return correct error code on unsupported break")
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Cc: stable <stable@kernel.org>
    Cc: Oliver Neukum <oneukum@suse.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Acked-by: Oliver Neukum <oneukum@suse.com>
    Link: https://patch.msgid.link/20260301124440.1192752-1-maz@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: class: cdc-wdm: fix reordering issue in read code path [+ + +]
Author: Oliver Neukum <oneukum@suse.com>
Date:   Wed Mar 4 14:01:12 2026 +0100

    usb: class: cdc-wdm: fix reordering issue in read code path
    
    commit 8df672bfe3ec2268c2636584202755898e547173 upstream.
    
    Quoting the bug report:
    
    Due to compiler optimization or CPU out-of-order execution, the
    desc->length update can be reordered before the memmove. If this
    happens, wdm_read() can see the new length and call copy_to_user() on
    uninitialized memory. This also violates LKMM data race rules [1].
    
    Fix it by using WRITE_ONCE and memory barriers.
    
    Fixes: afba937e540c9 ("USB: CDC WDM driver")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Closes: https://lore.kernel.org/linux-usb/CALbr=LbrUZn_cfp7CfR-7Z5wDTHF96qeuM=3fO2m-q4cDrnC4A@mail.gmail.com/
    Reported-by: Gui-Dong Han <hanguidong02@gmail.com>
    Reviewed-by: Gui-Dong Han <hanguidong02@gmail.com>
    Link: https://patch.msgid.link/20260304130116.1721682-1-oneukum@suse.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: core: don't power off roothub PHYs if phy_set_mode() fails [+ + +]
Author: Gabor Juhos <j4g8y7@gmail.com>
Date:   Wed Feb 18 21:21:07 2026 +0100

    usb: core: don't power off roothub PHYs if phy_set_mode() fails
    
    commit e293015ba76eb96ce4ebed7e3b2cb1a7d319f3e9 upstream.
    
    Remove the error path from the usb_phy_roothub_set_mode() function.
    The code is clearly wrong, because phy_set_mode() calls can't be
    balanced with phy_power_off() calls.
    
    Additionally, the usb_phy_roothub_set_mode() function is called only
    from usb_add_hcd() before it powers on the PHYs, so powering off those
    makes no sense anyway.
    
    Presumably, the code is copy-pasted from the phy_power_on() function
    without adjusting the error handling.
    
    Cc: stable@vger.kernel.org # v5.1+
    Fixes: b97a31348379 ("usb: core: comply to PHY framework")
    Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
    Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Link: https://patch.msgid.link/20260218-usb-phy-poweroff-fix-v1-1-66e6831e860e@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: core: Limit the length of unkillable synchronous timeouts [+ + +]
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Tue Feb 17 22:10:32 2026 -0500

    USB: core: Limit the length of unkillable synchronous timeouts
    
    commit 1015c27a5e1a63efae2b18a9901494474b4d1dc3 upstream.
    
    The usb_control_msg(), usb_bulk_msg(), and usb_interrupt_msg() APIs in
    usbcore allow unlimited timeout durations.  And since they use
    uninterruptible waits, this leaves open the possibility of hanging a
    task for an indefinitely long time, with no way to kill it short of
    unplugging the target device.
    
    To prevent this sort of problem, enforce a maximum limit on the length
    of these unkillable timeouts.  The limit chosen here, somewhat
    arbitrarily, is 60 seconds.  On many systems (although not all) this
    is short enough to avoid triggering the kernel's hung-task detector.
    
    In addition, clear up the ambiguity of negative timeout values by
    treating them the same as 0, i.e., using the maximum allowed timeout.
    
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://lore.kernel.org/linux-usb/3acfe838-6334-4f6d-be7c-4bb01704b33d@rowland.harvard.edu/
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    CC: stable@vger.kernel.org
    Link: https://patch.msgid.link/15fc9773-a007-47b0-a703-df89a8cf83dd@rowland.harvard.edu
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: dwc3: pci: add support for the Intel Nova Lake -H [+ + +]
Author: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Date:   Mon Mar 9 14:02:04 2026 +0100

    usb: dwc3: pci: add support for the Intel Nova Lake -H
    
    commit 17ab4d4078e22be7fd8fd6fc710c15c085a4cb1b upstream.
    
    This patch adds the necessary PCI ID for Intel Nova Lake -H
    devices.
    
    Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Cc: stable <stable@kernel.org>
    Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Link: https://patch.msgid.link/20260309130204.208661-1-heikki.krogerus@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: ezcap401 needs USB_QUIRK_NO_BOS to function on 10gbs usb speed [+ + +]
Author: Vyacheslav Vahnenko <vahnenko2003@gmail.com>
Date:   Fri Mar 13 15:36:38 2026 +0300

    USB: ezcap401 needs USB_QUIRK_NO_BOS to function on 10gbs usb speed
    
    commit d0d9b1f4f5391e6a00cee81d73ed2e8f98446d5f upstream.
    
    Add USB_QUIRK_NO_BOS for ezcap401 capture card, without it dmesg will show
    "unable to get BOS descriptor or descriptor too short" and "unable to
    read config index 0 descriptor/start: -71" errors and device will not
    able to work at full speed at 10gbs
    
    Signed-off-by: Vyacheslav Vahnenko <vahnenko2003@gmail.com>
    Cc: stable <stable@kernel.org>
    Link: https://patch.msgid.link/20260313123638.20481-1-vahnenko2003@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: gadget: f_hid: fix SuperSpeed descriptors [+ + +]
Author: John Keeping <jkeeping@inmusicbrands.com>
Date:   Fri Feb 27 11:15:39 2026 +0000

    usb: gadget: f_hid: fix SuperSpeed descriptors
    
    commit 7f58b4148ef5d8ee0fb7d8113dcc38ff5374babc upstream.
    
    When adding dynamic configuration for bInterval, the value was removed
    from the static SuperSpeed endpoint descriptors but was not set from the
    configured value in hidg_bind().  Thus at SuperSpeed the interrupt
    endpoints have bInterval as zero which is not valid per the USB
    specification.
    
    Add the missing setting for SuperSpeed endpoints.
    
    Fixes: ea34925f5b2ee ("usb: gadget: hid: allow dynamic interval configuration via configfs")
    Cc: stable <stable@kernel.org>
    Signed-off-by: John Keeping <jkeeping@inmusicbrands.com>
    Acked-by: Peter Korsgaard <peter@korsgaard.com>
    Link: https://patch.msgid.link/20260227111540.431521-1-jkeeping@inmusicbrands.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: f_mass_storage: Fix potential integer overflow in check_command_size_in_blocks() [+ + +]
Author: Seungjin Bae <eeodqql09@gmail.com>
Date:   Sat Feb 28 05:43:25 2026 -0500

    usb: gadget: f_mass_storage: Fix potential integer overflow in check_command_size_in_blocks()
    
    [ Upstream commit 8479891d1f04a8ce55366fe4ca361ccdb96f02e1 ]
    
    The `check_command_size_in_blocks()` function calculates the data size
    in bytes by left shifting `common->data_size_from_cmnd` by the block
    size (`common->curlun->blkbits`). However, it does not validate whether
    this shift operation will cause an integer overflow.
    
    Initially, the block size is set up in `fsg_lun_open()` , and the
    `common->data_size_from_cmnd` is set up in `do_scsi_command()`. During
    initialization, there is no integer overflow check for the interaction
    between two variables.
    
    So if a malicious USB host sends a SCSI READ or WRITE command
    requesting a large amount of data (`common->data_size_from_cmnd`), the
    left shift operation can wrap around. This results in a truncated data
    size, which can bypass boundary checks and potentially lead to memory
    corruption or out-of-bounds accesses.
    
    Fix this by using the check_shl_overflow() macro to safely perform the
    shift and catch any overflows.
    
    Fixes: 144974e7f9e3 ("usb: gadget: mass_storage: support multi-luns with different logic block size")
    Signed-off-by: Seungjin Bae <eeodqql09@gmail.com>
    Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://patch.msgid.link/20260228104324.1696455-2-eeodqql09@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: gadget: f_ncm: Fix atomic context locking issue [+ + +]
Author: Kuen-Han Tsai <khtsai@google.com>
Date:   Sat Feb 21 22:48:16 2026 +0800

    usb: gadget: f_ncm: Fix atomic context locking issue
    
    commit 0d6c8144ca4d93253de952a5ea0028c19ed7ab68 upstream.
    
    The ncm_set_alt function was holding a mutex to protect against races
    with configfs, which invokes the might-sleep function inside an atomic
    context.
    
    Remove the struct net_device pointer from the f_ncm_opts structure to
    eliminate the contention. The connection state is now managed by a new
    boolean flag to preserve the use-after-free fix from
    commit 6334b8e4553c ("usb: gadget: f_ncm: Fix UAF ncm object at re-bind
    after usb ep transport error").
    
    BUG: sleeping function called from invalid context
    Call Trace:
     dump_stack_lvl+0x83/0xc0
     dump_stack+0x14/0x16
     __might_resched+0x389/0x4c0
     __might_sleep+0x8e/0x100
     ...
     __mutex_lock+0x6f/0x1740
     ...
     ncm_set_alt+0x209/0xa40
     set_config+0x6b6/0xb40
     composite_setup+0x734/0x2b40
     ...
    
    Fixes: 56a512a9b410 ("usb: gadget: f_ncm: align net_device lifecycle with bind/unbind")
    Cc: stable@kernel.org
    Signed-off-by: Kuen-Han Tsai <khtsai@google.com>
    Link: https://patch.msgid.link/20260221-legacy-ncm-v2-2-dfb891d76507@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: f_ncm: Fix net_device lifecycle with device_move [+ + +]
Author: Kuen-Han Tsai <khtsai@google.com>
Date:   Mon Mar 9 20:04:52 2026 +0800

    usb: gadget: f_ncm: Fix net_device lifecycle with device_move
    
    commit ec35c1969650e7cb6c8a91020e568ed46e3551b0 upstream.
    
    The network device outlived its parent gadget device during
    disconnection, resulting in dangling sysfs links and null pointer
    dereference problems.
    
    A prior attempt to solve this by removing SET_NETDEV_DEV entirely [1]
    was reverted due to power management ordering concerns and a NO-CARRIER
    regression.
    
    A subsequent attempt to defer net_device allocation to bind [2] broke
    1:1 mapping between function instance and network device, making it
    impossible for configfs to report the resolved interface name. This
    results in a regression where the DHCP server fails on pmOS.
    
    Use device_move to reparent the net_device between the gadget device and
    /sys/devices/virtual/ across bind/unbind cycles. This preserves the
    network interface across USB reconnection, allowing the DHCP server to
    retain their binding.
    
    Introduce gether_attach_gadget()/gether_detach_gadget() helpers and use
    __free(detach_gadget) macro to undo attachment on bind failure. The
    bind_count ensures device_move executes only on the first bind.
    
    [1] https://lore.kernel.org/lkml/f2a4f9847617a0929d62025748384092e5f35cce.camel@crapouillou.net/
    [2] https://lore.kernel.org/linux-usb/795ea759-7eaf-4f78-81f4-01ffbf2d7961@ixit.cz/
    
    Fixes: 40d133d7f542 ("usb: gadget: f_ncm: convert to new function interface with backward compatibility")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Kuen-Han Tsai <khtsai@google.com>
    Link: https://patch.msgid.link/20260309-f-ncm-revert-v2-7-ea2afbc7d9b2@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: f_tcm: Fix NULL pointer dereferences in nexus handling [+ + +]
Author: Jiasheng Jiang <jiashengjiangcool@gmail.com>
Date:   Thu Feb 19 02:38:34 2026 +0000

    usb: gadget: f_tcm: Fix NULL pointer dereferences in nexus handling
    
    commit b9fde507355342a2d64225d582dc8b98ff5ecb19 upstream.
    
    The `tpg->tpg_nexus` pointer in the USB Target driver is dynamically
    managed and tied to userspace configuration via ConfigFS. It can be
    NULL if the USB host sends requests before the nexus is fully
    established or immediately after it is dropped.
    
    Currently, functions like `bot_submit_command()` and the data
    transfer paths retrieve `tv_nexus = tpg->tpg_nexus` and immediately
    dereference `tv_nexus->tvn_se_sess` without any validation. If a
    malicious or misconfigured USB host sends a BOT (Bulk-Only Transport)
    command during this race window, it triggers a NULL pointer
    dereference, leading to a kernel panic (local DoS).
    
    This exposes an inconsistent API usage within the module, as peer
    functions like `usbg_submit_command()` and `bot_send_bad_response()`
    correctly implement a NULL check for `tv_nexus` before proceeding.
    
    Fix this by bringing consistency to the nexus handling. Add the
    missing `if (!tv_nexus)` checks to the vulnerable BOT command and
    request processing paths, aborting the command gracefully with an
    error instead of crashing the system.
    
    Fixes: c52661d60f63 ("usb-gadget: Initial merge of target module for UASP + BOT")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Jiasheng Jiang <jiashengjiangcool@gmail.com>
    Reviewed-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Link: https://patch.msgid.link/20260219023834.17976-1-jiashengjiangcool@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: uvc: fix interval_duration calculation [+ + +]
Author: Junzhong Pan <panjunzhong@linux.spacemit.com>
Date:   Fri Mar 6 11:30:09 2026 +0800

    usb: gadget: uvc: fix interval_duration calculation
    
    commit 56135c0c60b07729401af9d329fa9c0eded845a6 upstream.
    
    To correctly convert bInterval as interval_duration:
      interval_duration = 2^(bInterval-1) * frame_interval
    
    Current code uses a wrong left shift operand, computing 2^bInterval
    instead of 2^(bInterval-1).
    
    Fixes: 010dc57cb516 ("usb: gadget: uvc: fix interval_duration calculation")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Junzhong Pan <panjunzhong@linux.spacemit.com>
    Reviewed-by: Xu Yang <xu.yang_2@nxp.com>
    Link: https://patch.msgid.link/20260306-fix-uvc-interval-v1-1-9a2df6859859@linux.spacemit.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: image: mdc800: kill download URB on timeout [+ + +]
Author: Ziyi Guo <n7l8m4@u.northwestern.edu>
Date:   Mon Feb 9 15:19:37 2026 +0000

    usb: image: mdc800: kill download URB on timeout
    
    commit 1be3b77de4eb89af8ae2fd6610546be778e25589 upstream.
    
    mdc800_device_read() submits download_urb and waits for completion.
    If the timeout fires and the device has not responded, the function
    returns without killing the URB, leaving it active.
    
    A subsequent read() resubmits the same URB while it is still
    in-flight, triggering the WARN in usb_submit_urb():
    
      "URB submitted while active"
    
    Check the return value of wait_event_timeout() and kill the URB if
    it indicates timeout, ensuring the URB is complete before its status
    is inspected or the URB is resubmitted.
    
    Similar to
    - commit 372c93131998 ("USB: yurex: fix control-URB timeout handling")
    - commit b98d5000c505 ("media: rc: iguanair: handle timeouts")
    
    Signed-off-by: Ziyi Guo <n7l8m4@u.northwestern.edu>
    Cc: stable <stable@kernel.org>
    Link: https://patch.msgid.link/20260209151937.2247202-1-n7l8m4@u.northwestern.edu
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: legacy: ncm: Fix NPE in gncm_bind [+ + +]
Author: Kuen-Han Tsai <khtsai@google.com>
Date:   Sat Feb 21 22:48:15 2026 +0800

    usb: legacy: ncm: Fix NPE in gncm_bind
    
    commit fde0634ad9856b3943a2d1a8cc8de174a63ac840 upstream.
    
    Commit 56a512a9b410 ("usb: gadget: f_ncm: align net_device lifecycle
    with bind/unbind") deferred the allocation of the net_device. This
    change leads to a NULL pointer dereference in the legacy NCM driver as
    it attempts to access the net_device before it's fully instantiated.
    
    Store the provided qmult, host_addr, and dev_addr into the struct
    ncm_opts->net_opts during gncm_bind(). These values will be properly
    applied to the net_device when it is allocated and configured later in
    the binding process by the NCM function driver.
    
    Fixes: 56a512a9b410 ("usb: gadget: f_ncm: align net_device lifecycle with bind/unbind")
    Cc: stable@kernel.org
    Reported-by: kernel test robot <oliver.sang@intel.com>
    Closes: https://lore.kernel.org/oe-lkp/202602181727.fd76c561-lkp@intel.com
    Signed-off-by: Kuen-Han Tsai <khtsai@google.com>
    Link: https://patch.msgid.link/20260221-legacy-ncm-v2-1-dfb891d76507@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: mdc800: handle signal and read racing [+ + +]
Author: Oliver Neukum <oneukum@suse.com>
Date:   Mon Feb 9 15:20:48 2026 +0100

    usb: mdc800: handle signal and read racing
    
    commit 2d6d260e9a3576256fe9ef6d1f7930c9ec348723 upstream.
    
    If a signal arrives after a read has partially completed,
    we need to return the number of bytes read. -EINTR is correct
    only if that number is zero.
    
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Cc: stable <stable@kernel.org>
    Link: https://patch.msgid.link/20260209142048.1503791-1-oneukum@suse.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: misc: uss720: properly clean up reference in uss720_probe() [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Feb 23 13:19:43 2026 +0100

    usb: misc: uss720: properly clean up reference in uss720_probe()
    
    commit 45dba8011efac11a2f360383221b541f5ea53ce5 upstream.
    
    If get_1284_register() fails, the usb device reference count is
    incorrect and needs to be properly dropped before returning.  That will
    happen when the kref is dropped in the call to destroy_priv(), so jump
    to that error path instead of returning directly.
    
    Cc: stable <stable@kernel.org>
    Assisted-by: gkh_clanker_2000
    Link: https://patch.msgid.link/2026022342-smokiness-stove-d792@gregkh
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: renesas_usbhs: fix use-after-free in ISR during device removal [+ + +]
Author: Fan Wu <fanwu01@zju.edu.cn>
Date:   Tue Mar 3 07:33:44 2026 +0000

    usb: renesas_usbhs: fix use-after-free in ISR during device removal
    
    commit 3cbc242b88c607f55da3d0d0d336b49bf1e20412 upstream.
    
    In usbhs_remove(), the driver frees resources (including the pipe array)
    while the interrupt handler (usbhs_interrupt) is still registered. If an
    interrupt fires after usbhs_pipe_remove() but before the driver is fully
    unbound, the ISR may access freed memory, causing a use-after-free.
    
    Fix this by calling devm_free_irq() before freeing resources. This ensures
    the interrupt handler is both disabled and synchronized (waits for any
    running ISR to complete) before usbhs_pipe_remove() is called.
    
    Fixes: f1407d5c6624 ("usb: renesas_usbhs: Add Renesas USBHS common code")
    Cc: stable <stable@kernel.org>
    Suggested-by: Alan Stern <stern@rowland.harvard.edu>
    Signed-off-by: Fan Wu <fanwu01@zju.edu.cn>
    Link: https://patch.msgid.link/20260303073344.34577-1-fanwu01@zju.edu.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: roles: get usb role switch from parent only for usb-b-connector [+ + +]
Author: Xu Yang <xu.yang_2@nxp.com>
Date:   Mon Mar 9 15:43:13 2026 +0800

    usb: roles: get usb role switch from parent only for usb-b-connector
    
    commit 8345b1539faa49fcf9c9439c3cbd97dac6eca171 upstream.
    
    usb_role_switch_is_parent() was walking up to the parent node and checking
    for the "usb-role-switch" property regardless of the type of the passed
    fwnode. This could cause unrelated device nodes to be probed as potential
    role switch parent, leading to spurious matches and "-EPROBE_DEFER" being
    returned infinitely.
    
    Till now only Type-B connector node will have a parent node which may
    present "usb-role-switch" property and register the role switch device.
    For Type-C connector node, its parent node will always be a Type-C chip
    device which will never register the role switch device. However, it may
    still present a non-boolean "usb-role-switch = <&usb_controller>" property
    for historical compatibility.
    
    So restrict the helper to only operate on Type-B connector when attempting
    to get the role switch from parent node.
    
    Fixes: 6fadd72943b8 ("usb: roles: get usb-role-switch from parent")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Xu Yang <xu.yang_2@nxp.com>
    Tested-by: Arnaud Ferraris <arnaud.ferraris@collabora.com>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Link: https://patch.msgid.link/20260309074313.2809867-3-xu.yang_2@nxp.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: typec: altmode/displayport: set displayport signaling rate in configure message [+ + +]
Author: RD Babiera <rdbabiera@google.com>
Date:   Tue Mar 10 20:41:05 2026 +0000

    usb: typec: altmode/displayport: set displayport signaling rate in configure message
    
    commit e8557acfa079a54b59a21f447c82a31aec7717df upstream.
    
    dp_altmode_configure sets the signaling rate to the current
    configuration's rate and then shifts the value to the Select
    Configuration bitfield. On the initial configuration, dp->data.conf
    is 0 to begin with, so the signaling rate field is never set, which
    leads to some DisplayPort Alt Mode partners sending NAK to the
    Configure message.
    
    Set the signaling rate to the capabilities supported by both the
    port and the port partner. If the cable supports DisplayPort Alt Mode,
    then include its capabilities as well.
    
    Fixes: a17fae8fc38e ("usb: typec: Add Displayport Alternate Mode 2.1 Support")
    Cc: stable <stable@kernel.org>
    Signed-off-by: RD Babiera <rdbabiera@google.com>
    Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Link: https://patch.msgid.link/20260310204106.3939862-2-rdbabiera@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: usbcore: Introduce usb_bulk_msg_killable() [+ + +]
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Tue Feb 17 22:07:47 2026 -0500

    USB: usbcore: Introduce usb_bulk_msg_killable()
    
    commit 416909962e7cdf29fd01ac523c953f37708df93d upstream.
    
    The synchronous message API in usbcore (usb_control_msg(),
    usb_bulk_msg(), and so on) uses uninterruptible waits.  However,
    drivers may call these routines in the context of a user thread, which
    means it ought to be possible to at least kill them.
    
    For this reason, introduce a new usb_bulk_msg_killable() function
    which behaves the same as usb_bulk_msg() except for using
    wait_for_completion_killable_timeout() instead of
    wait_for_completion_timeout().  The same can be done later for
    usb_control_msg() later on, if it turns out to be needed.
    
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Suggested-by: Oliver Neukum <oneukum@suse.com>
    Link: https://lore.kernel.org/linux-usb/3acfe838-6334-4f6d-be7c-4bb01704b33d@rowland.harvard.edu/
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    CC: stable@vger.kernel.org
    Link: https://patch.msgid.link/248628b4-cc83-4e81-a620-3ce4e0376d41@rowland.harvard.edu
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: usbtmc: Use usb_bulk_msg_killable() with user-specified timeouts [+ + +]
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Tue Feb 17 22:09:22 2026 -0500

    USB: usbtmc: Use usb_bulk_msg_killable() with user-specified timeouts
    
    commit 7784caa413a89487dd14dd5c41db8753483b2acb upstream.
    
    The usbtmc driver accepts timeout values specified by the user in an
    ioctl command, and uses these timeouts for some usb_bulk_msg() calls.
    Since the user can specify arbitrarily long timeouts and
    usb_bulk_msg() uses unkillable waits, call usb_bulk_msg_killable()
    instead to avoid the possibility of the user hanging a kernel thread
    indefinitely.
    
    Reported-by: syzbot+25ba18e2c5040447585d@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/linux-usb/8e1c7ac5-e076-44b0-84b8-1b34b20f0ae1@suse.com/T/#t
    Tested-by: syzbot+25ba18e2c5040447585d@syzkaller.appspotmail.com
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Fixes: 048c6d88a021 ("usb: usbtmc: Add ioctls to set/get usb timeout")
    CC: stable@vger.kernel.org
    Link: https://patch.msgid.link/81c6fc24-0607-40f1-8c20-5270dab2fad5@rowland.harvard.edu
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: xhci: Fix memory leak in xhci_disable_slot() [+ + +]
Author: Zilin Guan <zilin@seu.edu.cn>
Date:   Thu Mar 5 00:36:37 2026 +0200

    usb: xhci: Fix memory leak in xhci_disable_slot()
    
    commit c1c8550e70401159184130a1afc6261db01fc0ce upstream.
    
    xhci_alloc_command() allocates a command structure and, when the
    second argument is true, also allocates a completion structure.
    Currently, the error handling path in xhci_disable_slot() only frees
    the command structure using kfree(), causing the completion structure
    to leak.
    
    Use xhci_free_command() instead of kfree(). xhci_free_command() correctly
    frees both the command structure and the associated completion structure.
    Since the command structure is allocated with zero-initialization,
    command->in_ctx is NULL and will not be erroneously freed by
    xhci_free_command().
    
    This bug was found using an experimental static analysis tool we are
    developing. The tool is based on the LLVM framework and is specifically
    designed to detect memory management issues. It is currently under
    active development and not yet publicly available, but we plan to
    open-source it after our research is published.
    
    The bug was originally detected on v6.13-rc1 using our static analysis
    tool, and we have verified that the issue persists in the latest mainline
    kernel.
    
    We performed build testing on x86_64 with allyesconfig using GCC=11.4.0.
    Since triggering these error paths in xhci_disable_slot() requires specific
    hardware conditions or abnormal state, we were unable to construct a test
    case to reliably trigger these specific error paths at runtime.
    
    Fixes: 7faac1953ed1 ("xhci: avoid race between disable slot command and host runtime suspend")
    CC: stable@vger.kernel.org
    Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://patch.msgid.link/20260304223639.3882398-2-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: xhci: Prevent interrupt storm on host controller error (HCE) [+ + +]
Author: Dayu Jiang <jiangdayu@xiaomi.com>
Date:   Thu Mar 5 00:36:38 2026 +0200

    usb: xhci: Prevent interrupt storm on host controller error (HCE)
    
    commit d6d5febd12452b7fd951fdd15c3ec262f01901a4 upstream.
    
    The xHCI controller reports a Host Controller Error (HCE) in UAS Storage
    Device plug/unplug scenarios on Android devices. HCE is checked in
    xhci_irq() function and causes an interrupt storm (since the interrupt
    isn’t cleared), leading to severe system-level faults.
    
    When the xHC controller reports HCE in the interrupt handler, the driver
    only logs a warning and assumes xHC activity will stop as stated in xHCI
    specification. An interrupt storm does however continue on some hosts
    even after HCE, and only ceases after manually disabling xHC interrupt
    and stopping the controller by calling xhci_halt().
    
    Add xhci_halt() to xhci_irq() function where STS_HCE status is checked,
    mirroring the existing error handling pattern used for STS_FATAL errors.
    
    This only fixes the interrupt storm. Proper HCE recovery requires resetting
    and re-initializing the xHC.
    
    CC: stable@vger.kernel.org
    Signed-off-by: Dayu Jiang <jiangdayu@xiaomi.com>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://patch.msgid.link/20260304223639.3882398-3-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: yurex: fix race in probe [+ + +]
Author: Oliver Neukum <oneukum@suse.com>
Date:   Mon Feb 9 15:37:20 2026 +0100

    usb: yurex: fix race in probe
    
    commit 7a875c09899ba0404844abfd8f0d54cdc481c151 upstream.
    
    The bbu member of the descriptor must be set to the value
    standing for uninitialized values before the URB whose
    completion handler sets bbu is submitted. Otherwise there is
    a window during which probing can overwrite already retrieved
    data.
    
    Cc: stable <stable@kernel.org>
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Link: https://patch.msgid.link/20260209143720.1507500-1-oneukum@suse.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
wifi: mac80211: set default WMM parameters on all links [+ + +]
Author: Ramanathan Choodamani <quic_rchoodam@quicinc.com>
Date:   Thu Feb 5 15:12:16 2026 +0530

    wifi: mac80211: set default WMM parameters on all links
    
    [ Upstream commit 2259d14499d16b115ef8d5d2ddc867e2be7cb5b5 ]
    
    Currently, mac80211 only initializes default WMM parameters
    on the deflink during do_open(). For MLO cases, this
    leaves the additional links without proper WMM defaults
    if hostapd does not supply per-link WMM parameters, leading
    to inconsistent QoS behavior across links.
    
    Set default WMM parameters for each link during
    ieee80211_vif_update_links(), because this ensures all
    individual links in an MLD have valid WMM settings during
    bring-up and behave consistently across different BSS.
    
    Signed-off-by: Ramanathan Choodamani <quic_rchoodam@quicinc.com>
    Signed-off-by: Aishwarya R <aishwarya.r@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260205094216.3093542-1-aishwarya.r@oss.qualcomm.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
workqueue: Use POOL_BH instead of WQ_BH when checking pool flags [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Thu Mar 5 08:15:37 2026 -0800

    workqueue: Use POOL_BH instead of WQ_BH when checking pool flags
    
    [ Upstream commit f42f9091be9e5ff57567a3945cfcdd498f475348 ]
    
    pr_cont_worker_id() checks pool->flags against WQ_BH, which is a
    workqueue-level flag (defined in workqueue.h). Pool flags use a
    separate namespace with POOL_* constants (defined in workqueue.c).
    The correct constant is POOL_BH. Both WQ_BH and POOL_BH are defined
    as (1 << 0) so this has no behavioral impact, but it is semantically
    wrong and inconsistent with every other pool-level BH check in the
    file.
    
    Fixes: 4cb1ef64609f ("workqueue: Implement BH workqueues to eventually replace tasklets")
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Acked-by: Song Liu <song@kernel.org>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/apic: Disable x2apic on resume if the kernel expects so [+ + +]
Author: Shashank Balaji <shashank.mahadasyam@sony.com>
Date:   Fri Mar 6 14:46:28 2026 +0900

    x86/apic: Disable x2apic on resume if the kernel expects so
    
    commit 8cc7dd77a1466f0ec58c03478b2e735a5b289b96 upstream.
    
    When resuming from s2ram, firmware may re-enable x2apic mode, which may have
    been disabled by the kernel during boot either because it doesn't support IRQ
    remapping or for other reasons. This causes the kernel to continue using the
    xapic interface, while the hardware is in x2apic mode, which causes hangs.
    This happens on defconfig + bare metal + s2ram.
    
    Fix this in lapic_resume() by disabling x2apic if the kernel expects it to be
    disabled, i.e. when x2apic_mode = 0.
    
    The ACPI v6.6 spec, Section 16.3 [1] says firmware restores either the
    pre-sleep configuration or initial boot configuration for each CPU, including
    MSR state:
    
      When executing from the power-on reset vector as a result of waking from an
      S2 or S3 sleep state, the platform firmware performs only the hardware
      initialization required to restore the system to either the state the
      platform was in prior to the initial operating system boot, or to the
      pre-sleep configuration state. In multiprocessor systems, non-boot
      processors should be placed in the same state as prior to the initial
      operating system boot.
    
      (further ahead)
    
      If this is an S2 or S3 wake, then the platform runtime firmware restores
      minimum context of the system before jumping to the waking vector. This
      includes:
    
            CPU configuration. Platform runtime firmware restores the pre-sleep
            configuration or initial boot configuration of each CPU (MSR, MTRR,
            firmware update, SMBase, and so on). Interrupts must be disabled (for
            IA-32 processors, disabled by CLI instruction).
    
            (and other things)
    
    So at least as per the spec, re-enablement of x2apic by the firmware is
    allowed if "x2apic on" is a part of the initial boot configuration.
    
      [1] https://uefi.org/specs/ACPI/6.6/16_Waking_and_Sleeping.html#initialization
    
      [ bp: Massage. ]
    
    Fixes: 6e1cb38a2aef ("x64, x2apic/intr-remap: add x2apic support, including enabling interrupt-remapping")
    Co-developed-by: Rahul Bukte <rahul.bukte@sony.com>
    Signed-off-by: Rahul Bukte <rahul.bukte@sony.com>
    Signed-off-by: Shashank Balaji <shashank.mahadasyam@sony.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Thomas Gleixner <tglx@kernel.org>
    Reviewed-by: Sohil Mehta <sohil.mehta@intel.com>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260306-x2apic-fix-v2-1-bee99c12efa3@sony.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xfs: ensure dquot item is deleted from AIL only after log shutdown [+ + +]
Author: Long Li <leo.lilong@huawei.com>
Date:   Thu Mar 5 16:49:22 2026 +0800

    xfs: ensure dquot item is deleted from AIL only after log shutdown
    
    commit 186ac39b8a7d3ec7ce9c5dd45e5c2730177f375c upstream.
    
    In xfs_qm_dqflush(), when a dquot flush fails due to corruption
    (the out_abort error path), the original code removed the dquot log
    item from the AIL before calling xfs_force_shutdown(). This ordering
    introduces a subtle race condition that can lead to data loss after
    a crash.
    
    The AIL tracks the oldest dirty metadata in the journal. The position
    of the tail item in the AIL determines the log tail LSN, which is the
    oldest LSN that must be preserved for crash recovery. When an item is
    removed from the AIL, the log tail can advance past the LSN of that item.
    
    The race window is as follows: if the dquot item happens to be at
    the tail of the log, removing it from the AIL allows the log tail
    to advance. If a concurrent log write is sampling the tail LSN at
    the same time and subsequently writes a complete checkpoint (i.e.,
    one containing a commit record) to disk before the shutdown takes
    effect, the journal will no longer protect the dquot's last
    modification. On the next mount, log recovery will not replay the
    dquot changes, even though they were never written back to disk,
    resulting in silent data loss.
    
    Fix this by calling xfs_force_shutdown() before xfs_trans_ail_delete()
    in the out_abort path. Once the log is shut down, no new log writes
    can complete with an updated tail LSN, making it safe to remove the
    dquot item from the AIL.
    
    Cc: stable@vger.kernel.org
    Fixes: b707fffda6a3 ("xfs: abort consistently on dquot flush failure")
    Signed-off-by: Long Li <leo.lilong@huawei.com>
    Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: fix integer overflow in bmap intent sort comparator [+ + +]
Author: Long Li <leo.lilong@huawei.com>
Date:   Tue Mar 10 20:32:33 2026 +0800

    xfs: fix integer overflow in bmap intent sort comparator
    
    commit 362c490980867930a098b99f421268fbd7ca05fd upstream.
    
    xfs_bmap_update_diff_items() sorts bmap intents by inode number using
    a subtraction of two xfs_ino_t (uint64_t) values, with the result
    truncated to int. This is incorrect when two inode numbers differ by
    more than INT_MAX (2^31 - 1), which is entirely possible on large XFS
    filesystems.
    
    Fix this by replacing the subtraction with cmp_int().
    
    Cc: <stable@vger.kernel.org> # v4.9
    Fixes: 9f3afb57d5f1 ("xfs: implement deferred bmbt map/unmap operations")
    Signed-off-by: Long Li <leo.lilong@huawei.com>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: fix returned valued from xfs_defer_can_append [+ + +]
Author: Carlos Maiolino <cem@kernel.org>
Date:   Wed Mar 4 19:54:27 2026 +0100

    xfs: fix returned valued from xfs_defer_can_append
    
    commit 54fcd2f95f8d216183965a370ec69e1aab14f5da upstream.
    
    xfs_defer_can_append returns a bool, it shouldn't be returning
    a NULL.
    
    Found by code inspection.
    
    Fixes: 4dffb2cbb483 ("xfs: allow pausing of pending deferred work items")
    Cc: <stable@vger.kernel.org> # v6.8
    Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Acked-by: Souptick Joarder <souptick.joarder@hpe.com>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: fix undersized l_iclog_roundoff values [+ + +]
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Wed Mar 4 20:26:20 2026 -0800

    xfs: fix undersized l_iclog_roundoff values
    
    commit 52a8a1ba883defbfe3200baa22cf4cd21985d51a upstream.
    
    If the superblock doesn't list a log stripe unit, we set the incore log
    roundoff value to 512.  This leads to corrupt logs and unmountable
    filesystems in generic/617 on a disk with 4k physical sectors...
    
    XFS (sda1): Mounting V5 Filesystem ff3121ca-26e6-4b77-b742-aaff9a449e1c
    XFS (sda1): Torn write (CRC failure) detected at log block 0x318e. Truncating head block from 0x3197.
    XFS (sda1): failed to locate log tail
    XFS (sda1): log mount/recovery failed: error -74
    XFS (sda1): log mount failed
    XFS (sda1): Mounting V5 Filesystem ff3121ca-26e6-4b77-b742-aaff9a449e1c
    XFS (sda1): Ending clean mount
    
    ...on the current xfsprogs for-next which has a broken mkfs.  xfs_info
    shows this...
    
    meta-data=/dev/sda1              isize=512    agcount=4, agsize=644992 blks
             =                       sectsz=4096  attr=2, projid32bit=1
             =                       crc=1        finobt=1, sparse=1, rmapbt=1
             =                       reflink=1    bigtime=1 inobtcount=1 nrext64=1
             =                       exchange=1   metadir=1
    data     =                       bsize=4096   blocks=2579968, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0, ftype=1, parent=1
    log      =internal log           bsize=4096   blocks=16384, version=2
             =                       sectsz=4096  sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
             =                       rgcount=0    rgsize=268435456 extents
             =                       zoned=0      start=0 reserved=0
    
    ...observe that the log section has sectsz=4096 sunit=0, which means
    that the roundoff factor is 512, not 4096 as you'd expect.  We should
    fix mkfs not to generate broken filesystems, but anyone can fuzz the
    ondisk superblock so we should be more cautious.  I think the inadequate
    logic predates commit a6a65fef5ef8d0, but that's clearly going to
    require a different backport.
    
    Cc: stable@vger.kernel.org # v5.14
    Fixes: a6a65fef5ef8d0 ("xfs: log stripe roundoff is a property of the log")
    Signed-off-by: Darrick J. Wong <djwong@kernel.org>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xhci: Fix NULL pointer dereference when reading portli debugfs files [+ + +]
Author: Mathias Nyman <mathias.nyman@linux.intel.com>
Date:   Thu Mar 5 00:36:39 2026 +0200

    xhci: Fix NULL pointer dereference when reading portli debugfs files
    
    commit ae4ff9dead5efa2025eddfcdb29411432bf40a7c upstream.
    
    Michal reported and debgged a NULL pointer dereference bug in the
    recently added portli debugfs files
    
    Oops is caused when there are more port registers counted in
    xhci->max_ports than ports reported by Supported Protocol capabilities.
    This is possible if max_ports is more than maximum port number, or
    if there are gaps between ports of different speeds the 'Supported
    Protocol' capabilities.
    
    In such cases port->rhub will be NULL so we can't reach xhci behind it.
    Add an explicit NULL check for this case, and print portli in hex
    without dereferencing port->rhub.
    
    Reported-by: Michal Pecio <michal.pecio@gmail.com>
    Closes: https://lore.kernel.org/linux-usb/20260304103856.48b785fd.michal.pecio@gmail.com
    Fixes: 384c57ec7205 ("usb: xhci: Add debugfs support for xHCI Port Link Info (PORTLI) register.")
    Cc: stable@vger.kernel.org
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://patch.msgid.link/20260304223639.3882398-4-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xprtrdma: Decrement re_receiving on the early exit paths [+ + +]
Author: Eric Badger <ebadger@purestorage.com>
Date:   Mon Feb 23 10:28:55 2026 -0800

    xprtrdma: Decrement re_receiving on the early exit paths
    
    [ Upstream commit 7b6275c80a0c81c5f8943272292dfe67730ce849 ]
    
    In the event that rpcrdma_post_recvs() fails to create a work request
    (due to memory allocation failure, say) or otherwise exits early, we
    should decrement ep->re_receiving before returning. Otherwise we will
    hang in rpcrdma_xprt_drain() as re_receiving will never reach zero and
    the completion will never be triggered.
    
    On a system with high memory pressure, this can appear as the following
    hung task:
    
        INFO: task kworker/u385:17:8393 blocked for more than 122 seconds.
              Tainted: G S          E       6.19.0 #3
        "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
        task:kworker/u385:17 state:D stack:0     pid:8393  tgid:8393  ppid:2      task_flags:0x4248060 flags:0x00080000
        Workqueue: xprtiod xprt_autoclose [sunrpc]
        Call Trace:
         <TASK>
         __schedule+0x48b/0x18b0
         ? ib_post_send_mad+0x247/0xae0 [ib_core]
         schedule+0x27/0xf0
         schedule_timeout+0x104/0x110
         __wait_for_common+0x98/0x180
         ? __pfx_schedule_timeout+0x10/0x10
         wait_for_completion+0x24/0x40
         rpcrdma_xprt_disconnect+0x444/0x460 [rpcrdma]
         xprt_rdma_close+0x12/0x40 [rpcrdma]
         xprt_autoclose+0x5f/0x120 [sunrpc]
         process_one_work+0x191/0x3e0
         worker_thread+0x2e3/0x420
         ? __pfx_worker_thread+0x10/0x10
         kthread+0x10d/0x230
         ? __pfx_kthread+0x10/0x10
         ret_from_fork+0x273/0x2b0
         ? __pfx_kthread+0x10/0x10
         ret_from_fork_asm+0x1a/0x30
    
    Fixes: 15788d1d1077 ("xprtrdma: Do not refresh Receive Queue while it is draining")
    Signed-off-by: Eric Badger <ebadger@purestorage.com>
    Reviewed-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>